linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] remove different PHY fixups
@ 2021-03-09 11:26 Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031 Oleksij Rempel
                   ` (9 more replies)
  0 siblings, 10 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

changes v2:
- rebase against latest kernel
- fix networking on RIoTBoard

This patch series tries to remove most of the imx6 and imx7 board
specific PHY configuration via fixup, as this breaks the PHYs when
connected to switch chips or USB Ethernet MACs.

Each patch has the possibility to break boards, but contains a
recommendation to fix the problem in a more portable and future-proof
way.

regards,
Oleksij

Oleksij Rempel (7):
  ARM: imx6q: remove PHY fixup for KSZ9031
  ARM: imx6q: remove TX clock delay of ar8031_phy_fixup()
  ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup()
  ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035
    PHYs
  ARM: imx6q: remove Atheros AR8035 SmartEEE fixup
  ARM: imx6sx: remove Atheros AR8031 PHY fixup
  ARM: imx7d: remove Atheros AR8031 PHY fixup

 arch/arm/boot/dts/imx6dl-riotboard.dts  |  2 +
 arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
 arch/arm/mach-imx/mach-imx6q.c          | 85 -------------------------
 arch/arm/mach-imx/mach-imx6sx.c         | 26 --------
 arch/arm/mach-imx/mach-imx7d.c          | 22 -------
 5 files changed, 3 insertions(+), 134 deletions(-)

-- 
2.29.2


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-05-11  1:49   ` Shawn Guo
  2021-03-09 11:26 ` [PATCH v2 2/7] ARM: imx6q: remove TX clock delay of ar8031_phy_fixup() Oleksij Rempel
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, Philippe Schenker, kernel, netdev,
	linux-arm-kernel, linux-kernel, linux-imx, Fabio Estevam,
	David Jander, Russell King

Starting with:

    bcf3440c6dd7 ("net: phy: micrel: add phy-mode support for the KSZ9031 PHY")

the micrel phy driver started respecting phy-mode for the KSZ9031 PHY.
At least with kernel v5.8 configuration provided by this fixup was
overwritten by the micrel driver.

This fixup was providing following configuration:

RX path: 2.58ns delay
    rx -0.42 (left shift) + rx_clk  +0.96ns (right shift) =
        1,38 + 1,2 internal RX delay = 2.58ns
TX path: 0.96ns delay
    tx (no delay) + tx_clk 0.96ns (right shift) = 0.96ns

This configuration is outside of the recommended RGMII clock skew delays
and about in the middle of: rgmii-idrx and rgmii-id

Since most embedded systems do not have enough place to introduce
significant clock skew, rgmii-id is the way to go.

In case this patch breaks network functionality on your system, build
kernel with enabled MICREL_PHY. If it is still not working then try
following device tree options:
1. Set (or change) phy-mode in DT to:
   phy-mode = "rgmii-id";
   This actives internal delay for both RX and TX.
1. Set (or change) phy-mode in DT to:
   phy-mode = "rgmii-idrx";
   This actives internal delay for RX only.
3. Use following DT properties:
   phy-mode = "rgmii";
   txen-skew-psec = <0>;
   rxdv-skew-psec = <0>;
   rxd0-skew-psec = <0>;
   rxd1-skew-psec = <0>;
   rxd2-skew-psec = <0>;
   rxd3-skew-psec = <0>;
   rxc-skew-psec = <1860>;
   txc-skew-psec = <1860>;
   This activates the internal delays for RX and TX, with the value as
   the fixup that is removed in this patch.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Acked-by: Philippe Schenker <philippe.schenker@toradex.com>
---
 arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
 arch/arm/mach-imx/mach-imx6q.c          | 23 -----------------------
 2 files changed, 1 insertion(+), 24 deletions(-)

diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
index fa2307d8ce86..c713ac03b3b9 100644
--- a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
+++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
@@ -112,7 +112,7 @@ flash: m25p80@0 {
 &fec {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_enet>;
-	phy-mode = "rgmii";
+	phy-mode = "rgmii-id";
 	phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
 	phy-supply = <&vgen2_1v2_eth>;
 	status = "okay";
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 703998ebb52e..78205f90da27 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -40,27 +40,6 @@ static int ksz9021rn_phy_fixup(struct phy_device *phydev)
 	return 0;
 }
 
-static void mmd_write_reg(struct phy_device *dev, int device, int reg, int val)
-{
-	phy_write(dev, 0x0d, device);
-	phy_write(dev, 0x0e, reg);
-	phy_write(dev, 0x0d, (1 << 14) | device);
-	phy_write(dev, 0x0e, val);
-}
-
-static int ksz9031rn_phy_fixup(struct phy_device *dev)
-{
-	/*
-	 * min rx data delay, max rx/tx clock delay,
-	 * min rx/tx control delay
-	 */
-	mmd_write_reg(dev, 2, 4, 0);
-	mmd_write_reg(dev, 2, 5, 0);
-	mmd_write_reg(dev, 2, 8, 0x003ff);
-
-	return 0;
-}
-
 /*
  * fixup for PLX PEX8909 bridge to configure GPIO1-7 as output High
  * as they are used for slots1-7 PERST#
@@ -152,8 +131,6 @@ static void __init imx6q_enet_phy_init(void)
 	if (IS_BUILTIN(CONFIG_PHYLIB)) {
 		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
 				ksz9021rn_phy_fixup);
-		phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK,
-				ksz9031rn_phy_fixup);
 		phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffef,
 				ar8031_phy_fixup);
 		phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef,
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 2/7] ARM: imx6q: remove TX clock delay of ar8031_phy_fixup()
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031 Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 3/7] ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup() Oleksij Rempel
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

In case the at803x PHY driver is activated in the kernel, the TX clock
fixup is overwritten by at803x_config_init(), in this case no additional
device tree changes are needed.

If this patch breaks your system, please enable AT803X_PHY driver and
add the following device tree property to the PHY node:

    phy-mode = "rgmii-txid";

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/mach-imx/mach-imx6q.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 78205f90da27..1abefe7e1c3a 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -82,12 +82,6 @@ static int ar8031_phy_fixup(struct phy_device *dev)
 	val |= 0x18;
 	phy_write(dev, 0xe, val);
 
-	/* introduce tx clock delay */
-	phy_write(dev, 0x1d, 0x5);
-	val = phy_read(dev, 0x1e);
-	val |= 0x0100;
-	phy_write(dev, 0x1e, val);
-
 	return 0;
 }
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 3/7] ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup()
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031 Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 2/7] ARM: imx6q: remove TX clock delay of ar8031_phy_fixup() Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 4/7] ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035 PHYs Oleksij Rempel
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

The at803x_resume() handler in the at803x.c PHY driver powers up the PHY
properly, so remove this fixup.

If this patch breaks your system, enable the AT803X_PHY driver.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/mach-imx/mach-imx6q.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 1abefe7e1c3a..4c840e116003 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -110,11 +110,6 @@ static int ar8035_phy_fixup(struct phy_device *dev)
 	 */
 	ar8031_phy_fixup(dev);
 
-	/*check phy power*/
-	val = phy_read(dev, 0x0);
-	if (val & BMCR_PDOWN)
-		phy_write(dev, 0x0, val & ~BMCR_PDOWN);
-
 	return 0;
 }
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 4/7] ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035 PHYs
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (2 preceding siblings ...)
  2021-03-09 11:26 ` [PATCH v2 3/7] ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup() Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 5/7] ARM: imx6q: remove Atheros AR8035 SmartEEE fixup Oleksij Rempel
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

