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

Merge branch 'net-dsa-mv88e6xxx-port-mtu-support'

Chris Packham says:

====================
net: dsa: mv88e6xxx: port mtu support

This series connects up the mv88e6xxx switches to the dsa infrastructure for
configuring the port MTU. The first patch is also a bug fix which might be a
candiatate for stable.

I've rebased this series on top of net-next/master to pick up Andrew's change
for the gigabit switches. Patch 1 and 2 are unchanged (aside from adding
Andrew's Reviewed-by). Patch 3 is reworked to make use of the existing mtu
support.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+33 -1
+11 -1
drivers/net/dsa/mv88e6xxx/chip.c
··· 2699 2699 2700 2700 if (chip->info->ops->port_set_jumbo_size) 2701 2701 return 10240; 2702 + else if (chip->info->ops->set_max_frame_size) 2703 + return 1632; 2702 2704 return 1522; 2703 2705 } 2704 2706 ··· 2712 2710 mv88e6xxx_reg_lock(chip); 2713 2711 if (chip->info->ops->port_set_jumbo_size) 2714 2712 ret = chip->info->ops->port_set_jumbo_size(chip, port, new_mtu); 2713 + else if (chip->info->ops->set_max_frame_size) 2714 + ret = chip->info->ops->set_max_frame_size(chip, new_mtu); 2715 2715 else 2716 2716 if (new_mtu > 1522) 2717 2717 ret = -EINVAL; ··· 3454 3450 .vtu_getnext = mv88e6352_g1_vtu_getnext, 3455 3451 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 3456 3452 .phylink_validate = mv88e6185_phylink_validate, 3453 + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, 3457 3454 }; 3458 3455 3459 3456 static const struct mv88e6xxx_ops mv88e6095_ops = { ··· 3483 3478 .vtu_getnext = mv88e6185_g1_vtu_getnext, 3484 3479 .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge, 3485 3480 .phylink_validate = mv88e6185_phylink_validate, 3481 + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, 3486 3482 }; 3487 3483 3488 3484 static const struct mv88e6xxx_ops mv88e6097_ops = { ··· 3500 3494 .port_set_frame_mode = mv88e6351_port_set_frame_mode, 3501 3495 .port_set_egress_floods = mv88e6352_port_set_egress_floods, 3502 3496 .port_set_ether_type = mv88e6351_port_set_ether_type, 3503 - .port_set_jumbo_size = mv88e6165_port_set_jumbo_size, 3504 3497 .port_egress_rate_limiting = mv88e6095_port_egress_rate_limiting, 3505 3498 .port_pause_limit = mv88e6097_port_pause_limit, 3506 3499 .port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit, ··· 3521 3516 .vtu_getnext = mv88e6352_g1_vtu_getnext, 3522 3517 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 3523 3518 .phylink_validate = mv88e6185_phylink_validate, 3519 + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, 3524 3520 }; 3525 3521 3526 3522 static const struct mv88e6xxx_ops mv88e6123_ops = { ··· 3556 3550 .vtu_getnext = mv88e6352_g1_vtu_getnext, 3557 3551 .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, 3558 3552 .phylink_validate = mv88e6185_phylink_validate, 3553 + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, 3559 3554 }; 3560 3555 3561 3556 static const struct mv88e6xxx_ops mv88e6131_ops = { ··· 3946 3939 .vtu_getnext = mv88e6185_g1_vtu_getnext, 3947 3940 .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge, 3948 3941 .phylink_validate = mv88e6185_phylink_validate, 3942 + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, 3949 3943 }; 3950 3944 3951 3945 static const struct mv88e6xxx_ops mv88e6190_ops = { ··· 3967 3959 .port_set_frame_mode = mv88e6351_port_set_frame_mode, 3968 3960 .port_set_egress_floods = mv88e6352_port_set_egress_floods, 3969 3961 .port_set_ether_type = mv88e6351_port_set_ether_type, 3962 + .port_set_jumbo_size = mv88e6165_port_set_jumbo_size, 3970 3963 .port_pause_limit = mv88e6390_port_pause_limit, 3971 3964 .port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit, 3972 3965 .port_disable_pri_override = mv88e6xxx_port_disable_pri_override, ··· 4026 4017 .port_set_frame_mode = mv88e6351_port_set_frame_mode, 4027 4018 .port_set_egress_floods = mv88e6352_port_set_egress_floods, 4028 4019 .port_set_ether_type = mv88e6351_port_set_ether_type, 4020 + .port_set_jumbo_size = mv88e6165_port_set_jumbo_size, 4029 4021 .port_pause_limit = mv88e6390_port_pause_limit, 4030 4022 .port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit, 4031 4023 .port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
+3
drivers/net/dsa/mv88e6xxx/chip.h
··· 552 552 void (*phylink_validate)(struct mv88e6xxx_chip *chip, int port, 553 553 unsigned long *mask, 554 554 struct phylink_link_state *state); 555 + 556 + /* Max Frame Size */ 557 + int (*set_max_frame_size)(struct mv88e6xxx_chip *chip, int mtu); 555 558 }; 556 559 557 560 struct mv88e6xxx_irq_ops {
+17
drivers/net/dsa/mv88e6xxx/global1.c
··· 196 196 return mv88e6185_g1_wait_ppu_disabled(chip); 197 197 } 198 198 199 + int mv88e6185_g1_set_max_frame_size(struct mv88e6xxx_chip *chip, int mtu) 200 + { 201 + u16 val; 202 + int err; 203 + 204 + err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &val); 205 + if (err) 206 + return err; 207 + 208 + val &= ~MV88E6185_G1_CTL1_MAX_FRAME_1632; 209 + 210 + if (mtu > 1518) 211 + val |= MV88E6185_G1_CTL1_MAX_FRAME_1632; 212 + 213 + return mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, val); 214 + } 215 + 199 216 /* Offset 0x10: IP-PRI Mapping Register 0 200 217 * Offset 0x11: IP-PRI Mapping Register 1 201 218 * Offset 0x12: IP-PRI Mapping Register 2
+2
drivers/net/dsa/mv88e6xxx/global1.h
··· 282 282 int mv88e6185_g1_ppu_enable(struct mv88e6xxx_chip *chip); 283 283 int mv88e6185_g1_ppu_disable(struct mv88e6xxx_chip *chip); 284 284 285 + int mv88e6185_g1_set_max_frame_size(struct mv88e6xxx_chip *chip, int mtu); 286 + 285 287 int mv88e6xxx_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port); 286 288 int mv88e6320_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port); 287 289 int mv88e6390_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port);