linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series
@ 2022-11-02  4:10 Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation Rakesh Sankaranarayanan
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

This patch series include following changes, 
- add regmap range validation support for lan937x series switches, 
which will help to avoid access to unused register addresses.
- Add KSZ9563 inside ksz_switch_chips. As per current structure,
KSZ9893 is reused inside ksz_switch_chips structure, but since
there is a mismatch in number of irq's, new member added for KSZ9563
and sku detected based on Global Chip ID 4 Register. Compatible
string from device tree mapped to KSZ9563 for spi and i2c mode
probes.
- Assign device interrupt during i2c probe operation.
- Add error checking for ksz_pwrite inside lan937x_change_mtu. After v6.0,
ksz_pwrite updated to have return type int instead of void, and
lan937x_change_mtu still uses ksz_pwrite without status verification.
- Add port_nirq as 3 for KSZ8563 switch family.
- Use dev_err_probe() instead of dev_err() to have more standardized error
formatting and logging.

Rakesh Sankaranarayanan (6):
  net: dsa: microchip: lan937x: add regmap range validation
  net: dsa: microchip: add ksz9563 in ksz_switch_ops and select based on
    compatible string
  net: dsa: microchip: add irq in i2c probe
  net: dsa: microchip: add error checking for ksz_pwrite
  net: dsa: microchip: ksz8563: Add number of port irq
  net: dsa: microchip: add dev_err_probe in probe functions

 drivers/net/dsa/microchip/ksz8863_smi.c  |    9 +-
 drivers/net/dsa/microchip/ksz9477.c      |    3 +-
 drivers/net/dsa/microchip/ksz9477_i2c.c  |   12 +-
 drivers/net/dsa/microchip/ksz_common.c   | 1794 +++++++++++++++++++++-
 drivers/net/dsa/microchip/ksz_common.h   |    3 +
 drivers/net/dsa/microchip/ksz_spi.c      |   10 +-
 drivers/net/dsa/microchip/lan937x_main.c |    6 +-
 7 files changed, 1816 insertions(+), 21 deletions(-)

-- 
2.34.1


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

