* [PATCH net v2] net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
@ 2024-12-07 22:59 Jesse Van Gavere
2024-12-10 14:13 ` Simon Horman
0 siblings, 1 reply; 3+ messages in thread
From: Jesse Van Gavere @ 2024-12-07 22:59 UTC (permalink / raw)
To: netdev, woojung.huh, UNGLinuxDriver, andrew, olteanv
Cc: davem, edumazet, kuba, pabeni, Jesse Van Gavere
Commit 8d7ae22ae9f8 ("net: dsa: microchip: KSZ9477 register regmap alignment
to 32 bit boundaries") fixed an issue whereby regmap_reg_range did not allow
writes as 32 bit words to KSZ9477 PHY registers, this fix for KSZ9896 is
adapted from there as the same errata is present in KSZ9896C as
"Module 5: Certain PHY registers must be written as pairs instead of singly"
the explanation below is likewise taken from this commit.
Fixes: 5c844d57aa78 ("net: dsa: microchip: fix writes to phy registers >= 0x10")
The commit provided code
to apply "Module 6: Certain PHY registers must be written as pairs instead
of singly" errata for KSZ9477 as this chip for certain PHY registers
(0xN120 to 0xN13F, N=1,2,3,4,5) must be accessed as 32 bit words instead
of 16 or 8 bit access.
Otherwise, adjacent registers (no matter if reserved or not) are
overwritten with 0x0.
Without this patch some registers (e.g. 0x113c or 0x1134) required for 32
bit access are out of valid regmap ranges.
As a result, following error is observed and KSZ9896 is not properly
configured:
ksz-switch spi1.0: can't rmw 32bit reg 0x113c: -EIO
ksz-switch spi1.0: can't rmw 32bit reg 0x1134: -EIO
ksz-switch spi1.0 lan1 (uninitialized): failed to connect to PHY: -EIO
ksz-switch spi1.0 lan1 (uninitialized): error -5 setting up PHY for tree 0, switch 0, port 0
The solution is to modify regmap_reg_range to allow accesses with 4 bytes
boundaries.
Signed-off-by: Jesse Van Gavere <jesse.vangavere@scioteq.com>
---
Changes v2: Correctly refer to the original commit fixing this issue for
KSZ9477 and add a fixes tag, explain the link to this commit for fixing the
same issue on KSZ9896 and provide the same explanation of the failure mode
that happens without this fix.
drivers/net/dsa/microchip/ksz_common.c | 42 +++++++++++---------------
1 file changed, 18 insertions(+), 24 deletions(-)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 920443ee8ffd..8a03baa6aecc 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -1100,10 +1100,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x1030, 0x1030),
regmap_reg_range(0x1100, 0x1115),
regmap_reg_range(0x111a, 0x111f),
- regmap_reg_range(0x1122, 0x1127),
- regmap_reg_range(0x112a, 0x112b),
- regmap_reg_range(0x1136, 0x1139),
- regmap_reg_range(0x113e, 0x113f),
+ regmap_reg_range(0x1120, 0x112b),
+ regmap_reg_range(0x1134, 0x113b),
+ regmap_reg_range(0x113c, 0x113f),
regmap_reg_range(0x1400, 0x1401),
regmap_reg_range(0x1403, 0x1403),
regmap_reg_range(0x1410, 0x1417),
@@ -1130,10 +1129,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x2030, 0x2030),
regmap_reg_range(0x2100, 0x2115),
regmap_reg_range(0x211a, 0x211f),
- regmap_reg_range(0x2122, 0x2127),
- regmap_reg_range(0x212a, 0x212b),
- regmap_reg_range(0x2136, 0x2139),
- regmap_reg_range(0x213e, 0x213f),
+ regmap_reg_range(0x2120, 0x212b),
+ regmap_reg_range(0x2134, 0x213b),
+ regmap_reg_range(0x213c, 0x213f),
regmap_reg_range(0x2400, 0x2401),
regmap_reg_range(0x2403, 0x2403),
regmap_reg_range(0x2410, 0x2417),
@@ -1160,10 +1158,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x3030, 0x3030),
regmap_reg_range(0x3100, 0x3115),
regmap_reg_range(0x311a, 0x311f),
- regmap_reg_range(0x3122, 0x3127),
- regmap_reg_range(0x312a, 0x312b),
- regmap_reg_range(0x3136, 0x3139),
- regmap_reg_range(0x313e, 0x313f),
+ regmap_reg_range(0x3120, 0x312b),
+ regmap_reg_range(0x3134, 0x313b),
+ regmap_reg_range(0x313c, 0x313f),
regmap_reg_range(0x3400, 0x3401),
regmap_reg_range(0x3403, 0x3403),
regmap_reg_range(0x3410, 0x3417),
@@ -1190,10 +1187,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x4030, 0x4030),
regmap_reg_range(0x4100, 0x4115),
regmap_reg_range(0x411a, 0x411f),
- regmap_reg_range(0x4122, 0x4127),
- regmap_reg_range(0x412a, 0x412b),
- regmap_reg_range(0x4136, 0x4139),
- regmap_reg_range(0x413e, 0x413f),
+ regmap_reg_range(0x4120, 0x412b),
+ regmap_reg_range(0x4134, 0x413b),
+ regmap_reg_range(0x413c, 0x413f),
regmap_reg_range(0x4400, 0x4401),
regmap_reg_range(0x4403, 0x4403),
regmap_reg_range(0x4410, 0x4417),
@@ -1220,10 +1216,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x5030, 0x5030),
regmap_reg_range(0x5100, 0x5115),
regmap_reg_range(0x511a, 0x511f),
- regmap_reg_range(0x5122, 0x5127),
- regmap_reg_range(0x512a, 0x512b),
- regmap_reg_range(0x5136, 0x5139),
- regmap_reg_range(0x513e, 0x513f),
+ regmap_reg_range(0x5120, 0x512b),
+ regmap_reg_range(0x5134, 0x513b),
+ regmap_reg_range(0x513c, 0x513f),
regmap_reg_range(0x5400, 0x5401),
regmap_reg_range(0x5403, 0x5403),
regmap_reg_range(0x5410, 0x5417),
@@ -1250,10 +1245,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
regmap_reg_range(0x6030, 0x6030),
regmap_reg_range(0x6100, 0x6115),
regmap_reg_range(0x611a, 0x611f),
- regmap_reg_range(0x6122, 0x6127),
- regmap_reg_range(0x612a, 0x612b),
- regmap_reg_range(0x6136, 0x6139),
- regmap_reg_range(0x613e, 0x613f),
+ regmap_reg_range(0x6120, 0x612b),
+ regmap_reg_range(0x6134, 0x613b),
+ regmap_reg_range(0x613c, 0x613f),
regmap_reg_range(0x6300, 0x6301),
regmap_reg_range(0x6400, 0x6401),
regmap_reg_range(0x6403, 0x6403),
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH net v2] net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
2024-12-07 22:59 [PATCH net v2] net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries Jesse Van Gavere
@ 2024-12-10 14:13 ` Simon Horman
2024-12-10 14:28 ` Jesse Van Gavere
0 siblings, 1 reply; 3+ messages in thread
From: Simon Horman @ 2024-12-10 14:13 UTC (permalink / raw)
To: Jesse Van Gavere
Cc: netdev, woojung.huh, UNGLinuxDriver, andrew, olteanv, davem,
edumazet, kuba, pabeni, Jesse Van Gavere
On Sat, Dec 07, 2024 at 11:59:06PM +0100, Jesse Van Gavere wrote:
> Commit 8d7ae22ae9f8 ("net: dsa: microchip: KSZ9477 register regmap alignment
> to 32 bit boundaries") fixed an issue whereby regmap_reg_range did not allow
> writes as 32 bit words to KSZ9477 PHY registers, this fix for KSZ9896 is
> adapted from there as the same errata is present in KSZ9896C as
> "Module 5: Certain PHY registers must be written as pairs instead of singly"
> the explanation below is likewise taken from this commit.
>
> Fixes: 5c844d57aa78 ("net: dsa: microchip: fix writes to phy registers >= 0x10")
Hi Jesse,
Sorry to nit-pick but the Fixes tag should be placed along with other tags
at the bottom of the commit description. In this case exactly
above your Signed-off-by line - no blank line in between.
>
> The commit provided code
> to apply "Module 6: Certain PHY registers must be written as pairs instead
> of singly" errata for KSZ9477 as this chip for certain PHY registers
> (0xN120 to 0xN13F, N=1,2,3,4,5) must be accessed as 32 bit words instead
> of 16 or 8 bit access.
> Otherwise, adjacent registers (no matter if reserved or not) are
> overwritten with 0x0.
>
> Without this patch some registers (e.g. 0x113c or 0x1134) required for 32
> bit access are out of valid regmap ranges.
>
> As a result, following error is observed and KSZ9896 is not properly
> configured:
>
> ksz-switch spi1.0: can't rmw 32bit reg 0x113c: -EIO
> ksz-switch spi1.0: can't rmw 32bit reg 0x1134: -EIO
> ksz-switch spi1.0 lan1 (uninitialized): failed to connect to PHY: -EIO
> ksz-switch spi1.0 lan1 (uninitialized): error -5 setting up PHY for tree 0, switch 0, port 0
>
> The solution is to modify regmap_reg_range to allow accesses with 4 bytes
> boundaries.
>
> Signed-off-by: Jesse Van Gavere <jesse.vangavere@scioteq.com>
...
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH net v2] net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
2024-12-10 14:13 ` Simon Horman
@ 2024-12-10 14:28 ` Jesse Van Gavere
0 siblings, 0 replies; 3+ messages in thread
From: Jesse Van Gavere @ 2024-12-10 14:28 UTC (permalink / raw)
To: Simon Horman
Cc: netdev, woojung.huh, UNGLinuxDriver, andrew, olteanv, davem,
edumazet, kuba, pabeni, Jesse Van Gavere
Hello Simon,
Op di 10 dec 2024 om 15:13 schreef Simon Horman <horms@kernel.org>:
> Hi Jesse,
>
> Sorry to nit-pick but the Fixes tag should be placed along with other tags
> at the bottom of the commit description. In this case exactly
> above your Signed-off-by line - no blank line in between.
No problem, that's a valid remark, it was something I already wondered
about as checkpatch didn't mention it, I will fix that and send a v3
later.
Best regards,
Jesse
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-10 14:28 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-07 22:59 [PATCH net v2] net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries Jesse Van Gavere
2024-12-10 14:13 ` Simon Horman
2024-12-10 14:28 ` Jesse Van Gavere
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).