Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: microchip: KSZ9477 register regmap alignment to 32 bit boundaries

The commit (SHA1: 5c844d57aa7894154e49cf2fc648bfe2f1aefc1c) 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 accesses 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 KSZ9477 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: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Lukasz Majewski and committed by
David S. Miller
8d7ae22a a0b1b205

+15 -20
+15 -20
drivers/net/dsa/microchip/ksz_common.c
··· 635 635 regmap_reg_range(0x1030, 0x1030), 636 636 regmap_reg_range(0x1100, 0x1115), 637 637 regmap_reg_range(0x111a, 0x111f), 638 - regmap_reg_range(0x1122, 0x1127), 639 - regmap_reg_range(0x112a, 0x112b), 640 - regmap_reg_range(0x1136, 0x1139), 641 - regmap_reg_range(0x113e, 0x113f), 638 + regmap_reg_range(0x1120, 0x112b), 639 + regmap_reg_range(0x1134, 0x113b), 640 + regmap_reg_range(0x113c, 0x113f), 642 641 regmap_reg_range(0x1400, 0x1401), 643 642 regmap_reg_range(0x1403, 0x1403), 644 643 regmap_reg_range(0x1410, 0x1417), ··· 668 669 regmap_reg_range(0x2030, 0x2030), 669 670 regmap_reg_range(0x2100, 0x2115), 670 671 regmap_reg_range(0x211a, 0x211f), 671 - regmap_reg_range(0x2122, 0x2127), 672 - regmap_reg_range(0x212a, 0x212b), 673 - regmap_reg_range(0x2136, 0x2139), 674 - regmap_reg_range(0x213e, 0x213f), 672 + regmap_reg_range(0x2120, 0x212b), 673 + regmap_reg_range(0x2134, 0x213b), 674 + regmap_reg_range(0x213c, 0x213f), 675 675 regmap_reg_range(0x2400, 0x2401), 676 676 regmap_reg_range(0x2403, 0x2403), 677 677 regmap_reg_range(0x2410, 0x2417), ··· 701 703 regmap_reg_range(0x3030, 0x3030), 702 704 regmap_reg_range(0x3100, 0x3115), 703 705 regmap_reg_range(0x311a, 0x311f), 704 - regmap_reg_range(0x3122, 0x3127), 705 - regmap_reg_range(0x312a, 0x312b), 706 - regmap_reg_range(0x3136, 0x3139), 707 - regmap_reg_range(0x313e, 0x313f), 706 + regmap_reg_range(0x3120, 0x312b), 707 + regmap_reg_range(0x3134, 0x313b), 708 + regmap_reg_range(0x313c, 0x313f), 708 709 regmap_reg_range(0x3400, 0x3401), 709 710 regmap_reg_range(0x3403, 0x3403), 710 711 regmap_reg_range(0x3410, 0x3417), ··· 734 737 regmap_reg_range(0x4030, 0x4030), 735 738 regmap_reg_range(0x4100, 0x4115), 736 739 regmap_reg_range(0x411a, 0x411f), 737 - regmap_reg_range(0x4122, 0x4127), 738 - regmap_reg_range(0x412a, 0x412b), 739 - regmap_reg_range(0x4136, 0x4139), 740 - regmap_reg_range(0x413e, 0x413f), 740 + regmap_reg_range(0x4120, 0x412b), 741 + regmap_reg_range(0x4134, 0x413b), 742 + regmap_reg_range(0x413c, 0x413f), 741 743 regmap_reg_range(0x4400, 0x4401), 742 744 regmap_reg_range(0x4403, 0x4403), 743 745 regmap_reg_range(0x4410, 0x4417), ··· 767 771 regmap_reg_range(0x5030, 0x5030), 768 772 regmap_reg_range(0x5100, 0x5115), 769 773 regmap_reg_range(0x511a, 0x511f), 770 - regmap_reg_range(0x5122, 0x5127), 771 - regmap_reg_range(0x512a, 0x512b), 772 - regmap_reg_range(0x5136, 0x5139), 773 - regmap_reg_range(0x513e, 0x513f), 774 + regmap_reg_range(0x5120, 0x512b), 775 + regmap_reg_range(0x5134, 0x513b), 776 + regmap_reg_range(0x513c, 0x513f), 774 777 regmap_reg_range(0x5400, 0x5401), 775 778 regmap_reg_range(0x5403, 0x5403), 776 779 regmap_reg_range(0x5410, 0x5417),