Message ID | 20240705075918.41213-1-marex@denx.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] ARM: dts: stm32: Keep MDIO bus in AF across suspend DH STM32MP13xx DHCOR DHSBC board | expand |
Hi Marek On 7/5/24 09:59, Marek Vasut wrote: > The RTL8211F PHY gets confused when the MDIO bus lines get switched > to ANALOG during suspend/resume cycle. Keep the MDIO and MDC lines > in AF during suspend/resume to avoid confusing the PHY. The PHY can > be brought out of the confused state by restarting auto-negotiation > too, but that seems like an odd workaround and shouldn't be in the > PHY driver. > > Signed-off-by: Marek Vasut <marex@denx.de> > --- > Cc: Alexandre Torgue <alexandre.torgue@foss.st.com> > Cc: Christophe Roullier <christophe.roullier@foss.st.com> > Cc: Conor Dooley <conor+dt@kernel.org> > Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> > Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> > Cc: Rob Herring <robh@kernel.org> > Cc: devicetree@vger.kernel.org > Cc: kernel@dh-electronics.com > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-stm32@st-md-mailman.stormreply.com > --- > V2: Fixup the eth2_rgmii_sleep_pins_a into AF as well > --- > arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi b/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi > index ca19c8c6b6771..62c64e9c2b9f0 100644 > --- a/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi > +++ b/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi > @@ -94,14 +94,20 @@ pins2 { > /omit-if-no-ref/ > eth1_rgmii_sleep_pins_a: eth1-rgmii-sleep-0 { > pins1 { > + pinmux = <STM32_PINMUX('A', 2, AF11)>, /* ETH_MDIO */ > + <STM32_PINMUX('G', 2, AF11)>; /* ETH_MDC */ > + bias-disable; > + drive-push-pull; > + slew-rate = <2>; > + }; > + > + pins2 { > pinmux = <STM32_PINMUX('G', 13, ANALOG)>, /* ETH_RGMII_TXD0 */ > <STM32_PINMUX('G', 14, ANALOG)>, /* ETH_RGMII_TXD1 */ > <STM32_PINMUX('C', 2, ANALOG)>, /* ETH_RGMII_TXD2 */ > <STM32_PINMUX('E', 5, ANALOG)>, /* ETH_RGMII_TXD3 */ > <STM32_PINMUX('B', 11, ANALOG)>, /* ETH_RGMII_TX_CTL */ > <STM32_PINMUX('C', 1, ANALOG)>, /* ETH_RGMII_GTX_CLK */ > - <STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */ > - <STM32_PINMUX('G', 2, ANALOG)>, /* ETH_MDC */ > <STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RGMII_RXD0 */ > <STM32_PINMUX('C', 5, ANALOG)>, /* ETH_RGMII_RXD1 */ > <STM32_PINMUX('B', 0, ANALOG)>, /* ETH_RGMII_RXD1 */ > @@ -178,14 +184,20 @@ pins2 { > /omit-if-no-ref/ > eth2_rgmii_sleep_pins_a: eth2-rgmii-sleep-0 { > pins1 { > + pinmux = <STM32_PINMUX('B', 6, AF11)>, /* ETH_MDIO */ > + <STM32_PINMUX('G', 5, AF10)>; /* ETH_MDC */ > + bias-disable; > + drive-push-pull; > + slew-rate = <2>; > + }; > + > + pins2 { > pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* ETH_RGMII_TXD0 */ > <STM32_PINMUX('G', 11, ANALOG)>, /* ETH_RGMII_TXD1 */ > <STM32_PINMUX('G', 1, ANALOG)>, /* ETH_RGMII_TXD2 */ > <STM32_PINMUX('E', 6, ANALOG)>, /* ETH_RGMII_TXD3 */ > <STM32_PINMUX('F', 6, ANALOG)>, /* ETH_RGMII_TX_CTL */ > <STM32_PINMUX('G', 3, ANALOG)>, /* ETH_RGMII_GTX_CLK */ > - <STM32_PINMUX('B', 6, ANALOG)>, /* ETH_MDIO */ > - <STM32_PINMUX('G', 5, ANALOG)>, /* ETH_MDC */ > <STM32_PINMUX('F', 4, ANALOG)>, /* ETH_RGMII_RXD0 */ > <STM32_PINMUX('E', 2, ANALOG)>, /* ETH_RGMII_RXD1 */ > <STM32_PINMUX('H', 6, ANALOG)>, /* ETH_RGMII_RXD2 */ Applied on stm32-next. Thanks Alex
diff --git a/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi b/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi index ca19c8c6b6771..62c64e9c2b9f0 100644 --- a/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi +++ b/arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi @@ -94,14 +94,20 @@ pins2 { /omit-if-no-ref/ eth1_rgmii_sleep_pins_a: eth1-rgmii-sleep-0 { pins1 { + pinmux = <STM32_PINMUX('A', 2, AF11)>, /* ETH_MDIO */ + <STM32_PINMUX('G', 2, AF11)>; /* ETH_MDC */ + bias-disable; + drive-push-pull; + slew-rate = <2>; + }; + + pins2 { pinmux = <STM32_PINMUX('G', 13, ANALOG)>, /* ETH_RGMII_TXD0 */ <STM32_PINMUX('G', 14, ANALOG)>, /* ETH_RGMII_TXD1 */ <STM32_PINMUX('C', 2, ANALOG)>, /* ETH_RGMII_TXD2 */ <STM32_PINMUX('E', 5, ANALOG)>, /* ETH_RGMII_TXD3 */ <STM32_PINMUX('B', 11, ANALOG)>, /* ETH_RGMII_TX_CTL */ <STM32_PINMUX('C', 1, ANALOG)>, /* ETH_RGMII_GTX_CLK */ - <STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */ - <STM32_PINMUX('G', 2, ANALOG)>, /* ETH_MDC */ <STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RGMII_RXD0 */ <STM32_PINMUX('C', 5, ANALOG)>, /* ETH_RGMII_RXD1 */ <STM32_PINMUX('B', 0, ANALOG)>, /* ETH_RGMII_RXD1 */ @@ -178,14 +184,20 @@ pins2 { /omit-if-no-ref/ eth2_rgmii_sleep_pins_a: eth2-rgmii-sleep-0 { pins1 { + pinmux = <STM32_PINMUX('B', 6, AF11)>, /* ETH_MDIO */ + <STM32_PINMUX('G', 5, AF10)>; /* ETH_MDC */ + bias-disable; + drive-push-pull; + slew-rate = <2>; + }; + + pins2 { pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* ETH_RGMII_TXD0 */ <STM32_PINMUX('G', 11, ANALOG)>, /* ETH_RGMII_TXD1 */ <STM32_PINMUX('G', 1, ANALOG)>, /* ETH_RGMII_TXD2 */ <STM32_PINMUX('E', 6, ANALOG)>, /* ETH_RGMII_TXD3 */ <STM32_PINMUX('F', 6, ANALOG)>, /* ETH_RGMII_TX_CTL */ <STM32_PINMUX('G', 3, ANALOG)>, /* ETH_RGMII_GTX_CLK */ - <STM32_PINMUX('B', 6, ANALOG)>, /* ETH_MDIO */ - <STM32_PINMUX('G', 5, ANALOG)>, /* ETH_MDC */ <STM32_PINMUX('F', 4, ANALOG)>, /* ETH_RGMII_RXD0 */ <STM32_PINMUX('E', 2, ANALOG)>, /* ETH_RGMII_RXD1 */ <STM32_PINMUX('H', 6, ANALOG)>, /* ETH_RGMII_RXD2 */
The RTL8211F PHY gets confused when the MDIO bus lines get switched to ANALOG during suspend/resume cycle. Keep the MDIO and MDC lines in AF during suspend/resume to avoid confusing the PHY. The PHY can be brought out of the confused state by restarting auto-negotiation too, but that seems like an odd workaround and shouldn't be in the PHY driver. Signed-off-by: Marek Vasut <marex@denx.de> --- Cc: Alexandre Torgue <alexandre.torgue@foss.st.com> Cc: Christophe Roullier <christophe.roullier@foss.st.com> Cc: Conor Dooley <conor+dt@kernel.org> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> Cc: Rob Herring <robh@kernel.org> Cc: devicetree@vger.kernel.org Cc: kernel@dh-electronics.com Cc: linux-arm-kernel@lists.infradead.org Cc: linux-stm32@st-md-mailman.stormreply.com --- V2: Fixup the eth2_rgmii_sleep_pins_a into AF as well --- arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)