net: tsec: Fix priv pointer in tsec_mcast_addr()
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Mon, 30 Sep 2013 09:44:41 +0000 (12:44 +0300)
committerJoe Hershberger <joe.hershberger@ni.com>
Fri, 22 Nov 2013 23:02:56 +0000 (17:02 -0600)
Access to privlist[1] (hardcoded referece to the 2nd tsec's
priv area) is neither correct nor does it make sense in the
current context.  Each tsec dev has access to its own priv
instance only, and hence to its own set of group address
registers (GADDR) to filter multicast addresses.

This fix leads to removal of the unused (faulty) privlist[]
and related global static vars.  Note that mcast() can be
called only after eth_device allocation and init, and hence
after priv area allocation, so dev->priv is correctly
initialized upon mcast() call.

Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Patch: 278990

drivers/net/tsec.c

index 9ffc801bc708346c7cb5492d3624c8f6276e9f80..9371ffa0daab9607b9828792be59f4792b4c993e 100644 (file)
@@ -33,11 +33,6 @@ typedef volatile struct rtxbd {
        rxbd8_t rxbd[PKTBUFSRX];
 } RTXBD;
 
-#define MAXCONTROLLERS (8)
-
-static struct tsec_private *privlist[MAXCONTROLLERS];
-static int num_tsecs = 0;
-
 #ifdef __GNUC__
 static RTXBD rtx __attribute__ ((aligned(8)));
 #else
@@ -122,7 +117,7 @@ static void tsec_configure_serdes(struct tsec_private *priv)
 static int
 tsec_mcast_addr(struct eth_device *dev, const u8 *mcast_mac, u8 set)
 {
-       struct tsec_private *priv = privlist[1];
+       struct tsec_private *priv = (struct tsec_private *)dev->priv;
        struct tsec __iomem *regs = priv->regs;
        u32 result, value;
        u8 whichbit, whichreg;
@@ -625,7 +620,6 @@ static int tsec_initialize(bd_t *bis, struct tsec_info_struct *tsec_info)
        if (NULL == priv)
                return 0;
 
-       privlist[num_tsecs++] = priv;
        priv->regs = tsec_info->regs;
        priv->phyregs_sgmii = tsec_info->miiregs_sgmii;