mbox series

[0/4] net: ti: am65-cpsw-nuss: Fix DT binding handling of pinctrl

Message ID 20230720-ti-mdio-pinmux-v1-0-0bd3bd1cf759@kernel.org
Headers show
Series net: ti: am65-cpsw-nuss: Fix DT binding handling of pinctrl | expand

Message

Maxime Ripard July 20, 2023, 9:55 a.m. UTC
Hi,

This series is based on:
https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/

It fixes the issue of Linux booting from the DT embedded by U-boot. The
main issue there is that U-Boot doesn't handle the MDIO child node that
might have resources attached to it.

Thus, any pinctrl configuration that could be attached to the MDIO
child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
Linux does just that.

This was solved by duplicating the pinctrl configuration onto the MAC
device node. Unfortunately, this doesn't work for Linux since now it has
two devices competing for the same pins.

Let me know what you think,
Maxime

Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Maxime Ripard (4):
      pinctrl: Create a select_state variant with the ofnode
      net: ti: am65-cpsw-nuss: Enforce pinctrl state on the MDIO child node
      fixup! arm: dts: k3-am62: Bump dtsi from linux v6.5-rc1
      fixup! arm: dts: k3-am62: Bump dtsi from linux v6.5-rc1

 arch/arm/dts/k3-am625-sk-u-boot.dtsi |  7 ++++--
 drivers/net/ti/am65-cpsw-nuss.c      | 49 ++++++++++++++++++++++++++++++++++++
 drivers/pinctrl/pinctrl-uclass.c     | 15 ++++++-----
 include/dm/pinctrl.h                 | 26 ++++++++++++++-----
 4 files changed, 83 insertions(+), 14 deletions(-)
---
base-commit: acff6e7c553d5a839e885730a4018465a34ba5a7
change-id: 20230720-ti-mdio-pinmux-a12525dba973

Best regards,

Comments

Maxime Ripard July 20, 2023, 2:12 p.m. UTC | #1
Hi

Sorry, I didn't receive Roger mail so I'll reply here

On Thu, Jul 20, 2023 at 09:00:19AM -0500, Nishanth Menon wrote:
> On 16:56-20230720, Roger Quadros wrote:
> > Hi,
> > 
> > On 20/07/2023 16:33, Ravi Gunasekaran wrote:
> > > 
> > > 
> > > On 7/20/2023 3:25 PM, Maxime Ripard wrote:
> > >> Hi,
> > >>
> > >> This series is based on:
> > >> https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/
> > >>
> > >> It fixes the issue of Linux booting from the DT embedded by U-boot. The
> > >> main issue there is that U-Boot doesn't handle the MDIO child node that
> > >> might have resources attached to it.
> > >>
> > >> Thus, any pinctrl configuration that could be attached to the MDIO
> > >> child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
> > >> Linux does just that.
> > 
> > I didn't get this part. Linux does not ignore pinctrl configuration attached
> > to MDIO child node. What changed in 6.5-rc1?

Linux doesn't ignore it, but Linux started putting pinctrl configuration
on the MDIO node, which is ignored by U-Boot.

> > >> This was solved by duplicating the pinctrl configuration onto the MAC
> > 
> > If I remember right, there is no driver model driver for MDIO in u-boot and
> > adding the mdio pinctrl into CPSW DT node was a hack in u-boot.

Yeah, but we now have in the U-Boot DT two nodes referencing the same
pinctrl configuration: the CPSW and the MDIO node. Linux then tries to
assign that configuration to both devices and it fails.

> > >> device node. Unfortunately, this doesn't work for Linux since now it has
> > >> two devices competing for the same pins.
> > 
> > What has really changed here is that you are passing u-boot's device
> > tree to Linux.

I didn't change anything. This is the default boot process if you don't
provide a DT in the ESP partition.

> > This has nothing to do with 6.5-rc1 right?

The issue started to occur with Nishanth patch to sync with Linux
6.5-rc1 device trees, so there's definitely a connection.

> > I suppose your solution is still a hack but of lesser evil than
> > duplicating MDIO pinctrl in CPSW node.
> > 
> > The proper solution would be to implement driver model for the
> > davinci MDIO driver. Siddharth has been working on this. If that is
> > close to ready we should just use that instead.
> 
> But this allows for a cleaner device tree while the driver can be fixed
> up independently, correct? Unfortunately, Siddharth's driver model work,
> from what I understand, is around 2024 timeframe.. which is probably not
> something that helps us in the community at this point.

