net: dsa: bcm_sf2: Configure IMP port TC2QOS mapping
authorFlorian Fainelli <f.fainelli@gmail.com>
Mon, 4 Sep 2017 03:27:03 +0000 (20:27 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 5 Sep 2017 18:53:34 +0000 (11:53 -0700)
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.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/bcm_sf2.c

index 6b184bafa235ba9be9f8c8561932a6074db5839d..d7b53d53c116e978483606e7ab4d144c7f125f9c 100644 (file)
@@ -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 < SF2_NUM_EGRESS_QUEUES; 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 */