Store the number of egress queues in the per-chip info structure and advertise it through ds->num_tx_queues, following the ksz driver (struct ksz_chip_data.num_tx_queues). The queue count is a per-chip hardware property, and this driver supports several chips of the rtl8367c family. All currently-supported chips expose eight queues, but keeping the count in chip_info lets the QoS code that follows program the priority-to-queue map via the ieee8021q helpers for whatever queue count a chip carries, so the 802.1Q collapse is correct rather than hard-coded to eight. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/realtek/rtl8365mb_main.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/dsa/realtek/rtl8365mb_main.c b/drivers/net/dsa/realtek/rtl8365mb_main.c index 87ec924a0611..0924d31790e0 100644 --- a/drivers/net/dsa/realtek/rtl8365mb_main.c +++ b/drivers/net/dsa/realtek/rtl8365mb_main.c @@ -708,6 +708,7 @@ struct rtl8365mb_extint { * @extints: available external interfaces * @jam_table: chip-specific initialization jam table * @jam_size: size of the chip's jam table + * @num_tx_queues: number of egress queues exposed by the chip * * These data are specific to a given chip in the family of switches supported * by this driver. When adding support for another chip in the family, a new @@ -720,6 +721,7 @@ struct rtl8365mb_chip_info { const struct rtl8365mb_extint extints[RTL8365MB_MAX_NUM_EXTINTS]; const struct rtl8365mb_jam_tbl_entry *jam_table; size_t jam_size; + unsigned int num_tx_queues; }; /* Chip info for each supported switch in the family */ @@ -735,6 +737,7 @@ static const struct rtl8365mb_chip_info rtl8365mb_chip_infos[] = { }, .jam_table = rtl8365mb_init_jam_8365mb_vc, .jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc), + .num_tx_queues = 8, }, { .name = "RTL8367S", @@ -747,6 +750,7 @@ static const struct rtl8365mb_chip_info rtl8365mb_chip_infos[] = { }, .jam_table = rtl8365mb_init_jam_8365mb_vc, .jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc), + .num_tx_queues = 8, }, { .name = "RTL8367SB", @@ -761,6 +765,7 @@ static const struct rtl8365mb_chip_info rtl8365mb_chip_infos[] = { }, .jam_table = rtl8365mb_init_jam_8365mb_vc, .jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc), + .num_tx_queues = 8, }, { .name = "RTL8367RB-VB", @@ -774,6 +779,7 @@ static const struct rtl8365mb_chip_info rtl8365mb_chip_infos[] = { }, .jam_table = rtl8365mb_init_jam_8365mb_vc, .jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc), + .num_tx_queues = 8, }, }; @@ -3262,6 +3268,12 @@ static int rtl8365mb_setup(struct dsa_switch *ds) goto out_teardown_irq; } + /* The rtl8367c family this driver supports exposes a fixed number of + * egress queues per chip; advertise that count to DSA so the QoS code + * programs the priority-to-queue map for the right number of queues. + */ + ds->num_tx_queues = mb->chip_info->num_tx_queues; + /* Start statistics counter polling */ ret = rtl8365mb_stats_setup(priv); if (ret) { -- 2.47.3