[U-Boot] [PATCH] net: gmac_rockchip: Add support for pinctrl

Dr. Philipp Tomsich philipp.tomsich at theobroma-systems.com
Tue Jul 11 13:43:20 UTC 2017


> On 10 Jul 2017, at 08:43, Romain Perier <romain.perier at collabora.com> wrote:
> 
> Le 07/07/2017 à 05:58, Simon Glass a écrit :
>> +Philipp
>> 
>> Hi Romain,
>> 
>> On 3 July 2017 at 01:13, Romain Perier <romain.perier at collabora.com> wrote:
>>> Currently, selecting state simple is done by the device driver model,
>>> prior probing the driver. The problem is that it's done and called on
>>> the pinctrl node with "gmac" as the "periph" struct udevice *. So
>>> pinctrl-rk3288 is looking for an interrupt property that is not found,
>>> and then gmac_config is never called.
>>> 
>>> This commits toggles the pinctrl on the right node from the probe
>>> function of the driver.
>> Is it possible to fix this while still using driver-model automatic pinctrl?
> 
> This is what I have tried to do, without success. The purpose of this
> patch is also to discuss about the possible solutions we have.

From looking at pinctrl_rk3288.c, I wonder if there’s a problem with
pinctrl on the RK3288 outside of SPL: I see that the (full) set_state
is also implemented outside of SPL (#ifndef CONFIG_SPL_BUILD)
and not guarded by a CONFIG_IS_ENABLED(PINCTRL_FULL). So
something might go down the wrong path.

Could start narrowing this down by enabling DEBUG in pinctrl_rk3288
to see whether this is even the simple pinctrl that gets called?

> Regards,
> Romain
> 
>> 
>>> Signed-off-by: Romain Perier <romain.perier at collabora.com>
>>> ---
>>> drivers/net/gmac_rockchip.c | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>> 
>>> diff --git a/drivers/net/gmac_rockchip.c b/drivers/net/gmac_rockchip.c
>>> index 5e2ca76302..8581026b4a 100644
>>> --- a/drivers/net/gmac_rockchip.c
>>> +++ b/drivers/net/gmac_rockchip.c
>>> @@ -160,6 +160,10 @@ static int gmac_rockchip_probe(struct udevice *dev)
>>>        struct clk clk;
>>>        int ret;
>>> 
>>> +       ret = pinctrl_select_state(dev, "simple");
>>> +       if (ret)
>>> +               return ret;
>>> +
>>>        ret = clk_get_by_index(dev, 0, &clk);
>>>        if (ret)
>>>                return ret;
>>> --
>>> 2.11.0
>>> 
>> Regards,
>> Simon
> 



More information about the U-Boot mailing list