This configuration should be set over device tree.

If this patch breaks network functionality on your system, enable the
AT803X_PHY driver and set following device tree property in the PHY
node:

    qca,clk-out-frequency = <125000000>;

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/boot/dts/imx6dl-riotboard.dts |  2 ++
 arch/arm/mach-imx/mach-imx6q.c         | 30 --------------------------
 2 files changed, 2 insertions(+), 30 deletions(-)

diff --git a/arch/arm/boot/dts/imx6dl-riotboard.dts b/arch/arm/boot/dts/imx6dl-riotboard.dts
index 065d3ab0f50a..e7d9bfbfd0e4 100644
--- a/arch/arm/boot/dts/imx6dl-riotboard.dts
+++ b/arch/arm/boot/dts/imx6dl-riotboard.dts
@@ -106,6 +106,8 @@ rgmii_phy: ethernet-phy@4 {
 			reset-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>;
 			reset-assert-us = <10000>;
 			reset-deassert-us = <1000>;
+			qca,smarteee-tw-us-1g = <24>;
+			qca,clk-out-frequency = <125000000>;
 		};
 	};
 };
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 4c840e116003..d12b571a61ac 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -68,25 +68,6 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8609, ventana_pciesw_early_fixup);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8606, ventana_pciesw_early_fixup);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8604, ventana_pciesw_early_fixup);
 
-static int ar8031_phy_fixup(struct phy_device *dev)
-{
-	u16 val;
-
-	/* To enable AR8031 output a 125MHz clk from CLK_25M */
-	phy_write(dev, 0xd, 0x7);
-	phy_write(dev, 0xe, 0x8016);
-	phy_write(dev, 0xd, 0x4007);
-
-	val = phy_read(dev, 0xe);
-	val &= 0xffe3;
-	val |= 0x18;
-	phy_write(dev, 0xe, val);
-
-	return 0;
-}
-
-#define PHY_ID_AR8031	0x004dd074
-
 static int ar8035_phy_fixup(struct phy_device *dev)
 {
 	u16 val;
@@ -101,15 +82,6 @@ static int ar8035_phy_fixup(struct phy_device *dev)
 	val = phy_read(dev, 0xe);
 	phy_write(dev, 0xe, val & ~(1 << 8));
 
-	/*
-	 * Enable 125MHz clock from CLK_25M on the AR8031.  This
-	 * is fed in to the IMX6 on the ENET_REF_CLK (V22) pad.
-	 * Also, introduce a tx clock delay.
-	 *
-	 * This is the same as is the AR8031 fixup.
-	 */
-	ar8031_phy_fixup(dev);
-
 	return 0;
 }
 
@@ -120,8 +92,6 @@ static void __init imx6q_enet_phy_init(void)
 	if (IS_BUILTIN(CONFIG_PHYLIB)) {
 		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
 				ksz9021rn_phy_fixup);