Yeah, at the moment I have to choose between getting the MMC to work in
Linux or the Ethernet ports. The former is working thanks to your patch,
the latter is broken because of it. Ideally I'd like both :)

Maxime
Roger Quadros July 20, 2023, 2:41 p.m. UTC | #2
On 20/07/2023 17:12, Maxime Ripard wrote:
> Hi
> 
> Sorry, I didn't receive Roger mail so I'll reply here
> 
> On Thu, Jul 20, 2023 at 09:00:19AM -0500, Nishanth Menon wrote:
>> On 16:56-20230720, Roger Quadros wrote:
>>> Hi,
>>>
>>> On 20/07/2023 16:33, Ravi Gunasekaran wrote:
>>>>
>>>>
>>>> On 7/20/2023 3:25 PM, Maxime Ripard wrote:
>>>>> Hi,
>>>>>
>>>>> This series is based on:
>>>>> https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/
>>>>>
>>>>> It fixes the issue of Linux booting from the DT embedded by U-boot. The
>>>>> main issue there is that U-Boot doesn't handle the MDIO child node that
>>>>> might have resources attached to it.
>>>>>
>>>>> Thus, any pinctrl configuration that could be attached to the MDIO
>>>>> child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
>>>>> Linux does just that.
>>>
>>> I didn't get this part. Linux does not ignore pinctrl configuration attached
>>> to MDIO child node. What changed in 6.5-rc1?
> 
> Linux doesn't ignore it, but Linux started putting pinctrl configuration
> on the MDIO node, which is ignored by U-Boot.

Linux always had MDIO pinctrl configuration in the MDIO node, way before 6.5-rc1.
Let's not mention 6.5-rc1 here as it gives an indication that something in 6.5-rc1
caused this issue. ;)

Earlier, u-boot didn't enable the MDIO node. With Nishanth's sync it does which
is fine, but duplicating the MDIO pinctrl node in the CPSW node causes problems
on Linux.

I see you reverted that change in patch 3, but probably Nishanth can avoid it if we
got this route.

> 
>>>>> This was solved by duplicating the pinctrl configuration onto the MAC
>>>
>>> If I remember right, there is no driver model driver for MDIO in u-boot and
>>> adding the mdio pinctrl into CPSW DT node was a hack in u-boot.
> 
> Yeah, but we now have in the U-Boot DT two nodes referencing the same
> pinctrl configuration: the CPSW and the MDIO node. Linux then tries to
> assign that configuration to both devices and it fails.

Understood.
> 
>>>>> device node. Unfortunately, this doesn't work for Linux since now it has
>>>>> two devices competing for the same pins.
>>>
>>> What has really changed here is that you are passing u-boot's device
>>> tree to Linux.
> 
> I didn't change anything. This is the default boot process if you don't
> provide a DT in the ESP partition.
> 

OK.
>>> This has nothing to do with 6.5-rc1 right?
> 
> The issue started to occur with Nishanth patch to sync with Linux
> 6.5-rc1 device trees, so there's definitely a connection.
> 
>>> I suppose your solution is still a hack but of lesser evil than
>>> duplicating MDIO pinctrl in CPSW node.
>>>
>>> The proper solution would be to implement driver model for the
>>> davinci MDIO driver. Siddharth has been working on this. If that is
>>> close to ready we should just use that instead.
>>
>> But this allows for a cleaner device tree while the driver can be fixed
>> up independently, correct? Unfortunately, Siddharth's driver model work,

Yes. MDIO pinctrl no longer needs to be duplicated in CPSW node at u-boot.

>> from what I understand, is around 2024 timeframe.. which is probably not
>> something that helps us in the community at this point.

OK, then we need to resort to some temporary solution like this then.
> 
> Yeah, at the moment I have to choose between getting the MMC to work in
> Linux or the Ethernet ports. The former is working thanks to your patch,
> the latter is broken because of it. Ideally I'd like both :)
>
Nishanth Menon July 20, 2023, 2:52 p.m. UTC | #3
On 17:41-20230720, Roger Quadros wrote:
[...]
> >> from what I understand, is around 2024 timeframe.. which is probably not
> >> something that helps us in the community at this point.
> 
> OK, then we need to resort to some temporary solution like this then.

