Commit 392ff7a8 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by David S. Miller

net: dsa: microchip: ksz8863_smi: fix bulk access

Current regmap bulk access is broken, resulting to wrong reads/writes
if ksz_read64/ksz_write64 functions are used.
Mostly this issue was visible by using ksz8_fdb_dump(), which returned
corrupt MAC address.

The reason is that regmap was configured to have max_raw_read/write,
even if ksz8863_mdio_read/write functions are able to handle unlimited
read/write accesses. On ksz_read64 function we are using multiple 32bit
accesses by incrementing each access by 1 instead of 4. Resulting buffer
had 01234567.12345678 instead of 01234567.89abcdef.

We have multiple ways to fix it:
- enable 4 byte alignment for 32bit accesses. Since the HW do not have
  this requirement. It will break driver.
- disable max_raw_* limit.

This patch is removing max_raw_* limit for regmap accesses in ksz8863_smi.

Fixes: 60a36476 ("net: dsa: microchip: Add Microchip KSZ8863 SMI based driver support")
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 492606cd
...@@ -82,22 +82,16 @@ static const struct regmap_bus regmap_smi[] = { ...@@ -82,22 +82,16 @@ static const struct regmap_bus regmap_smi[] = {
{ {
.read = ksz8863_mdio_read, .read = ksz8863_mdio_read,
.write = ksz8863_mdio_write, .write = ksz8863_mdio_write,
.max_raw_read = 1,
.max_raw_write = 1,
}, },
{ {
.read = ksz8863_mdio_read, .read = ksz8863_mdio_read,
.write = ksz8863_mdio_write, .write = ksz8863_mdio_write,
.val_format_endian_default = REGMAP_ENDIAN_BIG, .val_format_endian_default = REGMAP_ENDIAN_BIG,
.max_raw_read = 2,
.max_raw_write = 2,
}, },
{ {
.read = ksz8863_mdio_read, .read = ksz8863_mdio_read,
.write = ksz8863_mdio_write, .write = ksz8863_mdio_write,
.val_format_endian_default = REGMAP_ENDIAN_BIG, .val_format_endian_default = REGMAP_ENDIAN_BIG,
.max_raw_read = 4,
.max_raw_write = 4,
} }
}; };
...@@ -108,7 +102,6 @@ static const struct regmap_config ksz8863_regmap_config[] = { ...@@ -108,7 +102,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
.pad_bits = 24, .pad_bits = 24,
.val_bits = 8, .val_bits = 8,
.cache_type = REGCACHE_NONE, .cache_type = REGCACHE_NONE,
.use_single_read = 1,
.lock = ksz_regmap_lock, .lock = ksz_regmap_lock,
.unlock = ksz_regmap_unlock, .unlock = ksz_regmap_unlock,
}, },
...@@ -118,7 +111,6 @@ static const struct regmap_config ksz8863_regmap_config[] = { ...@@ -118,7 +111,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
.pad_bits = 24, .pad_bits = 24,
.val_bits = 16, .val_bits = 16,
.cache_type = REGCACHE_NONE, .cache_type = REGCACHE_NONE,
.use_single_read = 1,
.lock = ksz_regmap_lock, .lock = ksz_regmap_lock,
.unlock = ksz_regmap_unlock, .unlock = ksz_regmap_unlock,
}, },
...@@ -128,7 +120,6 @@ static const struct regmap_config ksz8863_regmap_config[] = { ...@@ -128,7 +120,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
.pad_bits = 24, .pad_bits = 24,
.val_bits = 32, .val_bits = 32,
.cache_type = REGCACHE_NONE, .cache_type = REGCACHE_NONE,
.use_single_read = 1,
.lock = ksz_regmap_lock, .lock = ksz_regmap_lock,
.unlock = ksz_regmap_unlock, .unlock = ksz_regmap_unlock,
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment