From 7029e806833b94f729d9117bd35d488476b0e27e Mon Sep 17 00:00:00 2001 From: Heiko Stuebner Date: Thu, 7 Mar 2019 08:07:11 +0100 Subject: [PATCH] rockchip: add an fdt parsing stub for platform param The Rockchip ATF platform can be entered from both Coreboot and U-Boot. While Coreboot does submit the list of linked parameter structs as platform param, upstream u-boot actually always provides a pointer to a devicetree as parameter. This results in current ATF not running at all when started from U-Boot. To fix this, add a stub that checks if the parameter is a fdt so we can at least boot and not get stuck. Later on we can extend this with actual parsing of information from the devicetree. Signed-off-by: Heiko Stuebner Cc: Philipp Tomsich --- plat/rockchip/common/params_setup.c | 27 +++++++++++++++++++++++++++ plat/rockchip/rk3328/platform.mk | 3 +++ plat/rockchip/rk3368/platform.mk | 3 +++ plat/rockchip/rk3399/platform.mk | 3 +++ 4 files changed, 36 insertions(+) diff --git a/plat/rockchip/common/params_setup.c b/plat/rockchip/common/params_setup.c index 3d1b40b3f..dda98d962 100644 --- a/plat/rockchip/common/params_setup.c +++ b/plat/rockchip/common/params_setup.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,13 @@ static struct gpio_info suspend_gpio[10]; uint32_t suspend_gpio_cnt; static struct apio_info *suspend_apio; +static uint8_t fdt_buffer[0x10000]; + +void *plat_get_fdt(void) +{ + return &fdt_buffer[0]; +} + struct gpio_info *plat_get_rockchip_gpio_reset(void) { return rst_gpio; @@ -49,11 +57,30 @@ struct apio_info *plat_get_rockchip_suspend_apio(void) return suspend_apio; } +static int dt_process_fdt(void *blob) +{ + void *fdt = plat_get_fdt(); + int ret; + + ret = fdt_open_into(blob, fdt, 0x10000); + if (ret < 0) + return ret; + + return 0; +} + void params_early_setup(void *plat_param_from_bl2) { struct bl31_plat_param *bl2_param; struct bl31_gpio_param *gpio_param; + /* + * Test if this is a FDT passed as a platform-specific parameter + * block. + */ + if (!dt_process_fdt(plat_param_from_bl2)) + return; + /* keep plat parameters for later processing if need */ bl2_param = (struct bl31_plat_param *)plat_param_from_bl2; while (bl2_param) { diff --git a/plat/rockchip/rk3328/platform.mk b/plat/rockchip/rk3328/platform.mk index ca6345b7e..18b1b9419 100644 --- a/plat/rockchip/rk3328/platform.mk +++ b/plat/rockchip/rk3328/platform.mk @@ -8,6 +8,8 @@ RK_PLAT := plat/rockchip RK_PLAT_SOC := ${RK_PLAT}/${PLAT} RK_PLAT_COMMON := ${RK_PLAT}/common +include lib/libfdt/libfdt.mk + PLAT_INCLUDES := -Idrivers/arm/gic/common/ \ -Idrivers/arm/gic/v2/ \ -I${RK_PLAT_COMMON}/ \ @@ -38,6 +40,7 @@ BL31_SOURCES += ${RK_GIC_SOURCES} \ drivers/delay_timer/generic_delay_timer.c \ lib/cpus/aarch64/aem_generic.S \ lib/cpus/aarch64/cortex_a53.S \ + $(LIBFDT_SRCS) \ ${RK_PLAT_COMMON}/drivers/parameter/ddr_parameter.c \ ${RK_PLAT_COMMON}/aarch64/plat_helpers.S \ ${RK_PLAT_COMMON}/bl31_plat_setup.c \ diff --git a/plat/rockchip/rk3368/platform.mk b/plat/rockchip/rk3368/platform.mk index c0164c179..d1315fc58 100644 --- a/plat/rockchip/rk3368/platform.mk +++ b/plat/rockchip/rk3368/platform.mk @@ -8,6 +8,8 @@ RK_PLAT := plat/rockchip RK_PLAT_SOC := ${RK_PLAT}/${PLAT} RK_PLAT_COMMON := ${RK_PLAT}/common +include lib/libfdt/libfdt.mk + PLAT_INCLUDES := -I${RK_PLAT_COMMON}/ \ -I${RK_PLAT_COMMON}/include/ \ -I${RK_PLAT_COMMON}/pmusram \ @@ -35,6 +37,7 @@ BL31_SOURCES += ${RK_GIC_SOURCES} \ drivers/delay_timer/delay_timer.c \ drivers/delay_timer/generic_delay_timer.c \ lib/cpus/aarch64/cortex_a53.S \ + $(LIBFDT_SRCS) \ ${RK_PLAT_COMMON}/aarch64/plat_helpers.S \ ${RK_PLAT_COMMON}/bl31_plat_setup.c \ ${RK_PLAT_COMMON}/params_setup.c \ diff --git a/plat/rockchip/rk3399/platform.mk b/plat/rockchip/rk3399/platform.mk index b624717dd..101359856 100644 --- a/plat/rockchip/rk3399/platform.mk +++ b/plat/rockchip/rk3399/platform.mk @@ -8,6 +8,8 @@ RK_PLAT := plat/rockchip RK_PLAT_SOC := ${RK_PLAT}/${PLAT} RK_PLAT_COMMON := ${RK_PLAT}/common +include lib/libfdt/libfdt.mk + PLAT_INCLUDES := -I${RK_PLAT_COMMON}/ \ -I${RK_PLAT_COMMON}/include/ \ -I${RK_PLAT_COMMON}/pmusram \ @@ -43,6 +45,7 @@ BL31_SOURCES += ${RK_GIC_SOURCES} \ drivers/gpio/gpio.c \ lib/cpus/aarch64/cortex_a53.S \ lib/cpus/aarch64/cortex_a72.S \ + $(LIBFDT_SRCS) \ ${RK_PLAT_COMMON}/aarch64/plat_helpers.S \ ${RK_PLAT_COMMON}/bl31_plat_setup.c \ ${RK_PLAT_COMMON}/params_setup.c \