aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>2016-09-29 12:22:02 -0400
committerDavid S. Miller <davem@davemloft.net>2016-09-30 01:26:00 -0400
commitee4dc2e75337e5925e9434f28ec48374a65ffcd9 (patch)
tree5b48db1d60b9cc0ef7e1afbe6f531db431b1265a
parentb073d4e2b16a42f7d5b01814307ff41012c2e1ea (diff)
net: dsa: mv88e6xxx: add eeprom ops
Remove EEPROM flags in favor of new {get,set}_eeprom chip-wide functions in the mv88e6xxx_ops structure. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c34
-rw-r--r--drivers/net/dsa/mv88e6xxx/mv88e6xxx.h16
2 files changed, 26 insertions, 24 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index e40b71ba871c..883fd9809dd2 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3168,13 +3168,11 @@ static int mv88e6xxx_get_eeprom(struct dsa_switch *ds,
3168 struct mv88e6xxx_chip *chip = ds->priv; 3168 struct mv88e6xxx_chip *chip = ds->priv;
3169 int err; 3169 int err;
3170 3170
3171 mutex_lock(&chip->reg_lock); 3171 if (!chip->info->ops->get_eeprom)
3172 3172 return -EOPNOTSUPP;
3173 if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16))
3174 err = mv88e6xxx_g2_get_eeprom16(chip, eeprom, data);
3175 else
3176 err = -EOPNOTSUPP;
3177 3173
3174 mutex_lock(&chip->reg_lock);
3175 err = chip->info->ops->get_eeprom(chip, eeprom, data);
3178 mutex_unlock(&chip->reg_lock); 3176 mutex_unlock(&chip->reg_lock);
3179 3177
3180 if (err) 3178 if (err)
@@ -3191,16 +3189,14 @@ static int mv88e6xxx_set_eeprom(struct dsa_switch *ds,
3191 struct mv88e6xxx_chip *chip = ds->priv; 3189 struct mv88e6xxx_chip *chip = ds->priv;
3192 int err; 3190 int err;
3193 3191
3192 if (!chip->info->ops->set_eeprom)
3193 return -EOPNOTSUPP;
3194
3194 if (eeprom->magic != 0xc3ec4951) 3195 if (eeprom->magic != 0xc3ec4951)
3195 return -EINVAL; 3196 return -EINVAL;
3196 3197
3197 mutex_lock(&chip->reg_lock); 3198 mutex_lock(&chip->reg_lock);
3198 3199 err = chip->info->ops->set_eeprom(chip, eeprom, data);
3199 if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16))
3200 err = mv88e6xxx_g2_set_eeprom16(chip, eeprom, data);
3201 else
3202 err = -EOPNOTSUPP;
3203
3204 mutex_unlock(&chip->reg_lock); 3200 mutex_unlock(&chip->reg_lock);
3205 3201
3206 return err; 3202 return err;
@@ -3249,6 +3245,8 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
3249}; 3245};
3250 3246
3251static const struct mv88e6xxx_ops mv88e6172_ops = { 3247static const struct mv88e6xxx_ops mv88e6172_ops = {
3248 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3249 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3252 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3250 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3253 .phy_read = mv88e6xxx_g2_smi_phy_read, 3251 .phy_read = mv88e6xxx_g2_smi_phy_read,
3254 .phy_write = mv88e6xxx_g2_smi_phy_write, 3252 .phy_write = mv88e6xxx_g2_smi_phy_write,
@@ -3261,6 +3259,8 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
3261}; 3259};
3262 3260
3263static const struct mv88e6xxx_ops mv88e6176_ops = { 3261static const struct mv88e6xxx_ops mv88e6176_ops = {
3262 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3263 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3264 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3264 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3265 .phy_read = mv88e6xxx_g2_smi_phy_read, 3265 .phy_read = mv88e6xxx_g2_smi_phy_read,
3266 .phy_write = mv88e6xxx_g2_smi_phy_write, 3266 .phy_write = mv88e6xxx_g2_smi_phy_write,
@@ -3273,18 +3273,24 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
3273}; 3273};
3274 3274
3275static const struct mv88e6xxx_ops mv88e6240_ops = { 3275static const struct mv88e6xxx_ops mv88e6240_ops = {
3276 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3277 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3276 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3278 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3277 .phy_read = mv88e6xxx_g2_smi_phy_read, 3279 .phy_read = mv88e6xxx_g2_smi_phy_read,
3278 .phy_write = mv88e6xxx_g2_smi_phy_write, 3280 .phy_write = mv88e6xxx_g2_smi_phy_write,
3279}; 3281};
3280 3282
3281static const struct mv88e6xxx_ops mv88e6320_ops = { 3283static const struct mv88e6xxx_ops mv88e6320_ops = {
3284 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3285 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3282 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3286 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3283 .phy_read = mv88e6xxx_g2_smi_phy_read, 3287 .phy_read = mv88e6xxx_g2_smi_phy_read,
3284 .phy_write = mv88e6xxx_g2_smi_phy_write, 3288 .phy_write = mv88e6xxx_g2_smi_phy_write,
3285}; 3289};
3286 3290
3287static const struct mv88e6xxx_ops mv88e6321_ops = { 3291static const struct mv88e6xxx_ops mv88e6321_ops = {
3292 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3293 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3288 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3294 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3289 .phy_read = mv88e6xxx_g2_smi_phy_read, 3295 .phy_read = mv88e6xxx_g2_smi_phy_read,
3290 .phy_write = mv88e6xxx_g2_smi_phy_write, 3296 .phy_write = mv88e6xxx_g2_smi_phy_write,
@@ -3303,6 +3309,8 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
3303}; 3309};
3304 3310
3305static const struct mv88e6xxx_ops mv88e6352_ops = { 3311static const struct mv88e6xxx_ops mv88e6352_ops = {
3312 .get_eeprom = mv88e6xxx_g2_get_eeprom16,
3313 .set_eeprom = mv88e6xxx_g2_set_eeprom16,
3306 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3314 .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
3307 .phy_read = mv88e6xxx_g2_smi_phy_read, 3315 .phy_read = mv88e6xxx_g2_smi_phy_read,
3308 .phy_write = mv88e6xxx_g2_smi_phy_write, 3316 .phy_write = mv88e6xxx_g2_smi_phy_write,
@@ -3825,7 +3833,7 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev)
3825 if (IS_ERR(chip->reset)) 3833 if (IS_ERR(chip->reset))
3826 return PTR_ERR(chip->reset); 3834 return PTR_ERR(chip->reset);
3827 3835
3828 if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16) && 3836 if (chip->info->ops->get_eeprom &&
3829 !of_property_read_u32(np, "eeprom-length", &eeprom_len)) 3837 !of_property_read_u32(np, "eeprom-length", &eeprom_len))
3830 chip->eeprom_len = eeprom_len; 3838 chip->eeprom_len = eeprom_len;
3831 3839
diff --git a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
index d04184c7e068..e572121c196e 100644
--- a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
+++ b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
@@ -424,8 +424,6 @@ enum mv88e6xxx_cap {
424 MV88E6XXX_CAP_G2_PVT_ADDR, /* (0x0b) Cross Chip Port VLAN Addr */ 424 MV88E6XXX_CAP_G2_PVT_ADDR, /* (0x0b) Cross Chip Port VLAN Addr */
425 MV88E6XXX_CAP_G2_PVT_DATA, /* (0x0c) Cross Chip Port VLAN Data */ 425 MV88E6XXX_CAP_G2_PVT_DATA, /* (0x0c) Cross Chip Port VLAN Data */
426 MV88E6XXX_CAP_G2_POT, /* (0x0f) Priority Override Table */ 426 MV88E6XXX_CAP_G2_POT, /* (0x0f) Priority Override Table */
427 MV88E6XXX_CAP_G2_EEPROM_CMD, /* (0x14) EEPROM Command */
428 MV88E6XXX_CAP_G2_EEPROM_DATA, /* (0x15) EEPROM Data */
429 427
430 /* PHY Polling Unit. 428 /* PHY Polling Unit.
431 * See GLOBAL_CONTROL_PPU_ENABLE and GLOBAL_STATUS_PPU_POLLING. 429 * See GLOBAL_CONTROL_PPU_ENABLE and GLOBAL_STATUS_PPU_POLLING.
@@ -473,8 +471,6 @@ enum mv88e6xxx_cap {
473#define MV88E6XXX_FLAG_G2_PVT_ADDR BIT_ULL(MV88E6XXX_CAP_G2_PVT_ADDR) 471#define MV88E6XXX_FLAG_G2_PVT_ADDR BIT_ULL(MV88E6XXX_CAP_G2_PVT_ADDR)
474#define MV88E6XXX_FLAG_G2_PVT_DATA BIT_ULL(MV88E6XXX_CAP_G2_PVT_DATA) 472#define MV88E6XXX_FLAG_G2_PVT_DATA BIT_ULL(MV88E6XXX_CAP_G2_PVT_DATA)
475#define MV88E6XXX_FLAG_G2_POT BIT_ULL(MV88E6XXX_CAP_G2_POT) 473#define MV88E6XXX_FLAG_G2_POT BIT_ULL(MV88E6XXX_CAP_G2_POT)
476#define MV88E6XXX_FLAG_G2_EEPROM_CMD BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_CMD)
477#define MV88E6XXX_FLAG_G2_EEPROM_DATA BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_DATA)
478 474
479#define MV88E6XXX_FLAG_PPU BIT_ULL(MV88E6XXX_CAP_PPU) 475#define MV88E6XXX_FLAG_PPU BIT_ULL(MV88E6XXX_CAP_PPU)
480#define MV88E6XXX_FLAG_PPU_ACTIVE BIT_ULL(MV88E6XXX_CAP_PPU_ACTIVE) 476#define MV88E6XXX_FLAG_PPU_ACTIVE BIT_ULL(MV88E6XXX_CAP_PPU_ACTIVE)
@@ -483,11 +479,6 @@ enum mv88e6xxx_cap {
483#define MV88E6XXX_FLAG_TEMP_LIMIT BIT_ULL(MV88E6XXX_CAP_TEMP_LIMIT) 479#define MV88E6XXX_FLAG_TEMP_LIMIT BIT_ULL(MV88E6XXX_CAP_TEMP_LIMIT)
484#define MV88E6XXX_FLAG_VTU BIT_ULL(MV88E6XXX_CAP_VTU) 480#define MV88E6XXX_FLAG_VTU BIT_ULL(MV88E6XXX_CAP_VTU)
485 481
486/* EEPROM Programming via Global2 with 16-bit data */
487#define MV88E6XXX_FLAGS_EEPROM16 \
488 (MV88E6XXX_FLAG_G2_EEPROM_CMD | \
489 MV88E6XXX_FLAG_G2_EEPROM_DATA)
490
491/* Ingress Rate Limit unit */ 482/* Ingress Rate Limit unit */
492#define MV88E6XXX_FLAGS_IRL \ 483#define MV88E6XXX_FLAGS_IRL \
493 (MV88E6XXX_FLAG_G2_IRL_CMD | \ 484 (MV88E6XXX_FLAG_G2_IRL_CMD | \
@@ -561,7 +552,6 @@ enum mv88e6xxx_cap {
561 MV88E6XXX_FLAG_TEMP | \ 552 MV88E6XXX_FLAG_TEMP | \
562 MV88E6XXX_FLAG_TEMP_LIMIT | \ 553 MV88E6XXX_FLAG_TEMP_LIMIT | \
563 MV88E6XXX_FLAG_VTU | \ 554 MV88E6XXX_FLAG_VTU | \
564 MV88E6XXX_FLAGS_EEPROM16 | \
565 MV88E6XXX_FLAGS_IRL | \ 555 MV88E6XXX_FLAGS_IRL | \
566 MV88E6XXX_FLAGS_MULTI_CHIP | \ 556 MV88E6XXX_FLAGS_MULTI_CHIP | \
567 MV88E6XXX_FLAGS_PVT) 557 MV88E6XXX_FLAGS_PVT)
@@ -596,7 +586,6 @@ enum mv88e6xxx_cap {
596 MV88E6XXX_FLAG_TEMP | \ 586 MV88E6XXX_FLAG_TEMP | \
597 MV88E6XXX_FLAG_TEMP_LIMIT | \ 587 MV88E6XXX_FLAG_TEMP_LIMIT | \
598 MV88E6XXX_FLAG_VTU | \ 588 MV88E6XXX_FLAG_VTU | \
599 MV88E6XXX_FLAGS_EEPROM16 | \
600 MV88E6XXX_FLAGS_IRL | \ 589 MV88E6XXX_FLAGS_IRL | \
601 MV88E6XXX_FLAGS_MULTI_CHIP | \ 590 MV88E6XXX_FLAGS_MULTI_CHIP | \
602 MV88E6XXX_FLAGS_PVT | \ 591 MV88E6XXX_FLAGS_PVT | \
@@ -696,6 +685,11 @@ struct mv88e6xxx_bus_ops {
696}; 685};
697 686
698struct mv88e6xxx_ops { 687struct mv88e6xxx_ops {
688 int (*get_eeprom)(struct mv88e6xxx_chip *chip,
689 struct ethtool_eeprom *eeprom, u8 *data);
690 int (*set_eeprom)(struct mv88e6xxx_chip *chip,
691 struct ethtool_eeprom *eeprom, u8 *data);
692
699 int (*set_switch_mac)(struct mv88e6xxx_chip *chip, u8 *addr); 693 int (*set_switch_mac)(struct mv88e6xxx_chip *chip, u8 *addr);
700 694
701 int (*phy_read)(struct mv88e6xxx_chip *chip, int addr, int reg, 695 int (*phy_read)(struct mv88e6xxx_chip *chip, int addr, int reg,