]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: sunhme: Remove residual polling code
authorSean Anderson <seanga2@gmail.com>
Fri, 24 Mar 2023 17:51:29 +0000 (13:51 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Mar 2023 07:41:56 +0000 (08:41 +0100)
The sunhme driver never used the hardware MII polling feature. Even the
if-def'd out happy_meal_poll_start was removed by 2002 [1]. Remove the
various places in the driver which needlessly guard against MII interrupts
which will never be enabled.

[1] https://lwn.net/2002/0411/a/2.5.8-pre3.php3

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sun/sunhme.c
drivers/net/ethernet/sun/sunhme.h

index e52f2d9305bcf78239b83a095b95362fae866afb..b02cb0b493aedc7ced0b265a074058fd401f0d57 100644 (file)
@@ -985,32 +985,6 @@ static void happy_meal_get_counters(struct happy_meal *hp, void __iomem *bregs)
        hme_write32(hp, bregs + BMAC_LTCTR, 0);
 }
 
-/* hp->happy_lock must be held */
-static void happy_meal_poll_stop(struct happy_meal *hp, void __iomem *tregs)
-{
-       /* If polling disabled or not polling already, nothing to do. */
-       if ((hp->happy_flags & (HFLAG_POLLENABLE | HFLAG_POLL)) !=
-          (HFLAG_POLLENABLE | HFLAG_POLL)) {
-               ASD("not polling, return\n");
-               return;
-       }
-
-       /* Shut up the MIF. */
-       ASD("were polling, mif ints off, polling off\n");
-       hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
-
-       /* Turn off polling. */
-       hme_write32(hp, tregs + TCVR_CFG,
-                   hme_read32(hp, tregs + TCVR_CFG) & ~(TCV_CFG_PENABLE));
-
-       /* We are no longer polling. */
-       hp->happy_flags &= ~(HFLAG_POLL);
-
-       /* Let the bits set. */
-       udelay(200);
-       ASD("done\n");
-}
-
 /* Only Sun can take such nice parts and fuck up the programming interface
  * like this.  Good job guys...
  */
