Skip to content

Commit 5af5357

Browse files
Jesseeeekuba-moo
authored andcommitted
net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
Commit 8d7ae22 ("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. 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. Fixes: 5c844d5 ("net: dsa: microchip: fix writes to phy registers >= 0x10") Signed-off-by: Jesse Van Gavere <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent fb9e603 commit 5af5357

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

drivers/net/dsa/microchip/ksz_common.c

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,10 +1100,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
11001100
regmap_reg_range(0x1030, 0x1030),
11011101
regmap_reg_range(0x1100, 0x1115),
11021102
regmap_reg_range(0x111a, 0x111f),
1103-
regmap_reg_range(0x1122, 0x1127),
1104-
regmap_reg_range(0x112a, 0x112b),
1105-
regmap_reg_range(0x1136, 0x1139),
1106-
regmap_reg_range(0x113e, 0x113f),
1103+
regmap_reg_range(0x1120, 0x112b),
1104+
regmap_reg_range(0x1134, 0x113b),
1105+
regmap_reg_range(0x113c, 0x113f),
11071106
regmap_reg_range(0x1400, 0x1401),
11081107
regmap_reg_range(0x1403, 0x1403),
11091108
regmap_reg_range(0x1410, 0x1417),
@@ -1130,10 +1129,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
11301129
regmap_reg_range(0x2030, 0x2030),
11311130
regmap_reg_range(0x2100, 0x2115),
11321131
regmap_reg_range(0x211a, 0x211f),
1133-
regmap_reg_range(0x2122, 0x2127),
1134-
regmap_reg_range(0x212a, 0x212b),
1135-
regmap_reg_range(0x2136, 0x2139),
1136-
regmap_reg_range(0x213e, 0x213f),
1132+
regmap_reg_range(0x2120, 0x212b),
1133+
regmap_reg_range(0x2134, 0x213b),
1134+
regmap_reg_range(0x213c, 0x213f),
11371135
regmap_reg_range(0x2400, 0x2401),
11381136
regmap_reg_range(0x2403, 0x2403),
11391137
regmap_reg_range(0x2410, 0x2417),
@@ -1160,10 +1158,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
11601158
regmap_reg_range(0x3030, 0x3030),
11611159
regmap_reg_range(0x3100, 0x3115),
11621160
regmap_reg_range(0x311a, 0x311f),
1163-
regmap_reg_range(0x3122, 0x3127),
1164-
regmap_reg_range(0x312a, 0x312b),
1165-
regmap_reg_range(0x3136, 0x3139),
1166-
regmap_reg_range(0x313e, 0x313f),
1161+
regmap_reg_range(0x3120, 0x312b),
1162+
regmap_reg_range(0x3134, 0x313b),
1163+
regmap_reg_range(0x313c, 0x313f),
11671164
regmap_reg_range(0x3400, 0x3401),
11681165
regmap_reg_range(0x3403, 0x3403),
11691166
regmap_reg_range(0x3410, 0x3417),
@@ -1190,10 +1187,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
11901187
regmap_reg_range(0x4030, 0x4030),
11911188
regmap_reg_range(0x4100, 0x4115),
11921189
regmap_reg_range(0x411a, 0x411f),
1193-
regmap_reg_range(0x4122, 0x4127),
1194-
regmap_reg_range(0x412a, 0x412b),
1195-
regmap_reg_range(0x4136, 0x4139),
1196-
regmap_reg_range(0x413e, 0x413f),
1190+
regmap_reg_range(0x4120, 0x412b),
1191+
regmap_reg_range(0x4134, 0x413b),
1192+
regmap_reg_range(0x413c, 0x413f),
11971193
regmap_reg_range(0x4400, 0x4401),
11981194
regmap_reg_range(0x4403, 0x4403),
11991195
regmap_reg_range(0x4410, 0x4417),
@@ -1220,10 +1216,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
12201216
regmap_reg_range(0x5030, 0x5030),
12211217
regmap_reg_range(0x5100, 0x5115),
12221218
regmap_reg_range(0x511a, 0x511f),
1223-
regmap_reg_range(0x5122, 0x5127),
1224-
regmap_reg_range(0x512a, 0x512b),
1225-
regmap_reg_range(0x5136, 0x5139),
1226-
regmap_reg_range(0x513e, 0x513f),
1219+
regmap_reg_range(0x5120, 0x512b),
1220+
regmap_reg_range(0x5134, 0x513b),
1221+
regmap_reg_range(0x513c, 0x513f),
12271222
regmap_reg_range(0x5400, 0x5401),
12281223
regmap_reg_range(0x5403, 0x5403),
12291224
regmap_reg_range(0x5410, 0x5417),
@@ -1250,10 +1245,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
12501245
regmap_reg_range(0x6030, 0x6030),
12511246
regmap_reg_range(0x6100, 0x6115),
12521247
regmap_reg_range(0x611a, 0x611f),
1253-
regmap_reg_range(0x6122, 0x6127),
1254-
regmap_reg_range(0x612a, 0x612b),
1255-
regmap_reg_range(0x6136, 0x6139),
1256-
regmap_reg_range(0x613e, 0x613f),
1248+
regmap_reg_range(0x6120, 0x612b),
1249+
regmap_reg_range(0x6134, 0x613b),
1250+
regmap_reg_range(0x613c, 0x613f),
12571251
regmap_reg_range(0x6300, 0x6301),
12581252
regmap_reg_range(0x6400, 0x6401),
12591253
regmap_reg_range(0x6403, 0x6403),

0 commit comments

Comments
 (0)