xref: /rk3399_ARM-atf/lib/bl_aux_params/bl_aux_params.c (revision b852d229f32aa65a8f402931fe6940a4303fe9e0)
1*b852d229SJulius Werner /*
2*b852d229SJulius Werner  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*b852d229SJulius Werner  *
4*b852d229SJulius Werner  * SPDX-License-Identifier: BSD-3-Clause
5*b852d229SJulius Werner  */
6*b852d229SJulius Werner 
7*b852d229SJulius Werner #include <common/debug.h>
8*b852d229SJulius Werner #include <lib/coreboot.h>
9*b852d229SJulius Werner #include <lib/bl_aux_params/bl_aux_params.h>
10*b852d229SJulius Werner 
11*b852d229SJulius Werner void bl_aux_params_parse(u_register_t head,
12*b852d229SJulius Werner 			 bl_aux_param_handler_t handler)
13*b852d229SJulius Werner {
14*b852d229SJulius Werner 	struct bl_aux_param_header *p;
15*b852d229SJulius Werner 
16*b852d229SJulius Werner 	for (p = (void *)head; p; p = (void *)(uintptr_t)p->next) {
17*b852d229SJulius Werner 		if (handler && handler(p))
18*b852d229SJulius Werner 			continue;
19*b852d229SJulius Werner 
20*b852d229SJulius Werner 		switch (p->type) {
21*b852d229SJulius Werner #if COREBOOT
22*b852d229SJulius Werner 		case BL_AUX_PARAM_COREBOOT_TABLE:
23*b852d229SJulius Werner 			coreboot_table_setup((void *)(uintptr_t)
24*b852d229SJulius Werner 				((struct bl_aux_param_uint64 *)p)->value);
25*b852d229SJulius Werner 			break;
26*b852d229SJulius Werner #endif
27*b852d229SJulius Werner 		default:
28*b852d229SJulius Werner 			ERROR("Ignoring unknown BL aux parameter: 0x%llx",
29*b852d229SJulius Werner 			      p->type);
30*b852d229SJulius Werner 			break;
31*b852d229SJulius Werner 		}
32*b852d229SJulius Werner 	}
33*b852d229SJulius Werner }
34