[PATCH] rockchip: rk3288: Add OF board setup

Robin Murphy robin.murphy at arm.com
Thu Jul 2 15:56:29 CEST 2020


On 2020-07-02 09:48, Jagan Teki wrote:
> The new rk3288 revision rk3288w has some changes with respect
> to legacy rk3288 like hclk_vio and usb host0 ohci.
> 
> In order to work these on the same in Linux kernel update the
> compatible the root compatible with rockchip,rk3288w before
> booting.
> 
> So, this support during of board setup code of rk3288.
> 
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
>   arch/arm/mach-rockchip/Kconfig         |  1 +
>   arch/arm/mach-rockchip/rk3288/rk3288.c | 26 ++++++++++++++++++++++++++
>   2 files changed, 27 insertions(+)
> 
> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
> index b1008a5058..822d8d4e9c 100644
> --- a/arch/arm/mach-rockchip/Kconfig
> +++ b/arch/arm/mach-rockchip/Kconfig
> @@ -98,6 +98,7 @@ config ROCKCHIP_RK322X
>   config ROCKCHIP_RK3288
>   	bool "Support Rockchip RK3288"
>   	select CPU_V7A
> +	select OF_BOARD_SETUP
>   	select SUPPORT_SPL
>   	select SPL
>   	select SUPPORT_TPL
> diff --git a/arch/arm/mach-rockchip/rk3288/rk3288.c b/arch/arm/mach-rockchip/rk3288/rk3288.c
> index 804abe8a1b..8a682675e6 100644
> --- a/arch/arm/mach-rockchip/rk3288/rk3288.c
> +++ b/arch/arm/mach-rockchip/rk3288/rk3288.c
> @@ -115,6 +115,32 @@ int rk_board_late_init(void)
>   	return rk3288_board_late_init();
>   }
>   
> +#ifdef CONFIG_OF_BOARD_SETUP
> +
> +#define RK3288_HDMI_PHYS	0xff980000
> +#define RK3288W_HDMI_REV	0x1A
> +#define HDMI_CONFIG0_ID		0x04
> +
> +int ft_board_setup(void *blob, bd_t *bd)
> +{
> +	u8 config0;
> +	int ret;
> +
> +	config0 = readb(RK3288_HDMI_PHYS + HDMI_CONFIG0_ID);
> +	if (config0 == RK3288W_HDMI_REV) {
> +		ret = fdt_setprop_string(blob, 0,
> +					 "compatible", "rockchip,rk3288w");

Does this end up replacing the entire top-level compatible property? 
i.e. from:

	compatible = "vendor,board\0rockchip,rk3288";

to just:

	compatible = "rockchip,rk3288w";

If so, that's a bit of a problem for various drivers that care about the 
actual board compatible rather than the SoC.

Robin.

> +		if (ret < 0) {
> +			printf("failed to set rk3288w compatible (ret=%d)\n",
> +			       ret);
> +			return ret;
> +		}
> +	}
> +
> +	return 0;
> +}
> +#endif
> +
>   static int do_clock(struct cmd_tbl *cmdtp, int flag, int argc,
>   		    char *const argv[])
>   {
> 


More information about the U-Boot mailing list