[PATCH v4 1/5] rockchip: spl: Add spl_board_init
Kever Yang
kever.yang at rock-chips.com
Sat Jun 27 23:06:23 EDT 2020
Hi Jagan,
On 2020/6/18 下午11:39, Jagan Teki wrote:
> spl_board_init is a proper location and common practice
> option to have a custom board initialization code after
> relocation in SPL.
>
> This patch add the feasibility to add the custom SPL board
> initzlaization throughout rockchip platforms and adjust
> existing the spl board code on respective boards.
You make this change because you want to add customize code for led, right?
I think led is a common feature for SBC bring up, could you make it
common instead
of custom for one board? eg. there is already "u-boot,boot-led", and led
class driver
for gpio led.
For the TPL/SPL framework, drop the code in TPL is necessary, but it
would be better
not to use too much layer in SPL board_init, and make it common for
common featrure.
Thanks,
- Kever
>
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
> Changes for v4:
> - new patch
>
> arch/arm/Kconfig | 1 +
> arch/arm/mach-rockchip/Kconfig | 2 -
> arch/arm/mach-rockchip/rk3188/rk3188.c | 2 +-
> arch/arm/mach-rockchip/rk3399/rk3399.c | 57 -----------------
> arch/arm/mach-rockchip/spl.c | 10 +++
> board/firefly/firefly-rk3288/firefly-rk3288.c | 2 +-
> board/phytec/phycore_rk3288/phycore-rk3288.c | 2 +-
> .../puma_rk3399/puma-rk3399.c | 61 +++++++++++++++++++
> 8 files changed, 75 insertions(+), 62 deletions(-)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index edc9e38c6c..57ddf15cb3 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1679,6 +1679,7 @@ config ARCH_ROCKCHIP
> select ENABLE_ARM_SOC_BOOT0_HOOK
> select OF_CONTROL
> select SPI
> + select SPL_BOARD_INIT if SPL
> select SPL_DM if SPL
> select SYS_MALLOC_F
> select SYS_THUMB_BUILD if !ARM64
> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
> index 0cb1f23d0f..b1008a5058 100644
> --- a/arch/arm/mach-rockchip/Kconfig
> +++ b/arch/arm/mach-rockchip/Kconfig
> @@ -49,7 +49,6 @@ config ROCKCHIP_RK3128
> config ROCKCHIP_RK3188
> bool "Support Rockchip RK3188"
> select CPU_V7A
> - select SPL_BOARD_INIT if SPL
> select SUPPORT_SPL
> select SPL
> select SPL_CLK
> @@ -208,7 +207,6 @@ config ROCKCHIP_RK3399
> select SPL
> select SPL_ATF
> select SPL_ATF_NO_PLATFORM_PARAM if SPL_ATF
> - select SPL_BOARD_INIT if SPL
> select SPL_LOAD_FIT
> select SPL_CLK if SPL
> select SPL_PINCTRL if SPL
> diff --git a/arch/arm/mach-rockchip/rk3188/rk3188.c b/arch/arm/mach-rockchip/rk3188/rk3188.c
> index ef57dfd761..0c0fe84ad5 100644
> --- a/arch/arm/mach-rockchip/rk3188/rk3188.c
> +++ b/arch/arm/mach-rockchip/rk3188/rk3188.c
> @@ -111,7 +111,7 @@ static int setup_led(void)
> return 0;
> }
>
> -void spl_board_init(void)
> +void rk_spl_board_init(void)
> {
> int ret;
>
> diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c
> index 4fda93b152..b53a111769 100644
> --- a/arch/arm/mach-rockchip/rk3399/rk3399.c
> +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c
> @@ -217,61 +217,4 @@ void spl_perform_fixups(struct spl_image_info *spl_image)
> "u-boot,spl-boot-device", boot_ofpath);
> }
>
> -#if defined(SPL_GPIO_SUPPORT)
> -static void rk3399_force_power_on_reset(void)
> -{
> - ofnode node;
> - struct gpio_desc sysreset_gpio;
> -
> - debug("%s: trying to force a power-on reset\n", __func__);
> -
> - node = ofnode_path("/config");
> - if (!ofnode_valid(node)) {
> - debug("%s: no /config node?\n", __func__);
> - return;
> - }
> -
> - if (gpio_request_by_name_nodev(node, "sysreset-gpio", 0,
> - &sysreset_gpio, GPIOD_IS_OUT)) {
> - debug("%s: could not find a /config/sysreset-gpio\n", __func__);
> - return;
> - }
> -
> - dm_gpio_set_value(&sysreset_gpio, 1);
> -}
> -#endif
> -
> -void spl_board_init(void)
> -{
> -#if defined(SPL_GPIO_SUPPORT)
> - struct rockchip_cru *cru = rockchip_get_cru();
> -
> - /*
> - * The RK3399 resets only 'almost all logic' (see also in the TRM
> - * "3.9.4 Global software reset"), when issuing a software reset.
> - * This may cause issues during boot-up for some configurations of
> - * the application software stack.
> - *
> - * To work around this, we test whether the last reset reason was
> - * a power-on reset and (if not) issue an overtemp-reset to reset
> - * the entire module.
> - *
> - * While this was previously fixed by modifying the various places
> - * that could generate a software reset (e.g. U-Boot's sysreset
> - * driver, the ATF or Linux), we now have it here to ensure that
> - * we no longer have to track this through the various components.
> - */
> - if (cru->glb_rst_st != 0)
> - rk3399_force_power_on_reset();
> -#endif
> -
> -#if defined(SPL_DM_REGULATOR)
> - /*
> - * Turning the eMMC and SPI back on (if disabled via the Qseven
> - * BIOS_ENABLE) signal is done through a always-on regulator).
> - */
> - if (regulators_enable_boot_on(false))
> - debug("%s: Cannot enable boot on regulator\n", __func__);
> -#endif
> -}
> #endif
> diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
> index cddf4fd3d5..d4c83a1119 100644
> --- a/arch/arm/mach-rockchip/spl.c
> +++ b/arch/arm/mach-rockchip/spl.c
> @@ -150,6 +150,16 @@ void board_init_f(ulong dummy)
> preloader_console_init();
> }
>
> +__weak void rk_spl_board_init(void)
> +{
> +}
> +
> +void spl_board_init(void)
> +{
> + /* board specific spl init */
> + rk_spl_board_init();
> +}
> +
> #ifdef CONFIG_SPL_LOAD_FIT
> int __weak board_fit_config_name_match(const char *name)
> {
> diff --git a/board/firefly/firefly-rk3288/firefly-rk3288.c b/board/firefly/firefly-rk3288/firefly-rk3288.c
> index 1965985a0f..96d44b1d9f 100644
> --- a/board/firefly/firefly-rk3288/firefly-rk3288.c
> +++ b/board/firefly/firefly-rk3288/firefly-rk3288.c
> @@ -31,7 +31,7 @@ static int setup_led(void)
> return 0;
> }
>
> -void spl_board_init(void)
> +void rk_spl_board_init(void)
> {
> int ret;
>
> diff --git a/board/phytec/phycore_rk3288/phycore-rk3288.c b/board/phytec/phycore_rk3288/phycore-rk3288.c
> index ecc73227a0..b33070f62e 100644
> --- a/board/phytec/phycore_rk3288/phycore-rk3288.c
> +++ b/board/phytec/phycore_rk3288/phycore-rk3288.c
> @@ -104,7 +104,7 @@ static int phycore_init(void)
> }
> #endif
>
> -void spl_board_init(void)
> +void rk_spl_board_init(void)
> {
> #if !defined(CONFIG_SPL_OF_PLATDATA)
> int ret;
> diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
> index deeba3084a..fd5cdd9ea1 100644
> --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c
> +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c
> @@ -152,3 +152,64 @@ void get_board_serial(struct tag_serialnr *serialnr)
> serialnr->low = (u32)(serial & 0xffffffff);
> }
> #endif
> +
> +#if defined(CONFIG_SPL_BUILD)
> +
> +#if defined(SPL_GPIO_SUPPORT)
> +static void rk3399_force_power_on_reset(void)
> +{
> + ofnode node;
> + struct gpio_desc sysreset_gpio;
> +
> + debug("%s: trying to force a power-on reset\n", __func__);
> +
> + node = ofnode_path("/config");
> + if (!ofnode_valid(node)) {
> + debug("%s: no /config node?\n", __func__);
> + return;
> + }
> +
> + if (gpio_request_by_name_nodev(node, "sysreset-gpio", 0,
> + &sysreset_gpio, GPIOD_IS_OUT)) {
> + debug("%s: could not find a /config/sysreset-gpio\n", __func__);
> + return;
> + }
> +
> + dm_gpio_set_value(&sysreset_gpio, 1);
> +}
> +#endif
> +
> +void rk_spl_board_init(void)
> +{
> +#if defined(SPL_GPIO_SUPPORT)
> + struct rockchip_cru *cru = rockchip_get_cru();
> +
> + /*
> + * The RK3399 resets only 'almost all logic' (see also in the TRM
> + * "3.9.4 Global software reset"), when issuing a software reset.
> + * This may cause issues during boot-up for some configurations of
> + * the application software stack.
> + *
> + * To work around this, we test whether the last reset reason was
> + * a power-on reset and (if not) issue an overtemp-reset to reset
> + * the entire module.
> + *
> + * While this was previously fixed by modifying the various places
> + * that could generate a software reset (e.g. U-Boot's sysreset
> + * driver, the ATF or Linux), we now have it here to ensure that
> + * we no longer have to track this through the various components.
> + */
> + if (cru->glb_rst_st != 0)
> + rk3399_force_power_on_reset();
> +#endif
> +
> +#if defined(SPL_DM_REGULATOR)
> + /*
> + * Turning the eMMC and SPI back on (if disabled via the Qseven
> + * BIOS_ENABLE) signal is done through a always-on regulator).
> + */
> + if (regulators_enable_boot_on(false))
> + debug("%s: Cannot enable boot on regulator\n", __func__);
> +#endif
> +}
> +#endif /* CONFIG_SPL_BUILD */
More information about the Linux-rockchip
mailing list