[PATCH] rockchip: rk3288: Add OF board setup
Robin Murphy
robin.murphy at arm.com
Fri Jul 3 08:39:19 EDT 2020
On 2020-07-03 11:10, Jagan Teki wrote:
> On Thu, Jul 2, 2020 at 7:26 PM Robin Murphy <robin.murphy at arm.com> wrote:
>>
>> 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.
>
> Yes, It looks replacing the entire compatible. I think the root
> compatible is mostly untouchable because of this reason.
>
> But, if we skip the root compatible and trying to replace individual
> nodes for W revision then it requires extra registration code on in
> the Linux drivers like Linux clock driver is registering the clock
> with rockchip,rk3288-cru but updating this compatible with
> rockchip,rk3288w-cru will require another registration code. Having
> common rockchip,rk3288w can be possible to check any code in the tree.
Right, it's definitely reasonable to update the top-level SoC
compatible, we just need to be prepared to deal with a whole string list
here. It looks like libfdt doesn't offer any nice helpers for
inserting/removing/updating in string lists, but given that the SoC
should be the last entry here we might be able to cheat a bit - just get
the whole raw property, check that the final characters are exactly
"rockchip,rk3288", and if so append a "w" to the end and write it back.
Robin.
More information about the Linux-rockchip
mailing list