Thanks. I will squash up the fixup patches, lets try and get the rest
of the patches reviewed? I can put out a new RFC based on this series
(or updates).
Ravi Gunasekaran July 26, 2023, 9:14 a.m. UTC | #4
Maxime,

On 7/20/23 7:42 PM, Maxime Ripard wrote:
> Hi
> 
> Sorry, I didn't receive Roger mail so I'll reply here
> 
> On Thu, Jul 20, 2023 at 09:00:19AM -0500, Nishanth Menon wrote:
>> On 16:56-20230720, Roger Quadros wrote:
>>> Hi,
>>>
>>> On 20/07/2023 16:33, Ravi Gunasekaran wrote:
>>>>
>>>>
>>>> On 7/20/2023 3:25 PM, Maxime Ripard wrote:
>>>>> Hi,
>>>>>
>>>>> This series is based on:
>>>>> https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/
>>>>>
>>>>> It fixes the issue of Linux booting from the DT embedded by U-boot. The
>>>>> main issue there is that U-Boot doesn't handle the MDIO child node that
>>>>> might have resources attached to it.
>>>>>
>>>>> Thus, any pinctrl configuration that could be attached to the MDIO
>>>>> child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
>>>>> Linux does just that.
>>>
>>> I didn't get this part. Linux does not ignore pinctrl configuration attached
>>> to MDIO child node. What changed in 6.5-rc1?
> 
> Linux doesn't ignore it, but Linux started putting pinctrl configuration
> on the MDIO node, which is ignored by U-Boot.
> 
>>>>> This was solved by duplicating the pinctrl configuration onto the MAC
>>>
>>> If I remember right, there is no driver model driver for MDIO in u-boot and
>>> adding the mdio pinctrl into CPSW DT node was a hack in u-boot.
> 
> Yeah, but we now have in the U-Boot DT two nodes referencing the same
> pinctrl configuration: the CPSW and the MDIO node. Linux then tries to
> assign that configuration to both devices and it fails.

This response might be late, as I know things have moved ahead after this
discussion. But I just wanted to understand the root cause little bit more.
Is the issue mainly because the same mdio pinctrl node(phandle) is referenced in
two other nodes? Or is it because of same pins being updated in two different
places in the kernel?

If it is the former, then would a duplicate mdio node help keep the changes
to minimum?


> 
>>>>> device node. Unfortunately, this doesn't work for Linux since now it has
>>>>> two devices competing for the same pins.
>>>
>>> What has really changed here is that you are passing u-boot's device
>>> tree to Linux.
> 
> I didn't change anything. This is the default boot process if you don't
> provide a DT in the ESP partition.
> 
>>> This has nothing to do with 6.5-rc1 right?
> 
> The issue started to occur with Nishanth patch to sync with Linux
> 6.5-rc1 device trees, so there's definitely a connection.
> 
>>> I suppose your solution is still a hack but of lesser evil than
>>> duplicating MDIO pinctrl in CPSW node.
>>>
>>> The proper solution would be to implement driver model for the
>>> davinci MDIO driver. Siddharth has been working on this. If that is
>>> close to ready we should just use that instead.
>>
>> But this allows for a cleaner device tree while the driver can be fixed
>> up independently, correct? Unfortunately, Siddharth's driver model work,
>> from what I understand, is around 2024 timeframe.. which is probably not
>> something that helps us in the community at this point.
> 
> Yeah, at the moment I have to choose between getting the MMC to work in
> Linux or the Ethernet ports. The former is working thanks to your patch,
> the latter is broken because of it. Ideally I'd like both :)
> 
> Maxime
Maxime Ripard July 26, 2023, 12:49 p.m. UTC | #5
Hi Ravi,

