netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885
@ 2022-01-18 21:50 Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 1/4] " Tobias Waldekranz
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-18 21:50 UTC (permalink / raw)
  To: davem, kuba; +Cc: netdev

The individual messages mostly speak for themselves.

It is very possible that there are more chips out there that are
impacted by this, but I only have access to the errata document for
the T1024 family, so I've limited the DT changes to the exact FMan
version used in that device. Hopefully someone from NXP can supply a
follow-up if need be.

The final commit is an unrelated fix that was brought to my attention
by sparse.

v1 -> v2:
 - Added Fixed tags to 1/4 and 3/4

Tobias Waldekranz (4):
  net/fsl: xgmac_mdio: Add workaround for erratum A-009885
  dt-bindings: net: Document fsl,erratum-a009885
  powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses
  net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module

 .../devicetree/bindings/net/fsl-fman.txt      |  9 ++++++
 arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi |  2 ++
 drivers/net/ethernet/freescale/xgmac_mdio.c   | 28 ++++++++++++++-----
 3 files changed, 32 insertions(+), 7 deletions(-)

-- 
2.25.1


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

* [PATCH v2 net 1/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885
  2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
@ 2022-01-18 21:50 ` Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885 Tobias Waldekranz
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-18 21:50 UTC (permalink / raw)
  To: davem, kuba
  Cc: netdev, Andrew Lunn, Shruti Kanetkar, Emil Medve, Scott Wood,
	Igal Liberman, linux-kernel

Once an MDIO read transaction is initiated, we must read back the data
register within 16 MDC cycles after the transaction completes. Outside
of this window, reads may return corrupt data.

Therefore, disable local interrupts in the critical section, to
maximize the probability that we can satisfy this requirement.

Fixes: d55ad2967d89 ("powerpc/mpc85xx: Create dts components for the FSL QorIQ DPAA FMan")
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
 drivers/net/ethernet/freescale/xgmac_mdio.c | 25 ++++++++++++++++-----
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index 5b8b9bcf41a2..bf566ac3195b 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -51,6 +51,7 @@ struct tgec_mdio_controller {
 struct mdio_fsl_priv {
 	struct	tgec_mdio_controller __iomem *mdio_base;
 	bool	is_little_endian;
+	bool	has_a009885;
 	bool	has_a011043;
 };
 
@@ -186,10 +187,10 @@ static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
 {
 	struct mdio_fsl_priv *priv = (struct mdio_fsl_priv *)bus->priv;
 	struct tgec_mdio_controller __iomem *regs = priv->mdio_base;
+	unsigned long flags;
 	uint16_t dev_addr;
 	uint32_t mdio_stat;
 	uint32_t mdio_ctl;
-	uint16_t value;
 	int ret;
 	bool endian = priv->is_little_endian;
 
@@ -221,12 +222,18 @@ static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
 			return ret;
 	}
 
+	if (priv->has_a009885)
+		/* Once the operation completes, i.e. MDIO_STAT_BSY clears, we
+		 * must read back the data register within 16 MDC cycles.
+		 */
+		local_irq_save(flags);
+
 	/* Initiate the read */
 	xgmac_write32(mdio_ctl | MDIO_CTL_READ, &regs->mdio_ctl, endian);
 
 	ret = xgmac_wait_until_done(&bus->dev, regs, endian);
 	if (ret)
-		return ret;
+		goto irq_restore;
 
 	/* Return all Fs if nothing was there */
 	if ((xgmac_read32(&regs->mdio_stat, endian) & MDIO_STAT_RD_ER) &&
@@ -234,13 +241,17 @@ static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
 		dev_dbg(&bus->dev,
 			"Error while reading PHY%d reg at %d.%hhu\n",
 			phy_id, dev_addr, regnum);
-		return 0xffff;
+		ret = 0xffff;
+	} else {
+		ret = xgmac_read32(&regs->mdio_data, endian) & 0xffff;
+		dev_dbg(&bus->dev, "read %04x\n", ret);
 	}
 
-	value = xgmac_read32(&regs->mdio_data, endian) & 0xffff;
-	dev_dbg(&bus->dev, "read %04x\n", value);
+irq_restore:
+	if (priv->has_a009885)
+		local_irq_restore(flags);
 
-	return value;
+	return ret;
 }
 
 static int xgmac_mdio_probe(struct platform_device *pdev)
@@ -287,6 +298,8 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 	priv->is_little_endian = device_property_read_bool(&pdev->dev,
 							   "little-endian");
 
+	priv->has_a009885 = device_property_read_bool(&pdev->dev,
+						      "fsl,erratum-a009885");
 	priv->has_a011043 = device_property_read_bool(&pdev->dev,
 						      "fsl,erratum-a011043");
 
-- 
2.25.1


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

* [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885
  2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 1/4] " Tobias Waldekranz
@ 2022-01-18 21:50 ` Tobias Waldekranz
  2022-01-21  2:08   ` Rob Herring
  2022-01-18 21:50 ` [PATCH v2 net 3/4] powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses Tobias Waldekranz
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-18 21:50 UTC (permalink / raw)
  To: davem, kuba
  Cc: netdev, Andrew Lunn, Madalin Bucur, Rob Herring, devicetree,
	linux-kernel

Update FMan binding documentation with the newly added workaround for
erratum A-009885.

Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
 Documentation/devicetree/bindings/net/fsl-fman.txt | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/fsl-fman.txt b/Documentation/devicetree/bindings/net/fsl-fman.txt
index c00fb0d22c7b..020337f3c05f 100644
--- a/Documentation/devicetree/bindings/net/fsl-fman.txt
+++ b/Documentation/devicetree/bindings/net/fsl-fman.txt
@@ -410,6 +410,15 @@ PROPERTIES
 		The settings and programming routines for internal/external
 		MDIO are different. Must be included for internal MDIO.
 
+- fsl,erratum-a009885
+		Usage: optional
+		Value type: <boolean>
+		Definition: Indicates the presence of the A009885
+		erratum describing that the contents of MDIO_DATA may
+		become corrupt unless it is read within 16 MDC cycles
+		of MDIO_CFG[BSY] being cleared, when performing an
+		MDIO read operation.
+
 - fsl,erratum-a011043
 		Usage: optional
 		Value type: <boolean>
-- 
2.25.1


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

* [PATCH v2 net 3/4] powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses
  2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 1/4] " Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885 Tobias Waldekranz
