bmips: minor ethernet driver cleanups and fixes
authorÁlvaro Fernández Rojas <noltari@gmail.com>
Sun, 14 Mar 2021 13:22:53 +0000 (14:22 +0100)
committerÁlvaro Fernández Rojas <noltari@gmail.com>
Sun, 14 Mar 2021 15:21:27 +0000 (16:21 +0100)
Add some minor ethernet driver cleanups and fixes to improve code quality.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c

index dc55e3ccb92eb05680d4d41d717a2cd0529d44f9..2a27118aa749d73309fd868f6400349367b00450 100644 (file)
@@ -38,7 +38,7 @@
 #define DMA_CHAN_WIDTH                 0x10
 
 /* Controller Configuration Register */
-#define DMA_CFG_REG                    (0x0)
+#define DMA_CFG_REG                    0x0
 #define DMA_CFG_EN_SHIFT               0
 #define DMA_CFG_EN_MASK                        (1 << DMA_CFG_EN_SHIFT)
 #define DMA_CFG_FLOWCH_MASK(x)         (1 << ((x >> 1) + 1))
@@ -55,7 +55,7 @@
 #define DMA_BUFALLOC_FORCE_MASK                (1 << DMA_BUFALLOC_FORCE_SHIFT)
 
 /* Channel Configuration register */
-#define DMAC_CHANCFG_REG               (0x0)
+#define DMAC_CHANCFG_REG               0x0
 #define DMAC_CHANCFG_EN_SHIFT          0
 #define DMAC_CHANCFG_EN_MASK           (1 << DMAC_CHANCFG_EN_SHIFT)
 #define DMAC_CHANCFG_PKTHALT_SHIFT     1
 #define DMAC_CHANCFG_FLOWC_EN_MASK     (1 << DMAC_CHANCFG_FLOWC_EN_SHIFT)
 
 /* Interrupt Control/Status register */
-#define DMAC_IR_REG                    (0x4)
+#define DMAC_IR_REG                    0x4
 #define DMAC_IR_BUFDONE_MASK           (1 << 0)
 #define DMAC_IR_PKTDONE_MASK           (1 << 1)
 #define DMAC_IR_NOTOWNER_MASK          (1 << 2)
 
 /* Interrupt Mask register */
-#define DMAC_IRMASK_REG                        (0x8)
+#define DMAC_IRMASK_REG                        0x8
 
 /* Maximum Burst Length */
-#define DMAC_MAXBURST_REG              (0xc)
+#define DMAC_MAXBURST_REG              0xc
 
 /* Ring Start Address register */
-#define DMAS_RSTART_REG                        (0x0)
+#define DMAS_RSTART_REG                        0x0
 
 /* State Ram Word 2 */
-#define DMAS_SRAM2_REG                 (0x4)
+#define DMAS_SRAM2_REG                 0x4
 
 /* State Ram Word 3 */
-#define DMAS_SRAM3_REG                 (0x8)
+#define DMAS_SRAM3_REG                 0x8
 
 /* State Ram Word 4 */
