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

net: dsa: mv88e6xxx: add set_switch_mac to ops

Add a set_switch_mac chip-wide function to mv88e6xxx_ops and remove
MV88E6XXX_FLAG_G2_SWITCH_MAC flags.

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
b073d4e2 b3469dd8

+23 -13
+21 -7
drivers/net/dsa/mv88e6xxx/chip.c
··· 2909 2909 struct mv88e6xxx_chip *chip = ds->priv; 2910 2910 int err; 2911 2911 2912 + if (!chip->info->ops->set_switch_mac) 2913 + return -EOPNOTSUPP; 2914 + 2912 2915 mutex_lock(&chip->reg_lock); 2913 - 2914 - /* Has an indirect Switch MAC/WoL/WoF register in Global 2? */ 2915 - if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_G2_SWITCH_MAC)) 2916 - err = mv88e6xxx_g2_set_switch_mac(chip, addr); 2917 - else 2918 - err = mv88e6xxx_g1_set_switch_mac(chip, addr); 2919 - 2916 + err = chip->info->ops->set_switch_mac(chip, addr); 2920 2917 mutex_unlock(&chip->reg_lock); 2921 2918 2922 2919 return err; ··· 3207 3210 } 3208 3211 3209 3212 static const struct mv88e6xxx_ops mv88e6085_ops = { 3213 + .set_switch_mac = mv88e6xxx_g1_set_switch_mac, 3210 3214 .phy_read = mv88e6xxx_phy_ppu_read, 3211 3215 .phy_write = mv88e6xxx_phy_ppu_write, 3212 3216 }; 3213 3217 3214 3218 static const struct mv88e6xxx_ops mv88e6095_ops = { 3219 + .set_switch_mac = mv88e6xxx_g1_set_switch_mac, 3215 3220 .phy_read = mv88e6xxx_phy_ppu_read, 3216 3221 .phy_write = mv88e6xxx_phy_ppu_write, 3217 3222 }; 3218 3223 3219 3224 static const struct mv88e6xxx_ops mv88e6123_ops = { 3225 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3220 3226 .phy_read = mv88e6xxx_read, 3221 3227 .phy_write = mv88e6xxx_write, 3222 3228 }; 3223 3229 3224 3230 static const struct mv88e6xxx_ops mv88e6131_ops = { 3231 + .set_switch_mac = mv88e6xxx_g1_set_switch_mac, 3225 3232 .phy_read = mv88e6xxx_phy_ppu_read, 3226 3233 .phy_write = mv88e6xxx_phy_ppu_write, 3227 3234 }; 3228 3235 3229 3236 static const struct mv88e6xxx_ops mv88e6161_ops = { 3237 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3230 3238 .phy_read = mv88e6xxx_read, 3231 3239 .phy_write = mv88e6xxx_write, 3232 3240 }; 3233 3241 3234 3242 static const struct mv88e6xxx_ops mv88e6165_ops = { 3243 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3235 3244 .phy_read = mv88e6xxx_read, 3236 3245 .phy_write = mv88e6xxx_write, 3237 3246 }; 3238 3247 3239 3248 static const struct mv88e6xxx_ops mv88e6171_ops = { 3249 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3240 3250 .phy_read = mv88e6xxx_g2_smi_phy_read, 3241 3251 .phy_write = mv88e6xxx_g2_smi_phy_write, 3242 3252 }; 3243 3253 3244 3254 static const struct mv88e6xxx_ops mv88e6172_ops = { 3255 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3245 3256 .phy_read = mv88e6xxx_g2_smi_phy_read, 3246 3257 .phy_write = mv88e6xxx_g2_smi_phy_write, 3247 3258 }; 3248 3259 3249 3260 static const struct mv88e6xxx_ops mv88e6175_ops = { 3261 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3250 3262 .phy_read = mv88e6xxx_g2_smi_phy_read, 3251 3263 .phy_write = mv88e6xxx_g2_smi_phy_write, 3252 3264 }; 3253 3265 3254 3266 static const struct mv88e6xxx_ops mv88e6176_ops = { 3267 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3255 3268 .phy_read = mv88e6xxx_g2_smi_phy_read, 3256 3269 .phy_write = mv88e6xxx_g2_smi_phy_write, 3257 3270 }; 3258 3271 3259 3272 static const struct mv88e6xxx_ops mv88e6185_ops = { 3273 + .set_switch_mac = mv88e6xxx_g1_set_switch_mac, 3260 3274 .phy_read = mv88e6xxx_phy_ppu_read, 3261 3275 .phy_write = mv88e6xxx_phy_ppu_write, 3262 3276 }; 3263 3277 3264 3278 static const struct mv88e6xxx_ops mv88e6240_ops = { 3279 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3265 3280 .phy_read = mv88e6xxx_g2_smi_phy_read, 3266 3281 .phy_write = mv88e6xxx_g2_smi_phy_write, 3267 3282 }; 3268 3283 3269 3284 static const struct mv88e6xxx_ops mv88e6320_ops = { 3285 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3270 3286 .phy_read = mv88e6xxx_g2_smi_phy_read, 3271 3287 .phy_write = mv88e6xxx_g2_smi_phy_write, 3272 3288 }; 3273 3289 3274 3290 static const struct mv88e6xxx_ops mv88e6321_ops = { 3291 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3275 3292 .phy_read = mv88e6xxx_g2_smi_phy_read, 3276 3293 .phy_write = mv88e6xxx_g2_smi_phy_write, 3277 3294 }; 3278 3295 3279 3296 static const struct mv88e6xxx_ops mv88e6350_ops = { 3297 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3280 3298 .phy_read = mv88e6xxx_g2_smi_phy_read, 3281 3299 .phy_write = mv88e6xxx_g2_smi_phy_write, 3282 3300 }; 3283 3301 3284 3302 static const struct mv88e6xxx_ops mv88e6351_ops = { 3303 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3285 3304 .phy_read = mv88e6xxx_g2_smi_phy_read, 3286 3305 .phy_write = mv88e6xxx_g2_smi_phy_write, 3287 3306 }; 3288 3307 3289 3308 static const struct mv88e6xxx_ops mv88e6352_ops = { 3309 + .set_switch_mac = mv88e6xxx_g2_set_switch_mac, 3290 3310 .phy_read = mv88e6xxx_g2_smi_phy_read, 3291 3311 .phy_write = mv88e6xxx_g2_smi_phy_write, 3292 3312 };
+2 -6
drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
··· 423 423 MV88E6XXX_CAP_G2_IRL_DATA, /* (0x0a) Ingress Rate Data */ 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 - MV88E6XXX_CAP_G2_SWITCH_MAC, /* (0x0d) Switch MAC/WoL/WoF */ 427 426 MV88E6XXX_CAP_G2_POT, /* (0x0f) Priority Override Table */ 428 427 MV88E6XXX_CAP_G2_EEPROM_CMD, /* (0x14) EEPROM Command */ 429 428 MV88E6XXX_CAP_G2_EEPROM_DATA, /* (0x15) EEPROM Data */ ··· 472 473 #define MV88E6XXX_FLAG_G2_IRL_DATA BIT_ULL(MV88E6XXX_CAP_G2_IRL_DATA) 473 474 #define MV88E6XXX_FLAG_G2_PVT_ADDR BIT_ULL(MV88E6XXX_CAP_G2_PVT_ADDR) 474 475 #define MV88E6XXX_FLAG_G2_PVT_DATA BIT_ULL(MV88E6XXX_CAP_G2_PVT_DATA) 475 - #define MV88E6XXX_FLAG_G2_SWITCH_MAC BIT_ULL(MV88E6XXX_CAP_G2_SWITCH_MAC) 476 476 #define MV88E6XXX_FLAG_G2_POT BIT_ULL(MV88E6XXX_CAP_G2_POT) 477 477 #define MV88E6XXX_FLAG_G2_EEPROM_CMD BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_CMD) 478 478 #define MV88E6XXX_FLAG_G2_EEPROM_DATA BIT_ULL(MV88E6XXX_CAP_G2_EEPROM_DATA) ··· 535 537 MV88E6XXX_FLAG_GLOBAL2 | \ 536 538 MV88E6XXX_FLAG_G2_MGMT_EN_2X | \ 537 539 MV88E6XXX_FLAG_G2_MGMT_EN_0X | \ 538 - MV88E6XXX_FLAG_G2_SWITCH_MAC | \ 539 540 MV88E6XXX_FLAG_G2_POT | \ 540 541 MV88E6XXX_FLAG_STU | \ 541 542 MV88E6XXX_FLAG_TEMP | \ ··· 556 559 MV88E6XXX_FLAG_GLOBAL2 | \ 557 560 MV88E6XXX_FLAG_G2_MGMT_EN_2X | \ 558 561 MV88E6XXX_FLAG_G2_MGMT_EN_0X | \ 559 - MV88E6XXX_FLAG_G2_SWITCH_MAC | \ 560 562 MV88E6XXX_FLAG_G2_POT | \ 561 563 MV88E6XXX_FLAG_PPU_ACTIVE | \ 562 564 MV88E6XXX_FLAG_TEMP | \ ··· 573 577 MV88E6XXX_FLAG_GLOBAL2 | \ 574 578 MV88E6XXX_FLAG_G2_MGMT_EN_2X | \ 575 579 MV88E6XXX_FLAG_G2_MGMT_EN_0X | \ 576 - MV88E6XXX_FLAG_G2_SWITCH_MAC | \ 577 580 MV88E6XXX_FLAG_G2_POT | \ 578 581 MV88E6XXX_FLAG_PPU_ACTIVE | \ 579 582 MV88E6XXX_FLAG_STU | \ ··· 590 595 MV88E6XXX_FLAG_GLOBAL2 | \ 591 596 MV88E6XXX_FLAG_G2_MGMT_EN_2X | \ 592 597 MV88E6XXX_FLAG_G2_MGMT_EN_0X | \ 593 - MV88E6XXX_FLAG_G2_SWITCH_MAC | \ 594 598 MV88E6XXX_FLAG_G2_POT | \ 595 599 MV88E6XXX_FLAG_PPU_ACTIVE | \ 596 600 MV88E6XXX_FLAG_STU | \ ··· 696 702 }; 697 703 698 704 struct mv88e6xxx_ops { 705 + int (*set_switch_mac)(struct mv88e6xxx_chip *chip, u8 *addr); 706 + 699 707 int (*phy_read)(struct mv88e6xxx_chip *chip, int addr, int reg, 700 708 u16 *val); 701 709 int (*phy_write)(struct mv88e6xxx_chip *chip, int addr, int reg,