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 <jan.sondhauss@wago.com>
This commit is contained in:
committed by
Oleg Karfich
parent
1e1dcb7b51
commit
fdab488aa1
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user