mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
net: dsa: microchip: ksz8863_smi: fix bulk access
[ Upstream commit392ff7a84c] 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:60a3647600("net: dsa: microchip: Add Microchip KSZ8863 SMI based driver support") Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c0de1a26e6
commit
4597e104a3
@@ -86,22 +86,16 @@ static const struct regmap_bus regmap_smi[] = {
|
||||
{
|
||||
.read = ksz8863_mdio_read,
|
||||
.write = ksz8863_mdio_write,
|
||||
.max_raw_read = 1,
|
||||
.max_raw_write = 1,
|
||||
},
|
||||
{
|
||||
.read = ksz8863_mdio_read,
|
||||
.write = ksz8863_mdio_write,
|
||||
.val_format_endian_default = REGMAP_ENDIAN_BIG,
|
||||
.max_raw_read = 2,
|
||||
.max_raw_write = 2,
|
||||
},
|
||||
{
|
||||
.read = ksz8863_mdio_read,
|
||||
.write = ksz8863_mdio_write,
|
||||
.val_format_endian_default = REGMAP_ENDIAN_BIG,
|
||||
.max_raw_read = 4,
|
||||
.max_raw_write = 4,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -112,7 +106,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
|
||||
.pad_bits = 24,
|
||||
.val_bits = 8,
|
||||
.cache_type = REGCACHE_NONE,
|
||||
.use_single_read = 1,
|
||||
.lock = ksz_regmap_lock,
|
||||
.unlock = ksz_regmap_unlock,
|
||||
},
|
||||
@@ -122,7 +115,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
|
||||
.pad_bits = 24,
|
||||
.val_bits = 16,
|
||||
.cache_type = REGCACHE_NONE,
|
||||
.use_single_read = 1,
|
||||
.lock = ksz_regmap_lock,
|
||||
.unlock = ksz_regmap_unlock,
|
||||
},
|
||||
@@ -132,7 +124,6 @@ static const struct regmap_config ksz8863_regmap_config[] = {
|
||||
.pad_bits = 24,
|
||||
.val_bits = 32,
|
||||
.cache_type = REGCACHE_NONE,
|
||||
.use_single_read = 1,
|
||||
.lock = ksz_regmap_lock,
|
||||
.unlock = ksz_regmap_unlock,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user