Skip to content

Commit ee11eaa

Browse files
Jesseeeegregkh
authored andcommitted
net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
[ Upstream commit 5af5357 ] 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]> Signed-off-by: Sasha Levin <[email protected]>
1 parent f5fcb1f commit ee11eaa

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
@@ -892,10 +892,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
892892
regmap_reg_range(0x1030, 0x1030),
893893
regmap_reg_range(0x1100, 0x1115),
894894
regmap_reg_range(0x111a, 0x111f),
895-
regmap_reg_range(0x1122, 0x1127),
896-
regmap_reg_range(0x112a, 0x112b),
897-
regmap_reg_range(0x1136, 0x1139),
898-
regmap_reg_range(0x113e, 0x113f),
895+
regmap_reg_range(0x1120, 0x112b),
896+
regmap_reg_range(0x1134, 0x113b),
897+
regmap_reg_range(0x113c, 0x113f),
899898
regmap_reg_range(0x1400, 0x1401),
900899
regmap_reg_range(0x1403, 0x1403),
901900
regmap_reg_range(0x1410, 0x1417),
@@ -922,10 +921,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
922921
regmap_reg_range(0x2030, 0x2030),
923922
regmap_reg_range(0x2100, 0x2115),
924923
regmap_reg_range(0x211a, 0x211f),
925-
regmap_reg_range(0x2122, 0x2127),
926-
regmap_reg_range(0x212a, 0x212b),
927-
regmap_reg_range(0x2136, 0x2139),
928-
regmap_reg_range(0x213e, 0x213f),
924+
regmap_reg_range(0x2120, 0x212b),
925+
regmap_reg_range(0x2134, 0x213b),
926+
regmap_reg_range(0x213c, 0x213f),
929927
regmap_reg_range(0x2400, 0x2401),
930928
regmap_reg_range(0x2403, 0x2403),
931929
regmap_reg_range(0x2410, 0x2417),
@@ -952,10 +950,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
952950
regmap_reg_range(0x3030, 0x3030),
953951
regmap_reg_range(0x3100, 0x3115),
954952
regmap_reg_range(0x311a, 0x311f),
955-
regmap_reg_range(0x3122, 0x3127),
956-
regmap_reg_range(0x312a, 0x312b),
957-
regmap_reg_range(0x3136, 0x3139),
958-
regmap_reg_range(0x313e, 0x313f),
953+
regmap_reg_range(0x3120, 0x312b),
954+
regmap_reg_range(0x3134, 0x313b),
955+
regmap_reg_range(0x313c, 0x313f),
959956
regmap_reg_range(0x3400, 0x3401),
960957
regmap_reg_range(0x3403, 0x3403),
961958
regmap_reg_range(0x3410, 0x3417),
@@ -982,10 +979,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
982979
regmap_reg_range(0x4030, 0x4030),
983980
regmap_reg_range(0x4100, 0x4115),
984981
regmap_reg_range(0x411a, 0x411f),
985-
regmap_reg_range(0x4122, 0x4127),
986-
regmap_reg_range(0x412a, 0x412b),
987-
regmap_reg_range(0x4136, 0x4139),
988-
regmap_reg_range(0x413e, 0x413f),
982+
regmap_reg_range(0x4120, 0x412b),
983+
regmap_reg_range(0x4134, 0x413b),
984+
regmap_reg_range(0x413c, 0x413f),
989985
regmap_reg_range(0x4400, 0x4401),
990986
regmap_reg_range(0x4403, 0x4403),
991987
regmap_reg_range(0x4410, 0x4417),
@@ -1012,10 +1008,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
10121008
regmap_reg_range(0x5030, 0x5030),
10131009
regmap_reg_range(0x5100, 0x5115),
10141010
regmap_reg_range(0x511a, 0x511f),
1015-
regmap_reg_range(0x5122, 0x5127),
1016-
regmap_reg_range(0x512a, 0x512b),
1017-
regmap_reg_range(0x5136, 0x5139),
1018-
regmap_reg_range(0x513e, 0x513f),
1011+
regmap_reg_range(0x5120, 0x512b),
1012+
regmap_reg_range(0x5134, 0x513b),
1013+
regmap_reg_range(0x513c, 0x513f),
10191014
regmap_reg_range(0x5400, 0x5401),
10201015
regmap_reg_range(0x5403, 0x5403),
10211016
regmap_reg_range(0x5410, 0x5417),
@@ -1042,10 +1037,9 @@ static const struct regmap_range ksz9896_valid_regs[] = {
10421037
regmap_reg_range(0x6030, 0x6030),
10431038
regmap_reg_range(0x6100, 0x6115),
10441039
regmap_reg_range(0x611a, 0x611f),
1045-
regmap_reg_range(0x6122, 0x6127),
1046-
regmap_reg_range(0x612a, 0x612b),
1047-
regmap_reg_range(0x6136, 0x6139),
1048-
regmap_reg_range(0x613e, 0x613f),
1040+
regmap_reg_range(0x6120, 0x612b),
1041+
regmap_reg_range(0x6134, 0x613b),
1042+
regmap_reg_range(0x613c, 0x613f),
10491043
regmap_reg_range(0x6300, 0x6301),
10501044
regmap_reg_range(0x6400, 0x6401),
10511045
regmap_reg_range(0x6403, 0x6403),

0 commit comments

Comments
 (0)