.port_cnt = 3,          /* total port count */
                .port_nirqs = 3,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &ksz9477_dev_ops,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
+               .num_ipvs = 4,
                .ops = &ksz8_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
+               .num_ipvs = 4,
                .ops = &ksz8_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
+               .num_ipvs = 4,
                .ops = &ksz8_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .cpu_ports = 0x4,       /* can be configured as cpu port */
                .port_cnt = 3,
                .num_tx_queues = 4,
+               .num_ipvs = 4,
                .ops = &ksz8_dev_ops,
                .phylink_mac_ops = &ksz8830_phylink_mac_ops,
                .mib_names = ksz88xx_mib_names,
                .port_cnt = 7,          /* total physical port count */
                .port_nirqs = 4,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &ksz9477_dev_ops,
                .port_cnt = 6,          /* total physical port count */
                .port_nirqs = 2,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .ops = &ksz9477_dev_ops,
                .phylink_mac_ops = &ksz9477_phylink_mac_ops,
                .mib_names = ksz9477_mib_names,
                .port_cnt = 7,          /* total physical port count */
                .port_nirqs = 2,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .ops = &ksz9477_dev_ops,
                .phylink_mac_ops = &ksz9477_phylink_mac_ops,
                .mib_names = ksz9477_mib_names,
                .port_cnt = 3,          /* total port count */
                .port_nirqs = 2,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .ops = &ksz9477_dev_ops,
                .phylink_mac_ops = &ksz9477_phylink_mac_ops,
                .mib_names = ksz9477_mib_names,
                .port_cnt = 3,          /* total port count */
                .port_nirqs = 3,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &ksz9477_dev_ops,
                .port_cnt = 7,          /* total port count */
                .port_nirqs = 3,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &ksz9477_dev_ops,
                .port_cnt = 7,          /* total physical port count */
                .port_nirqs = 3,
                .num_tx_queues = 4,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &ksz9477_dev_ops,
                .port_cnt = 5,          /* total physical port count */
                .port_nirqs = 6,
                .num_tx_queues = 8,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &lan937x_dev_ops,
                .port_cnt = 6,          /* total physical port count */
                .port_nirqs = 6,
                .num_tx_queues = 8,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &lan937x_dev_ops,
                .port_cnt = 8,          /* total physical port count */
                .port_nirqs = 6,
                .num_tx_queues = 8,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &lan937x_dev_ops,
                .port_cnt = 5,          /* total physical port count */
                .port_nirqs = 6,
                .num_tx_queues = 8,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &lan937x_dev_ops,
                .port_cnt = 8,          /* total physical port count */
                .port_nirqs = 6,
                .num_tx_queues = 8,
+               .num_ipvs = 8,
                .tc_cbs_supported = true,
                .tc_ets_supported = true,
                .ops = &lan937x_dev_ops,
        for (tc_prio = 0; tc_prio < ARRAY_SIZE(p->priomap); tc_prio++) {
                int queue;
 
-               if (tc_prio > KSZ9477_MAX_TC_PRIO)
+               if (tc_prio >= dev->info->num_ipvs)
                        break;
 
                queue = ksz_ets_band_to_queue(p, p->priomap[tc_prio]);
        /* Revert the queue mapping for TC-priority to its default setting on
         * the chip.
         */
-       for (tc_prio = 0; tc_prio <= KSZ9477_MAX_TC_PRIO; tc_prio++) {
+       for (tc_prio = 0; tc_prio < dev->info->num_ipvs; tc_prio++) {
                int queue;
 
                queue = tc_prio >> s;