]> www.infradead.org Git - linux.git/commitdiff
ARM: dts: stm32: Keep MDIO bus in AF across suspend DH STM32MP13xx DHCOR DHSBC board
authorMarek Vasut <marex@denx.de>
Fri, 5 Jul 2024 07:59:10 +0000 (09:59 +0200)
committerAlexandre Torgue <alexandre.torgue@foss.st.com>
Thu, 5 Sep 2024 09:31:55 +0000 (11:31 +0200)
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>
Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
arch/arm/boot/dts/st/stm32mp13-pinctrl.dtsi

index c9f588a650944596be31601584f4973798ca2801..8db1ec4a3b26865fda0e6246db8687a89a48f5d9 100644 (file)
        /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 */
        /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 */