@@ -1115,57 +1089,26 @@ static int happy_meal_tcvr_reset(struct happy_meal *hp, void __iomem *tregs)
 static void happy_meal_transceiver_check(struct happy_meal *hp, void __iomem *tregs)
 {
        unsigned long tconfig = hme_read32(hp, tregs + TCVR_CFG);
+       u32 reread = hme_read32(hp, tregs + TCVR_CFG);
 
        ASD("tcfg=%08lx\n", tconfig);
-       if (hp->happy_flags & HFLAG_POLL) {
-               /* If we are polling, we must stop to get the transceiver type. */
-               if (hp->tcvr_type == internal) {
-                       if (tconfig & TCV_CFG_MDIO1) {
-                               happy_meal_poll_stop(hp, tregs);
-                               hp->paddr = TCV_PADDR_ETX;
-                               hp->tcvr_type = external;
-                               tconfig &= ~(TCV_CFG_PENABLE);
-                               tconfig |= TCV_CFG_PSELECT;
-                               hme_write32(hp, tregs + TCVR_CFG, tconfig);
-                               ASD("poll stop, internal->external\n");
-                       }
-               } else {
-                       if (hp->tcvr_type == external) {
-                               if (!(hme_read32(hp, tregs + TCVR_STATUS) >> 16)) {
-                                       happy_meal_poll_stop(hp, tregs);
-                                       hp->paddr = TCV_PADDR_ITX;
-                                       hp->tcvr_type = internal;
-                                       hme_write32(hp, tregs + TCVR_CFG,
-                                                   hme_read32(hp, tregs + TCVR_CFG) &
-                                                   ~(TCV_CFG_PSELECT));
-                                       ASD("poll stop, external->internal\n");
-                               }
-                       } else {
-                               ASD("polling, none\n");
-                       }
-               }
+       if (reread & TCV_CFG_MDIO1) {
+               hme_write32(hp, tregs + TCVR_CFG, tconfig | TCV_CFG_PSELECT);
+               hp->paddr = TCV_PADDR_ETX;
+               hp->tcvr_type = external;
+               ASD("not polling, external\n");
        } else {
-               u32 reread = hme_read32(hp, tregs + TCVR_CFG);
-
-               /* Else we can just work off of the MDIO bits. */
-               if (reread & TCV_CFG_MDIO1) {
-                       hme_write32(hp, tregs + TCVR_CFG, tconfig | TCV_CFG_PSELECT);
-                       hp->paddr = TCV_PADDR_ETX;
-                       hp->tcvr_type = external;
-                       ASD("not polling, external\n");
+               if (reread & TCV_CFG_MDIO0) {
+                       hme_write32(hp, tregs + TCVR_CFG,
+                                   tconfig & ~(TCV_CFG_PSELECT));
+                       hp->paddr = TCV_PADDR_ITX;
+                       hp->tcvr_type = internal;
+                       ASD("not polling, internal\n");
                } else {
-                       if (reread & TCV_CFG_MDIO0) {
-                               hme_write32(hp, tregs + TCVR_CFG,
-                                           tconfig & ~(TCV_CFG_PSELECT));
-                               hp->paddr = TCV_PADDR_ITX;
-                               hp->tcvr_type = internal;
-                               ASD("not polling, internal\n");
-                       } else {
-                               netdev_err(hp->dev,
-                                          "Transceiver and a coke please.");
-                               hp->tcvr_type = none; /* Grrr... */
-                               ASD("not polling, none\n");
-                       }
+                       netdev_err(hp->dev,
+                                  "Transceiver and a coke please.");
+                       hp->tcvr_type = none; /* Grrr... */
+                       ASD("not polling, none\n");
                }
        }
 }
@@ -1334,10 +1277,6 @@ static int happy_meal_init(struct happy_meal *hp)
                happy_meal_get_counters(hp, bregs);
        }
 
-       /* Stop polling. */
-       HMD("to happy_meal_poll_stop\n");
-       happy_meal_poll_stop(hp, tregs);
-
        /* Stop transmitter and receiver. */
        HMD("to happy_meal_stop\n");
        happy_meal_stop(hp, gregs);
@@ -1346,11 +1285,6 @@ static int happy_meal_init(struct happy_meal *hp)
        HMD("to happy_meal_init_rings\n");
        happy_meal_init_rings(hp);
 
-       /* Shut up the MIF. */
-       HMD("Disable all MIF irqs (old[%08x])\n",
-           hme_read32(hp, tregs + TCVR_IMASK));
-       hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
-
        /* See if we can enable the MIF frame on this card to speak to the DP83840. */
        if (hp->happy_flags & HFLAG_FENABLE) {
                HMD("use frame old[%08x]\n",
@@ -1605,7 +1539,6 @@ static void happy_meal_set_initial_advertisement(struct happy_meal *hp)
        void __iomem *gregs     = hp->gregs;
 
        happy_meal_stop(hp, gregs);
-       hme_write32(hp, tregs + TCVR_IMASK, 0xffff);
        if (hp->happy_flags & HFLAG_FENABLE)
                hme_write32(hp, tregs + TCVR_CFG,
                            hme_read32(hp, tregs + TCVR_CFG) & ~(TCV_CFG_BENABLE));
@@ -1762,34 +1695,6 @@ static int happy_meal_is_not_so_happy(struct happy_meal *hp, u32 status)
        return 0;
 }
 
-/* hp->happy_lock must be held */
-static void happy_meal_mif_interrupt(struct happy_meal *hp)
-{
-       void __iomem *tregs = hp->tcvregs;
-
-       netdev_info(hp->dev, "Link status change.\n");
-       hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, MII_BMCR);
-       hp->sw_lpa = happy_meal_tcvr_read(hp, tregs, MII_LPA);
-
-       /* Use the fastest transmission protocol possible. */
-       if (hp->sw_lpa & LPA_100FULL) {
-               netdev_info(hp->dev, "Switching to 100Mbps at full duplex.\n");
-               hp->sw_bmcr |= (BMCR_FULLDPLX | BMCR_SPEED100);
-       } else if (hp->sw_lpa & LPA_100HALF) {
-               netdev_info(hp->dev, "Switching to 100MBps at half duplex.\n");
-               hp->sw_bmcr |= BMCR_SPEED100;
-       } else if (hp->sw_lpa & LPA_10FULL) {
-               netdev_info(hp->dev, "Switching to 10MBps at full duplex.\n");
-               hp->sw_bmcr |= BMCR_FULLDPLX;
-       } else {
-               netdev_info(hp->dev, "Using 10Mbps at half duplex.\n");
-       }
-       happy_meal_tcvr_write(hp, tregs, MII_BMCR, hp->sw_bmcr);
-
-       /* Finally stop polling and shut up the MIF. */
-       happy_meal_poll_stop(hp, tregs);
-}
-
 /* hp->happy_lock must be held */
 static void happy_meal_tx(struct happy_meal *hp)
 {
@@ -1973,9 +1878,6 @@ static irqreturn_t happy_meal_interrupt(int irq, void *dev_id)
                        goto out;
        }
 
-       if (happy_status & GREG_STAT_MIFIRQ)
-               happy_meal_mif_interrupt(hp);
-
        if (happy_status & GREG_STAT_TXALL)
                happy_meal_tx(hp);
 
@@ -2003,7 +1905,6 @@ static irqreturn_t quattro_sbus_interrupt(int irq, void *cookie)
                HMD("status=%08x\n", happy_status);
 
                if (!(happy_status & (GREG_STAT_ERRORS |
-                                     GREG_STAT_MIFIRQ |
                                      GREG_STAT_TXALL |
                                      GREG_STAT_RXTOHOST)))
                        continue;
@@ -2014,9 +1915,6 @@ static irqreturn_t quattro_sbus_interrupt(int irq, void *cookie)
                        if (happy_meal_is_not_so_happy(hp, happy_status))
                                goto next;
 
-               if (happy_status & GREG_STAT_MIFIRQ)
-                       happy_meal_mif_interrupt(hp);
-
                if (happy_status & GREG_STAT_TXALL)
                        happy_meal_tx(hp);
 
index 9118c60c94267b7262db67dbc0fcb9130c2c8b0a..258b4c7fe962bef0871d09f01ada15f5a3c402d6 100644 (file)
@@ -462,22 +462,20 @@ struct happy_meal {
 };
 
 /* Here are the happy flags. */
-#define HFLAG_POLL                0x00000001      /* We are doing MIF polling          */
 #define HFLAG_FENABLE             0x00000002      /* The MII frame is enabled          */
 #define HFLAG_LANCE               0x00000004      /* We are using lance-mode           */
 #define HFLAG_RXENABLE            0x00000008      /* Receiver is enabled               */
 #define HFLAG_AUTO                0x00000010      /* Using auto-negotiation, 0 = force */
 #define HFLAG_FULL                0x00000020      /* Full duplex enable                */
 #define HFLAG_MACFULL             0x00000040      /* Using full duplex in the MAC      */
-#define HFLAG_POLLENABLE          0x00000080      /* Actually try MIF polling          */
 #define HFLAG_RXCV                0x00000100      /* XXX RXCV ENABLE                   */
 #define HFLAG_INIT                0x00000200      /* Init called at least once         */
 #define HFLAG_LINKUP              0x00000400      /* 1 = Link is up                    */
 #define HFLAG_PCI                 0x00000800      /* PCI based Happy Meal              */
 #define HFLAG_QUATTRO            0x00001000      /* On QFE/Quattro card               */
 
-#define HFLAG_20_21  (HFLAG_POLLENABLE | HFLAG_FENABLE)
-#define HFLAG_NOT_A0 (HFLAG_POLLENABLE | HFLAG_FENABLE | HFLAG_LANCE | HFLAG_RXCV)
+#define HFLAG_20_21  HFLAG_FENABLE
+#define HFLAG_NOT_A0 (HFLAG_FENABLE | HFLAG_LANCE | HFLAG_RXCV)
 
 /* Support for QFE/Quattro cards. */
 struct quattro {