[PATCH v1 1/6] rockchip: gpio: rk_gpio: use ROCKCHIP_GPIOS_PER_BANK as divider

Jonas Karlman jonas at kwiboo.se
Sun Mar 19 13:20:50 CET 2023


Hi Johan,
On 2023-03-19 12:34, Johan Jonker wrote:
> 
> 
> On 3/18/23 21:20, Simon Glass wrote:
>> Hi Johan,
>>
>> On Thu, 16 Mar 2023 at 10:46, Johan Jonker <jbx6244 at gmail.com> wrote:
>>>
>>> The current divider to calculate the bank ID can change.
>>> Use a constant ROCKCHIP_GPIOS_PER_BANK as fixed divider.
>>
> 
>> What is the motivation for this patch?
> 
> The gpio-ranges property format:
> 
> gpio-ranges = <[pin controller phandle], [GPIO controller offset],
>                 [pin controller offset], [number of pins]>;
> 
> 1: Given the Rockchip TRM not all gpio-banks have 32 pins per bank.
> 2: The "gpio-ranges" syntax allows multiple items with variable number of pins.

Is there a reason why gpio-ranges is used to determine bank id?

In the series at [1], add support for rk35xx gpio banks, sent yesterday
I changed this to rely on the dev alias id, same as in the linux driver.

Any reason why using the device alias id won't work for the same purpose
in u-boot?

[1] https://patchwork.ozlabs.org/project/uboot/patch/20230318235651.826148-3-jonas@kwiboo.se/

Regards,
Jonas

> 
> ===
> 
> Theoretical example:
> 
> gpio-ranges = <&pinctrl 0 32 32>; // 32/32 => bank 1
> 
> vs.
> 
> gpio-ranges = <&pinctrl 16 48 16>, // 48/16 => bank 3 vs. 48/32 => bank 1
>               <&pinctrl 0 32 16>; // 32/16  => bank 2 vs. 32/32 => bank 1
> 
> Both descriptions are valid.
> The number of pins in the second example is reduced to 16 per item.
> Using that as divider will give a wrong bank number.
> Use a constant instead.
> For the Rockchip situation simple parsing the first item is enough the know it's bank number for now.
> To do it correct one could parse a list of gpio-range items, but that makes it more complicated.
> 
> From gpio.txt:
> Each offset runs from 0 to N. It is perfectly fine to pile any number of
> ranges with just one pin-to-GPIO line mapping if the ranges are concocted, but
> in practice these ranges are often lumped in discrete sets.
> 
>>
>>>
>>> Signed-off-by: Johan Jonker <jbx6244 at gmail.com>
>>> ---
>>>  drivers/gpio/rk_gpio.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>
>>>
>>> diff --git a/drivers/gpio/rk_gpio.c b/drivers/gpio/rk_gpio.c
>>> index f7ad4d68..0a2acf18 100644
>>> --- a/drivers/gpio/rk_gpio.c
>>> +++ b/drivers/gpio/rk_gpio.c
>>> @@ -160,7 +160,7 @@ static int rockchip_gpio_probe(struct udevice *dev)
>>>                                              0, &args);
>>>         if (!ret || ret != -ENOENT) {
>>>                 uc_priv->gpio_count = args.args[2];
>>> -               priv->bank = args.args[1] / args.args[2];
>>> +               priv->bank = args.args[1] / ROCKCHIP_GPIOS_PER_BANK;
>>>         } else {
>>>                 uc_priv->gpio_count = ROCKCHIP_GPIOS_PER_BANK;
>>>                 end = strrchr(dev->name, '@');
>>> --
>>> 2.20.1
>>>
>>
>> Regards,
>> SImon



More information about the U-Boot mailing list