On Wed, Jul 26, 2023 at 02:44:00PM +0530, Ravi Gunasekaran wrote:
> On 7/20/23 7:42 PM, Maxime Ripard wrote:
> > Hi
> > 
> > Sorry, I didn't receive Roger mail so I'll reply here
> > 
> > On Thu, Jul 20, 2023 at 09:00:19AM -0500, Nishanth Menon wrote:
> >> On 16:56-20230720, Roger Quadros wrote:
> >>> Hi,
> >>>
> >>> On 20/07/2023 16:33, Ravi Gunasekaran wrote:
> >>>>
> >>>>
> >>>> On 7/20/2023 3:25 PM, Maxime Ripard wrote:
> >>>>> Hi,
> >>>>>
> >>>>> This series is based on:
> >>>>> https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/
> >>>>>
> >>>>> It fixes the issue of Linux booting from the DT embedded by U-boot. The
> >>>>> main issue there is that U-Boot doesn't handle the MDIO child node that
> >>>>> might have resources attached to it.
> >>>>>
> >>>>> Thus, any pinctrl configuration that could be attached to the MDIO
> >>>>> child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
> >>>>> Linux does just that.
> >>>
> >>> I didn't get this part. Linux does not ignore pinctrl configuration attached
> >>> to MDIO child node. What changed in 6.5-rc1?
> > 
> > Linux doesn't ignore it, but Linux started putting pinctrl configuration
> > on the MDIO node, which is ignored by U-Boot.
> > 
> >>>>> This was solved by duplicating the pinctrl configuration onto the MAC
> >>>
> >>> If I remember right, there is no driver model driver for MDIO in u-boot and
> >>> adding the mdio pinctrl into CPSW DT node was a hack in u-boot.
> > 
> > Yeah, but we now have in the U-Boot DT two nodes referencing the same
> > pinctrl configuration: the CPSW and the MDIO node. Linux then tries to
> > assign that configuration to both devices and it fails.
> 
> This response might be late, as I know things have moved ahead after this
> discussion. But I just wanted to understand the root cause little bit more.
> Is the issue mainly because the same mdio pinctrl node(phandle) is referenced in
> two other nodes? Or is it because of same pins being updated in two different
> places in the kernel?
> 
> If it is the former, then would a duplicate mdio node help keep the changes
> to minimum?

Neither, actually :/ The issue is that, with the changes made by
Nishanth to bring the 6.5-rc1 DTS in, the same pinctrl node is
referenced in two separate nodes, and Linux sees that as conflicting
users of the same pins.

One quick workaround would be to remove the MDIO pinctrl property, and
add it to the MAC pinctrl property.

That's fairly dangerous if either get extended though, so it might not
be a proper solution long term.

I hope it's clearer

Maxime
Nishanth Menon July 26, 2023, 12:52 p.m. UTC | #6
On 14:44-20230726, Ravi Gunasekaran wrote:
[...]
> If it is the former, then would a duplicate mdio node help keep the changes
> to minimum?

That is worse hack. How does it make sense to have two mdio nodes to
represent the same hardware block? we are trying to get closer to kernel
dts support not farther away from it.
Ravi Gunasekaran July 27, 2023, 5:27 a.m. UTC | #7
Maxime,

On 7/26/23 6:19 PM, Maxime Ripard wrote:
> Hi Ravi,
> 
> On Wed, Jul 26, 2023 at 02:44:00PM +0530, Ravi Gunasekaran wrote:
>> On 7/20/23 7:42 PM, Maxime Ripard wrote:
>>> Hi
>>>
>>> Sorry, I didn't receive Roger mail so I'll reply here
>>>
>>> On Thu, Jul 20, 2023 at 09:00:19AM -0500, Nishanth Menon wrote:
>>>> On 16:56-20230720, Roger Quadros wrote:
>>>>> Hi,
>>>>>
>>>>> On 20/07/2023 16:33, Ravi Gunasekaran wrote:
>>>>>>
>>>>>>
>>>>>> On 7/20/2023 3:25 PM, Maxime Ripard wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> This series is based on:
>>>>>>> https://lore.kernel.org/all/20230713072019.3153871-1-nm@ti.com/
>>>>>>>
>>>>>>> It fixes the issue of Linux booting from the DT embedded by U-boot. The
>>>>>>> main issue there is that U-Boot doesn't handle the MDIO child node that
>>>>>>> might have resources attached to it.
>>>>>>>
>>>>>>> Thus, any pinctrl configuration that could be attached to the MDIO
>>>>>>> child node is effectively ignored. Unfortunately, starting with 6.5-rc1,
>>>>>>> Linux does just that.
>>>>>
>>>>> I didn't get this part. Linux does not ignore pinctrl configuration attached
>>>>> to MDIO child node. What changed in 6.5-rc1?
>>>
>>> Linux doesn't ignore it, but Linux started putting pinctrl configuration
>>> on the MDIO node, which is ignored by U-Boot.
>>>
>>>>>>> This was solved by duplicating the pinctrl configuration onto the MAC
>>>>>
>>>>> If I remember right, there is no driver model driver for MDIO in u-boot and
>>>>> adding the mdio pinctrl into CPSW DT node was a hack in u-boot.
>>>
>>> Yeah, but we now have in the U-Boot DT two nodes referencing the same
>>> pinctrl configuration: the CPSW and the MDIO node. Linux then tries to
>>> assign that configuration to both devices and it fails.
>>
>> This response might be late, as I know things have moved ahead after this
>> discussion. But I just wanted to understand the root cause little bit more.
>> Is the issue mainly because the same mdio pinctrl node(phandle) is referenced in
>> two other nodes? Or is it because of same pins being updated in two different
>> places in the kernel?
>>
>> If it is the former, then would a duplicate mdio node help keep the changes
>> to minimum?
> 
> Neither, actually :/ The issue is that, with the changes made by
> Nishanth to bring the 6.5-rc1 DTS in, the same pinctrl node is
> referenced in two separate nodes, and Linux sees that as conflicting
> users of the same pins.