* [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-02 17:15   ` Florian Fainelli
  2022-11-02  4:10 ` [PATCH net-next 2/6] net: dsa: microchip: add ksz9563 in ksz_switch_ops and select based on compatible string Rakesh Sankaranarayanan
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

Add regmap_range and regmap_access_table to define valid
register range for LAN937x switch family. LAN937x family
have sku id's LAN9370, LAN9371, LAN9372, LAN9373 and
LAN9374. regmap_range structure is arranged as Global
Registers followed by Port Registers but they are distributed
as Global Registers, T1 PHY Port Registers, Tx PHY Port Registers,
RGMII Port Registers, SGMII Port Registers. On 16 bit addressing,
most significant 4 bits are used for representing port number.
So valid range of two different T1 PHY ports within a sku
will differ on upper nibble only.

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/ksz_common.c | 1760 ++++++++++++++++++++++++
 1 file changed, 1760 insertions(+)

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index d612181b3226..b0905c5b701d 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -1030,6 +1030,1756 @@ static const struct regmap_access_table ksz9896_register_set = {
 	.n_yes_ranges = ARRAY_SIZE(ksz9896_valid_regs),
 };
 
+static const struct regmap_range lan9370_valid_regs[] = {
+	regmap_reg_range(0x0000, 0x0003),
+	regmap_reg_range(0x0007, 0x0007),
+	regmap_reg_range(0x000f, 0x0027),
+	regmap_reg_range(0x0030, 0x0035),
+	regmap_reg_range(0x0050, 0x005f),
+	regmap_reg_range(0x0100, 0x011b),
+	regmap_reg_range(0x0120, 0x0123),
+	regmap_reg_range(0x0128, 0x0140),
+	regmap_reg_range(0x0142, 0x0159),
+	regmap_reg_range(0x0200, 0x0203),
+	regmap_reg_range(0x0210, 0x0217),
+	regmap_reg_range(0x0300, 0x0300),
+	regmap_reg_range(0x0302, 0x0307),
+	regmap_reg_range(0x030a, 0x0336),
+	regmap_reg_range(0x0338, 0x033b),
+	regmap_reg_range(0x033e, 0x033e),
+	regmap_reg_range(0x0340, 0x0367),
+	regmap_reg_range(0x0370, 0x0370),
+	regmap_reg_range(0x0374, 0x0378),
+	regmap_reg_range(0x037c, 0x037d),
+	regmap_reg_range(0x0380, 0x0383),
+	regmap_reg_range(0x0390, 0x039b),
+	regmap_reg_range(0x03a4, 0x03b7),
+	regmap_reg_range(0x03e0, 0x03e3),
+	regmap_reg_range(0x03e8, 0x03eb),
+	regmap_reg_range(0x0400, 0x040e),
+	regmap_reg_range(0x0410, 0x0437),
+	regmap_reg_range(0x0440, 0x046f),
+	regmap_reg_range(0x0500, 0x054b),
+	regmap_reg_range(0x0550, 0x05b7),
+	regmap_reg_range(0x0640, 0x0645),
+	regmap_reg_range(0x0648, 0x064d),
+	regmap_reg_range(0x0650, 0x0655),
+	regmap_reg_range(0x0700, 0x07ff),
+	regmap_reg_range(0x0800, 0x088b),
+	regmap_reg_range(0x0900, 0x09ff),
+
+	/* Port 1 */
+	regmap_reg_range(0x1000, 0x1001),
+	regmap_reg_range(0x1004, 0x100b),
+	regmap_reg_range(0x101b, 0x101b),
+	regmap_reg_range(0x101f, 0x1021),
+	regmap_reg_range(0x1030, 0x1030),
+	regmap_reg_range(0x1040, 0x1040),
+	regmap_reg_range(0x1100, 0x111f),
+	regmap_reg_range(0x1200, 0x120b),
+	regmap_reg_range(0x1300, 0x1307),
+	regmap_reg_range(0x1400, 0x1405),
+	regmap_reg_range(0x1408, 0x1409),
+	regmap_reg_range(0x1410, 0x1417),
+	regmap_reg_range(0x1420, 0x1427),
+	regmap_reg_range(0x1500, 0x1507),
+	regmap_reg_range(0x1600, 0x1665),
+	regmap_reg_range(0x1668, 0x168f),
+	regmap_reg_range(0x1694, 0x169b),
+	regmap_reg_range(0x16a0, 0x16a2),
+	regmap_reg_range(0x16c0, 0x16c3),
+	regmap_reg_range(0x16d0, 0x16d4),
+	regmap_reg_range(0x16e0, 0x16ef),
+	regmap_reg_range(0x1800, 0x1804),
+	regmap_reg_range(0x1808, 0x180b),
+	regmap_reg_range(0x1810, 0x181f),
+	regmap_reg_range(0x1850, 0x1857),
+	regmap_reg_range(0x1860, 0x186b),
+	regmap_reg_range(0x1870, 0x188c),
+	regmap_reg_range(0x1890, 0x1890),
+	regmap_reg_range(0x1894, 0x18a0),
+	regmap_reg_range(0x18a0, 0x18ab),
+	regmap_reg_range(0x18c1, 0x18e7),
+	regmap_reg_range(0x1900, 0x1907),
+	regmap_reg_range(0x1914, 0x1920),
+	regmap_reg_range(0x1923, 0x1936),
+	regmap_reg_range(0x1938, 0x193d),
+	regmap_reg_range(0x1940, 0x1941),
+	regmap_reg_range(0x1944, 0x1953),
+	regmap_reg_range(0x1a00, 0x1a1b),
+	regmap_reg_range(0x1b00, 0x1b04),
+	regmap_reg_range(0x1b08, 0x1b13),
+	regmap_reg_range(0x1c00, 0x1c05),
+	regmap_reg_range(0x1c08, 0x1c1b),
+
+	/* Port 2 */
+	regmap_reg_range(0x2000, 0x2001),
+	regmap_reg_range(0x2004, 0x200b),
+	regmap_reg_range(0x201b, 0x201b),
+	regmap_reg_range(0x201f, 0x2021),
+	regmap_reg_range(0x2030, 0x2030),
+	regmap_reg_range(0x2040, 0x2040),
+	regmap_reg_range(0x2100, 0x211f),
+	regmap_reg_range(0x2200, 0x220b),
+	regmap_reg_range(0x2300, 0x2307),
+	regmap_reg_range(0x2400, 0x2405),
+	regmap_reg_range(0x2408, 0x2409),
+	regmap_reg_range(0x2410, 0x2417),
+	regmap_reg_range(0x2420, 0x2427),
+	regmap_reg_range(0x2500, 0x2507),
+	regmap_reg_range(0x2600, 0x2665),
+	regmap_reg_range(0x2668, 0x268f),
+	regmap_reg_range(0x2694, 0x269b),
+	regmap_reg_range(0x26a0, 0x26a2),
+	regmap_reg_range(0x26c0, 0x26c3),
+	regmap_reg_range(0x26d0, 0x26d4),
+	regmap_reg_range(0x26e0, 0x26ef),
+	regmap_reg_range(0x2800, 0x2804),
+	regmap_reg_range(0x2808, 0x280b),
+	regmap_reg_range(0x2810, 0x281f),
+	regmap_reg_range(0x2850, 0x2857),
+	regmap_reg_range(0x2860, 0x286b),
+	regmap_reg_range(0x2870, 0x288c),
+	regmap_reg_range(0x2890, 0x2890),
+	regmap_reg_range(0x2894, 0x28a0),
+	regmap_reg_range(0x28a0, 0x28ab),
+	regmap_reg_range(0x28c1, 0x28e7),
+	regmap_reg_range(0x2900, 0x2907),
+	regmap_reg_range(0x2914, 0x2920),
+	regmap_reg_range(0x2923, 0x2936),
+	regmap_reg_range(0x2938, 0x293d),
+	regmap_reg_range(0x2940, 0x2941),
+	regmap_reg_range(0x2944, 0x2953),
+	regmap_reg_range(0x2a00, 0x2a1b),
+	regmap_reg_range(0x2b00, 0x2b04),
+	regmap_reg_range(0x2b08, 0x2b13),
+	regmap_reg_range(0x2c00, 0x2c05),
+	regmap_reg_range(0x2c08, 0x2c1b),
+
+	/* Port 3 */
+	regmap_reg_range(0x3000, 0x3001),
+	regmap_reg_range(0x3004, 0x300b),
+	regmap_reg_range(0x301b, 0x301b),
+	regmap_reg_range(0x301f, 0x3021),
+	regmap_reg_range(0x3030, 0x3030),
+	regmap_reg_range(0x3040, 0x3040),
+	regmap_reg_range(0x3100, 0x311f),
+	regmap_reg_range(0x3200, 0x320b),
+	regmap_reg_range(0x3300, 0x3307),
+	regmap_reg_range(0x3400, 0x3405),
+	regmap_reg_range(0x3408, 0x3409),
+	regmap_reg_range(0x3410, 0x3417),
+	regmap_reg_range(0x3420, 0x3427),
+	regmap_reg_range(0x3500, 0x3507),
+	regmap_reg_range(0x3600, 0x3665),
+	regmap_reg_range(0x3668, 0x368f),
+	regmap_reg_range(0x3694, 0x369b),
+	regmap_reg_range(0x36a0, 0x36a2),
+	regmap_reg_range(0x36c0, 0x36c3),
+	regmap_reg_range(0x36d0, 0x36d4),
+	regmap_reg_range(0x36e0, 0x36ef),
+	regmap_reg_range(0x3800, 0x3804),
+	regmap_reg_range(0x3808, 0x380b),
+	regmap_reg_range(0x3810, 0x381f),
+	regmap_reg_range(0x3850, 0x3857),
+	regmap_reg_range(0x3860, 0x386b),
+	regmap_reg_range(0x3870, 0x388c),
+	regmap_reg_range(0x3890, 0x3890),
+	regmap_reg_range(0x3894, 0x38a0),
+	regmap_reg_range(0x38a0, 0x38ab),
+	regmap_reg_range(0x38c1, 0x38e7),
+	regmap_reg_range(0x3900, 0x3907),
+	regmap_reg_range(0x3914, 0x3920),
+	regmap_reg_range(0x3923, 0x3936),
+	regmap_reg_range(0x3938, 0x393d),
+	regmap_reg_range(0x3940, 0x3941),
+	regmap_reg_range(0x3944, 0x3953),
+	regmap_reg_range(0x3a00, 0x3a1b),
+	regmap_reg_range(0x3b00, 0x3b04),
+	regmap_reg_range(0x3b08, 0x3b13),
+	regmap_reg_range(0x3c00, 0x3c05),
+	regmap_reg_range(0x3c08, 0x3c1b),
+
+	/* Port 4 */
+	regmap_reg_range(0x4000, 0x4001),
+	regmap_reg_range(0x4004, 0x400b),
+	regmap_reg_range(0x401b, 0x401b),
+	regmap_reg_range(0x401f, 0x4021),
+	regmap_reg_range(0x4030, 0x4030),
+	regmap_reg_range(0x4040, 0x4040),
+	regmap_reg_range(0x4100, 0x411f),
+	regmap_reg_range(0x4200, 0x420b),
+	regmap_reg_range(0x4300, 0x4307),
+	regmap_reg_range(0x4400, 0x4405),
+	regmap_reg_range(0x4408, 0x4409),
+	regmap_reg_range(0x4410, 0x4417),
+	regmap_reg_range(0x4420, 0x4427),
+	regmap_reg_range(0x4500, 0x4507),
+	regmap_reg_range(0x4600, 0x4665),
+	regmap_reg_range(0x4668, 0x468f),
+	regmap_reg_range(0x4694, 0x469b),
+	regmap_reg_range(0x46a0, 0x46a2),
+	regmap_reg_range(0x46c0, 0x46c3),
+	regmap_reg_range(0x46d0, 0x46d4),
+	regmap_reg_range(0x46e0, 0x46ef),
+	regmap_reg_range(0x4800, 0x4804),
+	regmap_reg_range(0x4808, 0x480b),
+	regmap_reg_range(0x4810, 0x481f),
+	regmap_reg_range(0x4850, 0x4857),
+	regmap_reg_range(0x4860, 0x486b),
+	regmap_reg_range(0x4870, 0x488c),
+	regmap_reg_range(0x4890, 0x4890),
+	regmap_reg_range(0x4894, 0x48a0),
+	regmap_reg_range(0x48a0, 0x48ab),
+	regmap_reg_range(0x48c1, 0x48e7),
+	regmap_reg_range(0x4900, 0x4907),
+	regmap_reg_range(0x4914, 0x4920),
+	regmap_reg_range(0x4923, 0x4936),
+	regmap_reg_range(0x4938, 0x493d),
+	regmap_reg_range(0x4940, 0x4941),
+	regmap_reg_range(0x4944, 0x4953),
+	regmap_reg_range(0x4a00, 0x4a1b),
+	regmap_reg_range(0x4b00, 0x4b04),
+	regmap_reg_range(0x4b08, 0x4b13),
+	regmap_reg_range(0x4c00, 0x4c05),
+	regmap_reg_range(0x4c08, 0x4c1b),
+
+	/* Port 5 */
+	regmap_reg_range(0x5000, 0x5001),
+	regmap_reg_range(0x5004, 0x500b),
+	regmap_reg_range(0x501b, 0x501b),
+	regmap_reg_range(0x501f, 0x5021),
+	regmap_reg_range(0x5030, 0x5030),
+	regmap_reg_range(0x5040, 0x5040),
+	regmap_reg_range(0x5200, 0x520b),
+	regmap_reg_range(0x5300, 0x5307),
+	regmap_reg_range(0x5400, 0x5405),
+	regmap_reg_range(0x5408, 0x5409),
+	regmap_reg_range(0x5410, 0x5417),
+	regmap_reg_range(0x5420, 0x5427),
+	regmap_reg_range(0x5500, 0x5507),
+	regmap_reg_range(0x5600, 0x5665),
+	regmap_reg_range(0x5668, 0x568f),
+	regmap_reg_range(0x5694, 0x569b),
+	regmap_reg_range(0x56a0, 0x56a2),
+	regmap_reg_range(0x56c0, 0x56c3),
+	regmap_reg_range(0x56d0, 0x56d4),
+	regmap_reg_range(0x56e0, 0x56ef),
+	regmap_reg_range(0x5800, 0x5804),
+	regmap_reg_range(0x5808, 0x580b),
+	regmap_reg_range(0x5810, 0x581f),
+	regmap_reg_range(0x5850, 0x5857),
+	regmap_reg_range(0x5860, 0x586b),
+	regmap_reg_range(0x5870, 0x588c),
+	regmap_reg_range(0x5890, 0x5890),
+	regmap_reg_range(0x5894, 0x58a0),
+	regmap_reg_range(0x58a0, 0x58ab),
+	regmap_reg_range(0x58c1, 0x58e7),
+	regmap_reg_range(0x5900, 0x5907),
+	regmap_reg_range(0x5914, 0x5920),
+	regmap_reg_range(0x5923, 0x5936),
+	regmap_reg_range(0x5938, 0x593d),
+	regmap_reg_range(0x5940, 0x5941),
+	regmap_reg_range(0x5944, 0x5953),
+	regmap_reg_range(0x5a00, 0x5a1b),
+	regmap_reg_range(0x5b00, 0x5b04),
+	regmap_reg_range(0x5b08, 0x5b13),
+	regmap_reg_range(0x5c00, 0x5c05),
+	regmap_reg_range(0x5c08, 0x5c1b),
+};
+
+static const struct regmap_access_table lan9370_register_set = {
+	.yes_ranges = lan9370_valid_regs,
+	.n_yes_ranges = ARRAY_SIZE(lan9370_valid_regs),
+};
+
+static const struct regmap_range lan9371_valid_regs[] = {
+	regmap_reg_range(0x0000, 0x0003),
+	regmap_reg_range(0x0007, 0x0007),
+	regmap_reg_range(0x000f, 0x0027),
+	regmap_reg_range(0x0030, 0x0035),
+	regmap_reg_range(0x0050, 0x005f),
+	regmap_reg_range(0x0100, 0x011b),
+	regmap_reg_range(0x0120, 0x0123),
+	regmap_reg_range(0x0128, 0x0140),
+	regmap_reg_range(0x0142, 0x0159),
+	regmap_reg_range(0x0200, 0x0203),
+	regmap_reg_range(0x0210, 0x0217),
+	regmap_reg_range(0x0300, 0x0300),
+	regmap_reg_range(0x0302, 0x0307),
+	regmap_reg_range(0x030a, 0x0336),
+	regmap_reg_range(0x0338, 0x033b),
+	regmap_reg_range(0x033e, 0x033e),
+	regmap_reg_range(0x0340, 0x0367),
+	regmap_reg_range(0x0370, 0x0370),
+	regmap_reg_range(0x0374, 0x0378),
+	regmap_reg_range(0x037c, 0x037d),
+	regmap_reg_range(0x0380, 0x0383),
+	regmap_reg_range(0x0390, 0x039b),
+	regmap_reg_range(0x03a4, 0x03b7),
+	regmap_reg_range(0x03e0, 0x03e3),
+	regmap_reg_range(0x03e8, 0x03eb),
+	regmap_reg_range(0x0400, 0x040e),
+	regmap_reg_range(0x0410, 0x0437),
+	regmap_reg_range(0x0440, 0x046f),
+	regmap_reg_range(0x0500, 0x054b),
+	regmap_reg_range(0x0550, 0x05b7),
+	regmap_reg_range(0x0640, 0x0645),
+	regmap_reg_range(0x0648, 0x064d),
+	regmap_reg_range(0x0650, 0x0655),
+	regmap_reg_range(0x0700, 0x07ff),
+	regmap_reg_range(0x0800, 0x088b),
+	regmap_reg_range(0x0900, 0x09ff),
+
+	/* Port 1 */
+	regmap_reg_range(0x1000, 0x1001),
+	regmap_reg_range(0x1004, 0x100b),
+	regmap_reg_range(0x101b, 0x101b),
+	regmap_reg_range(0x101f, 0x1021),
+	regmap_reg_range(0x1030, 0x1030),
+	regmap_reg_range(0x1040, 0x1040),
+	regmap_reg_range(0x1100, 0x111f),
+	regmap_reg_range(0x1200, 0x120b),
+	regmap_reg_range(0x1300, 0x1307),
+	regmap_reg_range(0x1400, 0x1405),
+	regmap_reg_range(0x1408, 0x1409),
+	regmap_reg_range(0x1410, 0x1417),
+	regmap_reg_range(0x1420, 0x1427),
+	regmap_reg_range(0x1500, 0x1507),
+	regmap_reg_range(0x1600, 0x1665),
+	regmap_reg_range(0x1668, 0x168f),
+	regmap_reg_range(0x1694, 0x169b),
+	regmap_reg_range(0x16a0, 0x16a2),
+	regmap_reg_range(0x16c0, 0x16c3),
+	regmap_reg_range(0x16d0, 0x16d4),
+	regmap_reg_range(0x16e0, 0x16ef),
+	regmap_reg_range(0x1800, 0x1804),
+	regmap_reg_range(0x1808, 0x180b),
+	regmap_reg_range(0x1810, 0x181f),
+	regmap_reg_range(0x1850, 0x1857),
+	regmap_reg_range(0x1860, 0x186b),
+	regmap_reg_range(0x1870, 0x188c),
+	regmap_reg_range(0x1890, 0x1890),
+	regmap_reg_range(0x1894, 0x18a0),
+	regmap_reg_range(0x18a0, 0x18ab),
+	regmap_reg_range(0x18c1, 0x18e7),
+	regmap_reg_range(0x1900, 0x1907),
+	regmap_reg_range(0x1914, 0x1920),
+	regmap_reg_range(0x1923, 0x1936),
+	regmap_reg_range(0x1938, 0x193d),
+	regmap_reg_range(0x1940, 0x1941),
+	regmap_reg_range(0x1944, 0x1953),
+	regmap_reg_range(0x1a00, 0x1a1b),
+	regmap_reg_range(0x1b00, 0x1b04),
+	regmap_reg_range(0x1b08, 0x1b13),
+	regmap_reg_range(0x1c00, 0x1c05),
+	regmap_reg_range(0x1c08, 0x1c1b),
+
+	/* Port 2 */
+	regmap_reg_range(0x2000, 0x2001),
+	regmap_reg_range(0x2004, 0x200b),
+	regmap_reg_range(0x201b, 0x201b),
+	regmap_reg_range(0x201f, 0x2021),
+	regmap_reg_range(0x2030, 0x2030),
+	regmap_reg_range(0x2040, 0x2040),
+	regmap_reg_range(0x2100, 0x211f),
+	regmap_reg_range(0x2200, 0x220b),
+	regmap_reg_range(0x2300, 0x2307),
+	regmap_reg_range(0x2400, 0x2405),
+	regmap_reg_range(0x2408, 0x2409),
+	regmap_reg_range(0x2410, 0x2417),
+	regmap_reg_range(0x2420, 0x2427),
+	regmap_reg_range(0x2500, 0x2507),
+	regmap_reg_range(0x2600, 0x2665),
+	regmap_reg_range(0x2668, 0x268f),
+	regmap_reg_range(0x2694, 0x269b),
+	regmap_reg_range(0x26a0, 0x26a2),
+	regmap_reg_range(0x26c0, 0x26c3),
+	regmap_reg_range(0x26d0, 0x26d4),
+	regmap_reg_range(0x26e0, 0x26ef),
+	regmap_reg_range(0x2800, 0x2804),
+	regmap_reg_range(0x2808, 0x280b),
+	regmap_reg_range(0x2810, 0x281f),
+	regmap_reg_range(0x2850, 0x2857),
+	regmap_reg_range(0x2860, 0x286b),
+	regmap_reg_range(0x2870, 0x288c),
+	regmap_reg_range(0x2890, 0x2890),
+	regmap_reg_range(0x2894, 0x28a0),
+	regmap_reg_range(0x28a0, 0x28ab),
+	regmap_reg_range(0x28c1, 0x28e7),
+	regmap_reg_range(0x2900, 0x2907),
+	regmap_reg_range(0x2914, 0x2920),
+	regmap_reg_range(0x2923, 0x2936),
+	regmap_reg_range(0x2938, 0x293d),
+	regmap_reg_range(0x2940, 0x2941),
+	regmap_reg_range(0x2944, 0x2953),
+	regmap_reg_range(0x2a00, 0x2a1b),
+	regmap_reg_range(0x2b00, 0x2b04),
+	regmap_reg_range(0x2b08, 0x2b13),
+	regmap_reg_range(0x2c00, 0x2c05),
+	regmap_reg_range(0x2c08, 0x2c1b),
+
+	/* Port 3 */
+	regmap_reg_range(0x3000, 0x3001),
+	regmap_reg_range(0x3004, 0x300b),
+	regmap_reg_range(0x301b, 0x301b),
+	regmap_reg_range(0x301f, 0x3021),
+	regmap_reg_range(0x3030, 0x3030),
+	regmap_reg_range(0x3040, 0x3040),
+	regmap_reg_range(0x3100, 0x311f),
+	regmap_reg_range(0x3200, 0x320b),
+	regmap_reg_range(0x3300, 0x3307),
+	regmap_reg_range(0x3400, 0x3405),
+	regmap_reg_range(0x3408, 0x3409),
+	regmap_reg_range(0x3410, 0x3417),
+	regmap_reg_range(0x3420, 0x3427),
+	regmap_reg_range(0x3500, 0x3507),
+	regmap_reg_range(0x3600, 0x3665),
+	regmap_reg_range(0x3668, 0x368f),
+	regmap_reg_range(0x3694, 0x369b),
+	regmap_reg_range(0x36a0, 0x36a2),
+	regmap_reg_range(0x36c0, 0x36c3),
+	regmap_reg_range(0x36d0, 0x36d4),
+	regmap_reg_range(0x36e0, 0x36ef),
+	regmap_reg_range(0x3800, 0x3804),
+	regmap_reg_range(0x3808, 0x380b),
+	regmap_reg_range(0x3810, 0x381f),
+	regmap_reg_range(0x3850, 0x3857),
+	regmap_reg_range(0x3860, 0x386b),
+	regmap_reg_range(0x3870, 0x388c),
+	regmap_reg_range(0x3890, 0x3890),
+	regmap_reg_range(0x3894, 0x38a0),
+	regmap_reg_range(0x38a0, 0x38ab),
+	regmap_reg_range(0x38c1, 0x38e7),
+	regmap_reg_range(0x3900, 0x3907),
+	regmap_reg_range(0x3914, 0x3920),
+	regmap_reg_range(0x3923, 0x3936),
+	regmap_reg_range(0x3938, 0x393d),
+	regmap_reg_range(0x3940, 0x3941),
+	regmap_reg_range(0x3944, 0x3953),
+	regmap_reg_range(0x3a00, 0x3a1b),
+	regmap_reg_range(0x3b00, 0x3b04),
+	regmap_reg_range(0x3b08, 0x3b13),
+	regmap_reg_range(0x3c00, 0x3c05),
+	regmap_reg_range(0x3c08, 0x3c1b),
+
+	/* Port 4 */
+	regmap_reg_range(0x4000, 0x4001),
+	regmap_reg_range(0x4004, 0x400b),
+	regmap_reg_range(0x401b, 0x401b),
+	regmap_reg_range(0x401f, 0x4021),
+	regmap_reg_range(0x4030, 0x4030),
+	regmap_reg_range(0x4040, 0x4040),
+	regmap_reg_range(0x4200, 0x420b),
+	regmap_reg_range(0x4280, 0x42ff),
+	regmap_reg_range(0x4300, 0x4307),
+	regmap_reg_range(0x4400, 0x4405),
+	regmap_reg_range(0x4408, 0x4409),
+	regmap_reg_range(0x4410, 0x4417),
+	regmap_reg_range(0x4420, 0x4427),
+	regmap_reg_range(0x4500, 0x4507),
+	regmap_reg_range(0x4600, 0x4665),
+	regmap_reg_range(0x4668, 0x468f),
+	regmap_reg_range(0x4694, 0x469b),
+	regmap_reg_range(0x46a0, 0x46a2),
+	regmap_reg_range(0x46c0, 0x46c3),
+	regmap_reg_range(0x46d0, 0x46d4),
+	regmap_reg_range(0x46e0, 0x46ef),
+	regmap_reg_range(0x4800, 0x4804),
+	regmap_reg_range(0x4808, 0x480b),
+	regmap_reg_range(0x4810, 0x481f),
+	regmap_reg_range(0x4850, 0x4857),
+	regmap_reg_range(0x4860, 0x486b),
+	regmap_reg_range(0x4870, 0x488c),
+	regmap_reg_range(0x4890, 0x4890),
+	regmap_reg_range(0x4894, 0x48a0),
+	regmap_reg_range(0x48a0, 0x48ab),
+	regmap_reg_range(0x48c1, 0x48e7),
+	regmap_reg_range(0x4900, 0x4907),
+	regmap_reg_range(0x4914, 0x4920),
+	regmap_reg_range(0x4923, 0x4936),
+	regmap_reg_range(0x4938, 0x493d),
+	regmap_reg_range(0x4940, 0x4941),
+	regmap_reg_range(0x4944, 0x4953),
+	regmap_reg_range(0x4a00, 0x4a1b),
+	regmap_reg_range(0x4b00, 0x4b04),
+	regmap_reg_range(0x4b08, 0x4b13),
+	regmap_reg_range(0x4c00, 0x4c05),
+	regmap_reg_range(0x4c08, 0x4c1b),
+
+	/* Port 5 */
+	regmap_reg_range(0x5000, 0x5001),
+	regmap_reg_range(0x5004, 0x500b),
+	regmap_reg_range(0x501b, 0x501b),
+	regmap_reg_range(0x501f, 0x5021),
+	regmap_reg_range(0x5030, 0x5030),
+	regmap_reg_range(0x5040, 0x5040),
+	regmap_reg_range(0x5200, 0x520b),
+	regmap_reg_range(0x5300, 0x5307),
+	regmap_reg_range(0x5400, 0x5405),
+	regmap_reg_range(0x5408, 0x5409),
+	regmap_reg_range(0x5410, 0x5417),
+	regmap_reg_range(0x5420, 0x5427),
+	regmap_reg_range(0x5500, 0x5507),
+	regmap_reg_range(0x5600, 0x5665),
+	regmap_reg_range(0x5668, 0x568f),
+	regmap_reg_range(0x5694, 0x569b),
+	regmap_reg_range(0x56a0, 0x56a2),
+	regmap_reg_range(0x56c0, 0x56c3),
+	regmap_reg_range(0x56d0, 0x56d4),
+	regmap_reg_range(0x56e0, 0x56ef),
+	regmap_reg_range(0x5800, 0x5804),
+	regmap_reg_range(0x5808, 0x580b),
+	regmap_reg_range(0x5810, 0x581f),
+	regmap_reg_range(0x5850, 0x5857),
+	regmap_reg_range(0x5860, 0x586b),
+	regmap_reg_range(0x5870, 0x588c),
+	regmap_reg_range(0x5890, 0x5890),
+	regmap_reg_range(0x5894, 0x58a0),
+	regmap_reg_range(0x58a0, 0x58ab),
+	regmap_reg_range(0x58c1, 0x58e7),
+	regmap_reg_range(0x5900, 0x5907),
+	regmap_reg_range(0x5914, 0x5920),
+	regmap_reg_range(0x5923, 0x5936),
+	regmap_reg_range(0x5938, 0x593d),
+	regmap_reg_range(0x5940, 0x5941),
+	regmap_reg_range(0x5944, 0x5953),
+	regmap_reg_range(0x5a00, 0x5a1b),
+	regmap_reg_range(0x5b00, 0x5b04),
+	regmap_reg_range(0x5b08, 0x5b13),
+	regmap_reg_range(0x5c00, 0x5c05),
+	regmap_reg_range(0x5c08, 0x5c1b),
+
+	/* Port 6 */
+	regmap_reg_range(0x6000, 0x6001),
+	regmap_reg_range(0x6004, 0x600b),
+	regmap_reg_range(0x601b, 0x601b),
+	regmap_reg_range(0x601f, 0x6021),
+	regmap_reg_range(0x6030, 0x6030),
+	regmap_reg_range(0x6040, 0x6040),
+	regmap_reg_range(0x6200, 0x620b),
+	regmap_reg_range(0x6300, 0x6307),
+	regmap_reg_range(0x6400, 0x6405),
+	regmap_reg_range(0x6408, 0x6409),
+	regmap_reg_range(0x6410, 0x6417),
+	regmap_reg_range(0x6420, 0x6427),
+	regmap_reg_range(0x6500, 0x6507),
+	regmap_reg_range(0x6600, 0x6665),
+	regmap_reg_range(0x6668, 0x668f),
+	regmap_reg_range(0x6694, 0x669b),
+	regmap_reg_range(0x66a0, 0x66a2),
+	regmap_reg_range(0x66c0, 0x66c3),
+	regmap_reg_range(0x66d0, 0x66d4),
+	regmap_reg_range(0x66e0, 0x66ef),
+	regmap_reg_range(0x6800, 0x6804),
+	regmap_reg_range(0x6808, 0x680b),
+	regmap_reg_range(0x6810, 0x681f),
+	regmap_reg_range(0x6850, 0x6857),
+	regmap_reg_range(0x6860, 0x686b),
+	regmap_reg_range(0x6870, 0x688c),
+	regmap_reg_range(0x6890, 0x6890),
+	regmap_reg_range(0x6894, 0x68a0),
+	regmap_reg_range(0x68a0, 0x68ab),
+	regmap_reg_range(0x68c1, 0x68e7),
+	regmap_reg_range(0x6900, 0x6907),
+	regmap_reg_range(0x6914, 0x6920),
+	regmap_reg_range(0x6923, 0x6936),
+	regmap_reg_range(0x6938, 0x693d),
+	regmap_reg_range(0x6940, 0x6941),
+	regmap_reg_range(0x6944, 0x6953),
+	regmap_reg_range(0x6a00, 0x6a1b),
+	regmap_reg_range(0x6b00, 0x6b04),
+	regmap_reg_range(0x6b08, 0x6b13),
+	regmap_reg_range(0x6c00, 0x6c05),
+	regmap_reg_range(0x6c08, 0x6c1b),
+};
+
+static const struct regmap_access_table lan9371_register_set = {
+	.yes_ranges = lan9371_valid_regs,
+	.n_yes_ranges = ARRAY_SIZE(lan9371_valid_regs),
+};
+
+static const struct regmap_range lan9372_valid_regs[] = {
+	regmap_reg_range(0x0000, 0x0003),
+	regmap_reg_range(0x0007, 0x0007),
+	regmap_reg_range(0x000f, 0x0027),
+	regmap_reg_range(0x0030, 0x0035),
+	regmap_reg_range(0x0050, 0x005f),
+	regmap_reg_range(0x0100, 0x011b),
+	regmap_reg_range(0x0120, 0x0123),
+	regmap_reg_range(0x0128, 0x0140),
+	regmap_reg_range(0x0142, 0x0159),
+	regmap_reg_range(0x0200, 0x0203),
+	regmap_reg_range(0x0210, 0x0217),
+	regmap_reg_range(0x0300, 0x0300),
+	regmap_reg_range(0x0302, 0x0307),
+	regmap_reg_range(0x030a, 0x0336),
+	regmap_reg_range(0x0338, 0x033b),
+	regmap_reg_range(0x033e, 0x033e),
+	regmap_reg_range(0x0340, 0x0367),
+	regmap_reg_range(0x0370, 0x0370),
+	regmap_reg_range(0x0374, 0x0378),
+	regmap_reg_range(0x037c, 0x037d),
+	regmap_reg_range(0x0380, 0x0383),
+	regmap_reg_range(0x0390, 0x039b),
+	regmap_reg_range(0x03a4, 0x03b7),
+	regmap_reg_range(0x03e0, 0x03e3),
+	regmap_reg_range(0x03e8, 0x03eb),
+	regmap_reg_range(0x0400, 0x040e),
+	regmap_reg_range(0x0410, 0x0437),
+	regmap_reg_range(0x0440, 0x046f),
+	regmap_reg_range(0x0500, 0x054b),
+	regmap_reg_range(0x0550, 0x05b7),
+	regmap_reg_range(0x0640, 0x0645),
+	regmap_reg_range(0x0648, 0x064d),
+	regmap_reg_range(0x0650, 0x0655),
+	regmap_reg_range(0x0700, 0x07ff),
+	regmap_reg_range(0x0800, 0x088b),
+	regmap_reg_range(0x0900, 0x09ff),
+
+	/* Port 1 */
+	regmap_reg_range(0x1000, 0x1001),
+	regmap_reg_range(0x1004, 0x100b),
+	regmap_reg_range(0x101b, 0x101b),
+	regmap_reg_range(0x101f, 0x1021),
+	regmap_reg_range(0x1030, 0x1030),
+	regmap_reg_range(0x1040, 0x1040),
+	regmap_reg_range(0x1100, 0x111f),
+	regmap_reg_range(0x1200, 0x120b),
+	regmap_reg_range(0x1300, 0x1307),
+	regmap_reg_range(0x1400, 0x1405),
+	regmap_reg_range(0x1408, 0x1409),
+	regmap_reg_range(0x1410, 0x1417),
+	regmap_reg_range(0x1420, 0x1427),
+	regmap_reg_range(0x1500, 0x1507),
+	regmap_reg_range(0x1600, 0x1665),
+	regmap_reg_range(0x1668, 0x168f),
+	regmap_reg_range(0x1694, 0x169b),
+	regmap_reg_range(0x16a0, 0x16a2),
+	regmap_reg_range(0x16c0, 0x16c3),
+	regmap_reg_range(0x16d0, 0x16d4),
+	regmap_reg_range(0x16e0, 0x16ef),
+	regmap_reg_range(0x1800, 0x1804),
+	regmap_reg_range(0x1808, 0x180b),
+	regmap_reg_range(0x1810, 0x181f),
+	regmap_reg_range(0x1850, 0x1857),
+	regmap_reg_range(0x1860, 0x186b),
+	regmap_reg_range(0x1870, 0x188c),
+	regmap_reg_range(0x1890, 0x1890),
+	regmap_reg_range(0x1894, 0x18a0),
+	regmap_reg_range(0x18a0, 0x18ab),
+	regmap_reg_range(0x18c1, 0x18e7),
+	regmap_reg_range(0x1900, 0x1907),
+	regmap_reg_range(0x1914, 0x1920),
+	regmap_reg_range(0x1923, 0x1936),
+	regmap_reg_range(0x1938, 0x193d),
+	regmap_reg_range(0x1940, 0x1941),
+	regmap_reg_range(0x1944, 0x1953),
+	regmap_reg_range(0x1a00, 0x1a1b),
+	regmap_reg_range(0x1b00, 0x1b04),
+	regmap_reg_range(0x1b08, 0x1b13),
+	regmap_reg_range(0x1c00, 0x1c05),
+	regmap_reg_range(0x1c08, 0x1c1b),
+
+	/* Port 2 */
+	regmap_reg_range(0x2000, 0x2001),
+	regmap_reg_range(0x2004, 0x200b),
+	regmap_reg_range(0x201b, 0x201b),
+	regmap_reg_range(0x201f, 0x2021),
+	regmap_reg_range(0x2030, 0x2030),
+	regmap_reg_range(0x2040, 0x2040),
+	regmap_reg_range(0x2100, 0x211f),
+	regmap_reg_range(0x2200, 0x220b),
+	regmap_reg_range(0x2300, 0x2307),
+	regmap_reg_range(0x2400, 0x2405),
+	regmap_reg_range(0x2408, 0x2409),
+	regmap_reg_range(0x2410, 0x2417),
+	regmap_reg_range(0x2420, 0x2427),
+	regmap_reg_range(0x2500, 0x2507),
+	regmap_reg_range(0x2600, 0x2665),
+	regmap_reg_range(0x2668, 0x268f),
+	regmap_reg_range(0x2694, 0x269b),
+	regmap_reg_range(0x26a0, 0x26a2),
+	regmap_reg_range(0x26c0, 0x26c3),
+	regmap_reg_range(0x26d0, 0x26d4),
+	regmap_reg_range(0x26e0, 0x26ef),
+	regmap_reg_range(0x2800, 0x2804),
+	regmap_reg_range(0x2808, 0x280b),
+	regmap_reg_range(0x2810, 0x281f),
+	regmap_reg_range(0x2850, 0x2857),
+	regmap_reg_range(0x2860, 0x286b),
+	regmap_reg_range(0x2870, 0x288c),
+	regmap_reg_range(0x2890, 0x2890),
+	regmap_reg_range(0x2894, 0x28a0),
+	regmap_reg_range(0x28a0, 0x28ab),
+	regmap_reg_range(0x28c1, 0x28e7),
+	regmap_reg_range(0x2900, 0x2907),
+	regmap_reg_range(0x2914, 0x2920),
+	regmap_reg_range(0x2923, 0x2936),
+	regmap_reg_range(0x2938, 0x293d),
+	regmap_reg_range(0x2940, 0x2941),
+	regmap_reg_range(0x2944, 0x2953),
+	regmap_reg_range(0x2a00, 0x2a1b),
+	regmap_reg_range(0x2b00, 0x2b04),
+	regmap_reg_range(0x2b08, 0x2b13),
+	regmap_reg_range(0x2c00, 0x2c05),
+	regmap_reg_range(0x2c08, 0x2c1b),
+
+	/* Port 3 */
+	regmap_reg_range(0x3000, 0x3001),
+	regmap_reg_range(0x3004, 0x300b),
+	regmap_reg_range(0x301b, 0x301b),
+	regmap_reg_range(0x301f, 0x3021),
+	regmap_reg_range(0x3030, 0x3030),
+	regmap_reg_range(0x3040, 0x3040),
+	regmap_reg_range(0x3100, 0x311f),
+	regmap_reg_range(0x3200, 0x320b),
+	regmap_reg_range(0x3300, 0x3307),
+	regmap_reg_range(0x3400, 0x3405),
+	regmap_reg_range(0x3408, 0x3409),
+	regmap_reg_range(0x3410, 0x3417),
+	regmap_reg_range(0x3420, 0x3427),
+	regmap_reg_range(0x3500, 0x3507),
+	regmap_reg_range(0x3600, 0x3665),
+	regmap_reg_range(0x3668, 0x368f),
+	regmap_reg_range(0x3694, 0x369b),
+	regmap_reg_range(0x36a0, 0x36a2),
+	regmap_reg_range(0x36c0, 0x36c3),
+	regmap_reg_range(0x36d0, 0x36d4),
+	regmap_reg_range(0x36e0, 0x36ef),
+	regmap_reg_range(0x3800, 0x3804),
+	regmap_reg_range(0x3808, 0x380b),
+	regmap_reg_range(0x3810, 0x381f),
+	regmap_reg_range(0x3850, 0x3857),
+	regmap_reg_range(0x3860, 0x386b),
+	regmap_reg_range(0x3870, 0x388c),
+	regmap_reg_range(0x3890, 0x3890),
+	regmap_reg_range(0x3894, 0x38a0),
+	regmap_reg_range(0x38a0, 0x38ab),
+	regmap_reg_range(0x38c1, 0x38e7),
+	regmap_reg_range(0x3900, 0x3907),
+	regmap_reg_range(0x3914, 0x3920),
+	regmap_reg_range(0x3923, 0x3936),
+	regmap_reg_range(0x3938, 0x393d),
+	regmap_reg_range(0x3940, 0x3941),
+	regmap_reg_range(0x3944, 0x3953),
+	regmap_reg_range(0x3a00, 0x3a1b),
+	regmap_reg_range(0x3b00, 0x3b04),
+	regmap_reg_range(0x3b08, 0x3b13),
+	regmap_reg_range(0x3c00, 0x3c05),
+	regmap_reg_range(0x3c08, 0x3c1b),
+
+	/* Port 4 */
+	regmap_reg_range(0x4000, 0x4001),
+	regmap_reg_range(0x4004, 0x400b),
+	regmap_reg_range(0x401b, 0x401b),
+	regmap_reg_range(0x401f, 0x4021),
+	regmap_reg_range(0x4030, 0x4030),
+	regmap_reg_range(0x4040, 0x4040),
+	regmap_reg_range(0x4200, 0x420b),
+	regmap_reg_range(0x4280, 0x42ff),
+	regmap_reg_range(0x4300, 0x4307),
+	regmap_reg_range(0x4400, 0x4405),
+	regmap_reg_range(0x4408, 0x4409),
+	regmap_reg_range(0x4410, 0x4417),
+	regmap_reg_range(0x4420, 0x4427),
+	regmap_reg_range(0x4500, 0x4507),
+	regmap_reg_range(0x4600, 0x4665),
+	regmap_reg_range(0x4668, 0x468f),
+	regmap_reg_range(0x4694, 0x469b),
+	regmap_reg_range(0x46a0, 0x46a2),
+	regmap_reg_range(0x46c0, 0x46c3),
+	regmap_reg_range(0x46d0, 0x46d4),
+	regmap_reg_range(0x46e0, 0x46ef),
+	regmap_reg_range(0x4800, 0x4804),
+	regmap_reg_range(0x4808, 0x480b),
+	regmap_reg_range(0x4810, 0x481f),
+	regmap_reg_range(0x4850, 0x4857),
+	regmap_reg_range(0x4860, 0x486b),
+	regmap_reg_range(0x4870, 0x488c),
+	regmap_reg_range(0x4890, 0x4890),
+	regmap_reg_range(0x4894, 0x48a0),
+	regmap_reg_range(0x48a0, 0x48ab),
+	regmap_reg_range(0x48c1, 0x48e7),
+	regmap_reg_range(0x4900, 0x4907),
+	regmap_reg_range(0x4914, 0x4920),
+	regmap_reg_range(0x4923, 0x4936),
+	regmap_reg_range(0x4938, 0x493d),
+	regmap_reg_range(0x4940, 0x4941),
+	regmap_reg_range(0x4944, 0x4953),
+	regmap_reg_range(0x4a00, 0x4a1b),
+	regmap_reg_range(0x4b00, 0x4b04),
+	regmap_reg_range(0x4b08, 0x4b13),
+	regmap_reg_range(0x4c00, 0x4c05),
+	regmap_reg_range(0x4c08, 0x4c1b),
+
+	/* Port 5 */
+	regmap_reg_range(0x5000, 0x5001),
+	regmap_reg_range(0x5004, 0x500b),
+	regmap_reg_range(0x501b, 0x501b),
+	regmap_reg_range(0x501f, 0x5021),
+	regmap_reg_range(0x5030, 0x5030),
+	regmap_reg_range(0x5040, 0x5040),
+	regmap_reg_range(0x5200, 0x520b),
+	regmap_reg_range(0x5300, 0x5307),
+	regmap_reg_range(0x5400, 0x5405),
+	regmap_reg_range(0x5408, 0x5409),
+	regmap_reg_range(0x5410, 0x5417),
+	regmap_reg_range(0x5420, 0x5427),
+	regmap_reg_range(0x5500, 0x5507),
+	regmap_reg_range(0x5600, 0x5665),
+	regmap_reg_range(0x5668, 0x568f),
+	regmap_reg_range(0x5694, 0x569b),
+	regmap_reg_range(0x56a0, 0x56a2),
+	regmap_reg_range(0x56c0, 0x56c3),
+	regmap_reg_range(0x56d0, 0x56d4),
+	regmap_reg_range(0x56e0, 0x56ef),
+	regmap_reg_range(0x5800, 0x5804),
+	regmap_reg_range(0x5808, 0x580b),
+	regmap_reg_range(0x5810, 0x581f),
+	regmap_reg_range(0x5850, 0x5857),
+	regmap_reg_range(0x5860, 0x586b),
+	regmap_reg_range(0x5870, 0x588c),
+	regmap_reg_range(0x5890, 0x5890),
+	regmap_reg_range(0x5894, 0x58a0),
+	regmap_reg_range(0x58a0, 0x58ab),
+	regmap_reg_range(0x58c1, 0x58e7),
+	regmap_reg_range(0x5900, 0x5907),
+	regmap_reg_range(0x5914, 0x5920),
+	regmap_reg_range(0x5923, 0x5936),
+	regmap_reg_range(0x5938, 0x593d),
+	regmap_reg_range(0x5940, 0x5941),
+	regmap_reg_range(0x5944, 0x5953),
+	regmap_reg_range(0x5a00, 0x5a1b),
+	regmap_reg_range(0x5b00, 0x5b04),
+	regmap_reg_range(0x5b08, 0x5b13),
+	regmap_reg_range(0x5c00, 0x5c05),
+	regmap_reg_range(0x5c08, 0x5c1b),
+
+	/* Port 6 */
+	regmap_reg_range(0x6000, 0x6001),
+	regmap_reg_range(0x6004, 0x600b),
+	regmap_reg_range(0x601b, 0x601b),
+	regmap_reg_range(0x601f, 0x6021),
+	regmap_reg_range(0x6030, 0x6030),
+	regmap_reg_range(0x6040, 0x6040),
+	regmap_reg_range(0x6200, 0x620b),
+	regmap_reg_range(0x6300, 0x6307),
+	regmap_reg_range(0x6400, 0x6405),
+	regmap_reg_range(0x6408, 0x6409),
+	regmap_reg_range(0x6410, 0x6417),
+	regmap_reg_range(0x6420, 0x6427),
+	regmap_reg_range(0x6500, 0x6507),
+	regmap_reg_range(0x6600, 0x6665),
+	regmap_reg_range(0x6668, 0x668f),
+	regmap_reg_range(0x6694, 0x669b),
+	regmap_reg_range(0x66a0, 0x66a2),
+	regmap_reg_range(0x66c0, 0x66c3),
+	regmap_reg_range(0x66d0, 0x66d4),
+	regmap_reg_range(0x66e0, 0x66ef),
+	regmap_reg_range(0x6800, 0x6804),
+	regmap_reg_range(0x6808, 0x680b),
+	regmap_reg_range(0x6810, 0x681f),
+	regmap_reg_range(0x6850, 0x6857),
+	regmap_reg_range(0x6860, 0x686b),
+	regmap_reg_range(0x6870, 0x688c),
+	regmap_reg_range(0x6890, 0x6890),
+	regmap_reg_range(0x6894, 0x68a0),
+	regmap_reg_range(0x68a0, 0x68ab),
+	regmap_reg_range(0x68c1, 0x68e7),
+	regmap_reg_range(0x6900, 0x6907),
+	regmap_reg_range(0x6914, 0x6920),
+	regmap_reg_range(0x6923, 0x6936),
+	regmap_reg_range(0x6938, 0x693d),
+	regmap_reg_range(0x6940, 0x6941),
+	regmap_reg_range(0x6944, 0x6953),
+	regmap_reg_range(0x6a00, 0x6a1b),
+	regmap_reg_range(0x6b00, 0x6b04),
+	regmap_reg_range(0x6b08, 0x6b13),
+	regmap_reg_range(0x6c00, 0x6c05),
+	regmap_reg_range(0x6c08, 0x6c1b),
+
+	/* Port 7 */
+	regmap_reg_range(0x7000, 0x7001),
+	regmap_reg_range(0x7004, 0x700b),
+	regmap_reg_range(0x701b, 0x701b),
+	regmap_reg_range(0x701f, 0x7021),
+	regmap_reg_range(0x7030, 0x7030),
+	regmap_reg_range(0x7040, 0x7040),
+	regmap_reg_range(0x7100, 0x711f),
+	regmap_reg_range(0x7200, 0x720b),
+	regmap_reg_range(0x7300, 0x7307),
+	regmap_reg_range(0x7400, 0x7405),
+	regmap_reg_range(0x7408, 0x7409),
+	regmap_reg_range(0x7410, 0x7417),
+	regmap_reg_range(0x7420, 0x7427),
+	regmap_reg_range(0x7500, 0x7507),
+	regmap_reg_range(0x7600, 0x7665),
+	regmap_reg_range(0x7668, 0x768f),
+	regmap_reg_range(0x7694, 0x769b),
+	regmap_reg_range(0x76a0, 0x76a2),
+	regmap_reg_range(0x76c0, 0x76c3),
+	regmap_reg_range(0x76d0, 0x76d4),
+	regmap_reg_range(0x76e0, 0x76ef),
+	regmap_reg_range(0x7800, 0x7804),
+	regmap_reg_range(0x7808, 0x780b),
+	regmap_reg_range(0x7810, 0x781f),
+	regmap_reg_range(0x7850, 0x7857),
+	regmap_reg_range(0x7860, 0x786b),
+	regmap_reg_range(0x7870, 0x788c),
+	regmap_reg_range(0x7890, 0x7890),
+	regmap_reg_range(0x7894, 0x78a0),
+	regmap_reg_range(0x78a0, 0x78ab),
+	regmap_reg_range(0x78c1, 0x78e7),
+	regmap_reg_range(0x7900, 0x7907),
+	regmap_reg_range(0x7914, 0x7920),
+	regmap_reg_range(0x7923, 0x7936),
+	regmap_reg_range(0x7938, 0x793d),
+	regmap_reg_range(0x7940, 0x7941),
+	regmap_reg_range(0x7944, 0x7953),
+	regmap_reg_range(0x7a00, 0x7a1b),
+	regmap_reg_range(0x7b00, 0x7b04),
+	regmap_reg_range(0x7b08, 0x7b13),
+	regmap_reg_range(0x7c00, 0x7c05),
+	regmap_reg_range(0x7c08, 0x7c1b),
+
+	/* Port 8 */
+	regmap_reg_range(0x8000, 0x8001),
+	regmap_reg_range(0x8004, 0x800b),
+	regmap_reg_range(0x801b, 0x801b),
+	regmap_reg_range(0x801f, 0x8021),
+	regmap_reg_range(0x8030, 0x8030),
+	regmap_reg_range(0x8040, 0x8040),
+	regmap_reg_range(0x8100, 0x811f),
+	regmap_reg_range(0x8200, 0x820b),
+	regmap_reg_range(0x8300, 0x8307),
+	regmap_reg_range(0x8400, 0x8405),
+	regmap_reg_range(0x8408, 0x8409),
+	regmap_reg_range(0x8410, 0x8417),
+	regmap_reg_range(0x8420, 0x8427),
+	regmap_reg_range(0x8500, 0x8507),
+	regmap_reg_range(0x8600, 0x8665),
+	regmap_reg_range(0x8668, 0x868f),
+	regmap_reg_range(0x8694, 0x869b),
+	regmap_reg_range(0x86a0, 0x86a2),
+	regmap_reg_range(0x86c0, 0x86c3),
+	regmap_reg_range(0x86d0, 0x86d4),
+	regmap_reg_range(0x86e0, 0x86ef),
+	regmap_reg_range(0x8800, 0x8804),
+	regmap_reg_range(0x8808, 0x880b),
+	regmap_reg_range(0x8810, 0x881f),
+	regmap_reg_range(0x8850, 0x8857),
+	regmap_reg_range(0x8860, 0x886b),
+	regmap_reg_range(0x8870, 0x888c),
+	regmap_reg_range(0x8890, 0x8890),
+	regmap_reg_range(0x8894, 0x88a0),
+	regmap_reg_range(0x88a0, 0x88ab),
+	regmap_reg_range(0x88c1, 0x88e7),
+	regmap_reg_range(0x8900, 0x8907),
+	regmap_reg_range(0x8914, 0x8920),
+	regmap_reg_range(0x8923, 0x8936),
+	regmap_reg_range(0x8938, 0x893d),
+	regmap_reg_range(0x8940, 0x8941),
+	regmap_reg_range(0x8944, 0x8953),
+	regmap_reg_range(0x8a00, 0x8a1b),
+	regmap_reg_range(0x8b00, 0x8b04),
+	regmap_reg_range(0x8b08, 0x8b13),
+	regmap_reg_range(0x8c00, 0x8c05),
+	regmap_reg_range(0x8c08, 0x8c1b),
+};
+
+static const struct regmap_access_table lan9372_register_set = {
+	.yes_ranges = lan9372_valid_regs,
+	.n_yes_ranges = ARRAY_SIZE(lan9372_valid_regs),
+};
+
+static const struct regmap_range lan9373_valid_regs[] = {
+	regmap_reg_range(0x0000, 0x0003),
+	regmap_reg_range(0x0007, 0x0007),
+	regmap_reg_range(0x000f, 0x0027),
+	regmap_reg_range(0x0030, 0x0035),
+	regmap_reg_range(0x0050, 0x005f),
+	regmap_reg_range(0x0100, 0x011b),
+	regmap_reg_range(0x0120, 0x0123),
+	regmap_reg_range(0x0128, 0x0140),
+	regmap_reg_range(0x0142, 0x0159),
+	regmap_reg_range(0x0200, 0x0203),
+	regmap_reg_range(0x0210, 0x0217),
+	regmap_reg_range(0x0300, 0x0300),
+	regmap_reg_range(0x0302, 0x0307),
+	regmap_reg_range(0x030a, 0x0336),
+	regmap_reg_range(0x0338, 0x033b),
+	regmap_reg_range(0x033e, 0x033e),
+	regmap_reg_range(0x0340, 0x0367),
+	regmap_reg_range(0x0370, 0x0370),
+	regmap_reg_range(0x0374, 0x0378),
+	regmap_reg_range(0x037c, 0x037d),
+	regmap_reg_range(0x0380, 0x0383),
+	regmap_reg_range(0x0390, 0x039b),
+	regmap_reg_range(0x03a4, 0x03b7),
+	regmap_reg_range(0x03e0, 0x03e3),
+	regmap_reg_range(0x03e8, 0x03eb),
+	regmap_reg_range(0x0400, 0x040e),
+	regmap_reg_range(0x0410, 0x0437),
+	regmap_reg_range(0x0440, 0x046f),
+	regmap_reg_range(0x0500, 0x054b),
+	regmap_reg_range(0x0550, 0x05b7),
+	regmap_reg_range(0x0640, 0x0645),
+	regmap_reg_range(0x0648, 0x064d),
+	regmap_reg_range(0x0650, 0x0655),
+	regmap_reg_range(0x0700, 0x07ff),
+	regmap_reg_range(0x0800, 0x088b),
+	regmap_reg_range(0x0900, 0x09ff),
+
+	/* Port 1 */
+	regmap_reg_range(0x1000, 0x1001),
+	regmap_reg_range(0x1004, 0x100b),
+	regmap_reg_range(0x101b, 0x101b),
+	regmap_reg_range(0x101f, 0x1021),
+	regmap_reg_range(0x1030, 0x1030),
+	regmap_reg_range(0x1040, 0x1040),
+	regmap_reg_range(0x1100, 0x111f),
+	regmap_reg_range(0x1200, 0x120b),
+	regmap_reg_range(0x1300, 0x1307),
+	regmap_reg_range(0x1400, 0x1405),
+	regmap_reg_range(0x1408, 0x1409),
+	regmap_reg_range(0x1410, 0x1417),
+	regmap_reg_range(0x1420, 0x1427),
+	regmap_reg_range(0x1500, 0x1507),
+	regmap_reg_range(0x1600, 0x1665),
+	regmap_reg_range(0x1668, 0x168f),
+	regmap_reg_range(0x1694, 0x169b),
+	regmap_reg_range(0x16a0, 0x16a2),
+	regmap_reg_range(0x16c0, 0x16c3),
+	regmap_reg_range(0x16d0, 0x16d4),
+	regmap_reg_range(0x16e0, 0x16ef),
+	regmap_reg_range(0x1800, 0x1804),
+	regmap_reg_range(0x1808, 0x180b),
+	regmap_reg_range(0x1810, 0x181f),
+	regmap_reg_range(0x1850, 0x1857),
+	regmap_reg_range(0x1860, 0x186b),
+	regmap_reg_range(0x1870, 0x188c),
+	regmap_reg_range(0x1890, 0x1890),
+	regmap_reg_range(0x1894, 0x18a0),
+	regmap_reg_range(0x18a0, 0x18ab),
+	regmap_reg_range(0x18c1, 0x18e7),
+	regmap_reg_range(0x1900, 0x1907),
+	regmap_reg_range(0x1914, 0x1920),
+	regmap_reg_range(0x1923, 0x1936),
+	regmap_reg_range(0x1938, 0x193d),
+	regmap_reg_range(0x1940, 0x1941),
+	regmap_reg_range(0x1944, 0x1953),
+	regmap_reg_range(0x1a00, 0x1a1b),
+	regmap_reg_range(0x1b00, 0x1b04),
+	regmap_reg_range(0x1b08, 0x1b13),
+	regmap_reg_range(0x1c00, 0x1c05),
+	regmap_reg_range(0x1c08, 0x1c1b),
+
+	/* Port 2 */
+	regmap_reg_range(0x2000, 0x2001),
+	regmap_reg_range(0x2004, 0x200b),
+	regmap_reg_range(0x201b, 0x201b),
+	regmap_reg_range(0x201f, 0x2021),
+	regmap_reg_range(0x2030, 0x2030),
+	regmap_reg_range(0x2040, 0x2040),
+	regmap_reg_range(0x2100, 0x211f),
+	regmap_reg_range(0x2200, 0x220b),
+	regmap_reg_range(0x2300, 0x2307),
+	regmap_reg_range(0x2400, 0x2405),
+	regmap_reg_range(0x2408, 0x2409),
+	regmap_reg_range(0x2410, 0x2417),
+	regmap_reg_range(0x2420, 0x2427),
+	regmap_reg_range(0x2500, 0x2507),
+	regmap_reg_range(0x2600, 0x2665),
+	regmap_reg_range(0x2668, 0x268f),
+	regmap_reg_range(0x2694, 0x269b),
+	regmap_reg_range(0x26a0, 0x26a2),
+	regmap_reg_range(0x26c0, 0x26c3),
+	regmap_reg_range(0x26d0, 0x26d4),
+	regmap_reg_range(0x26e0, 0x26ef),
+	regmap_reg_range(0x2800, 0x2804),
+	regmap_reg_range(0x2808, 0x280b),
+	regmap_reg_range(0x2810, 0x281f),
+	regmap_reg_range(0x2850, 0x2857),
+	regmap_reg_range(0x2860, 0x286b),
+	regmap_reg_range(0x2870, 0x288c),
+	regmap_reg_range(0x2890, 0x2890),
+	regmap_reg_range(0x2894, 0x28a0),
+	regmap_reg_range(0x28a0, 0x28ab),
+	regmap_reg_range(0x28c1, 0x28e7),
+	regmap_reg_range(0x2900, 0x2907),
+	regmap_reg_range(0x2914, 0x2920),
+	regmap_reg_range(0x2923, 0x2936),
+	regmap_reg_range(0x2938, 0x293d),
+	regmap_reg_range(0x2940, 0x2941),
+	regmap_reg_range(0x2944, 0x2953),
+	regmap_reg_range(0x2a00, 0x2a1b),
+	regmap_reg_range(0x2b00, 0x2b04),
+	regmap_reg_range(0x2b08, 0x2b13),
+	regmap_reg_range(0x2c00, 0x2c05),
+	regmap_reg_range(0x2c08, 0x2c1b),
+
+	/* Port 3 */
+	regmap_reg_range(0x3000, 0x3001),
+	regmap_reg_range(0x3004, 0x300b),
+	regmap_reg_range(0x301b, 0x301b),
+	regmap_reg_range(0x301f, 0x3021),
+	regmap_reg_range(0x3030, 0x3030),
+	regmap_reg_range(0x3040, 0x3040),
+	regmap_reg_range(0x3100, 0x311f),
+	regmap_reg_range(0x3200, 0x320b),
+	regmap_reg_range(0x3300, 0x3307),
+	regmap_reg_range(0x3400, 0x3405),
+	regmap_reg_range(0x3408, 0x3409),
+	regmap_reg_range(0x3410, 0x3417),
+	regmap_reg_range(0x3420, 0x3427),
+	regmap_reg_range(0x3500, 0x3507),
+	regmap_reg_range(0x3600, 0x3665),
+	regmap_reg_range(0x3668, 0x368f),
+	regmap_reg_range(0x3694, 0x369b),
+	regmap_reg_range(0x36a0, 0x36a2),
+	regmap_reg_range(0x36c0, 0x36c3),
+	regmap_reg_range(0x36d0, 0x36d4),
+	regmap_reg_range(0x36e0, 0x36ef),
+	regmap_reg_range(0x3800, 0x3804),
+	regmap_reg_range(0x3808, 0x380b),
+	regmap_reg_range(0x3810, 0x381f),
+	regmap_reg_range(0x3850, 0x3857),
+	regmap_reg_range(0x3860, 0x386b),
+	regmap_reg_range(0x3870, 0x388c),
+	regmap_reg_range(0x3890, 0x3890),
+	regmap_reg_range(0x3894, 0x38a0),
+	regmap_reg_range(0x38a0, 0x38ab),
+	regmap_reg_range(0x38c1, 0x38e7),
+	regmap_reg_range(0x3900, 0x3907),
+	regmap_reg_range(0x3914, 0x3920),
+	regmap_reg_range(0x3923, 0x3936),
+	regmap_reg_range(0x3938, 0x393d),
+	regmap_reg_range(0x3940, 0x3941),
+	regmap_reg_range(0x3944, 0x3953),
+	regmap_reg_range(0x3a00, 0x3a1b),
+	regmap_reg_range(0x3b00, 0x3b04),
+	regmap_reg_range(0x3b08, 0x3b13),
+	regmap_reg_range(0x3c00, 0x3c05),
+	regmap_reg_range(0x3c08, 0x3c1b),
+
+	/* Port 4 */
+	regmap_reg_range(0x4000, 0x4001),
+	regmap_reg_range(0x4004, 0x400b),
+	regmap_reg_range(0x401b, 0x401b),
+	regmap_reg_range(0x401f, 0x4021),
+	regmap_reg_range(0x4030, 0x4030),
+	regmap_reg_range(0x4040, 0x4040),
+	regmap_reg_range(0x4200, 0x420b),
+	regmap_reg_range(0x4300, 0x4307),
+	regmap_reg_range(0x4400, 0x4405),
+	regmap_reg_range(0x4408, 0x4409),
+	regmap_reg_range(0x4410, 0x4417),
+	regmap_reg_range(0x4420, 0x4427),
+	regmap_reg_range(0x4500, 0x4507),
+	regmap_reg_range(0x4600, 0x4665),
+	regmap_reg_range(0x4668, 0x468f),
+	regmap_reg_range(0x4694, 0x469b),
+	regmap_reg_range(0x46a0, 0x46a2),
+	regmap_reg_range(0x46c0, 0x46c3),
+	regmap_reg_range(0x46d0, 0x46d4),
+	regmap_reg_range(0x46e0, 0x46ef),
+	regmap_reg_range(0x4800, 0x4804),
+	regmap_reg_range(0x4808, 0x480b),
+	regmap_reg_range(0x4810, 0x481f),
+	regmap_reg_range(0x4850, 0x4857),
+	regmap_reg_range(0x4860, 0x486b),
+	regmap_reg_range(0x4870, 0x488c),
+	regmap_reg_range(0x4890, 0x4890),
+	regmap_reg_range(0x4894, 0x48a0),
+	regmap_reg_range(0x48a0, 0x48ab),
+	regmap_reg_range(0x48c1, 0x48e7),
+	regmap_reg_range(0x4900, 0x4907),
+	regmap_reg_range(0x4914, 0x4920),
+	regmap_reg_range(0x4923, 0x4936),
+	regmap_reg_range(0x4938, 0x493d),
+	regmap_reg_range(0x4940, 0x4941),
+	regmap_reg_range(0x4944, 0x4953),
+	regmap_reg_range(0x4a00, 0x4a1b),
+	regmap_reg_range(0x4b00, 0x4b04),
+	regmap_reg_range(0x4b08, 0x4b13),
+	regmap_reg_range(0x4c00, 0x4c05),
+	regmap_reg_range(0x4c08, 0x4c1b),
+
+	/* Port 5 */
+	regmap_reg_range(0x5000, 0x5001),
+	regmap_reg_range(0x5004, 0x500b),
+	regmap_reg_range(0x501b, 0x501b),
+	regmap_reg_range(0x501f, 0x5021),
+	regmap_reg_range(0x5030, 0x5030),
+	regmap_reg_range(0x5040, 0x5040),
+	regmap_reg_range(0x5200, 0x520b),
+	regmap_reg_range(0x5300, 0x5307),
+	regmap_reg_range(0x5400, 0x5405),
+	regmap_reg_range(0x5408, 0x5409),
+	regmap_reg_range(0x5410, 0x5417),
+	regmap_reg_range(0x5420, 0x5427),
+	regmap_reg_range(0x5500, 0x5507),
+	regmap_reg_range(0x5600, 0x5665),
+	regmap_reg_range(0x5668, 0x568f),
+	regmap_reg_range(0x5694, 0x569b),
+	regmap_reg_range(0x56a0, 0x56a2),
+	regmap_reg_range(0x56c0, 0x56c3),
+	regmap_reg_range(0x56d0, 0x56d4),
+	regmap_reg_range(0x56e0, 0x56ef),
+	regmap_reg_range(0x5800, 0x5804),
+	regmap_reg_range(0x5808, 0x580b),
+	regmap_reg_range(0x5810, 0x581f),
+	regmap_reg_range(0x5850, 0x5857),
+	regmap_reg_range(0x5860, 0x586b),
+	regmap_reg_range(0x5870, 0x588c),
+	regmap_reg_range(0x5890, 0x5890),
+	regmap_reg_range(0x5894, 0x58a0),
+	regmap_reg_range(0x58a0, 0x58ab),
+	regmap_reg_range(0x58c1, 0x58e7),
+	regmap_reg_range(0x5900, 0x5907),
+	regmap_reg_range(0x5914, 0x5920),
+	regmap_reg_range(0x5923, 0x5936),
+	regmap_reg_range(0x5938, 0x593d),
+	regmap_reg_range(0x5940, 0x5941),
+	regmap_reg_range(0x5944, 0x5953),
+	regmap_reg_range(0x5a00, 0x5a1b),
+	regmap_reg_range(0x5b00, 0x5b04),
+	regmap_reg_range(0x5b08, 0x5b13),
+	regmap_reg_range(0x5c00, 0x5c05),
+	regmap_reg_range(0x5c08, 0x5c1b),
+
+	/* Port 6 */
+	regmap_reg_range(0x6000, 0x6001),
+	regmap_reg_range(0x6004, 0x600b),
+	regmap_reg_range(0x601b, 0x601b),
+	regmap_reg_range(0x601f, 0x6021),
+	regmap_reg_range(0x6030, 0x6030),
+	regmap_reg_range(0x6040, 0x6040),
+	regmap_reg_range(0x6200, 0x620b),
+	regmap_reg_range(0x6300, 0x6307),
+	regmap_reg_range(0x6400, 0x6405),
+	regmap_reg_range(0x6408, 0x6409),
+	regmap_reg_range(0x6410, 0x6417),
+	regmap_reg_range(0x6420, 0x6427),
+	regmap_reg_range(0x6500, 0x6507),
+	regmap_reg_range(0x6600, 0x6665),
+	regmap_reg_range(0x6668, 0x668f),
+	regmap_reg_range(0x6694, 0x669b),
+	regmap_reg_range(0x66a0, 0x66a2),
+	regmap_reg_range(0x66c0, 0x66c3),
+	regmap_reg_range(0x66d0, 0x66d4),
+	regmap_reg_range(0x66e0, 0x66ef),
+	regmap_reg_range(0x6800, 0x6804),
+	regmap_reg_range(0x6808, 0x680b),
+	regmap_reg_range(0x6810, 0x681f),
+	regmap_reg_range(0x6850, 0x6857),
+	regmap_reg_range(0x6860, 0x686b),
+	regmap_reg_range(0x6870, 0x688c),
+	regmap_reg_range(0x6890, 0x6890),
+	regmap_reg_range(0x6894, 0x68a0),
+	regmap_reg_range(0x68a0, 0x68ab),
+	regmap_reg_range(0x68c1, 0x68e7),
+	regmap_reg_range(0x6900, 0x6907),
+	regmap_reg_range(0x6914, 0x6920),
+	regmap_reg_range(0x6923, 0x6936),
+	regmap_reg_range(0x6938, 0x693d),
+	regmap_reg_range(0x6940, 0x6941),
+	regmap_reg_range(0x6944, 0x6953),
+	regmap_reg_range(0x6a00, 0x6a1b),
+	regmap_reg_range(0x6b00, 0x6b04),
+	regmap_reg_range(0x6b08, 0x6b13),
+	regmap_reg_range(0x6c00, 0x6c05),
+	regmap_reg_range(0x6c08, 0x6c1b),
+
+	/* Port 7 */
+	regmap_reg_range(0x7000, 0x7001),
+	regmap_reg_range(0x7004, 0x700b),
+	regmap_reg_range(0x701b, 0x701b),
+	regmap_reg_range(0x701f, 0x7021),
+	regmap_reg_range(0x7030, 0x7030),
+	regmap_reg_range(0x7040, 0x7040),
+	regmap_reg_range(0x7100, 0x711f),
+	regmap_reg_range(0x7200, 0x720b),
+	regmap_reg_range(0x7300, 0x7307),
+	regmap_reg_range(0x7400, 0x7405),
+	regmap_reg_range(0x7408, 0x7409),
+	regmap_reg_range(0x7410, 0x7417),
+	regmap_reg_range(0x7420, 0x7427),
+	regmap_reg_range(0x7500, 0x7507),
+	regmap_reg_range(0x7600, 0x7665),
+	regmap_reg_range(0x7668, 0x768f),
+	regmap_reg_range(0x7694, 0x769b),
+	regmap_reg_range(0x76a0, 0x76a2),
+	regmap_reg_range(0x76c0, 0x76c3),
+	regmap_reg_range(0x76d0, 0x76d4),
+	regmap_reg_range(0x76e0, 0x76ef),
+	regmap_reg_range(0x7800, 0x7804),
+	regmap_reg_range(0x7808, 0x780b),
+	regmap_reg_range(0x7810, 0x781f),
+	regmap_reg_range(0x7850, 0x7857),
+	regmap_reg_range(0x7860, 0x786b),
+	regmap_reg_range(0x7870, 0x788c),
+	regmap_reg_range(0x7890, 0x7890),
+	regmap_reg_range(0x7894, 0x78a0),
+	regmap_reg_range(0x78a0, 0x78ab),
+	regmap_reg_range(0x78c1, 0x78e7),
+	regmap_reg_range(0x7900, 0x7907),
+	regmap_reg_range(0x7914, 0x7920),
+	regmap_reg_range(0x7923, 0x7936),
+	regmap_reg_range(0x7938, 0x793d),
+	regmap_reg_range(0x7940, 0x7941),
+	regmap_reg_range(0x7944, 0x7953),
+	regmap_reg_range(0x7a00, 0x7a1b),
+	regmap_reg_range(0x7b00, 0x7b04),
+	regmap_reg_range(0x7b08, 0x7b13),
+	regmap_reg_range(0x7c00, 0x7c05),
+	regmap_reg_range(0x7c08, 0x7c1b),
+
+	/* Port 8 */
+	regmap_reg_range(0x8000, 0x8001),
+	regmap_reg_range(0x8004, 0x800b),
+	regmap_reg_range(0x801b, 0x801b),
+	regmap_reg_range(0x801f, 0x8021),
+	regmap_reg_range(0x8030, 0x8030),
+	regmap_reg_range(0x8040, 0x8040),
+	regmap_reg_range(0x8100, 0x811f),
+	regmap_reg_range(0x8200, 0x820b),
+	regmap_reg_range(0x8300, 0x8307),
+	regmap_reg_range(0x8400, 0x8405),
+	regmap_reg_range(0x8408, 0x8409),
+	regmap_reg_range(0x8410, 0x8417),
+	regmap_reg_range(0x8420, 0x8427),
+	regmap_reg_range(0x8500, 0x8507),
+	regmap_reg_range(0x8600, 0x8665),
+	regmap_reg_range(0x8668, 0x868f),
+	regmap_reg_range(0x8694, 0x869b),
+	regmap_reg_range(0x86a0, 0x86a2),
+	regmap_reg_range(0x86c0, 0x86c3),
+	regmap_reg_range(0x86d0, 0x86d4),
+	regmap_reg_range(0x86e0, 0x86ef),
+	regmap_reg_range(0x8800, 0x8804),
+	regmap_reg_range(0x8808, 0x880b),
+	regmap_reg_range(0x8810, 0x881f),
+	regmap_reg_range(0x8850, 0x8857),
+	regmap_reg_range(0x8860, 0x886b),
+	regmap_reg_range(0x8870, 0x888c),
+	regmap_reg_range(0x8890, 0x8890),
+	regmap_reg_range(0x8894, 0x88a0),
+	regmap_reg_range(0x88a0, 0x88ab),
+	regmap_reg_range(0x88c1, 0x88e7),
+	regmap_reg_range(0x8900, 0x8907),
+	regmap_reg_range(0x8914, 0x8920),
+	regmap_reg_range(0x8923, 0x8936),
+	regmap_reg_range(0x8938, 0x893d),
+	regmap_reg_range(0x8940, 0x8941),
+	regmap_reg_range(0x8944, 0x8953),
+	regmap_reg_range(0x8a00, 0x8a1b),
+	regmap_reg_range(0x8b00, 0x8b04),
+	regmap_reg_range(0x8b08, 0x8b13),
+	regmap_reg_range(0x8c00, 0x8c05),
+	regmap_reg_range(0x8c08, 0x8c1b),
+};
+
+static const struct regmap_access_table lan9373_register_set = {
+	.yes_ranges = lan9373_valid_regs,
+	.n_yes_ranges = ARRAY_SIZE(lan9373_valid_regs),
+};
+
+static const struct regmap_range lan9374_valid_regs[] = {
+	regmap_reg_range(0x0000, 0x0003),
+	regmap_reg_range(0x0007, 0x0007),
+	regmap_reg_range(0x000f, 0x0027),
+	regmap_reg_range(0x0030, 0x0035),
+	regmap_reg_range(0x0050, 0x005f),
+	regmap_reg_range(0x0100, 0x011b),
+	regmap_reg_range(0x0120, 0x0123),
+	regmap_reg_range(0x0128, 0x0140),
+	regmap_reg_range(0x0142, 0x0159),
+	regmap_reg_range(0x0200, 0x0203),
+	regmap_reg_range(0x0210, 0x0217),
+	regmap_reg_range(0x0300, 0x0300),
+	regmap_reg_range(0x0302, 0x0307),
+	regmap_reg_range(0x030a, 0x0336),
+	regmap_reg_range(0x0338, 0x033b),
+	regmap_reg_range(0x033e, 0x033e),
+	regmap_reg_range(0x0340, 0x0367),
+	regmap_reg_range(0x0370, 0x0370),
+	regmap_reg_range(0x0374, 0x0378),
+	regmap_reg_range(0x037c, 0x037d),
+	regmap_reg_range(0x0380, 0x0383),
+	regmap_reg_range(0x0390, 0x039b),
+	regmap_reg_range(0x03a4, 0x03b7),
+	regmap_reg_range(0x03e0, 0x03e3),
+	regmap_reg_range(0x03e8, 0x03eb),
+	regmap_reg_range(0x0400, 0x040e),
+	regmap_reg_range(0x0410, 0x0437),
+	regmap_reg_range(0x0440, 0x046f),
+	regmap_reg_range(0x0500, 0x054b),
+	regmap_reg_range(0x0550, 0x05b7),
+	regmap_reg_range(0x0640, 0x0645),
+	regmap_reg_range(0x0648, 0x064d),
+	regmap_reg_range(0x0650, 0x0655),
+	regmap_reg_range(0x0700, 0x07ff),
+	regmap_reg_range(0x0800, 0x088b),
+	regmap_reg_range(0x0900, 0x09ff),
+
+	/* Port 1 */
+	regmap_reg_range(0x1000, 0x1001),
+	regmap_reg_range(0x1004, 0x100b),
+	regmap_reg_range(0x101b, 0x101b),
+	regmap_reg_range(0x101f, 0x1021),
+	regmap_reg_range(0x1030, 0x1030),
+	regmap_reg_range(0x1040, 0x1040),
+	regmap_reg_range(0x1100, 0x111f),
+	regmap_reg_range(0x1200, 0x120b),
+	regmap_reg_range(0x1300, 0x1307),
+	regmap_reg_range(0x1400, 0x1405),
+	regmap_reg_range(0x1408, 0x1409),
+	regmap_reg_range(0x1410, 0x1417),
+	regmap_reg_range(0x1420, 0x1427),
+	regmap_reg_range(0x1500, 0x1507),
+	regmap_reg_range(0x1600, 0x1665),
+	regmap_reg_range(0x1668, 0x168f),
+	regmap_reg_range(0x1694, 0x169b),
+	regmap_reg_range(0x16a0, 0x16a2),
+	regmap_reg_range(0x16c0, 0x16c3),
+	regmap_reg_range(0x16d0, 0x16d4),
+	regmap_reg_range(0x16e0, 0x16ef),
+	regmap_reg_range(0x1800, 0x1804),
+	regmap_reg_range(0x1808, 0x180b),
+	regmap_reg_range(0x1810, 0x181f),
+	regmap_reg_range(0x1850, 0x1857),
+	regmap_reg_range(0x1860, 0x186b),
+	regmap_reg_range(0x1870, 0x188c),
+	regmap_reg_range(0x1890, 0x1890),
+	regmap_reg_range(0x1894, 0x18a0),
+	regmap_reg_range(0x18a0, 0x18ab),
+	regmap_reg_range(0x18c1, 0x18e7),
+	regmap_reg_range(0x1900, 0x1907),
+	regmap_reg_range(0x1914, 0x1920),
+	regmap_reg_range(0x1923, 0x1936),
+	regmap_reg_range(0x1938, 0x193d),
+	regmap_reg_range(0x1940, 0x1941),
+	regmap_reg_range(0x1944, 0x1953),
+	regmap_reg_range(0x1a00, 0x1a1b),
+	regmap_reg_range(0x1b00, 0x1b04),
+	regmap_reg_range(0x1b08, 0x1b13),
+	regmap_reg_range(0x1c00, 0x1c05),
+	regmap_reg_range(0x1c08, 0x1c1b),
+
+	/* Port 2 */
+	regmap_reg_range(0x2000, 0x2001),
+	regmap_reg_range(0x2004, 0x200b),
+	regmap_reg_range(0x201b, 0x201b),
+	regmap_reg_range(0x201f, 0x2021),
+	regmap_reg_range(0x2030, 0x2030),
+	regmap_reg_range(0x2040, 0x2040),
+	regmap_reg_range(0x2100, 0x211f),
+	regmap_reg_range(0x2200, 0x220b),
+	regmap_reg_range(0x2300, 0x2307),
+	regmap_reg_range(0x2400, 0x2405),
+	regmap_reg_range(0x2408, 0x2409),
+	regmap_reg_range(0x2410, 0x2417),
+	regmap_reg_range(0x2420, 0x2427),
+	regmap_reg_range(0x2500, 0x2507),
+	regmap_reg_range(0x2600, 0x2665),
+	regmap_reg_range(0x2668, 0x268f),
+	regmap_reg_range(0x2694, 0x269b),
+	regmap_reg_range(0x26a0, 0x26a2),
+	regmap_reg_range(0x26c0, 0x26c3),
+	regmap_reg_range(0x26d0, 0x26d4),
+	regmap_reg_range(0x26e0, 0x26ef),
+	regmap_reg_range(0x2800, 0x2804),
+	regmap_reg_range(0x2808, 0x280b),
+	regmap_reg_range(0x2810, 0x281f),
+	regmap_reg_range(0x2850, 0x2857),
+	regmap_reg_range(0x2860, 0x286b),
+	regmap_reg_range(0x2870, 0x288c),
+	regmap_reg_range(0x2890, 0x2890),
+	regmap_reg_range(0x2894, 0x28a0),
+	regmap_reg_range(0x28a0, 0x28ab),
+	regmap_reg_range(0x28c1, 0x28e7),
+	regmap_reg_range(0x2900, 0x2907),
+	regmap_reg_range(0x2914, 0x2920),
+	regmap_reg_range(0x2923, 0x2936),
+	regmap_reg_range(0x2938, 0x293d),
+	regmap_reg_range(0x2940, 0x2941),
+	regmap_reg_range(0x2944, 0x2953),
+	regmap_reg_range(0x2a00, 0x2a1b),
+	regmap_reg_range(0x2b00, 0x2b04),
+	regmap_reg_range(0x2b08, 0x2b13),
+	regmap_reg_range(0x2c00, 0x2c05),
+	regmap_reg_range(0x2c08, 0x2c1b),
+
+	/* Port 3 */
+	regmap_reg_range(0x3000, 0x3001),
+	regmap_reg_range(0x3004, 0x300b),
+	regmap_reg_range(0x301b, 0x301b),
+	regmap_reg_range(0x301f, 0x3021),
+	regmap_reg_range(0x3030, 0x3030),
+	regmap_reg_range(0x3040, 0x3040),
+	regmap_reg_range(0x3100, 0x311f),
+	regmap_reg_range(0x3200, 0x320b),
+	regmap_reg_range(0x3300, 0x3307),
+	regmap_reg_range(0x3400, 0x3405),
+	regmap_reg_range(0x3408, 0x3409),
+	regmap_reg_range(0x3410, 0x3417),
+	regmap_reg_range(0x3420, 0x3427),
+	regmap_reg_range(0x3500, 0x3507),
+	regmap_reg_range(0x3600, 0x3665),
+	regmap_reg_range(0x3668, 0x368f),
+	regmap_reg_range(0x3694, 0x369b),
+	regmap_reg_range(0x36a0, 0x36a2),
+	regmap_reg_range(0x36c0, 0x36c3),
+	regmap_reg_range(0x36d0, 0x36d4),
+	regmap_reg_range(0x36e0, 0x36ef),
+	regmap_reg_range(0x3800, 0x3804),
+	regmap_reg_range(0x3808, 0x380b),
+	regmap_reg_range(0x3810, 0x381f),
+	regmap_reg_range(0x3850, 0x3857),
+	regmap_reg_range(0x3860, 0x386b),
+	regmap_reg_range(0x3870, 0x388c),
+	regmap_reg_range(0x3890, 0x3890),
+	regmap_reg_range(0x3894, 0x38a0),
+	regmap_reg_range(0x38a0, 0x38ab),
+	regmap_reg_range(0x38c1, 0x38e7),
+	regmap_reg_range(0x3900, 0x3907),
+	regmap_reg_range(0x3914, 0x3920),
+	regmap_reg_range(0x3923, 0x3936),
+	regmap_reg_range(0x3938, 0x393d),
+	regmap_reg_range(0x3940, 0x3941),
+	regmap_reg_range(0x3944, 0x3953),
+	regmap_reg_range(0x3a00, 0x3a1b),
+	regmap_reg_range(0x3b00, 0x3b04),
+	regmap_reg_range(0x3b08, 0x3b13),
+	regmap_reg_range(0x3c00, 0x3c05),
+	regmap_reg_range(0x3c08, 0x3c1b),
+
+	/* Port 4 */
+	regmap_reg_range(0x4000, 0x4001),
+	regmap_reg_range(0x4004, 0x400b),
+	regmap_reg_range(0x401b, 0x401b),
+	regmap_reg_range(0x401f, 0x4021),
+	regmap_reg_range(0x4030, 0x4030),
+	regmap_reg_range(0x4040, 0x4040),
+	regmap_reg_range(0x4100, 0x411f),
+	regmap_reg_range(0x4200, 0x420b),
+	regmap_reg_range(0x4300, 0x4307),
+	regmap_reg_range(0x4400, 0x4405),
+	regmap_reg_range(0x4408, 0x4409),
+	regmap_reg_range(0x4410, 0x4417),
+	regmap_reg_range(0x4420, 0x4427),
+	regmap_reg_range(0x4500, 0x4507),
+	regmap_reg_range(0x4600, 0x4665),
+	regmap_reg_range(0x4668, 0x468f),
+	regmap_reg_range(0x4694, 0x469b),
+	regmap_reg_range(0x46a0, 0x46a2),
+	regmap_reg_range(0x46c0, 0x46c3),
+	regmap_reg_range(0x46d0, 0x46d4),
+	regmap_reg_range(0x46e0, 0x46ef),
+	regmap_reg_range(0x4800, 0x4804),
+	regmap_reg_range(0x4808, 0x480b),
+	regmap_reg_range(0x4810, 0x481f),
+	regmap_reg_range(0x4850, 0x4857),
+	regmap_reg_range(0x4860, 0x486b),
+	regmap_reg_range(0x4870, 0x488c),
+	regmap_reg_range(0x4890, 0x4890),
+	regmap_reg_range(0x4894, 0x48a0),
+	regmap_reg_range(0x48a0, 0x48ab),
+	regmap_reg_range(0x48c1, 0x48e7),
+	regmap_reg_range(0x4900, 0x4907),
+	regmap_reg_range(0x4914, 0x4920),
+	regmap_reg_range(0x4923, 0x4936),
+	regmap_reg_range(0x4938, 0x493d),
+	regmap_reg_range(0x4940, 0x4941),
+	regmap_reg_range(0x4944, 0x4953),
+	regmap_reg_range(0x4a00, 0x4a1b),
+	regmap_reg_range(0x4b00, 0x4b04),
+	regmap_reg_range(0x4b08, 0x4b13),
+	regmap_reg_range(0x4c00, 0x4c05),
+	regmap_reg_range(0x4c08, 0x4c1b),
+
+	/* Port 5 */
+	regmap_reg_range(0x5000, 0x5001),
+	regmap_reg_range(0x5004, 0x500b),
+	regmap_reg_range(0x501b, 0x501b),
+	regmap_reg_range(0x501f, 0x5021),
+	regmap_reg_range(0x5030, 0x5030),
+	regmap_reg_range(0x5040, 0x5040),
+	regmap_reg_range(0x5200, 0x520b),
+	regmap_reg_range(0x5300, 0x5307),
+	regmap_reg_range(0x5400, 0x5405),
+	regmap_reg_range(0x5408, 0x5409),
+	regmap_reg_range(0x5410, 0x5417),
+	regmap_reg_range(0x5420, 0x5427),
+	regmap_reg_range(0x5500, 0x5507),
+	regmap_reg_range(0x5600, 0x5665),
+	regmap_reg_range(0x5668, 0x568f),
+	regmap_reg_range(0x5694, 0x569b),
+	regmap_reg_range(0x56a0, 0x56a2),
+	regmap_reg_range(0x56c0, 0x56c3),
+	regmap_reg_range(0x56d0, 0x56d4),
+	regmap_reg_range(0x56e0, 0x56ef),
+	regmap_reg_range(0x5800, 0x5804),
+	regmap_reg_range(0x5808, 0x580b),
+	regmap_reg_range(0x5810, 0x581f),
+	regmap_reg_range(0x5850, 0x5857),
+	regmap_reg_range(0x5860, 0x586b),
+	regmap_reg_range(0x5870, 0x588c),
+	regmap_reg_range(0x5890, 0x5890),
+	regmap_reg_range(0x5894, 0x58a0),
+	regmap_reg_range(0x58a0, 0x58ab),
+	regmap_reg_range(0x58c1, 0x58e7),
+	regmap_reg_range(0x5900, 0x5907),
+	regmap_reg_range(0x5914, 0x5920),
+	regmap_reg_range(0x5923, 0x5936),
+	regmap_reg_range(0x5938, 0x593d),
+	regmap_reg_range(0x5940, 0x5941),
+	regmap_reg_range(0x5944, 0x5953),
+	regmap_reg_range(0x5a00, 0x5a1b),
+	regmap_reg_range(0x5b00, 0x5b04),
+	regmap_reg_range(0x5b08, 0x5b13),
+	regmap_reg_range(0x5c00, 0x5c05),
+	regmap_reg_range(0x5c08, 0x5c1b),
+
+	/* Port 6 */
+	regmap_reg_range(0x6000, 0x6001),
+	regmap_reg_range(0x6004, 0x600b),
+	regmap_reg_range(0x601b, 0x601b),
+	regmap_reg_range(0x601f, 0x6021),
+	regmap_reg_range(0x6030, 0x6030),
+	regmap_reg_range(0x6040, 0x6040),
+	regmap_reg_range(0x6200, 0x620b),
+	regmap_reg_range(0x6300, 0x6307),
+	regmap_reg_range(0x6400, 0x6405),
+	regmap_reg_range(0x6408, 0x6409),
+	regmap_reg_range(0x6410, 0x6417),
+	regmap_reg_range(0x6420, 0x6427),
+	regmap_reg_range(0x6500, 0x6507),
+	regmap_reg_range(0x6600, 0x6665),
+	regmap_reg_range(0x6668, 0x668f),
+	regmap_reg_range(0x6694, 0x669b),
+	regmap_reg_range(0x66a0, 0x66a2),
+	regmap_reg_range(0x66c0, 0x66c3),
+	regmap_reg_range(0x66d0, 0x66d4),
+	regmap_reg_range(0x66e0, 0x66ef),
+	regmap_reg_range(0x6800, 0x6804),
+	regmap_reg_range(0x6808, 0x680b),
+	regmap_reg_range(0x6810, 0x681f),
+	regmap_reg_range(0x6850, 0x6857),
+	regmap_reg_range(0x6860, 0x686b),
+	regmap_reg_range(0x6870, 0x688c),
+	regmap_reg_range(0x6890, 0x6890),
+	regmap_reg_range(0x6894, 0x68a0),
+	regmap_reg_range(0x68a0, 0x68ab),
+	regmap_reg_range(0x68c1, 0x68e7),
+	regmap_reg_range(0x6900, 0x6907),
+	regmap_reg_range(0x6914, 0x6920),
+	regmap_reg_range(0x6923, 0x6936),
+	regmap_reg_range(0x6938, 0x693d),
+	regmap_reg_range(0x6940, 0x6941),
+	regmap_reg_range(0x6944, 0x6953),
+	regmap_reg_range(0x6a00, 0x6a1b),
+	regmap_reg_range(0x6b00, 0x6b04),
+	regmap_reg_range(0x6b08, 0x6b13),
+	regmap_reg_range(0x6c00, 0x6c05),
+	regmap_reg_range(0x6c08, 0x6c1b),
+
+	/* Port 7 */
+	regmap_reg_range(0x7000, 0x7001),
+	regmap_reg_range(0x7004, 0x700b),
+	regmap_reg_range(0x701b, 0x701b),
+	regmap_reg_range(0x701f, 0x7021),
+	regmap_reg_range(0x7030, 0x7030),
+	regmap_reg_range(0x7040, 0x7040),
+	regmap_reg_range(0x7100, 0x711f),
+	regmap_reg_range(0x7200, 0x720b),
+	regmap_reg_range(0x7300, 0x7307),
+	regmap_reg_range(0x7400, 0x7405),
+	regmap_reg_range(0x7408, 0x7409),
+	regmap_reg_range(0x7410, 0x7417),
+	regmap_reg_range(0x7420, 0x7427),
+	regmap_reg_range(0x7500, 0x7507),
+	regmap_reg_range(0x7600, 0x7665),
+	regmap_reg_range(0x7668, 0x768f),
+	regmap_reg_range(0x7694, 0x769b),
+	regmap_reg_range(0x76a0, 0x76a2),
+	regmap_reg_range(0x76c0, 0x76c3),
+	regmap_reg_range(0x76d0, 0x76d4),
+	regmap_reg_range(0x76e0, 0x76ef),
+	regmap_reg_range(0x7800, 0x7804),
+	regmap_reg_range(0x7808, 0x780b),
+	regmap_reg_range(0x7810, 0x781f),
+	regmap_reg_range(0x7850, 0x7857),
+	regmap_reg_range(0x7860, 0x786b),
+	regmap_reg_range(0x7870, 0x788c),
+	regmap_reg_range(0x7890, 0x7890),
+	regmap_reg_range(0x7894, 0x78a0),
+	regmap_reg_range(0x78a0, 0x78ab),
+	regmap_reg_range(0x78c1, 0x78e7),
+	regmap_reg_range(0x7900, 0x7907),
+	regmap_reg_range(0x7914, 0x7920),
+	regmap_reg_range(0x7923, 0x7936),
+	regmap_reg_range(0x7938, 0x793d),
+	regmap_reg_range(0x7940, 0x7941),
+	regmap_reg_range(0x7944, 0x7953),
+	regmap_reg_range(0x7a00, 0x7a1b),
+	regmap_reg_range(0x7b00, 0x7b04),
+	regmap_reg_range(0x7b08, 0x7b13),
+	regmap_reg_range(0x7c00, 0x7c05),
+	regmap_reg_range(0x7c08, 0x7c1b),
+
+	/* Port 8 */
+	regmap_reg_range(0x8000, 0x8001),
+	regmap_reg_range(0x8004, 0x800b),
+	regmap_reg_range(0x801b, 0x801b),
+	regmap_reg_range(0x801f, 0x8021),
+	regmap_reg_range(0x8030, 0x8030),
+	regmap_reg_range(0x8040, 0x8040),
+	regmap_reg_range(0x8100, 0x811f),
+	regmap_reg_range(0x8200, 0x820b),
+	regmap_reg_range(0x8300, 0x8307),
+	regmap_reg_range(0x8400, 0x8405),
+	regmap_reg_range(0x8408, 0x8409),
+	regmap_reg_range(0x8410, 0x8417),
+	regmap_reg_range(0x8420, 0x8427),
+	regmap_reg_range(0x8500, 0x8507),
+	regmap_reg_range(0x8600, 0x8665),
+	regmap_reg_range(0x8668, 0x868f),
+	regmap_reg_range(0x8694, 0x869b),
+	regmap_reg_range(0x86a0, 0x86a2),
+	regmap_reg_range(0x86c0, 0x86c3),
+	regmap_reg_range(0x86d0, 0x86d4),
+	regmap_reg_range(0x86e0, 0x86ef),
+	regmap_reg_range(0x8800, 0x8804),
+	regmap_reg_range(0x8808, 0x880b),
+	regmap_reg_range(0x8810, 0x881f),
+	regmap_reg_range(0x8850, 0x8857),
+	regmap_reg_range(0x8860, 0x886b),
+	regmap_reg_range(0x8870, 0x888c),
+	regmap_reg_range(0x8890, 0x8890),
+	regmap_reg_range(0x8894, 0x88a0),
+	regmap_reg_range(0x88a0, 0x88ab),
+	regmap_reg_range(0x88c1, 0x88e7),
+	regmap_reg_range(0x8900, 0x8907),
+	regmap_reg_range(0x8914, 0x8920),
+	regmap_reg_range(0x8923, 0x8936),
+	regmap_reg_range(0x8938, 0x893d),
+	regmap_reg_range(0x8940, 0x8941),
+	regmap_reg_range(0x8944, 0x8953),
+	regmap_reg_range(0x8a00, 0x8a1b),
+	regmap_reg_range(0x8b00, 0x8b04),
+	regmap_reg_range(0x8b08, 0x8b13),
+	regmap_reg_range(0x8c00, 0x8c05),
+	regmap_reg_range(0x8c08, 0x8c1b),
+};
+
+static const struct regmap_access_table lan9374_register_set = {
+	.yes_ranges = lan9374_valid_regs,
+	.n_yes_ranges = ARRAY_SIZE(lan9374_valid_regs),
+};
+
 const struct ksz_chip_data ksz_switch_chips[] = {
 	[KSZ8563] = {
 		.chip_id = KSZ8563_CHIP_ID,
@@ -1334,6 +3084,8 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 		.supports_rmii = {false, false, false, false, true},
 		.supports_rgmii = {false, false, false, false, true},
 		.internal_phy = {true, true, true, true, false},
+		.wr_table = &lan9370_register_set,
+		.rd_table = &lan9370_register_set,
 	},
 
 	[LAN9371] = {
@@ -1358,6 +3110,8 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 		.supports_rmii = {false, false, false, false, true, true},
 		.supports_rgmii = {false, false, false, false, true, true},
 		.internal_phy = {true, true, true, true, false, false},
+		.wr_table = &lan9371_register_set,
+		.rd_table = &lan9371_register_set,
 	},
 
 	[LAN9372] = {
@@ -1386,6 +3140,8 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 				   true, true, false, false},
 		.internal_phy	= {true, true, true, true,
 				   false, false, true, true},
+		.wr_table = &lan9372_register_set,
+		.rd_table = &lan9372_register_set,
 	},
 
 	[LAN9373] = {
@@ -1414,6 +3170,8 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 				   true, true, false, false},
 		.internal_phy	= {true, true, true, false,
 				   false, false, true, true},
+		.wr_table = &lan9373_register_set,
+		.rd_table = &lan9373_register_set,
 	},
 
 	[LAN9374] = {
@@ -1442,6 +3200,8 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 				   true, true, false, false},
 		.internal_phy	= {true, true, true, true,
 				   false, false, true, true},
