smsc95xx: add additional USB product IDs
[cascardo/linux.git] / drivers / net / tc35815.c
index 62965d6..d1298e5 100644 (file)
@@ -594,9 +594,10 @@ static int tc_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
        struct net_device *dev = bus->priv;
        struct tc35815_regs __iomem *tr =
                (struct tc35815_regs __iomem *)dev->base_addr;
-       unsigned long timeout = jiffies + 10;
+       unsigned long timeout = jiffies + HZ;
 
        tc_writel(MD_CA_Busy | (mii_id << 5) | (regnum & 0x1f), &tr->MD_CA);
+       udelay(12); /* it takes 32 x 400ns at least */
        while (tc_readl(&tr->MD_CA) & MD_CA_Busy) {
                if (time_after(jiffies, timeout))
                        return -EIO;
@@ -610,11 +611,12 @@ static int tc_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 val)
        struct net_device *dev = bus->priv;
        struct tc35815_regs __iomem *tr =
                (struct tc35815_regs __iomem *)dev->base_addr;
-       unsigned long timeout = jiffies + 10;
+       unsigned long timeout = jiffies + HZ;
 
        tc_writel(val, &tr->MD_Data);
        tc_writel(MD_CA_Busy | MD_CA_Wr | (mii_id << 5) | (regnum & 0x1f),
                  &tr->MD_CA);
+       udelay(12); /* it takes 32 x 400ns at least */
        while (tc_readl(&tr->MD_CA) & MD_CA_Busy) {
                if (time_after(jiffies, timeout))
                        return -EIO;
@@ -2137,7 +2139,7 @@ static struct net_device_stats *tc35815_get_stats(struct net_device *dev)
                (struct tc35815_regs __iomem *)dev->base_addr;
        if (netif_running(dev))
                /* Update the statistics from the device registers. */
-               dev->stats.rx_missed_errors = tc_readl(&tr->Miss_Cnt);
+               dev->stats.rx_missed_errors += tc_readl(&tr->Miss_Cnt);
 
        return &dev->stats;
 }
@@ -2392,8 +2394,6 @@ static void tc35815_chip_init(struct net_device *dev)
                tc_writel(DMA_BURST_SIZE, &tr->DMA_Ctl);
 #ifdef TC35815_USE_PACKEDBUFFER
        tc_writel(RxFrag_EnPack | ETH_ZLEN, &tr->RxFragSize);   /* Packing */
-#else
-       tc_writel(ETH_ZLEN, &tr->RxFragSize);
 #endif
        tc_writel(0, &tr->TxPollCtr);   /* Batch mode */
        tc_writel(TX_THRESHOLD, &tr->TxThrsh);