From fdab488aa16b7986c129758563eae0c8034a6ae8 Mon Sep 17 00:00:00 2001 From: Jan Sondhauss Date: Mon, 8 Dec 2025 08:07:02 +0100 Subject: [PATCH] net: dsa: microchip: refactor ethtool and devlink - extract common regdump function - conistently use ksz9477 instead of ksz9 - fix integer constants in code Signed-off-by: Jan Sondhauss --- drivers/net/dsa/microchip/ksz8_ethtool.c | 24 ---------- drivers/net/dsa/microchip/ksz9477_ethtool.c | 31 ++---------- drivers/net/dsa/microchip/ksz_common.c | 2 +- drivers/net/dsa/microchip/ksz_devlink.c | 52 ++++++++++----------- drivers/net/dsa/microchip/ksz_ethtool.h | 30 +++++++++++- 5 files changed, 59 insertions(+), 80 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz8_ethtool.c b/drivers/net/dsa/microchip/ksz8_ethtool.c index 9ef4095f284f..1c413aa5b654 100644 --- a/drivers/net/dsa/microchip/ksz8_ethtool.c +++ b/drivers/net/dsa/microchip/ksz8_ethtool.c @@ -85,30 +85,6 @@ static void ksz8_get_regs_dump_fdb(struct ksz_device *dev, u32 *reg, u32 *pos) *pos = cnt; } -static void ksz_dump_regmap_range(struct ksz_device *dev, u32 *regs, u32 *pos, - u32 start, u32 end) -{ - int i, length = *pos; - - const struct regmap_range *yes_ranges = dev->info->rd_table->yes_ranges; - for (i = 0; i < dev->info->rd_table->n_yes_ranges; i++) { - const struct regmap_range range = yes_ranges[i]; - u32 reg; - if (range.range_max < start || range.range_min >= end) - continue; - - for (reg = range.range_min; reg <= range.range_max; reg++) { - u8 val; - ksz_read8(dev, reg, &val); - - regs[length++] = reg; - regs[length++] = val; - } - } - - *pos = length; -} - void ksz8_get_regs(struct ksz_device *dev, int port, struct ethtool_regs *regs, void *p) { diff --git a/drivers/net/dsa/microchip/ksz9477_ethtool.c b/drivers/net/dsa/microchip/ksz9477_ethtool.c index 2ecf3e7d2fef..69c518fc4591 100644 --- a/drivers/net/dsa/microchip/ksz9477_ethtool.c +++ b/drivers/net/dsa/microchip/ksz9477_ethtool.c @@ -3,7 +3,7 @@ #include "ksz9477_ethtool.h" #include "ksz_ethtool.h" -static const struct ksz_regdump_record ksz8_regdump_records[] = { +static const struct ksz_regdump_record ksz9477_regdump_records[] = { KSZ_REGDUMP_ENTRY(KSZ_REGDUMP_ID_GLOBAL, 0x00, 0x700), KSZ_REGDUMP_ENTRY(KSZ_REGDUMP_ID_PORT + 0, 0x1000, 0x1fff), KSZ_REGDUMP_ENTRY(KSZ_REGDUMP_ID_PORT + 1, 0x2000, 0x2fff), @@ -31,31 +31,6 @@ int ksz9477_get_regs_len(struct ksz_device *dev, int port) return length; } -static void ksz_dump_regmap_range(struct ksz_device *dev, u32 *regs, u32 *pos, - u32 start, u32 end) -{ - int i, length = *pos; - - const struct regmap_range *yes_ranges = dev->info->rd_table->yes_ranges; - - for (i = 0; i < dev->info->rd_table->n_yes_ranges; i++) { - const struct regmap_range range = yes_ranges[i]; - u32 reg; - if (range.range_max < start || range.range_min >= end) - continue; - - for (reg = range.range_min; reg <= range.range_max; reg++) { - u8 val; - ksz_read8(dev, reg, &val); - - regs[length++] = reg; - regs[length++] = val; - } - } - - *pos = length; -} - void ksz9477_get_regs(struct ksz_device *dev, int port, struct ethtool_regs *regs, void *p) { @@ -63,8 +38,8 @@ void ksz9477_get_regs(struct ksz_device *dev, int port, u32 pos = 0; u32 *reg = p; - for (i = 0; i < ARRAY_SIZE(ksz8_regdump_records); i++) { - struct ksz_regdump_record rec = ksz8_regdump_records[i]; + for (i = 0; i < ARRAY_SIZE(ksz9477_regdump_records); i++) { + struct ksz_regdump_record rec = ksz9477_regdump_records[i]; struct ksz_regdump_hdr *hdr = (struct ksz_regdump_hdr *)®[pos]; hdr->module_id = rec.hdr.module_id; diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index ba7e8fc00504..7d382ec38356 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -221,7 +221,7 @@ static const struct ksz_dev_ops ksz8_dev_ops = { .devlink_param_teardown = ksz8_teardown_devlink_params, .devlink_param_get = ksz_devlink_param_get, .devlink_param_set = ksz_devlink_param_set, - .devlink_info_get= ksz_devlink_info_get, + .devlink_info_get = ksz_devlink_info_get, .get_regs = ksz8_get_regs, .get_regs_len = ksz8_get_regs_len, }; diff --git a/drivers/net/dsa/microchip/ksz_devlink.c b/drivers/net/dsa/microchip/ksz_devlink.c index 649b0b1e8a7c..64954d4c25c4 100644 --- a/drivers/net/dsa/microchip/ksz_devlink.c +++ b/drivers/net/dsa/microchip/ksz_devlink.c @@ -13,8 +13,8 @@ #define KSZ8_P_BCAST_STORM_CTRL 0 #define KSZ8_PORT_BROADCAST_STORM BIT(7) -#define KSZ9_P_BCAST_STORM_CTRL 0x400 -#define KSZ9_PORT_BROADCAST_STORM BIT(1) +#define KSZ9477_P_BCAST_STORM_CTRL 0x400 +#define KSZ9477_PORT_BROADCAST_STORM BIT(1) static void ksz_port_cfg(struct ksz_device *dev, int port, int offset, u8 bits, @@ -30,8 +30,8 @@ enum ksz_devlink_param_id { KSZ_DEVLINK_PARAM_ID_MCAST_STORM_RATE_DISABLE, KSZ_DEVLINK_PARAM_ID_PORT_BASE, KSZ_DEVLINK_PARAM_ID_PORT_MAX = KSZ_DEVLINK_PARAM_ID_PORT_BASE + 3, - KSZ9_DEVLINK_PARAM_ID_PORT_BASE, - KSZ9_DEVLINK_PARAM_ID_PORT_MAX = KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 8, + KSZ9477_DEVLINK_PARAM_ID_PORT_BASE, + KSZ9477_DEVLINK_PARAM_ID_PORT_MAX = KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 8, }; static const struct devlink_param ksz8_devlink_params[] = { @@ -57,7 +57,7 @@ static const struct devlink_param ksz8_devlink_params[] = { }; -static const struct devlink_param ksz9_devlink_params[] = { +static const struct devlink_param ksz9477_devlink_params[] = { DSA_DEVLINK_PARAM_DRIVER(KSZ_DEVLINK_PARAM_ID_BROADCAST_STORM_RATE, "bcast storm rate", DEVLINK_PARAM_TYPE_U16, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), @@ -65,35 +65,35 @@ static const struct devlink_param ksz9_devlink_params[] = { "mcast storm rate disable", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE, "bcast storm protection enable port 0", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 1, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 1, "bcast storm protection enable port 1", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 2, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 2, "bcast storm protection enable port 2", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 3, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 3, "bcast storm protection enable port 3", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 4, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 4, "bcast storm protection enable port 4", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 5, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 5, "bcast storm protection enable port 5", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 6, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 6, "bcast storm protection enable port 6", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), - DSA_DEVLINK_PARAM_DRIVER(KSZ9_DEVLINK_PARAM_ID_PORT_BASE + 7, + DSA_DEVLINK_PARAM_DRIVER(KSZ9477_DEVLINK_PARAM_ID_PORT_BASE + 7, "bcast storm protection enable port 7", DEVLINK_PARAM_TYPE_BOOL, BIT(DEVLINK_PARAM_CMODE_RUNTIME)), @@ -113,14 +113,14 @@ void ksz8_teardown_devlink_params(struct dsa_switch *ds) int ksz9477_setup_devlink_params(struct dsa_switch *ds) { - return dsa_devlink_params_register(ds, ksz9_devlink_params, - ARRAY_SIZE(ksz9_devlink_params)); + return dsa_devlink_params_register(ds, ksz9477_devlink_params, + ARRAY_SIZE(ksz9477_devlink_params)); } void ksz9477_teardown_devlink_params(struct dsa_switch *ds) { - dsa_devlink_params_unregister(ds, ksz9_devlink_params, - ARRAY_SIZE(ksz9_devlink_params)); + dsa_devlink_params_unregister(ds, ksz9477_devlink_params, + ARRAY_SIZE(ksz9477_devlink_params)); } int ksz_devlink_param_get(struct ksz_device *dev, u32 id, @@ -152,14 +152,14 @@ int ksz_devlink_param_get(struct ksz_device *dev, u32 id, KSZ8_PORT_BROADCAST_STORM; } break; - case KSZ9_DEVLINK_PARAM_ID_PORT_BASE ... KSZ9_DEVLINK_PARAM_ID_PORT_MAX: { - int port = id - KSZ9_DEVLINK_PARAM_ID_PORT_BASE; + case KSZ9477_DEVLINK_PARAM_ID_PORT_BASE ... KSZ9477_DEVLINK_PARAM_ID_PORT_MAX: { + int port = id - KSZ9477_DEVLINK_PARAM_ID_PORT_BASE; u8 val; - ksz_pread8(dev, port, 0x400, &val); + ksz_pread8(dev, port, KSZ9477_P_BCAST_STORM_CTRL, &val); - ctx->val.vbool = (val & KSZ9_PORT_BROADCAST_STORM) == - KSZ9_PORT_BROADCAST_STORM; + ctx->val.vbool = (val & KSZ9477_PORT_BROADCAST_STORM) == + KSZ9477_PORT_BROADCAST_STORM; } break; default: @@ -205,11 +205,11 @@ int ksz_devlink_param_set(struct ksz_device *dev, u32 id, KSZ8_PORT_BROADCAST_STORM, ctx->val.vbool); } break; - case KSZ9_DEVLINK_PARAM_ID_PORT_BASE ... KSZ9_DEVLINK_PARAM_ID_PORT_MAX: { - int port = id - KSZ9_DEVLINK_PARAM_ID_PORT_BASE; + case KSZ9477_DEVLINK_PARAM_ID_PORT_BASE ... KSZ9477_DEVLINK_PARAM_ID_PORT_MAX: { + int port = id - KSZ9477_DEVLINK_PARAM_ID_PORT_BASE; - ksz_port_cfg(dev, port, KSZ9_P_BCAST_STORM_CTRL, - KSZ9_PORT_BROADCAST_STORM, ctx->val.vbool); + ksz_port_cfg(dev, port, KSZ9477_P_BCAST_STORM_CTRL, + KSZ9477_PORT_BROADCAST_STORM, ctx->val.vbool); } break; default: diff --git a/drivers/net/dsa/microchip/ksz_ethtool.h b/drivers/net/dsa/microchip/ksz_ethtool.h index 92f26c6794c1..3a47d1cc3074 100644 --- a/drivers/net/dsa/microchip/ksz_ethtool.h +++ b/drivers/net/dsa/microchip/ksz_ethtool.h @@ -5,6 +5,9 @@ #include #include +#include + +#include "ksz_common.h" // sizeof(ksz8_dyn_mac_entry) == 12 struct ksz8_dyn_mac_entry { @@ -56,5 +59,30 @@ enum { .end_off = 0, \ } -#endif +static inline void ksz_dump_regmap_range(struct ksz_device *dev, u32 *regs, u32 *pos, + u32 start, u32 end) +{ + int i, length = *pos; + + const struct regmap_range *yes_ranges = dev->info->rd_table->yes_ranges; + + for (i = 0; i < dev->info->rd_table->n_yes_ranges; i++) { + const struct regmap_range range = yes_ranges[i]; + u32 reg; + if (range.range_max < start || range.range_min >= end) + continue; + + for (reg = range.range_min; reg <= range.range_max; reg++) { + u8 val; + ksz_read8(dev, reg, &val); + + regs[length++] = reg; + regs[length++] = val; + } + } + + *pos = length; +} + +#endif