So you mean to say, finally it boils down to the users of the same pins.
Even if there are two nodes with the same pinctrl configuration, we would
still hit the issue. 

> 
> One quick workaround would be to remove the MDIO pinctrl property, and
> add it to the MAC pinctrl property.
> 
> That's fairly dangerous if either get extended though, so it might not
> be a proper solution long term.

A proper solution would be to update the MDIO driver. I'm sorry that it 
doesn't follow the standard driver model. We have plans to fix it soon.

> 
> I hope it's clearer
> 
> Maxime
Ravi Gunasekaran July 27, 2023, 5:36 a.m. UTC | #8
On 7/26/23 6:22 PM, Nishanth Menon wrote:
> On 14:44-20230726, Ravi Gunasekaran wrote:
> [...]
>> If it is the former, then would a duplicate mdio node help keep the changes
>> to minimum?
> 
> That is worse hack. How does it make sense to have two mdio nodes to
> represent the same hardware block? we are trying to get closer to kernel
> dts support not farther away from it.
> 

I know it's not a clean hack. In k3-am625-sk-u-boot.dtsi, as a hack,
the mdio pinctrl gets added to cpsw node. So was wondering if a duplicate
mdio pinctrl node could be added in the same file. Just wanted to know if we
could skip the changes in CPSW driver posted by Maxime. 

But Maxime's approach is much cleaner. We can just sync up kernel dts and not
keeping adding the hack to every K3 SoC's DT.
Roger Quadros July 27, 2023, 7:10 a.m. UTC | #9
Ravi,

On 27/07/2023 08:36, Ravi Gunasekaran wrote:
> 
> 
> On 7/26/23 6:22 PM, Nishanth Menon wrote:
>> On 14:44-20230726, Ravi Gunasekaran wrote:
>> [...]
>>> If it is the former, then would a duplicate mdio node help keep the changes
>>> to minimum?
>>
>> That is worse hack. How does it make sense to have two mdio nodes to
>> represent the same hardware block? we are trying to get closer to kernel
>> dts support not farther away from it.
>>
> 
> I know it's not a clean hack. In k3-am625-sk-u-boot.dtsi, as a hack,
> the mdio pinctrl gets added to cpsw node. So was wondering if a duplicate
> mdio pinctrl node could be added in the same file. Just wanted to know if we
> could skip the changes in CPSW driver posted by Maxime. 
> 
> But Maxime's approach is much cleaner. We can just sync up kernel dts and not
> keeping adding the hack to every K3 SoC's DT.
> 
> 
Everything is sorted now as far as DT sync is concerned.
Please see [1] and its dependencies.

Only thing missing is to have proper MDIO DM support for TI platforms
in u-boot. Then we can get rid of the MDIO hack in am65-cpsw driver.

[1] - https://lore.kernel.org/all/20230726151027.2517151-1-nm@ti.com/