+		.wr_table = &lan9374_register_set,
+		.rd_table = &lan9374_register_set,
 	},
 };
 EXPORT_SYMBOL_GPL(ksz_switch_chips);
-- 
2.34.1


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

* [PATCH net-next 2/6] net: dsa: microchip: add ksz9563 in ksz_switch_ops and select based on compatible string
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 3/6] net: dsa: microchip: add irq in i2c probe Rakesh Sankaranarayanan
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

Add KSZ9563 inside ksz_switch_chips structure with
port_nirq as 3. KSZ9563 use KSZ9893 switch parameters
but port_nirq count is 3 for KSZ9563 whereas 2 for
KSZ9893. Add KSZ9563 inside ksz_switch_chips as a separate
member and from device tree map compatible string into
KSZ9563 inside ksz_spi.c and ksz9477_i2c.c.
Global Chip ID 1 and 2 registers read value 9893, select
sku based on  Global Chip ID 4 Register which read 0x1c
for KSZ9563.

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/ksz9477.c     |  3 ++-
 drivers/net/dsa/microchip/ksz9477_i2c.c |  2 +-
 drivers/net/dsa/microchip/ksz_common.c  | 33 +++++++++++++++++++++++--
 drivers/net/dsa/microchip/ksz_common.h  |  3 +++
 drivers/net/dsa/microchip/ksz_spi.c     |  2 +-
 5 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index a6a0321a8931..0d6b40968657 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -195,7 +195,8 @@ int ksz9477_reset_switch(struct ksz_device *dev)
 
 	/* KSZ9893 compatible chips do not support refclk configuration */
 	if (dev->chip_id == KSZ9893_CHIP_ID ||
-	    dev->chip_id == KSZ8563_CHIP_ID)
+	    dev->chip_id == KSZ8563_CHIP_ID ||
+	    dev->chip_id == KSZ9563_CHIP_ID)
 		return 0;
 
 	data8 = SW_ENABLE_REFCLKO;
