[PATCH v2] ARM: imx: imx8mn-*-evk: use DM settings for PHY configuration

With the correct settings described in the device-tree the PHY settings in the board init are no longer required. The values are taken from the linux device tree.
Suggested-by: Michael Walle michael@walle.cc Signed-off-by: Heiko Thiery heiko.thiery@gmail.com --- v2: - remove phy-reset-gpios node (thanks to Michael) When using DM_ETH_PHY the reset-gpios from the phy is used
arch/arm/dts/imx8mn-evk.dtsi | 10 +++++++++- board/freescale/imx8mn_evk/imx8mn_evk.c | 16 ---------------- 2 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/arch/arm/dts/imx8mn-evk.dtsi b/arch/arm/dts/imx8mn-evk.dtsi index 416fadb22b..fd253f0042 100644 --- a/arch/arm/dts/imx8mn-evk.dtsi +++ b/arch/arm/dts/imx8mn-evk.dtsi @@ -53,7 +53,6 @@ pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <ðphy0>; - phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>; fsl,magic-packet; status = "okay";
@@ -64,6 +63,15 @@ ethphy0: ethernet-phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <0>; + reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>; + reset-assert-us = <10000>; + qca,disable-smarteee; + vddio-supply = <&vddio>; + + vddio: vddio-regulator { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; }; }; }; diff --git a/board/freescale/imx8mn_evk/imx8mn_evk.c b/board/freescale/imx8mn_evk/imx8mn_evk.c index b24342fd5c..e35d505aea 100644 --- a/board/freescale/imx8mn_evk/imx8mn_evk.c +++ b/board/freescale/imx8mn_evk/imx8mn_evk.c @@ -27,22 +27,6 @@ static void setup_fec(void) clrsetbits_le32(&gpr->gpr[1], 0x2000, 0); }
-int board_phy_config(struct phy_device *phydev) -{ - /* enable rgmii rxc skew and phy mode select to RGMII copper */ - phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f); - phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8); - - phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x00); - phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x82ee); - phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); - phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100); - - if (phydev->drv->config) - phydev->drv->config(phydev); - return 0; -} - int board_init(void) { setup_fec();

Am 2022-02-22 16:19, schrieb Heiko Thiery:
With the correct settings described in the device-tree the PHY settings in the board init are no longer required. The values are taken from the linux device tree.
Suggested-by: Michael Walle michael@walle.cc Signed-off-by: Heiko Thiery heiko.thiery@gmail.com
v2:
- remove phy-reset-gpios node (thanks to Michael) When using DM_ETH_PHY the reset-gpios from the phy is used
arch/arm/dts/imx8mn-evk.dtsi | 10 +++++++++- board/freescale/imx8mn_evk/imx8mn_evk.c | 16 ---------------- 2 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/arch/arm/dts/imx8mn-evk.dtsi b/arch/arm/dts/imx8mn-evk.dtsi index 416fadb22b..fd253f0042 100644 --- a/arch/arm/dts/imx8mn-evk.dtsi +++ b/arch/arm/dts/imx8mn-evk.dtsi @@ -53,7 +53,6 @@ pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <ðphy0>;
- phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
This ...
fsl,magic-packet; status = "okay";
@@ -64,6 +63,15 @@ ethphy0: ethernet-phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <0>;
reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
qca,disable-smarteee;
.. and these three lines should probably be a separate patch.
vddio-supply = <&vddio>;
vddio: vddio-regulator {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
This looks good. The rgmii pad delay is already handled by the phy-mode.
Reviewed-by: Michael Walle michael@walle.cc
};
}; }; diff --git a/board/freescale/imx8mn_evk/imx8mn_evk.c b/board/freescale/imx8mn_evk/imx8mn_evk.c index b24342fd5c..e35d505aea 100644 --- a/board/freescale/imx8mn_evk/imx8mn_evk.c +++ b/board/freescale/imx8mn_evk/imx8mn_evk.c @@ -27,22 +27,6 @@ static void setup_fec(void) clrsetbits_le32(&gpr->gpr[1], 0x2000, 0); }
-int board_phy_config(struct phy_device *phydev) -{
- /* enable rgmii rxc skew and phy mode select to RGMII copper */
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x00);
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x82ee);
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
- phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
- if (phydev->drv->config)
phydev->drv->config(phydev);
- return 0;
-}
int board_init(void) { setup_fec();

On 2/22/22 17:00, Michael Walle wrote:
Am 2022-02-22 16:19, schrieb Heiko Thiery:
With the correct settings described in the device-tree the PHY settings in the board init are no longer required. The values are taken from the linux device tree.
Suggested-by: Michael Walle michael@walle.cc Signed-off-by: Heiko Thiery heiko.thiery@gmail.com
v2: - remove phy-reset-gpios node (thanks to Michael) When using DM_ETH_PHY the reset-gpios from the phy is used
arch/arm/dts/imx8mn-evk.dtsi | 10 +++++++++- board/freescale/imx8mn_evk/imx8mn_evk.c | 16 ---------------- 2 files changed, 9 insertions(+), 17 deletions(-)
It seems someone was faster with this patch after all, thanks.
diff --git a/arch/arm/dts/imx8mn-evk.dtsi b/arch/arm/dts/imx8mn-evk.dtsi index 416fadb22b..fd253f0042 100644 --- a/arch/arm/dts/imx8mn-evk.dtsi +++ b/arch/arm/dts/imx8mn-evk.dtsi @@ -53,7 +53,6 @@ pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <ðphy0>; - phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
This ...
I'm afraid the phy reset in the phy node won't really end up toggling the PHY reset GPIO, would it ?
[...]

Hi Marek,
Am Di., 22. Feb. 2022 um 19:13 Uhr schrieb Marek Vasut marex@denx.de:
On 2/22/22 17:00, Michael Walle wrote:
Am 2022-02-22 16:19, schrieb Heiko Thiery:
With the correct settings described in the device-tree the PHY settings in the board init are no longer required. The values are taken from the linux device tree.
Suggested-by: Michael Walle michael@walle.cc Signed-off-by: Heiko Thiery heiko.thiery@gmail.com
v2:
- remove phy-reset-gpios node (thanks to Michael) When using DM_ETH_PHY the reset-gpios from the phy is used
arch/arm/dts/imx8mn-evk.dtsi | 10 +++++++++- board/freescale/imx8mn_evk/imx8mn_evk.c | 16 ---------------- 2 files changed, 9 insertions(+), 17 deletions(-)
It seems someone was faster with this patch after all, thanks.
diff --git a/arch/arm/dts/imx8mn-evk.dtsi b/arch/arm/dts/imx8mn-evk.dtsi index 416fadb22b..fd253f0042 100644 --- a/arch/arm/dts/imx8mn-evk.dtsi +++ b/arch/arm/dts/imx8mn-evk.dtsi @@ -53,7 +53,6 @@ pinctrl-0 = <&pinctrl_fec1>; phy-mode = "rgmii-id"; phy-handle = <ðphy0>;
- phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
This ...
I'm afraid the phy reset in the phy node won't really end up toggling the PHY reset GPIO, would it ?
I think you're right. The "new" reset-gpios property is not supported by the fec driver. I think this is also valid for the linux driver if I'm not wrong. But then some boards in linux also cannot do a phy reset at initialization/probing. Is that right?
participants (3)
-
Heiko Thiery
-
Marek Vasut
-
Michael Walle