Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vivien Didelot and committed by
David S. Miller
ee4dc2e7 b073d4e2

+26 -24
+21 -13
drivers/net/dsa/mv88e6xxx/chip.c
··· 3168 3168 struct mv88e6xxx_chip *chip = ds->priv; 3169 3169 int err; 3170 3170 3171 + if (!chip->info->ops->get_eeprom) 3172 + return -EOPNOTSUPP; 3173 + 3171 3174 mutex_lock(&chip->reg_lock); 3172 - 3173 - if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16)) 3174 - err = mv88e6xxx_g2_get_eeprom16(chip, eeprom, data); 3175 - else 3176 - err = -EOPNOTSUPP; 3177 - 3175 + err = chip->info->ops->get_eeprom(chip, eeprom, data); 3178 3176 mutex_unlock(&chip->reg_lock); 3179 3177 3180 3178 if (err) ··· 3189 3191 struct mv88e6xxx_chip *chip = ds->priv; 3190 3192 int err; 3191 3193 3194 + if (!chip->info->ops->set_eeprom) 3195 + return -EOPNOTSUPP; 3196 + 3192 3197 if (eeprom->magic != 0xc3ec4951) 3193 3198 return -EINVAL; 3194 3199 3195 3200 mutex_lock(&chip->reg_lock); 3196 - 3197 - if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16)) 3198 - err = mv88e6xxx_g2_set_eeprom16(chip, eeprom, data); 3199 - else 3200 - err = -EOPNOTSUPP; 3201 - 3201 + err = chip->info->ops->set_eeprom(chip, eeprom, data); 3202 3202 mutex_unlock(&chip->reg_lock); 3203 3203 3204 3204 return err; ··· 3245 3249 }; 3246 3250 3247 3251 static const struct mv88e6xxx_ops mv88e6172_ops = { 3252 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3253 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3248 3254 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3249 3255 .phy_read = mv88e6xxx_g2_smi_phy_read, 3250 3256 .phy_write = mv88e6xxx_g2_smi_phy_write, ··· 3259 3261 }; 3260 3262 3261 3263 static const struct mv88e6xxx_ops mv88e6176_ops = { 3264 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3265 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3262 3266 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3263 3267 .phy_read = mv88e6xxx_g2_smi_phy_read, 3264 3268 .phy_write = mv88e6xxx_g2_smi_phy_write, ··· 3273 3273 }; 3274 3274 3275 3275 static const struct mv88e6xxx_ops mv88e6240_ops = { 3276 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3277 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3276 3278 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3277 3279 .phy_read = mv88e6xxx_g2_smi_phy_read, 3278 3280 .phy_write = mv88e6xxx_g2_smi_phy_write, 3279 3281 }; 3280 3282 3281 3283 static const struct mv88e6xxx_ops mv88e6320_ops = { 3284 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3285 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3282 3286 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3283 3287 .phy_read = mv88e6xxx_g2_smi_phy_read, 3284 3288 .phy_write = mv88e6xxx_g2_smi_phy_write, 3285 3289 }; 3286 3290 3287 3291 static const struct mv88e6xxx_ops mv88e6321_ops = { 3292 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3293 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3288 3294 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3289 3295 .phy_read = mv88e6xxx_g2_smi_phy_read, 3290 3296 .phy_write = mv88e6xxx_g2_smi_phy_write, ··· 3309 3303 }; 3310 3304 3311 3305 static const struct mv88e6xxx_ops mv88e6352_ops = { 3306 + .get_eeprom = mv88e6xxx_g2_get_eeprom16, 3307 + .set_eeprom = mv88e6xxx_g2_set_eeprom16, 3312 3308 .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3313 3309 .phy_read = mv88e6xxx_g2_smi_phy_read, 3314 3310 .phy_write = mv88e6xxx_g2_smi_phy_write, ··· 3833 3825 if (IS_ERR(chip->reset)) 3834 3826 return PTR_ERR(chip->reset); 3835 3827 3836 - if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_EEPROM16) && 3828 + if (chip->info->ops->get_eeprom && 3837 3829 !of_property_read_u32(np, "eeprom-length", &eeprom_len)) 3838 3830 chip->eeprom_len = eeprom_len; 3839 3831
+5 -11
drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
··· 424 424 MV88E6XXX_CAP_G2_PVT_ADDR, /* (0x0b) Cross Chip Port VLAN Addr */ 425 425 MV88E6XXX_CAP_G2_PVT_DATA, /* (0x0c) Cross Chip Port VLAN Data */ 426 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 428 /* PHY Polling Unit. 431 429 * See GLOBAL_CONTROL_PPU_ENABLE and GLOBAL_STATUS_PPU_POLLING. ··· 471 473 #define MV88E6XXX_FLAG_G2_PVT_ADDR BIT_ULL(MV88E6XXX_CAP_G2_PVT_ADDR) 472 474 #define MV88E6XXX_FLAG_G2_PVT_DATA BIT_ULL(MV88E6XXX_CAP_G2_PVT_DATA) 473 475 #define MV88E6XXX_FLAG_G2_POT BIT_ULL(MV88E6XXX_CAP_G2_POT) 474 - #define MV88E6XXX_FLAG_G2_EEPROM_CMD BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_CMD) 475 - #define MV88E6XXX_FLAG_G2_EEPROM_DATA BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_DATA) 476 476 477 477 #define MV88E6XXX_FLAG_PPU BIT_ULL(MV88E6XXX_CAP_PPU) 478 478 #define MV88E6XXX_FLAG_PPU_ACTIVE BIT_ULL(MV88E6XXX_CAP_PPU_ACTIVE) ··· 478 482 #define MV88E6XXX_FLAG_TEMP BIT_ULL(MV88E6XXX_CAP_TEMP) 479 483 #define MV88E6XXX_FLAG_TEMP_LIMIT BIT_ULL(MV88E6XXX_CAP_TEMP_LIMIT) 480 484 #define MV88E6XXX_FLAG_VTU BIT_ULL(MV88E6XXX_CAP_VTU) 481 - 482 - /* EEPROM Programming via Global2 with 16-bit data */ 483 - #define MV88E6XXX_FLAGS_EEPROM16 \ 484 - (MV88E6XXX_FLAG_G2_EEPROM_CMD | \ 485 - MV88E6XXX_FLAG_G2_EEPROM_DATA) 486 485 487 486 /* Ingress Rate Limit unit */ 488 487 #define MV88E6XXX_FLAGS_IRL \ ··· 552 561 MV88E6XXX_FLAG_TEMP | \ 553 562 MV88E6XXX_FLAG_TEMP_LIMIT | \ 554 563 MV88E6XXX_FLAG_VTU | \ 555 - MV88E6XXX_FLAGS_EEPROM16 | \ 556 564 MV88E6XXX_FLAGS_IRL | \ 557 565 MV88E6XXX_FLAGS_MULTI_CHIP | \ 558 566 MV88E6XXX_FLAGS_PVT) ··· 586 596 MV88E6XXX_FLAG_TEMP | \ 587 597 MV88E6XXX_FLAG_TEMP_LIMIT | \ 588 598 MV88E6XXX_FLAG_VTU | \ 589 - MV88E6XXX_FLAGS_EEPROM16 | \ 590 599 MV88E6XXX_FLAGS_IRL | \ 591 600 MV88E6XXX_FLAGS_MULTI_CHIP | \ 592 601 MV88E6XXX_FLAGS_PVT | \ ··· 685 696 }; 686 697 687 698 struct mv88e6xxx_ops { 699 + int (*get_eeprom)(struct mv88e6xxx_chip *chip, 700 + struct ethtool_eeprom *eeprom, u8 *data); 701 + int (*set_eeprom)(struct mv88e6xxx_chip *chip, 702 + struct ethtool_eeprom *eeprom, u8 *data); 703 + 688 704 int (*set_switch_mac)(struct mv88e6xxx_chip *chip, u8 *addr); 689 705 690 706 int (*phy_read)(struct mv88e6xxx_chip *chip, int addr, int reg,