On 1/17/23 10:46, Quentin Schulz wrote:
> Hi Johan,
> 
> On 1/16/23 20:45, Johan Jonker wrote:
>> Sync rk3066/rk3188 DT files from Linux.
>> This is the state as of linux-next v6.2-rc4.
>> New nfc node for MK808 rk3066a.
>> CRU nodes now have a clock property.
>> To prefend dtoc errors a fixed clock must also be
>> included for tpl/spl in the rk3xxx-u-boot.dtsi file.
>>
>> Signed-off-by: Johan Jonker <jbx6...@gmail.com>
>> ---

[..]

>> @@ -223,7 +224,7 @@
>>           #size-cells = <1>;
>>           ranges;
>>
>> -        gpio0: gpio0@2000a000 {
>> +        gpio0: gpio@2000a000 {
>>               compatible = "rockchip,rk3188-gpio-bank0";
>>               reg = <0x2000a000 0x100>;
>>               interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
>> @@ -236,7 +237,7 @@
>>               #interrupt-cells = <2>;
>>           };
>>
>> -        gpio1: gpio1@2003c000 {

>> +        gpio1: gpio@2003c000 {

Hi,

LOL: I made that binding change on request from Linux DT maintainers.
Node names should generic.

===

My full u-boot is able to boot a Linux kernel for rk3066a.
Only when I give the command below it crashes:

gpio status -a

Could you confirm what other parts are effected?

If it's boots then it's good enough for me and move forward, so please 
merge.(Kever)

Driver fixes for u-boot depending on Linux DT changes is already very time 
consuming enough!

===

Using DT path or node name is wrong.

Comment by robh+dt:
/sys/bus/platform/devices/ paths are not an ABI. I'll consider
nodenames an ABI if a change is noticed, but not for sysfs path.

https://lore.kernel.org/linux-rockchip/cal_jsqjgx_mwx9ynmicum_xp3t6xwbrtiui-f+2cexqz2su...@mail.gmail.com/

Make use of the properties and a compatible in a node instead.

===
A little test.
From: rockchip_gpio_probe():

int main() {
        //char dev_name[] = "gpio1@2003c000";
        char dev_name[] = "gpio@2003c000";
        char priv_name[2];
        int priv_bank;
        char *end;

        end = strrchr(dev_name, '@');
        priv_bank = trailing_strtoln(dev_name, end);

        priv_name[0] = 'A' + priv_bank;
        priv_name[1] = 0;

        printf("priv_bank: %d\n", priv_bank);
        printf("priv_name: %s\n", priv_name);
        return 0;
}

// priv_bank: 1
// priv_name: B

A change of node name gives:

// priv_bank: -1
// priv_name: @

===

Linux driver gpio-rockchip.c has an alias or else an increment id.

id = of_alias_get_id(np, "gpio");
        if (id < 0)
                id = gpio++;

Problem:
Probe order is not guarantied.
Aliases should go to board files and not in dtsi files anymore. 

===

The current compatible string is generic, but these strings should normally be 
SoC orientated.

Proposal:

replace:
compatible = "rockchip,gpio-bank";

by:
compatible = "rockchip,rk3188-gpio-bank";

With that known we can lookup the reg address in a lookup table and it's name 
for u-boot.

struct lookup_table rk_gpio_rk3188_data[] = {
        {0x2000a000, "A"},
        {0x2003c000, "B"},
        {0x2003e000, "C"},
        {0x20080000, "D"},
};


        { .compatible = "rockchip,rk3188-gpio-bank", .data = 
&rk_gpio_rk3188_data },

===

If needed I can help with changes to rockchip,gpio-bank.yaml

Let me know if it's useful or that you have an other solution as long as we get 
forward here.

Johan

> 

> I believe this is the same issue as on RK3399 and PX30: this breaks our GPIO 
> controller driver.

> 
> c.f. 
> https://lore.kernel.org/u-boot/0ab9a600-b517-0ce5-d189-99fc8eddf...@theobroma-systems.com/
>  and its answers.
> 
> Cheers,
> Quentin

Reply via email to