-#define DMAS_SRAM4_REG                 (0xc)
+#define DMAS_SRAM4_REG                 0xc
 
 struct bcm6368_enetsw_desc {
        u32 len_stat;
@@ -224,9 +224,6 @@ struct bcm6368_enetsw {
 
        /* dma channel width */
        unsigned int dma_chan_width;
-
-       /* dma descriptor shift value */
-       unsigned int dma_desc_shift;
 };
 
 static inline void dma_writel(struct bcm6368_enetsw *priv, u32 val, u32 off)
@@ -256,9 +253,7 @@ static inline void dmas_writel(struct bcm6368_enetsw *priv, u32 val,
  */
 static int bcm6368_enetsw_refill_rx(struct net_device *dev)
 {
-       struct bcm6368_enetsw *priv;
-
-       priv = netdev_priv(dev);
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
 
        while (priv->rx_desc_count < priv->rx_ring_size) {
                struct bcm6368_enetsw_desc *desc;
@@ -284,8 +279,7 @@ static int bcm6368_enetsw_refill_rx(struct net_device *dev)
                len_stat = priv->rx_skb_size << DMADESC_LENGTH_SHIFT;
                len_stat |= DMADESC_OWNER_MASK;
                if (priv->rx_dirty_desc == priv->rx_ring_size - 1) {
-                       len_stat |= (DMADESC_WRAP_MASK >>
-                                    priv->dma_desc_shift);
+                       len_stat |= DMADESC_WRAP_MASK;
                        priv->rx_dirty_desc = 0;
                } else {
                        priv->rx_dirty_desc++;
@@ -328,13 +322,9 @@ static void bcm6368_enetsw_refill_rx_timer(struct timer_list *t)
  */
 static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget)
 {
-       struct bcm6368_enetsw *priv;
-       struct device *kdev;
-       int processed;
-
-       priv = netdev_priv(dev);
-       kdev = &priv->pdev->dev;
-       processed = 0;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
+       struct device *kdev = &priv->pdev->dev;
+       int processed = 0;
 
        /* don't scan ring further than number of refilled
         * descriptor */
@@ -369,8 +359,7 @@ static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget)
 
                /* if the packet does not have start of packet _and_
                 * end of packet flag set, then just recycle it */
-               if ((len_stat & (DMADESC_ESOP_MASK >> priv->dma_desc_shift))
-                   != (DMADESC_ESOP_MASK >> priv->dma_desc_shift)) {
+               if ((len_stat & DMADESC_ESOP_MASK) != DMADESC_ESOP_MASK) {
                        dev->stats.rx_dropped++;
                        continue;
                }
@@ -427,11 +416,8 @@ static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget)
  */
 static int bcm6368_enetsw_tx_reclaim(struct net_device *dev, int force)
 {
-       struct bcm6368_enetsw *priv;
-       int released;
-
-       priv = netdev_priv(dev);
-       released = 0;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
+       int released = 0;
 
        while (priv->tx_desc_count < priv->tx_ring_size) {
                struct bcm6368_enetsw_desc *desc;
@@ -482,13 +468,10 @@ static int bcm6368_enetsw_tx_reclaim(struct net_device *dev, int force)
  */
 static int bcm6368_enetsw_poll(struct napi_struct *napi, int budget)
 {
-       struct bcm6368_enetsw *priv;
-       struct net_device *dev;
+       struct bcm6368_enetsw *priv = container_of(napi, struct bcm6368_enetsw, napi);
+       struct net_device *dev = priv->net_dev;
        int rx_work_done;
 
-       priv = container_of(napi, struct bcm6368_enetsw, napi);
-       dev = priv->net_dev;
-
        /* ack interrupts */
        dmac_writel(priv, priv->dma_chan_int_mask,
                         DMAC_IR_REG, priv->rx_chan);
@@ -525,11 +508,8 @@ static int bcm6368_enetsw_poll(struct napi_struct *napi, int budget)
  */
 static irqreturn_t bcm6368_enetsw_isr_dma(int irq, void *dev_id)
 {
-       struct net_device *dev;
-       struct bcm6368_enetsw *priv;
-
-       dev = dev_id;
-       priv = netdev_priv(dev);
+       struct net_device *dev = dev_id;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
 
        /* mask rx/tx interrupts */
        dmac_writel(priv, 0, DMAC_IRMASK_REG, priv->rx_chan);
@@ -546,13 +526,11 @@ static irqreturn_t bcm6368_enetsw_isr_dma(int irq, void *dev_id)
 static netdev_tx_t
 bcm6368_enetsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
-       struct bcm6368_enetsw *priv;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
        struct bcm6368_enetsw_desc *desc;
        u32 len_stat;
        netdev_tx_t ret;
 
-       priv = netdev_priv(dev);
-
        /* lock against tx reclaim */
        spin_lock(&priv->tx_lock);
 
@@ -567,8 +545,8 @@ bcm6368_enetsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
        }
 
        /* pad small packets */
-       if (skb->len < 64) {
-               int needed = 64 - skb->len;
+       if (skb->len < (ETH_ZLEN + ETH_FCS_LEN)) {
+               int needed = (ETH_ZLEN + ETH_FCS_LEN) - skb->len;
                char *data;
 
                if (unlikely(skb_tailroom(skb) < needed)) {
@@ -579,6 +557,7 @@ bcm6368_enetsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
                                ret = NETDEV_TX_BUSY;
                                goto out_unlock;
                        }
+
                        dev_kfree_skb(skb);
                        skb = nskb;
                }
@@ -594,13 +573,13 @@ bcm6368_enetsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
                                       DMA_TO_DEVICE);
 
        len_stat = (skb->len << DMADESC_LENGTH_SHIFT) & DMADESC_LENGTH_MASK;
-       len_stat |= (DMADESC_ESOP_MASK >> priv->dma_desc_shift) |
-                   DMADESC_APPEND_CRC | DMADESC_OWNER_MASK;
+       len_stat |= DMADESC_ESOP_MASK | DMADESC_APPEND_CRC |
+                   DMADESC_OWNER_MASK;
 
        priv->tx_curr_desc++;
        if (priv->tx_curr_desc == priv->tx_ring_size) {
                priv->tx_curr_desc = 0;
-               len_stat |= (DMADESC_WRAP_MASK >> priv->dma_desc_shift);
+               len_stat |= DMADESC_WRAP_MASK;
        }
        priv->tx_desc_count--;
 
@@ -632,33 +611,30 @@ out_unlock:
  */
 static void bcm6368_enetsw_disable_dma(struct bcm6368_enetsw *priv, int chan)
 {
-       int limit;
+       int limit = 1000;
 
        dmac_writel(priv, 0, DMAC_CHANCFG_REG, chan);
 
-       limit = 1000;
        do {
                u32 val;
 
                val = dma_readl(priv, DMAC_CHANCFG_REG, chan);
                if (!(val & DMAC_CHANCFG_EN_MASK))
                        break;
+
                udelay(1);
        } while (limit--);
 }
 
 static int bcm6368_enetsw_open(struct net_device *dev)
 {
-       struct bcm6368_enetsw *priv;
-       struct device *kdev;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
+       struct device *kdev = &priv->pdev->dev;
        int i, ret;
        unsigned int size;
        void *p;
        u32 val;
 
-       priv = netdev_priv(dev);
-       kdev = &priv->pdev->dev;
-
        /* mask all interrupts and request them */
        dmac_writel(priv, 0, DMAC_IRMASK_REG, priv->rx_chan);
        dmac_writel(priv, 0, DMAC_IRMASK_REG, priv->tx_chan);
@@ -828,13 +804,10 @@ out_freeirq:
 
 static int bcm6368_enetsw_stop(struct net_device *dev)
 {
-       struct bcm6368_enetsw *priv;
-       struct device *kdev;
+       struct bcm6368_enetsw *priv = netdev_priv(dev);
+       struct device *kdev = &priv->pdev->dev;
        int i;
 
-       priv = netdev_priv(dev);
-       kdev = &priv->pdev->dev;
-
        netif_stop_queue(dev);
        napi_disable(&priv->napi);
        del_timer_sync(&priv->rx_timeout);
@@ -1103,7 +1076,7 @@ static const struct of_device_id bcm6368_enetsw_of_match[] = {
        { .compatible = "brcm,bcm63268-enetsw", },
        { /* sentinel */ }
 };
-MODULE_DEVICE_TABLE(of, bcm6368_mdio_ids);
+MODULE_DEVICE_TABLE(of, bcm6368_enetsw_of_match);
 
 static struct platform_driver bcm6368_enetsw_driver = {
        .driver = {