diff --git a/drivers/net/dsa/microchip/ksz9477_i2c.c b/drivers/net/dsa/microchip/ksz9477_i2c.c
index 3763930dc6fc..55146584e9b5 100644
--- a/drivers/net/dsa/microchip/ksz9477_i2c.c
+++ b/drivers/net/dsa/microchip/ksz9477_i2c.c
@@ -101,7 +101,7 @@ static const struct of_device_id ksz9477_dt_ids[] = {
 	},
 	{
 		.compatible = "microchip,ksz9563",
-		.data = &ksz_switch_chips[KSZ9893]
+		.data = &ksz_switch_chips[KSZ9563]
 	},
 	{
 		.compatible = "microchip,ksz8563",
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index b0905c5b701d..7620855ba995 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -3032,6 +3032,31 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 		.gbit_capable = {true, true, true},
 	},
 
+	[KSZ9563] = {
+		.chip_id = KSZ9563_CHIP_ID,
+		.dev_name = "KSZ9563",
+		.num_vlans = 4096,
+		.num_alus = 4096,
+		.num_statics = 16,
+		.cpu_ports = 0x07,	/* can be configured as cpu port */
+		.port_cnt = 3,		/* total port count */
+		.port_nirqs = 3,
+		.ops = &ksz9477_dev_ops,
+		.mib_names = ksz9477_mib_names,
+		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
+		.reg_mib_cnt = MIB_COUNTER_NUM,
+		.regs = ksz9477_regs,
+		.masks = ksz9477_masks,
+		.shifts = ksz9477_shifts,
+		.xmii_ctrl0 = ksz9477_xmii_ctrl0,
+		.xmii_ctrl1 = ksz8795_xmii_ctrl1, /* Same as ksz8795 */
+		.supports_mii = {false, false, true},
+		.supports_rmii = {false, false, true},
+		.supports_rgmii = {false, false, true},
+		.internal_phy = {true, true, false},
+		.gbit_capable = {true, true, true},
+	},
+
 	[KSZ9567] = {
 		.chip_id = KSZ9567_CHIP_ID,
 		.dev_name = "KSZ9567",
@@ -4149,7 +4174,8 @@ static enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds,
 
 	if (dev->chip_id == KSZ8830_CHIP_ID ||
 	    dev->chip_id == KSZ8563_CHIP_ID ||
-	    dev->chip_id == KSZ9893_CHIP_ID)
+	    dev->chip_id == KSZ9893_CHIP_ID ||
+	    dev->chip_id == KSZ9563_CHIP_ID)
 		proto = DSA_TAG_PROTO_KSZ9893;
 
 	if (dev->chip_id == KSZ9477_CHIP_ID ||
@@ -4269,7 +4295,8 @@ static void ksz_set_xmii(struct ksz_device *dev, int port,
 		data8 |= bitval[P_RGMII_SEL];
 		/* On KSZ9893, disable RGMII in-band status support */
 		if (dev->chip_id == KSZ9893_CHIP_ID ||
-		    dev->chip_id == KSZ8563_CHIP_ID)
+		    dev->chip_id == KSZ8563_CHIP_ID ||
+		    dev->chip_id == KSZ9563_CHIP_ID)
 			data8 &= ~P_MII_MAC_MODE;
 		break;
 	default:
@@ -4542,6 +4569,8 @@ static int ksz_switch_detect(struct ksz_device *dev)
 
 			if (id4 == SKU_ID_KSZ8563)
 				dev->chip_id = KSZ8563_CHIP_ID;
+			else if (id4 == SKU_ID_KSZ9563)
+				dev->chip_id = KSZ9563_CHIP_ID;
 			else
 				dev->chip_id = KSZ9893_CHIP_ID;
 
diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h
index 9cfa179575ce..c6726cbd5465 100644
--- a/drivers/net/dsa/microchip/ksz_common.h
+++ b/drivers/net/dsa/microchip/ksz_common.h
@@ -154,6 +154,7 @@ enum ksz_model {
 	KSZ9896,
 	KSZ9897,
 	KSZ9893,
+	KSZ9563,
 	KSZ9567,
 	LAN9370,
 	LAN9371,
@@ -172,6 +173,7 @@ enum ksz_chip_id {
 	KSZ9896_CHIP_ID = 0x00989600,
 	KSZ9897_CHIP_ID = 0x00989700,
 	KSZ9893_CHIP_ID = 0x00989300,
+	KSZ9563_CHIP_ID = 0x00956300,
 	KSZ9567_CHIP_ID = 0x00956700,
 	LAN9370_CHIP_ID = 0x00937000,
 	LAN9371_CHIP_ID = 0x00937100,
@@ -551,6 +553,7 @@ static inline int is_lan937x(struct ksz_device *dev)
 /* KSZ9893, KSZ9563, KSZ8563 specific register  */
 #define REG_CHIP_ID4			0x0f
 #define SKU_ID_KSZ8563			0x3c
+#define SKU_ID_KSZ9563			0x1c
 
 /* Driver set switch broadcast storm protection at 10% rate. */
 #define BROADCAST_STORM_PROT_RATE	10
diff --git a/drivers/net/dsa/microchip/ksz_spi.c b/drivers/net/dsa/microchip/ksz_spi.c
index 1b6ab891b986..4f2186779082 100644
--- a/drivers/net/dsa/microchip/ksz_spi.c
+++ b/drivers/net/dsa/microchip/ksz_spi.c
@@ -163,7 +163,7 @@ static const struct of_device_id ksz_dt_ids[] = {
 	},
 	{
 		.compatible = "microchip,ksz9563",
-		.data = &ksz_switch_chips[KSZ9893]
+		.data = &ksz_switch_chips[KSZ9563]
 	},
 	{
 		.compatible = "microchip,ksz8563",
-- 
2.34.1


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

* [PATCH net-next 3/6] net: dsa: microchip: add irq in i2c probe
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 2/6] net: dsa: microchip: add ksz9563 in ksz_switch_ops and select based on compatible string Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 4/6] net: dsa: microchip: add error checking for ksz_pwrite Rakesh Sankaranarayanan
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

add device irq in i2c probe function.

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/ksz9477_i2c.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/dsa/microchip/ksz9477_i2c.c b/drivers/net/dsa/microchip/ksz9477_i2c.c
index 55146584e9b5..caa9acf1495c 100644
--- a/drivers/net/dsa/microchip/ksz9477_i2c.c
+++ b/drivers/net/dsa/microchip/ksz9477_i2c.c
@@ -41,6 +41,8 @@ static int ksz9477_i2c_probe(struct i2c_client *i2c,
 	if (i2c->dev.platform_data)
 		dev->pdata = i2c->dev.platform_data;
 
+	dev->irq = i2c->irq;
+
 	ret = ksz_switch_register(dev);
 
 	/* Main DSA driver may not be started yet. */
-- 
2.34.1


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

* [PATCH net-next 4/6] net: dsa: microchip: add error checking for ksz_pwrite
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
                   ` (2 preceding siblings ...)
  2022-11-02  4:10 ` [PATCH net-next 3/6] net: dsa: microchip: add irq in i2c probe Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 5/6] net: dsa: microchip: ksz8563: Add number of port irq Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions Rakesh Sankaranarayanan
  5 siblings, 0 replies; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

Add status validation for port register write inside
lan937x_change_mtu. ksz_pwrite and ksz_pread api's are
updated with return type int (Reference patch mentioned
below). Update lan937x_change_mtu with status validation
for ksz_pwrite16().

Link: https://patchwork.kernel.org/project/netdevbpf/patch/20220826105634.3855578-6-o.rempel@pengutronix.de/

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/lan937x_main.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/microchip/lan937x_main.c
index 7e4f307a0387..06d3d0308cba 100644
--- a/drivers/net/dsa/microchip/lan937x_main.c
+++ b/drivers/net/dsa/microchip/lan937x_main.c
@@ -242,7 +242,11 @@ int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu)
 	}
 
 	/* Write the frame size in PORT_MAX_FR_SIZE register */
