|
@@ -702,6 +702,11 @@ static bool mv88e6xxx_6320_family(struct mv88e6xxx_chip *chip)
|
|
|
return chip->info->family == MV88E6XXX_FAMILY_6320;
|
|
|
}
|
|
|
|
|
|
+static bool mv88e6xxx_6341_family(struct mv88e6xxx_chip *chip)
|
|
|
+{
|
|
|
+ return chip->info->family == MV88E6XXX_FAMILY_6341;
|
|
|
+}
|
|
|
+
|
|
|
static bool mv88e6xxx_6351_family(struct mv88e6xxx_chip *chip)
|
|
|
{
|
|
|
return chip->info->family == MV88E6XXX_FAMILY_6351;
|
|
@@ -1726,7 +1731,8 @@ static int _mv88e6xxx_vtu_new(struct mv88e6xxx_chip *chip, u16 vid,
|
|
|
: GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER;
|
|
|
|
|
|
if (mv88e6xxx_6097_family(chip) || mv88e6xxx_6165_family(chip) ||
|
|
|
- mv88e6xxx_6351_family(chip) || mv88e6xxx_6352_family(chip)) {
|
|
|
+ mv88e6xxx_6351_family(chip) || mv88e6xxx_6352_family(chip) ||
|
|
|
+ mv88e6xxx_6341_family(chip)) {
|
|
|
struct mv88e6xxx_vtu_entry vstp;
|
|
|
|
|
|
/* Adding a VTU entry requires a valid STU entry. As VSTP is not
|
|
@@ -2577,7 +2583,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
|
|
if (mv88e6xxx_6352_family(chip) || mv88e6xxx_6351_family(chip) ||
|
|
|
mv88e6xxx_6165_family(chip) || mv88e6xxx_6097_family(chip) ||
|
|
|
mv88e6xxx_6095_family(chip) || mv88e6xxx_6320_family(chip) ||
|
|
|
- mv88e6xxx_6185_family(chip))
|
|
|
+ mv88e6xxx_6185_family(chip) || mv88e6xxx_6341_family(chip))
|
|
|
reg = PORT_CONTROL_2_MAP_DA;
|
|
|
|
|
|
if (mv88e6xxx_6095_family(chip) || mv88e6xxx_6185_family(chip)) {
|
|
@@ -2631,7 +2637,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
|
|
|
|
|
if (mv88e6xxx_6352_family(chip) || mv88e6xxx_6351_family(chip) ||
|
|
|
mv88e6xxx_6165_family(chip) || mv88e6xxx_6097_family(chip) ||
|
|
|
- mv88e6xxx_6320_family(chip)) {
|
|
|
+ mv88e6xxx_6320_family(chip) || mv88e6xxx_6341_family(chip)) {
|
|
|
/* Port ATU control: disable limiting the number of
|
|
|
* address database entries that this port is allowed
|
|
|
* to use.
|
|
@@ -3650,6 +3656,34 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
|
|
|
.reset = mv88e6352_g1_reset,
|
|
|
};
|
|
|
|
|
|
+static const struct mv88e6xxx_ops mv88e6341_ops = {
|
|
|
+ /* MV88E6XXX_FAMILY_6341 */
|
|
|
+ .get_eeprom = mv88e6xxx_g2_get_eeprom8,
|
|
|
+ .set_eeprom = mv88e6xxx_g2_set_eeprom8,
|
|
|
+ .set_switch_mac = mv88e6xxx_g2_set_switch_mac,
|
|
|
+ .phy_read = mv88e6xxx_g2_smi_phy_read,
|
|
|
+ .phy_write = mv88e6xxx_g2_smi_phy_write,
|
|
|
+ .port_set_link = mv88e6xxx_port_set_link,
|
|
|
+ .port_set_duplex = mv88e6xxx_port_set_duplex,
|
|
|
+ .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
|
|
|
+ .port_set_speed = mv88e6390_port_set_speed,
|
|
|
+ .port_tag_remap = mv88e6095_port_tag_remap,
|
|
|
+ .port_set_frame_mode = mv88e6351_port_set_frame_mode,
|
|
|
+ .port_set_egress_unknowns = mv88e6351_port_set_egress_unknowns,
|
|
|
+ .port_set_ether_type = mv88e6351_port_set_ether_type,
|
|
|
+ .port_jumbo_config = mv88e6165_port_jumbo_config,
|
|
|
+ .port_egress_rate_limiting = mv88e6097_port_egress_rate_limiting,
|
|
|
+ .port_pause_config = mv88e6097_port_pause_config,
|
|
|
+ .stats_snapshot = mv88e6390_g1_stats_snapshot,
|
|
|
+ .stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
+ .stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
+ .g1_set_cpu_port = mv88e6390_g1_set_cpu_port,
|
|
|
+ .g1_set_egress_port = mv88e6390_g1_set_egress_port,
|
|
|
+ .mgmt_rsvd2cpu = mv88e6390_g1_mgmt_rsvd2cpu,
|
|
|
+ .reset = mv88e6352_g1_reset,
|
|
|
+};
|
|
|
+
|
|
|
static const struct mv88e6xxx_ops mv88e6390_ops = {
|
|
|
/* MV88E6XXX_FAMILY_6390 */
|
|
|
.get_eeprom = mv88e6xxx_g2_get_eeprom8,
|
|
@@ -4037,6 +4071,20 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
|
|
.ops = &mv88e6321_ops,
|
|
|
},
|
|
|
|
|
|
+ [MV88E6341] = {
|
|
|
+ .prod_num = PORT_SWITCH_ID_PROD_NUM_6341,
|
|
|
+ .family = MV88E6XXX_FAMILY_6341,
|
|
|
+ .name = "Marvell 88E6341",
|
|
|
+ .num_databases = 4096,
|
|
|
+ .num_ports = 6,
|
|
|
+ .port_base_addr = 0x10,
|
|
|
+ .global1_addr = 0x1b,
|
|
|
+ .age_time_coeff = 3750,
|
|
|
+ .tag_protocol = DSA_TAG_PROTO_EDSA,
|
|
|
+ .flags = MV88E6XXX_FLAGS_FAMILY_6341,
|
|
|
+ .ops = &mv88e6341_ops,
|
|
|
+ },
|
|
|
+
|
|
|
[MV88E6350] = {
|
|
|
.prod_num = PORT_SWITCH_ID_PROD_NUM_6350,
|
|
|
.family = MV88E6XXX_FAMILY_6351,
|