.port_set_speed = mv88e6185_port_set_speed,
 };
 
+static const struct mv88e6xxx_ops mv88e6190_ops = {
+       .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,
+};
+
+static const struct mv88e6xxx_ops mv88e6190x_ops = {
+       .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 = mv88e6390x_port_set_speed,
+};
+
+static const struct mv88e6xxx_ops mv88e6191_ops = {
+       .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,
+};
+
 static const struct mv88e6xxx_ops mv88e6240_ops = {
        .get_eeprom = mv88e6xxx_g2_get_eeprom16,
        .set_eeprom = mv88e6xxx_g2_set_eeprom16,
        .port_set_speed = mv88e6352_port_set_speed,
 };
 
+static const struct mv88e6xxx_ops mv88e6290_ops = {
+       .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,
+};
+
 static const struct mv88e6xxx_ops mv88e6320_ops = {
        .get_eeprom = mv88e6xxx_g2_get_eeprom16,
        .set_eeprom = mv88e6xxx_g2_set_eeprom16,
        .port_set_speed = mv88e6352_port_set_speed,
 };
 
+static const struct mv88e6xxx_ops mv88e6390_ops = {
+       .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,
+};
+
+static const struct mv88e6xxx_ops mv88e6390x_ops = {
+       .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 = mv88e6390x_port_set_speed,
+};
+
+static const struct mv88e6xxx_ops mv88e6391_ops = {
+       .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,
+};
+
 static const struct mv88e6xxx_info mv88e6xxx_table[] = {
        [MV88E6085] = {
                .prod_num = PORT_SWITCH_ID_PROD_NUM_6085,
                .ops = &mv88e6185_ops,
        },
 
+       [MV88E6190] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6190,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6190",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .g1_irqs = 9,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6190_ops,
+       },
+
+       [MV88E6190X] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6190X,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6190X",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .g1_irqs = 9,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6190x_ops,
+       },
+
+       [MV88E6191] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6191,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6191",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6391_ops,
+       },
+
        [MV88E6240] = {
                .prod_num = PORT_SWITCH_ID_PROD_NUM_6240,
                .family = MV88E6XXX_FAMILY_6352,
                .ops = &mv88e6240_ops,
        },
 
+       [MV88E6290] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6290,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6290",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .g1_irqs = 9,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6290_ops,
+       },
+
        [MV88E6320] = {
                .prod_num = PORT_SWITCH_ID_PROD_NUM_6320,
                .family = MV88E6XXX_FAMILY_6320,
                .flags = MV88E6XXX_FLAGS_FAMILY_6352,
                .ops = &mv88e6352_ops,
        },
+       [MV88E6390] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6390,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6390",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .g1_irqs = 9,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6390_ops,
+       },
+       [MV88E6390X] = {
+               .prod_num = PORT_SWITCH_ID_PROD_NUM_6390X,
+               .family = MV88E6XXX_FAMILY_6390,
+               .name = "Marvell 88E6390X",
+               .num_databases = 4096,
+               .num_ports = 11,        /* 10 + Z80 */
+               .port_base_addr = 0x0,
+               .global1_addr = 0x1b,
+               .age_time_coeff = 15000,
+               .g1_irqs = 9,
+               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
+               .ops = &mv88e6390x_ops,
+       },
 };
 
 static const struct mv88e6xxx_info *mv88e6xxx_lookup_info(unsigned int prod_num)
                .compatible = "marvell,mv88e6085",
                .data = &mv88e6xxx_table[MV88E6085],
        },
+       {
+               .compatible = "marvell,mv88e6190",
+               .data = &mv88e6xxx_table[MV88E6190],
+       },
        { /* sentinel */ },
 };
 
 
 #define PORT_SWITCH_ID_PROD_NUM_6175   0x175
 #define PORT_SWITCH_ID_PROD_NUM_6176   0x176
 #define PORT_SWITCH_ID_PROD_NUM_6185   0x1a7
+#define PORT_SWITCH_ID_PROD_NUM_6190   0x190
+#define PORT_SWITCH_ID_PROD_NUM_6190X  0x0a0
+#define PORT_SWITCH_ID_PROD_NUM_6191   0x191
 #define PORT_SWITCH_ID_PROD_NUM_6240   0x240
+#define PORT_SWITCH_ID_PROD_NUM_6290   0x290
 #define PORT_SWITCH_ID_PROD_NUM_6321   0x310
 #define PORT_SWITCH_ID_PROD_NUM_6352   0x352
 #define PORT_SWITCH_ID_PROD_NUM_6350   0x371
 #define PORT_SWITCH_ID_PROD_NUM_6351   0x375
+#define PORT_SWITCH_ID_PROD_NUM_6390   0x390
+#define PORT_SWITCH_ID_PROD_NUM_6390X  0x0a1
 #define PORT_CONTROL           0x04
 #define PORT_CONTROL_USE_CORE_TAG      BIT(15)
 #define PORT_CONTROL_DROP_ON_LOCK      BIT(14)
        MV88E6175,
        MV88E6176,
        MV88E6185,
+       MV88E6190,
+       MV88E6190X,
+       MV88E6191,
        MV88E6240,
+       MV88E6290,
        MV88E6320,
        MV88E6321,
        MV88E6350,
        MV88E6351,
        MV88E6352,
+       MV88E6390,
+       MV88E6390X,
 };
 
 enum mv88e6xxx_family {
        MV88E6XXX_FAMILY_6320,  /* 6320 6321 */
        MV88E6XXX_FAMILY_6351,  /* 6171 6175 6350 6351 */
        MV88E6XXX_FAMILY_6352,  /* 6172 6176 6240 6352 */
+       MV88E6XXX_FAMILY_6390,  /* 6190 6190X 6191 6290 6390 6390X */
 };
 
 enum mv88e6xxx_cap {
 
 struct mv88e6xxx_ops;
 
+#define MV88E6XXX_FLAGS_FAMILY_6390    \
+       (MV88E6XXX_FLAG_EEE |           \
+        MV88E6XXX_FLAG_GLOBAL2 |       \
+        MV88E6XXX_FLAG_PPU_ACTIVE |    \
+        MV88E6XXX_FLAG_STU |           \
+        MV88E6XXX_FLAG_TEMP |          \
+        MV88E6XXX_FLAG_TEMP_LIMIT |    \
+        MV88E6XXX_FLAG_VTU |           \
+        MV88E6XXX_FLAGS_IRL |          \
+        MV88E6XXX_FLAGS_MULTI_CHIP |   \
+        MV88E6XXX_FLAGS_PVT)
+
 struct mv88e6xxx_info {
        enum mv88e6xxx_family family;
        u16 prod_num;