-	ksz_pwrite16(dev, port, PORT_MAX_FR_SIZE, new_mtu);
+	ret = ksz_pwrite16(dev, port, PORT_MAX_FR_SIZE, new_mtu);
+	if (ret) {
+		dev_err(ds->dev, "failed to update mtu for port %d\n", port);
+		return ret;
+	}
 
 	return 0;
 }
-- 
2.34.1


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

* [PATCH net-next 5/6] net: dsa: microchip: ksz8563: Add number of port irq
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
                   ` (3 preceding siblings ...)
  2022-11-02  4:10 ` [PATCH net-next 4/6] net: dsa: microchip: add error checking for ksz_pwrite Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-02  4:10 ` [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions Rakesh Sankaranarayanan
  5 siblings, 0 replies; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

KSZ8563 have three port interrupts: PTP, PHY and ACL. Add
port_nirq as 3 for KSZ8563 inside ksz_chip_data.

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/ksz_common.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 7620855ba995..b2a0c0c32d0a 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -2789,6 +2789,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
 		.num_statics = 16,
 		.cpu_ports = 0x07,	/* can be configured as cpu port */
 		.port_cnt = 3,		/* total port count */
+		.port_nirqs = 3,
 		.ops = &ksz9477_dev_ops,
 		.mib_names = ksz9477_mib_names,
 		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
-- 
2.34.1


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

* [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions
  2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
                   ` (4 preceding siblings ...)
  2022-11-02  4:10 ` [PATCH net-next 5/6] net: dsa: microchip: ksz8563: Add number of port irq Rakesh Sankaranarayanan
@ 2022-11-02  4:10 ` Rakesh Sankaranarayanan
  2022-11-03  3:50   ` Jakub Kicinski
  5 siblings, 1 reply; 11+ messages in thread
From: Rakesh Sankaranarayanan @ 2022-11-02  4:10 UTC (permalink / raw)
  To: netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	olteanv, davem, edumazet, kuba, pabeni

Probe functions uses normal dev_err() to check error conditions
and print messages. Replace dev_err() with dev_err_probe() to
have more standardized format and error logging.

Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
---
 drivers/net/dsa/microchip/ksz8863_smi.c | 9 ++++-----
 drivers/net/dsa/microchip/ksz9477_i2c.c | 8 +++-----
 drivers/net/dsa/microchip/ksz_spi.c     | 8 +++-----
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/drivers/net/dsa/microchip/ksz8863_smi.c b/drivers/net/dsa/microchip/ksz8863_smi.c
index ddb40838181e..9e49c2cc0550 100644
--- a/drivers/net/dsa/microchip/ksz8863_smi.c
+++ b/drivers/net/dsa/microchip/ksz8863_smi.c
@@ -152,11 +152,10 @@ static int ksz8863_smi_probe(struct mdio_device *mdiodev)
 						  &regmap_smi[i], dev,
 						  &rc);
 		if (IS_ERR(dev->regmap[i])) {
-			ret = PTR_ERR(dev->regmap[i]);
-			dev_err(&mdiodev->dev,
-				"Failed to initialize regmap%i: %d\n",
-				ksz8863_regmap_config[i].val_bits, ret);
-			return ret;
+			return dev_err_probe(&mdiodev->dev,
+					     PTR_ERR(dev->regmap[i])
+					     "Failed to initialize regmap%i\n",
+					     ksz8863_regmap_config[i].val_bits);
 		}
 	}
 
diff --git a/drivers/net/dsa/microchip/ksz9477_i2c.c b/drivers/net/dsa/microchip/ksz9477_i2c.c
index caa9acf1495c..db4aec0a51dc 100644
--- a/drivers/net/dsa/microchip/ksz9477_i2c.c
+++ b/drivers/net/dsa/microchip/ksz9477_i2c.c
@@ -30,11 +30,9 @@ static int ksz9477_i2c_probe(struct i2c_client *i2c,
 		rc.lock_arg = &dev->regmap_mutex;
 		dev->regmap[i] = devm_regmap_init_i2c(i2c, &rc);
 		if (IS_ERR(dev->regmap[i])) {
-			ret = PTR_ERR(dev->regmap[i]);
-			dev_err(&i2c->dev,
-				"Failed to initialize regmap%i: %d\n",
-				ksz9477_regmap_config[i].val_bits, ret);
-			return ret;
+			return dev_err_probe(&i2c->dev, PTR_ERR(dev->regmap[i]),
+					     "Failed to initialize regmap%i\n",
+					     ksz9477_regmap_config[i].val_bits);
 		}
 	}
 
diff --git a/drivers/net/dsa/microchip/ksz_spi.c b/drivers/net/dsa/microchip/ksz_spi.c
index 4f2186779082..96c52e8fb51b 100644
--- a/drivers/net/dsa/microchip/ksz_spi.c
+++ b/drivers/net/dsa/microchip/ksz_spi.c
@@ -71,11 +71,9 @@ static int ksz_spi_probe(struct spi_device *spi)
 		dev->regmap[i] = devm_regmap_init_spi(spi, &rc);
 
 		if (IS_ERR(dev->regmap[i])) {
-			ret = PTR_ERR(dev->regmap[i]);
-			dev_err(&spi->dev,
-				"Failed to initialize regmap%i: %d\n",
-				regmap_config[i].val_bits, ret);
-			return ret;
+			return dev_err_probe(&spi->dev, PTR_ERR(dev->regmap[i]),
+					     "Failed to initialize regmap%i\n",
+					     regmap_config[i].val_bits);
 		}
 	}
 
-- 
2.34.1


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

* Re: [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation
  2022-11-02  4:10 ` [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation Rakesh Sankaranarayanan
@ 2022-11-02 17:15   ` Florian Fainelli
  2022-11-03  8:44     ` Rakesh.Sankaranarayanan
  0 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2022-11-02 17:15 UTC (permalink / raw)
  To: Rakesh Sankaranarayanan, netdev, linux-kernel
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, olteanv,
	davem, edumazet, kuba, pabeni

On 11/1/22 21:10, Rakesh Sankaranarayanan wrote:
> Add regmap_range and regmap_access_table to define valid
> register range for LAN937x switch family. LAN937x family
> have sku id's LAN9370, LAN9371, LAN9372, LAN9373 and
> LAN9374. regmap_range structure is arranged as Global
> Registers followed by Port Registers but they are distributed
> as Global Registers, T1 PHY Port Registers, Tx PHY Port Registers,
> RGMII Port Registers, SGMII Port Registers. On 16 bit addressing,
> most significant 4 bits are used for representing port number.
> So valid range of two different T1 PHY ports within a sku
> will differ on upper nibble only.
> 
> Signed-off-by: Rakesh Sankaranarayanan <rakesh.sankaranarayanan@microchip.com>
> ---
>   drivers/net/dsa/microchip/ksz_common.c | 1760 ++++++++++++++++++++++++
>   1 file changed, 1760 insertions(+)
> 
> diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
> index d612181b3226..b0905c5b701d 100644
> --- a/drivers/net/dsa/microchip/ksz_common.c
> +++ b/drivers/net/dsa/microchip/ksz_common.c
> @@ -1030,6 +1030,1756 @@ static const struct regmap_access_table ksz9896_register_set = {
>   	.n_yes_ranges = ARRAY_SIZE(ksz9896_valid_regs),
>   };
>   
> +static const struct regmap_range lan9370_valid_regs[] = {

Suggest you employ some macros for generating the valid register ranges 
for ports since there is a lot of repetition, and chances are that new 
registers may have to be added in the future, or corrected.

Between the fact that regmap makes you pull an entire subsystem into the 
kernel image thus adding to code sections, plus these big tables of 
register ranges adding to read-only data sections, this really makes me 
wonder what benefit there is just to expose a debugfs interface for 
dumping registers... value proposition does not seem so great to me.
-- 
Florian


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

* Re: [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions
  2022-11-02  4:10 ` [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions Rakesh Sankaranarayanan
@ 2022-11-03  3:50   ` Jakub Kicinski
  2022-11-03  8:55     ` Rakesh.Sankaranarayanan
  0 siblings, 1 reply; 11+ messages in thread
From: Jakub Kicinski @ 2022-11-03  3:50 UTC (permalink / raw)
  To: Rakesh Sankaranarayanan
  Cc: netdev, linux-kernel, woojung.huh, UNGLinuxDriver, andrew,
	vivien.didelot, f.fainelli, olteanv, davem, edumazet, pabeni

On Wed, 2 Nov 2022 09:40:58 +0530 Rakesh Sankaranarayanan wrote:
> +			return dev_err_probe(&mdiodev->dev,
> +					     PTR_ERR(dev->regmap[i])
> +					     "Failed to initialize regmap%i\n",
> +					     ksz8863_regmap_config[i].val_bits);
>  		}

Does not build.

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

* Re: [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation
  2022-11-02 17:15   ` Florian Fainelli
@ 2022-11-03  8:44     ` Rakesh.Sankaranarayanan
  0 siblings, 0 replies; 11+ messages in thread
From: Rakesh.Sankaranarayanan @ 2022-11-03  8:44 UTC (permalink / raw)
  To: netdev, f.fainelli, linux-kernel
  Cc: andrew, olteanv, davem, vivien.didelot, Woojung.Huh, kuba,
	pabeni, edumazet, UNGLinuxDriver

On Wed, 2022-11-02 at 10:15 -0700, Florian Fainelli wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you
> know the content is safe
> 
> On 11/1/22 21:10, Rakesh Sankaranarayanan wrote:
> > Add regmap_range and regmap_access_table to define valid
> > register range for LAN937x switch family. LAN937x family
> > have sku id's LAN9370, LAN9371, LAN9372, LAN9373 and
> > LAN9374. regmap_range structure is arranged as Global
> > Registers followed by Port Registers but they are distributed
> > as Global Registers, T1 PHY Port Registers, Tx PHY Port Registers,
> > RGMII Port Registers, SGMII Port Registers. On 16 bit addressing,
> > most significant 4 bits are used for representing port number.
> > So valid range of two different T1 PHY ports within a sku
> > will differ on upper nibble only.
> > 
> > Signed-off-by: Rakesh Sankaranarayanan
> > <rakesh.sankaranarayanan@microchip.com>
> > ---
> >   drivers/net/dsa/microchip/ksz_common.c | 1760
> > ++++++++++++++++++++++++
> >   1 file changed, 1760 insertions(+)
> > 
> > diff --git a/drivers/net/dsa/microchip/ksz_common.c
> > b/drivers/net/dsa/microchip/ksz_common.c
> > index d612181b3226..b0905c5b701d 100644
> > --- a/drivers/net/dsa/microchip/ksz_common.c
> > +++ b/drivers/net/dsa/microchip/ksz_common.c
> > @@ -1030,6 +1030,1756 @@ static const struct regmap_access_table
> > ksz9896_register_set = {
> >       .n_yes_ranges = ARRAY_SIZE(ksz9896_valid_regs),
> >   };
> > 
> > +static const struct regmap_range lan9370_valid_regs[] = {
> 
> Suggest you employ some macros for generating the valid register
> ranges
> for ports since there is a lot of repetition, and chances are that
> new
> registers may have to be added in the future, or corrected.
> 
> Between the fact that regmap makes you pull an entire subsystem into
> the
> kernel image thus adding to code sections, plus these big tables of
> register ranges adding to read-only data sections, this really makes
> me
> wonder what benefit there is just to expose a debugfs interface for
> dumping registers... value proposition does not seem so great to me.
> --
> Florian
> 

Thanks for the comment, Florian.

Changes added to have register range validation for lan937x series, I
tried adding common MACRO's instead of individual tables. It will
reduce lines of code and make it easier for any future modifications.
But anyway, finally it is going to expand as individual tables.
Considering this, I will remove this patch from series from next
revision.

But out of curiosity, I have seen usage of regmap_range tables in
kernel for the register range validation. Do you think that, is it
really required to have this check? or any other better approach?

Thanks,
Rakesh S


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

* Re: [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions
  2022-11-03  3:50   ` Jakub Kicinski
@ 2022-11-03  8:55     ` Rakesh.Sankaranarayanan
  0 siblings, 0 replies; 11+ messages in thread
From: Rakesh.Sankaranarayanan @ 2022-11-03  8:55 UTC (permalink / raw)
  To: kuba
  Cc: andrew, olteanv, davem, vivien.didelot, Woojung.Huh,
	linux-kernel, f.fainelli, netdev, UNGLinuxDriver, edumazet,
	pabeni

On Wed, 2022-11-02 at 20:50 -0700, Jakub Kicinski wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you
> know the content is safe
> 
> On Wed, 2 Nov 2022 09:40:58 +0530 Rakesh Sankaranarayanan wrote:
> > +                     return dev_err_probe(&mdiodev->dev,
> > +                                          PTR_ERR(dev->regmap[i])
> > +                                          "Failed to initialize
> > regmap%i\n",
> > +                                         
> > ksz8863_regmap_config[i].val_bits);
> >               }
> 
> Does not build.

Hi Jakub,

Really sorry that, this file skipped during my build due to config
issues on buildroot, and my build didn't reported the error. Realised
this error after submission and getting status on patchwork.

I understood the mistake and will make resolution in v2 version of
series.

Thanks,
Rakesh S

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

end of thread, other threads:[~2022-11-03  8:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-02  4:10 [PATCH net-next 0/6] net: dsa: microchip: regmap range validation and ksz_pwrite status check for lan937x and irq and error checking updates for ksz series Rakesh Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 1/6] net: dsa: microchip: lan937x: add regmap range validation Rakesh Sankaranarayanan
2022-11-02 17:15   ` Florian Fainelli
2022-11-03  8:44     ` Rakesh.Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 2/6] net: dsa: microchip: add ksz9563 in ksz_switch_ops and select based on compatible string Rakesh Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 3/6] net: dsa: microchip: add irq in i2c probe Rakesh Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 4/6] net: dsa: microchip: add error checking for ksz_pwrite Rakesh Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 5/6] net: dsa: microchip: ksz8563: Add number of port irq Rakesh Sankaranarayanan
2022-11-02  4:10 ` [PATCH net-next 6/6] net: dsa: microchip: add dev_err_probe in probe functions Rakesh Sankaranarayanan
2022-11-03  3:50   ` Jakub Kicinski
2022-11-03  8:55     ` Rakesh.Sankaranarayanan

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