Even though TC2QOS mapping is for switch egress queues, we need to
configure it correclty in order for the Broadcom tag ingress (CPU ->
switch) queue selection to work correctly since there is a 1:1 mapping
between switch egress queues and ingress queues.

Signed-off-by: Florian Fainelli <f.faine...@gmail.com>
---
 drivers/net/dsa/bcm_sf2.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c
index 3f1ad9d5d7c5..fc9f9f171e55 100644
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
@@ -103,6 +103,7 @@ static void bcm_sf2_brcm_hdr_setup(struct bcm_sf2_priv 
*priv, int port)
 static void bcm_sf2_imp_setup(struct dsa_switch *ds, int port)
 {
        struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
+       unsigned int i;
        u32 reg, offset;
 
        if (priv->type == BCM7445_DEVICE_ID)
@@ -129,6 +130,14 @@ static void bcm_sf2_imp_setup(struct dsa_switch *ds, int 
port)
        reg |= MII_DUMB_FWDG_EN;
        core_writel(priv, reg, CORE_SWITCH_CTRL);
 
+       /* Configure Traffic Class to QoS mapping, allow each priority to map
+        * to a different queue number
+        */
+       reg = core_readl(priv, CORE_PORT_TC2_QOS_MAP_PORT(port));
+       for (i = 0; i < 8; i++)
+               reg |= i << (PRT_TO_QID_SHIFT * i);
+       core_writel(priv, reg, CORE_PORT_TC2_QOS_MAP_PORT(port));
+
        bcm_sf2_brcm_hdr_setup(priv, port);
 
        /* Force link status for IMP port */
-- 
1.9.1

Reply via email to