@ 2022-01-18 21:50 ` Tobias Waldekranz
  2022-01-18 21:50 ` [PATCH v2 net 4/4] net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module Tobias Waldekranz
  2022-01-19 16:30 ` [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 patchwork-bot+netdevbpf
  4 siblings, 0 replies; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-18 21:50 UTC (permalink / raw)
  To: davem, kuba
  Cc: netdev, Rob Herring, Michael Ellerman, Benjamin Herrenschmidt,
	Paul Mackerras, Shruti Kanetkar, Igal Liberman, Emil Medve,
	Scott Wood, devicetree, linuxppc-dev, linux-kernel

This block is used in (at least) T1024 and T1040, including their
variants like T1023 etc.

Fixes: d55ad2967d89 ("powerpc/mpc85xx: Create dts components for the FSL QorIQ DPAA FMan")
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
---
 arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi
index c90702b04a53..48e5cd61599c 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3l-0.dtsi
@@ -79,6 +79,7 @@ mdio0: mdio@fc000 {
 		#size-cells = <0>;
 		compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
 		reg = <0xfc000 0x1000>;
+		fsl,erratum-a009885;
 	};
 
 	xmdio0: mdio@fd000 {
@@ -86,6 +87,7 @@ xmdio0: mdio@fd000 {
 		#size-cells = <0>;
 		compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
 		reg = <0xfd000 0x1000>;
+		fsl,erratum-a009885;
 	};
 };
 
-- 
2.25.1


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

* [PATCH v2 net 4/4] net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module
  2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
                   ` (2 preceding siblings ...)
  2022-01-18 21:50 ` [PATCH v2 net 3/4] powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses Tobias Waldekranz
@ 2022-01-18 21:50 ` Tobias Waldekranz
  2022-01-19 16:30 ` [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 patchwork-bot+netdevbpf
  4 siblings, 0 replies; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-18 21:50 UTC (permalink / raw)
  To: davem, kuba; +Cc: netdev, Andrew Lunn, Timur Tabi, linux-kernel

As reported by sparse: In the remove path, the driver would attempt to
unmap its own priv pointer - instead of the io memory that it mapped
in probe.

Fixes: 9f35a7342cff ("net/fsl: introduce Freescale 10G MDIO driver")
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
 drivers/net/ethernet/freescale/xgmac_mdio.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index bf566ac3195b..266e562bd67a 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -331,9 +331,10 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 static int xgmac_mdio_remove(struct platform_device *pdev)
 {
 	struct mii_bus *bus = platform_get_drvdata(pdev);
+	struct mdio_fsl_priv *priv = bus->priv;
 
 	mdiobus_unregister(bus);
-	iounmap(bus->priv);
+	iounmap(priv->mdio_base);
 	mdiobus_free(bus);
 
 	return 0;
-- 
2.25.1


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

* Re: [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885
  2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
                   ` (3 preceding siblings ...)
  2022-01-18 21:50 ` [PATCH v2 net 4/4] net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module Tobias Waldekranz
@ 2022-01-19 16:30 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 8+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-01-19 16:30 UTC (permalink / raw)
  To: Tobias Waldekranz; +Cc: davem, kuba, netdev

Hello:

This series was applied to netdev/net.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Tue, 18 Jan 2022 22:50:49 +0100 you wrote:
> The individual messages mostly speak for themselves.
> 
> It is very possible that there are more chips out there that are
> impacted by this, but I only have access to the errata document for
> the T1024 family, so I've limited the DT changes to the exact FMan
> version used in that device. Hopefully someone from NXP can supply a
> follow-up if need be.
> 
> [...]

Here is the summary with links:
  - [v2,net,1/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885
    https://git.kernel.org/netdev/net/c/6198c7220197
  - [v2,net,2/4] dt-bindings: net: Document fsl,erratum-a009885
    https://git.kernel.org/netdev/net/c/ea11fc509ff2
  - [v2,net,3/4] powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses
    https://git.kernel.org/netdev/net/c/0d375d610fa9
  - [v2,net,4/4] net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module
    https://git.kernel.org/netdev/net/c/3f7c239c7844

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

* Re: [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885
  2022-01-18 21:50 ` [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885 Tobias Waldekranz
@ 2022-01-21  2:08   ` Rob Herring
  2022-01-21 12:30     ` Tobias Waldekranz
  0 siblings, 1 reply; 8+ messages in thread
From: Rob Herring @ 2022-01-21  2:08 UTC (permalink / raw)
  To: Tobias Waldekranz
  Cc: davem, kuba, netdev, Andrew Lunn, Madalin Bucur, devicetree,
	linux-kernel

On Tue, Jan 18, 2022 at 10:50:51PM +0100, Tobias Waldekranz wrote:
> Update FMan binding documentation with the newly added workaround for
> erratum A-009885.
> 
> Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> ---
>  Documentation/devicetree/bindings/net/fsl-fman.txt | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/net/fsl-fman.txt b/Documentation/devicetree/bindings/net/fsl-fman.txt
> index c00fb0d22c7b..020337f3c05f 100644
> --- a/Documentation/devicetree/bindings/net/fsl-fman.txt
> +++ b/Documentation/devicetree/bindings/net/fsl-fman.txt
> @@ -410,6 +410,15 @@ PROPERTIES
>  		The settings and programming routines for internal/external
>  		MDIO are different. Must be included for internal MDIO.
>  
> +- fsl,erratum-a009885

Adding errata properties doesn't work because then you have to update 
your dtb to fix the issue where as if you use the compatible property 
(specific to the SoC) you can fix the issue with just a (stable) kernel 
update.

Yes, I see we already have some, but doesn't mean we need more of them.

> +		Usage: optional
> +		Value type: <boolean>
> +		Definition: Indicates the presence of the A009885
> +		erratum describing that the contents of MDIO_DATA may
> +		become corrupt unless it is read within 16 MDC cycles
> +		of MDIO_CFG[BSY] being cleared, when performing an
> +		MDIO read operation.
> +
>  - fsl,erratum-a011043
>  		Usage: optional
>  		Value type: <boolean>
> -- 
> 2.25.1
> 
> 

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

* Re: [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885
  2022-01-21  2:08   ` Rob Herring
@ 2022-01-21 12:30     ` Tobias Waldekranz
  0 siblings, 0 replies; 8+ messages in thread
From: Tobias Waldekranz @ 2022-01-21 12:30 UTC (permalink / raw)
  To: Rob Herring
  Cc: davem, kuba, netdev, Andrew Lunn, Madalin Bucur, devicetree,
	linux-kernel

On Thu, Jan 20, 2022 at 20:08, Rob Herring <robh@kernel.org> wrote:
> On Tue, Jan 18, 2022 at 10:50:51PM +0100, Tobias Waldekranz wrote:
>> Update FMan binding documentation with the newly added workaround for
>> erratum A-009885.
>> 
>> Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
>> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
>> ---
>>  Documentation/devicetree/bindings/net/fsl-fman.txt | 9 +++++++++
>>  1 file changed, 9 insertions(+)
>> 
>> diff --git a/Documentation/devicetree/bindings/net/fsl-fman.txt b/Documentation/devicetree/bindings/net/fsl-fman.txt
>> index c00fb0d22c7b..020337f3c05f 100644
>> --- a/Documentation/devicetree/bindings/net/fsl-fman.txt
>> +++ b/Documentation/devicetree/bindings/net/fsl-fman.txt
>> @@ -410,6 +410,15 @@ PROPERTIES
>>  		The settings and programming routines for internal/external
>>  		MDIO are different. Must be included for internal MDIO.
>>  
>> +- fsl,erratum-a009885
>
> Adding errata properties doesn't work because then you have to update 
> your dtb to fix the issue where as if you use the compatible property 
> (specific to the SoC) you can fix the issue with just a (stable) kernel 
> update.
>
> Yes, I see we already have some, but doesn't mean we need more of them.

I agree. Unfortunately all users of the driver also use the same
compatible string, so there was no way I could think of that would not
involve rebuilding DTBs anyway. Given that situation, I chose to just
extend what was already there.

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

end of thread, other threads:[~2022-01-21 12:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-18 21:50 [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 Tobias Waldekranz
2022-01-18 21:50 ` [PATCH v2 net 1/4] " Tobias Waldekranz
2022-01-18 21:50 ` [PATCH v2 net 2/4] dt-bindings: net: Document fsl,erratum-a009885 Tobias Waldekranz
2022-01-21  2:08   ` Rob Herring
2022-01-21 12:30     ` Tobias Waldekranz
2022-01-18 21:50 ` [PATCH v2 net 3/4] powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses Tobias Waldekranz
2022-01-18 21:50 ` [PATCH v2 net 4/4] net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module Tobias Waldekranz
2022-01-19 16:30 ` [PATCH v2 net 0/4] net/fsl: xgmac_mdio: Add workaround for erratum A-009885 patchwork-bot+netdevbpf

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).