-		phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffef,
-				ar8031_phy_fixup);
 		phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef,
 				ar8035_phy_fixup);
 	}
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 5/7] ARM: imx6q: remove Atheros AR8035 SmartEEE fixup
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (3 preceding siblings ...)
  2021-03-09 11:26 ` [PATCH v2 4/7] ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035 PHYs Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 6/7] ARM: imx6sx: remove Atheros AR8031 PHY fixup Oleksij Rempel
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

This fixup removes the Lpi_en bit.

If this patch breaks functionality of your board, use following device
tree properties: qca,smarteee-tw-us-1g and qca,smarteee-tw-us-100m.

For example:

	ethernet-phy@X {
		reg = <0xX>;
		qca,smarteee-tw-us-1g = <24>;
		....
	};

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/mach-imx/mach-imx6q.c | 21 ---------------------
 1 file changed, 21 deletions(-)

diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index d12b571a61ac..c9d7c29d95e1 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -68,32 +68,11 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8609, ventana_pciesw_early_fixup);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8606, ventana_pciesw_early_fixup);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8604, ventana_pciesw_early_fixup);
 
-static int ar8035_phy_fixup(struct phy_device *dev)
-{
-	u16 val;
-
-	/* Ar803x phy SmartEEE feature cause link status generates glitch,
-	 * which cause ethernet link down/up issue, so disable SmartEEE
-	 */
-	phy_write(dev, 0xd, 0x3);
-	phy_write(dev, 0xe, 0x805d);
-	phy_write(dev, 0xd, 0x4003);
-
-	val = phy_read(dev, 0xe);
-	phy_write(dev, 0xe, val & ~(1 << 8));
-
-	return 0;
-}
-
-#define PHY_ID_AR8035 0x004dd072
-
 static void __init imx6q_enet_phy_init(void)
 {
 	if (IS_BUILTIN(CONFIG_PHYLIB)) {
 		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
 				ksz9021rn_phy_fixup);
-		phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef,
-				ar8035_phy_fixup);
 	}
 }
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 6/7] ARM: imx6sx: remove Atheros AR8031 PHY fixup
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (4 preceding siblings ...)
  2021-03-09 11:26 ` [PATCH v2 5/7] ARM: imx6q: remove Atheros AR8035 SmartEEE fixup Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-09 11:26 ` [PATCH v2 7/7] ARM: imx7d: " Oleksij Rempel
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

If this patch breaks your system, enable AT803X_PHY driver and add a PHY
node to the board device tree:

	phy-connection-type = "rgmii-txid"; (or rgmii-id)
	ethernet-phy@X {
		reg = <0xX>;

		qca,clk-out-frequency = <125000000>;

		vddio-supply = <&vddh>;

		vddio: vddio-regulator {
			regulator-name = "VDDIO";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vddh: vddh-regulator {
			regulator-name = "VDDH";
		};
	};

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/mach-imx/mach-imx6sx.c | 26 --------------------------
 1 file changed, 26 deletions(-)

diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c
index 781e2a94fdd7..e65ed5218f53 100644
--- a/arch/arm/mach-imx/mach-imx6sx.c
+++ b/arch/arm/mach-imx/mach-imx6sx.c
@@ -15,31 +15,6 @@
 #include "common.h"
 #include "cpuidle.h"
 
-static int ar8031_phy_fixup(struct phy_device *dev)
-{
-	u16 val;
-
-	/* Set RGMII IO voltage to 1.8V */
-	phy_write(dev, 0x1d, 0x1f);
-	phy_write(dev, 0x1e, 0x8);
-
-	/* introduce tx clock delay */
-	phy_write(dev, 0x1d, 0x5);
-	val = phy_read(dev, 0x1e);
-	val |= 0x0100;
-	phy_write(dev, 0x1e, val);
-
-	return 0;
-}
-
-#define PHY_ID_AR8031   0x004dd074
-static void __init imx6sx_enet_phy_init(void)
-{
-	if (IS_BUILTIN(CONFIG_PHYLIB))
-		phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff,
-					   ar8031_phy_fixup);
-}
-
 static void __init imx6sx_enet_clk_sel(void)
 {
 	struct regmap *gpr;
@@ -57,7 +32,6 @@ static void __init imx6sx_enet_clk_sel(void)
 
 static inline void imx6sx_enet_init(void)
 {
-	imx6sx_enet_phy_init();
 	imx6sx_enet_clk_sel();
 }
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 7/7] ARM: imx7d: remove Atheros AR8031 PHY fixup
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (5 preceding siblings ...)
  2021-03-09 11:26 ` [PATCH v2 6/7] ARM: imx6sx: remove Atheros AR8031 PHY fixup Oleksij Rempel
@ 2021-03-09 11:26 ` Oleksij Rempel
  2021-03-24  5:54 ` [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-09 11:26 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: Oleksij Rempel, kernel, netdev, linux-arm-kernel, linux-kernel,
	linux-imx, Fabio Estevam, David Jander, Russell King,
	Philippe Schenker

This fixup configures the IO voltage and disables the SmartEEE
functionality.

If this patch breaks your system, enable AT803X_PHY driver and configure
the PHY by the device tree:

	phy-connection-type = "rgmii-id";
	ethernet-phy@X {
		reg = <0xX>;

		qca,smarteee-tw-us-1g = <24>;

		vddio-supply = <&vddh>;

		vddio: vddio-regulator {
			regulator-name = "VDDIO";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vddh: vddh-regulator {
			regulator-name = "VDDH";
		};
	};

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 arch/arm/mach-imx/mach-imx7d.c | 22 ----------------------
 1 file changed, 22 deletions(-)

diff --git a/arch/arm/mach-imx/mach-imx7d.c b/arch/arm/mach-imx/mach-imx7d.c
index 879c35929a13..ccf64ddf8b7e 100644
--- a/arch/arm/mach-imx/mach-imx7d.c
+++ b/arch/arm/mach-imx/mach-imx7d.c
@@ -14,25 +14,6 @@
 
 #include "common.h"
 
-static int ar8031_phy_fixup(struct phy_device *dev)
-{
-	u16 val;
-
-	/* Set RGMII IO voltage to 1.8V */
-	phy_write(dev, 0x1d, 0x1f);
-	phy_write(dev, 0x1e, 0x8);
-
-	/* disable phy AR8031 SmartEEE function. */
-	phy_write(dev, 0xd, 0x3);
-	phy_write(dev, 0xe, 0x805d);
-	phy_write(dev, 0xd, 0x4003);
-	val = phy_read(dev, 0xe);
-	val &= ~(0x1 << 8);
-	phy_write(dev, 0xe, val);
-
-	return 0;
-}
-
 static int bcm54220_phy_fixup(struct phy_device *dev)
 {
 	/* enable RXC skew select RGMII copper mode */
@@ -44,14 +25,11 @@ static int bcm54220_phy_fixup(struct phy_device *dev)
 	return 0;
 }
 
-#define PHY_ID_AR8031	0x004dd074
 #define PHY_ID_BCM54220	0x600d8589
 
 static void __init imx7d_enet_phy_init(void)
 {
 	if (IS_BUILTIN(CONFIG_PHYLIB)) {
-		phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff,
-					   ar8031_phy_fixup);
 		phy_register_fixup_for_uid(PHY_ID_BCM54220, 0xffffffff,
 					   bcm54220_phy_fixup);
 	}
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (6 preceding siblings ...)
  2021-03-09 11:26 ` [PATCH v2 7/7] ARM: imx7d: " Oleksij Rempel
@ 2021-03-24  5:54 ` Oleksij Rempel
  2021-03-29  0:44   ` Shawn Guo
  2021-03-30 14:00 ` Fabio Estevam
  2021-04-13 10:00 ` Lucas Stach
  9 siblings, 1 reply; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-24  5:54 UTC (permalink / raw)
  To: Shawn Guo, Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit
  Cc: kernel, netdev, linux-arm-kernel, linux-kernel, linux-imx,
	Fabio Estevam, David Jander, Russell King, Philippe Schenker

Hi Shawn,

ping, do this patches need some ACK from some one?

Regards,
Oleksij

On Tue, Mar 09, 2021 at 12:26:08PM +0100, Oleksij Rempel wrote:
> changes v2:
> - rebase against latest kernel
> - fix networking on RIoTBoard
> 
> This patch series tries to remove most of the imx6 and imx7 board
> specific PHY configuration via fixup, as this breaks the PHYs when
> connected to switch chips or USB Ethernet MACs.
> 
> Each patch has the possibility to break boards, but contains a
> recommendation to fix the problem in a more portable and future-proof
> way.
> 
> regards,
> Oleksij
> 
> Oleksij Rempel (7):
>   ARM: imx6q: remove PHY fixup for KSZ9031
>   ARM: imx6q: remove TX clock delay of ar8031_phy_fixup()
>   ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup()
>   ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035
>     PHYs
>   ARM: imx6q: remove Atheros AR8035 SmartEEE fixup
>   ARM: imx6sx: remove Atheros AR8031 PHY fixup
>   ARM: imx7d: remove Atheros AR8031 PHY fixup
> 
>  arch/arm/boot/dts/imx6dl-riotboard.dts  |  2 +
>  arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
>  arch/arm/mach-imx/mach-imx6q.c          | 85 -------------------------
>  arch/arm/mach-imx/mach-imx6sx.c         | 26 --------
>  arch/arm/mach-imx/mach-imx7d.c          | 22 -------
>  5 files changed, 3 insertions(+), 134 deletions(-)
> 
> -- 
> 2.29.2
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-24  5:54 ` [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
@ 2021-03-29  0:44   ` Shawn Guo
  2021-03-29  8:13     ` Oleksij Rempel
  0 siblings, 1 reply; 19+ messages in thread
From: Shawn Guo @ 2021-03-29  0:44 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit,
	kernel, netdev, linux-arm-kernel, linux-kernel, linux-imx,
	Fabio Estevam, David Jander, Russell King, Philippe Schenker

On Wed, Mar 24, 2021 at 06:54:24AM +0100, Oleksij Rempel wrote:
> Hi Shawn,
> 
> ping, do this patches need some ACK from some one?

As this will break existing DTBs, I need more ACKs from people to see
the consensus that this is the right thing to do.

Shawn

> 
> Regards,
> Oleksij
> 
> On Tue, Mar 09, 2021 at 12:26:08PM +0100, Oleksij Rempel wrote:
> > changes v2:
> > - rebase against latest kernel
> > - fix networking on RIoTBoard
> > 
> > This patch series tries to remove most of the imx6 and imx7 board
> > specific PHY configuration via fixup, as this breaks the PHYs when
> > connected to switch chips or USB Ethernet MACs.
> > 
> > Each patch has the possibility to break boards, but contains a
> > recommendation to fix the problem in a more portable and future-proof
> > way.
> > 
> > regards,
> > Oleksij
> > 
> > Oleksij Rempel (7):
> >   ARM: imx6q: remove PHY fixup for KSZ9031
> >   ARM: imx6q: remove TX clock delay of ar8031_phy_fixup()
> >   ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup()
> >   ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035
> >     PHYs
> >   ARM: imx6q: remove Atheros AR8035 SmartEEE fixup
> >   ARM: imx6sx: remove Atheros AR8031 PHY fixup
> >   ARM: imx7d: remove Atheros AR8031 PHY fixup
> > 
> >  arch/arm/boot/dts/imx6dl-riotboard.dts  |  2 +
> >  arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
> >  arch/arm/mach-imx/mach-imx6q.c          | 85 -------------------------
> >  arch/arm/mach-imx/mach-imx6sx.c         | 26 --------
> >  arch/arm/mach-imx/mach-imx7d.c          | 22 -------
> >  5 files changed, 3 insertions(+), 134 deletions(-)
> > 
> > -- 
> > 2.29.2
> > 
> > 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-29  0:44   ` Shawn Guo
@ 2021-03-29  8:13     ` Oleksij Rempel
  0 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-03-29  8:13 UTC (permalink / raw)
  To: Shawn Guo
  Cc: Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit,
	kernel, netdev, linux-arm-kernel, linux-kernel, linux-imx,
	Fabio Estevam, David Jander, Russell King, Philippe Schenker

On Mon, Mar 29, 2021 at 08:44:59AM +0800, Shawn Guo wrote:
> On Wed, Mar 24, 2021 at 06:54:24AM +0100, Oleksij Rempel wrote:
> > Hi Shawn,
> > 
> > ping, do this patches need some ACK from some one?
> 
> As this will break existing DTBs, I need more ACKs from people to see
> the consensus that this is the right thing to do.

Do you need ACKs from some concrete people?

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (7 preceding siblings ...)
  2021-03-24  5:54 ` [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
@ 2021-03-30 14:00 ` Fabio Estevam
  2021-03-30 14:30   ` Andrew Lunn
  2021-04-13 10:00 ` Lucas Stach
  9 siblings, 1 reply; 19+ messages in thread
From: Fabio Estevam @ 2021-03-30 14:00 UTC (permalink / raw)
  To: Oleksij Rempel, Andrew Lunn
  Cc: Shawn Guo, Sascha Hauer, Florian Fainelli, Heiner Kallweit,
	Sascha Hauer, netdev,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	linux-kernel, NXP Linux Team, David Jander, Russell King,
	Philippe Schenker

Hi Oleksij,

On Tue, Mar 9, 2021 at 8:26 AM Oleksij Rempel <o.rempel@pengutronix.de> wrote:
>
> changes v2:
> - rebase against latest kernel
> - fix networking on RIoTBoard
>
> This patch series tries to remove most of the imx6 and imx7 board
> specific PHY configuration via fixup, as this breaks the PHYs when
> connected to switch chips or USB Ethernet MACs.
>
> Each patch has the possibility to break boards, but contains a
> recommendation to fix the problem in a more portable and future-proof
> way.

I think this series moves us in the right direction, even with the
possibility to break old dtb's.

Reviewed-by: Fabio Estevam <festevam@gmail.com>

Andrew, what do you think?

Thanks

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-30 14:00 ` Fabio Estevam
@ 2021-03-30 14:30   ` Andrew Lunn
  2021-03-30 15:04     ` Fabio Estevam
  0 siblings, 1 reply; 19+ messages in thread
From: Andrew Lunn @ 2021-03-30 14:30 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: Oleksij Rempel, Shawn Guo, Sascha Hauer, Florian Fainelli,
	Heiner Kallweit, Sascha Hauer, netdev,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	linux-kernel, NXP Linux Team, David Jander, Russell King,
	Philippe Schenker

On Tue, Mar 30, 2021 at 11:00:52AM -0300, Fabio Estevam wrote:
> Hi Oleksij,
> 
> On Tue, Mar 9, 2021 at 8:26 AM Oleksij Rempel <o.rempel@pengutronix.de> wrote:
> >
> > changes v2:
> > - rebase against latest kernel
> > - fix networking on RIoTBoard
> >
> > This patch series tries to remove most of the imx6 and imx7 board
> > specific PHY configuration via fixup, as this breaks the PHYs when
> > connected to switch chips or USB Ethernet MACs.
> >
> > Each patch has the possibility to break boards, but contains a
> > recommendation to fix the problem in a more portable and future-proof
> > way.
> 
> I think this series moves us in the right direction, even with the
> possibility to break old dtb's.
> 
> Reviewed-by: Fabio Estevam <festevam@gmail.com>
> 
> Andrew, what do you think?

Hi Fabio

I think it should be merged, and we fixup anything which does break.
We are probably at the point where more is broken by not merging it
than merging it.

  Andrew

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-30 14:30   ` Andrew Lunn
@ 2021-03-30 15:04     ` Fabio Estevam
  2021-04-13  9:43       ` Oleksij Rempel
  0 siblings, 1 reply; 19+ messages in thread
From: Fabio Estevam @ 2021-03-30 15:04 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Oleksij Rempel, Shawn Guo, Sascha Hauer, Florian Fainelli,
	Heiner Kallweit, Sascha Hauer, netdev,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	linux-kernel, NXP Linux Team, David Jander, Russell King,
	Philippe Schenker

Hi Andrew,

On Tue, Mar 30, 2021 at 11:30 AM Andrew Lunn <andrew@lunn.ch> wrote:

> Hi Fabio
>
> I think it should be merged, and we fixup anything which does break.
> We are probably at the point where more is broken by not merging it
> than merging it.

Thanks for your feedback. I agree.

Shawn wants to collect some Acked-by for this series.

Could you please give your Acked-by for this series?

Thanks

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-30 15:04     ` Fabio Estevam
@ 2021-04-13  9:43       ` Oleksij Rempel
  0 siblings, 0 replies; 19+ messages in thread
From: Oleksij Rempel @ 2021-04-13  9:43 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: Andrew Lunn, Shawn Guo, Sascha Hauer, Florian Fainelli,
	Heiner Kallweit, Sascha Hauer, netdev,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	linux-kernel, NXP Linux Team, David Jander, Russell King,
	Philippe Schenker

Hello,

On Tue, Mar 30, 2021 at 12:04:50PM -0300, Fabio Estevam wrote:
> Hi Andrew,
> 
> On Tue, Mar 30, 2021 at 11:30 AM Andrew Lunn <andrew@lunn.ch> wrote:
> 
> > Hi Fabio
> >
> > I think it should be merged, and we fixup anything which does break.
> > We are probably at the point where more is broken by not merging it
> > than merging it.
> 
> Thanks for your feedback. I agree.
> 
> Shawn wants to collect some Acked-by for this series.
> 
> Could you please give your Acked-by for this series?

Andrew, can you please add you ACK?

Shawn will it be enough or you need more ACKs?

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
                   ` (8 preceding siblings ...)
  2021-03-30 14:00 ` Fabio Estevam
@ 2021-04-13 10:00 ` Lucas Stach
  2021-04-13 10:51   ` Russell King - ARM Linux admin
  9 siblings, 1 reply; 19+ messages in thread
From: Lucas Stach @ 2021-04-13 10:00 UTC (permalink / raw)
  To: Oleksij Rempel, Shawn Guo, Sascha Hauer, Andrew Lunn,
	Florian Fainelli, Heiner Kallweit
  Cc: Philippe Schenker, netdev, linux-kernel, Russell King, linux-imx,
	kernel, David Jander, Fabio Estevam, linux-arm-kernel

Hi all,

Am Dienstag, dem 09.03.2021 um 12:26 +0100 schrieb Oleksij Rempel:
> changes v2:
> - rebase against latest kernel
> - fix networking on RIoTBoard
> 
> This patch series tries to remove most of the imx6 and imx7 board
> specific PHY configuration via fixup, as this breaks the PHYs when
> connected to switch chips or USB Ethernet MACs.
> 
> Each patch has the possibility to break boards, but contains a
> recommendation to fix the problem in a more portable and future-proof
> way.

I agree with the opinion that those PHY fixups introduce more harm than
good. Essentially they are pushing board specific configuration values
into the PHY, without any checks that the fixup is even running on the
specific board it was targeted at.

While there is a real chance to break some out of tree boards or
incomplete configs I think that's something we can accept here. If
someone makes a case why they can absolutely not fixup their DT or
kernel config we could even bring back some of those fixups with a
proper board compatible check to avoid mashing things up for other
boards with the same PHY. I guess the only realistic way to learn if
someone can make such a case is to apply this series and look for any
fallout.

So for what it is worth:
Acked-by: Lucas Stach <l.stach@pengutronix.de>

> regards,
> Oleksij
> 
> Oleksij Rempel (7):
>   ARM: imx6q: remove PHY fixup for KSZ9031
>   ARM: imx6q: remove TX clock delay of ar8031_phy_fixup()
>   ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup()
>   ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035
>     PHYs
>   ARM: imx6q: remove Atheros AR8035 SmartEEE fixup
>   ARM: imx6sx: remove Atheros AR8031 PHY fixup
>   ARM: imx7d: remove Atheros AR8031 PHY fixup
> 
>  arch/arm/boot/dts/imx6dl-riotboard.dts  |  2 +
>  arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
>  arch/arm/mach-imx/mach-imx6q.c          | 85 -------------------------
>  arch/arm/mach-imx/mach-imx6sx.c         | 26 --------
>  arch/arm/mach-imx/mach-imx7d.c          | 22 -------
>  5 files changed, 3 insertions(+), 134 deletions(-)
> 



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-04-13 10:00 ` Lucas Stach
@ 2021-04-13 10:51   ` Russell King - ARM Linux admin
  2021-04-13 11:10     ` Lucas Stach
  0 siblings, 1 reply; 19+ messages in thread
From: Russell King - ARM Linux admin @ 2021-04-13 10:51 UTC (permalink / raw)
  To: Lucas Stach
  Cc: Oleksij Rempel, Shawn Guo, Sascha Hauer, Andrew Lunn,
	Florian Fainelli, Heiner Kallweit, Philippe Schenker, netdev,
	linux-kernel, linux-imx, kernel, David Jander, Fabio Estevam,
	linux-arm-kernel

On Tue, Apr 13, 2021 at 12:00:45PM +0200, Lucas Stach wrote:
> I agree with the opinion that those PHY fixups introduce more harm than
> good. Essentially they are pushing board specific configuration values
> into the PHY, without any checks that the fixup is even running on the
> specific board it was targeted at.

Yes and no. The problem is, that's an easy statement to make when one
doesn't understand what they're all doing.

Some are "board specific" in that the normal setup for e.g. iMX6 would
be to enable clock output from the AR8035 PHY and feed that into the
iMX6 - as far as I'm aware, that's the only working configuration for
that SoC and PHY. However, it's also true that this fixup should not
be applied unconditionally.

Then there's SmartEEE - it has been found that the PHY defaults for
this lead to link drops independent of the board and SoC that it is
connected to. It seems that the PHY is essentially broken - it powers
up with SmartEEE enabled, and when connected to another SmartEEE
supporting device, it seems guaranteed that it will result in link
drops in its default configuration.

Freescale's approach has apparently been to unconditionally disable
SmartEEE for all their platforms because of this. With a bit of
research however (as has been done by Jon and myself) we've found
that increasing the Tw parameter for 1G connections results in a
much more stable link.

So, just saying that these are bad without actually understanding what
they are doing is _also_ bad.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 0/7] remove different PHY fixups
  2021-04-13 10:51   ` Russell King - ARM Linux admin
@ 2021-04-13 11:10     ` Lucas Stach
  0 siblings, 0 replies; 19+ messages in thread
From: Lucas Stach @ 2021-04-13 11:10 UTC (permalink / raw)
  To: Russell King - ARM Linux admin
  Cc: Oleksij Rempel, Shawn Guo, Sascha Hauer, Andrew Lunn,
	Florian Fainelli, Heiner Kallweit, Philippe Schenker, netdev,
	linux-kernel, linux-imx, kernel, David Jander, Fabio Estevam,
	linux-arm-kernel

Hi Russell,

sorry for the noise of this arriving in your inbox twice. Apparently I
messed up and replied in private in my last mail.

Am Dienstag, dem 13.04.2021 um 11:51 +0100 schrieb Russell King - ARM Linux admin:
> On Tue, Apr 13, 2021 at 12:00:45PM +0200, Lucas Stach wrote:
> > I agree with the opinion that those PHY fixups introduce more harm than
> > good. Essentially they are pushing board specific configuration values
> > into the PHY, without any checks that the fixup is even running on the
> > specific board it was targeted at.
> 
> Yes and no. The problem is, that's an easy statement to make when one
> doesn't understand what they're all doing.
> 
> Some are "board specific" in that the normal setup for e.g. iMX6 would
> be to enable clock output from the AR8035 PHY and feed that into the
> iMX6 - as far as I'm aware, that's the only working configuration for
> that SoC and PHY. However, it's also true that this fixup should not
> be applied unconditionally.
> 
> Then there's SmartEEE - it has been found that the PHY defaults for
> this lead to link drops independent of the board and SoC that it is
> connected to. It seems that the PHY is essentially broken - it powers
> up with SmartEEE enabled, and when connected to another SmartEEE
> supporting device, it seems guaranteed that it will result in link
> drops in its default configuration.
> 
> Freescale's approach has apparently been to unconditionally disable
> SmartEEE for all their platforms because of this. With a bit of
> research however (as has been done by Jon and myself) we've found
> that increasing the Tw parameter for 1G connections results in a
> much more stable link.
> 
> So, just saying that these are bad without actually understanding what
> they are doing is _also_ bad.

I'm not saying the fixups are bad per se. What I'm saying is that they
are inherently board specific and the right way to apply them is either
via DT properties, or if absolutely necessary via a fixup that at least
checks that it is running on the specific board it was targeted at.

While SmartEEE disabling will cause no big harm, aside from a bit more
power consumption, a wrong clock configuration can cause major
confusion. Especially if the configuration in DT and values put into
the PHY via fixups differ from each other.

Regards,
Lucas



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031
  2021-03-09 11:26 ` [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031 Oleksij Rempel
@ 2021-05-11  1:49   ` Shawn Guo
  0 siblings, 0 replies; 19+ messages in thread
From: Shawn Guo @ 2021-05-11  1:49 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Sascha Hauer, Andrew Lunn, Florian Fainelli, Heiner Kallweit,
	Philippe Schenker, kernel, netdev, linux-arm-kernel,
	linux-kernel, linux-imx, Fabio Estevam, David Jander,
	Russell King

On Tue, Mar 09, 2021 at 12:26:09PM +0100, Oleksij Rempel wrote:
> Starting with:
> 
>     bcf3440c6dd7 ("net: phy: micrel: add phy-mode support for the KSZ9031 PHY")
> 
> the micrel phy driver started respecting phy-mode for the KSZ9031 PHY.
> At least with kernel v5.8 configuration provided by this fixup was
> overwritten by the micrel driver.
> 
> This fixup was providing following configuration:
> 
> RX path: 2.58ns delay
>     rx -0.42 (left shift) + rx_clk  +0.96ns (right shift) =
>         1,38 + 1,2 internal RX delay = 2.58ns
> TX path: 0.96ns delay
>     tx (no delay) + tx_clk 0.96ns (right shift) = 0.96ns
> 
> This configuration is outside of the recommended RGMII clock skew delays
> and about in the middle of: rgmii-idrx and rgmii-id
> 
> Since most embedded systems do not have enough place to introduce
> significant clock skew, rgmii-id is the way to go.
> 
> In case this patch breaks network functionality on your system, build
> kernel with enabled MICREL_PHY. If it is still not working then try
> following device tree options:
> 1. Set (or change) phy-mode in DT to:
>    phy-mode = "rgmii-id";
>    This actives internal delay for both RX and TX.
> 1. Set (or change) phy-mode in DT to:
>    phy-mode = "rgmii-idrx";
>    This actives internal delay for RX only.
> 3. Use following DT properties:
>    phy-mode = "rgmii";
>    txen-skew-psec = <0>;
>    rxdv-skew-psec = <0>;
>    rxd0-skew-psec = <0>;
>    rxd1-skew-psec = <0>;
>    rxd2-skew-psec = <0>;
>    rxd3-skew-psec = <0>;
>    rxc-skew-psec = <1860>;
>    txc-skew-psec = <1860>;
>    This activates the internal delays for RX and TX, with the value as
>    the fixup that is removed in this patch.
> 
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> Acked-by: Philippe Schenker <philippe.schenker@toradex.com>
> ---
>  arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts |  2 +-
>  arch/arm/mach-imx/mach-imx6q.c          | 23 -----------------------

I have different branch for DTS and mach-imx change.  Please split the
changes.

Shawn

>  2 files changed, 1 insertion(+), 24 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
> index fa2307d8ce86..c713ac03b3b9 100644
> --- a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
> +++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
> @@ -112,7 +112,7 @@ flash: m25p80@0 {
>  &fec {
>  	pinctrl-names = "default";
>  	pinctrl-0 = <&pinctrl_enet>;
> -	phy-mode = "rgmii";
> +	phy-mode = "rgmii-id";
>  	phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
>  	phy-supply = <&vgen2_1v2_eth>;
>  	status = "okay";
> diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
> index 703998ebb52e..78205f90da27 100644
> --- a/arch/arm/mach-imx/mach-imx6q.c
> +++ b/arch/arm/mach-imx/mach-imx6q.c
> @@ -40,27 +40,6 @@ static int ksz9021rn_phy_fixup(struct phy_device *phydev)
>  	return 0;
>  }
>  
> -static void mmd_write_reg(struct phy_device *dev, int device, int reg, int val)
> -{
> -	phy_write(dev, 0x0d, device);
> -	phy_write(dev, 0x0e, reg);
> -	phy_write(dev, 0x0d, (1 << 14) | device);
> -	phy_write(dev, 0x0e, val);
> -}
> -
> -static int ksz9031rn_phy_fixup(struct phy_device *dev)
> -{
> -	/*
> -	 * min rx data delay, max rx/tx clock delay,
> -	 * min rx/tx control delay
> -	 */
> -	mmd_write_reg(dev, 2, 4, 0);
> -	mmd_write_reg(dev, 2, 5, 0);
> -	mmd_write_reg(dev, 2, 8, 0x003ff);
> -
> -	return 0;
> -}
> -
>  /*
>   * fixup for PLX PEX8909 bridge to configure GPIO1-7 as output High
>   * as they are used for slots1-7 PERST#
> @@ -152,8 +131,6 @@ static void __init imx6q_enet_phy_init(void)
>  	if (IS_BUILTIN(CONFIG_PHYLIB)) {
>  		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
>  				ksz9021rn_phy_fixup);
> -		phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK,
> -				ksz9031rn_phy_fixup);
>  		phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffef,
>  				ar8031_phy_fixup);
>  		phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef,
> -- 
> 2.29.2
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2021-05-11  1:49 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-09 11:26 [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 1/7] ARM: imx6q: remove PHY fixup for KSZ9031 Oleksij Rempel
2021-05-11  1:49   ` Shawn Guo
2021-03-09 11:26 ` [PATCH v2 2/7] ARM: imx6q: remove TX clock delay of ar8031_phy_fixup() Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 3/7] ARM: imx6q: remove hand crafted PHY power up in ar8035_phy_fixup() Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 4/7] ARM: imx6q: remove clk-out fixup for the Atheros AR8031 and AR8035 PHYs Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 5/7] ARM: imx6q: remove Atheros AR8035 SmartEEE fixup Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 6/7] ARM: imx6sx: remove Atheros AR8031 PHY fixup Oleksij Rempel
2021-03-09 11:26 ` [PATCH v2 7/7] ARM: imx7d: " Oleksij Rempel
2021-03-24  5:54 ` [PATCH v2 0/7] remove different PHY fixups Oleksij Rempel
2021-03-29  0:44   ` Shawn Guo
2021-03-29  8:13     ` Oleksij Rempel
2021-03-30 14:00 ` Fabio Estevam
2021-03-30 14:30   ` Andrew Lunn
2021-03-30 15:04     ` Fabio Estevam
2021-04-13  9:43       ` Oleksij Rempel
2021-04-13 10:00 ` Lucas Stach
2021-04-13 10:51   ` Russell King - ARM Linux admin
2021-04-13 11:10     ` Lucas Stach

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).