|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Atmel MACB Ethernet Controller driver
|
|
|
+ * Cadence MACB/GEM Ethernet Controller driver
|
|
|
*
|
|
|
* Copyright (C) 2004-2006 Atmel Corporation
|
|
|
*
|
|
@@ -59,9 +59,9 @@ static void __macb_set_hwaddr(struct macb *bp)
|
|
|
u16 top;
|
|
|
|
|
|
bottom = cpu_to_le32(*((u32 *)bp->dev->dev_addr));
|
|
|
- macb_writel(bp, SA1B, bottom);
|
|
|
+ macb_or_gem_writel(bp, SA1B, bottom);
|
|
|
top = cpu_to_le16(*((u16 *)(bp->dev->dev_addr + 4)));
|
|
|
- macb_writel(bp, SA1T, top);
|
|
|
+ macb_or_gem_writel(bp, SA1T, top);
|
|
|
}
|
|
|
|
|
|
static void __init macb_get_hwaddr(struct macb *bp)
|
|
@@ -70,8 +70,8 @@ static void __init macb_get_hwaddr(struct macb *bp)
|
|
|
u16 top;
|
|
|
u8 addr[6];
|
|
|
|
|
|
- bottom = macb_readl(bp, SA1B);
|
|
|
- top = macb_readl(bp, SA1T);
|
|
|
+ bottom = macb_or_gem_readl(bp, SA1B);
|
|
|
+ top = macb_or_gem_readl(bp, SA1T);
|
|
|
|
|
|
addr[0] = bottom & 0xff;
|
|
|
addr[1] = (bottom >> 8) & 0xff;
|
|
@@ -580,7 +580,10 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|
|
|
|
|
if (status & MACB_BIT(ISR_ROVR)) {
|
|
|
/* We missed at least one packet */
|
|
|
- bp->hw_stats.rx_overruns++;
|
|
|
+ if (macb_is_gem(bp))
|
|
|
+ bp->hw_stats.gem.rx_overruns++;
|
|
|
+ else
|
|
|
+ bp->hw_stats.macb.rx_overruns++;
|
|
|
}
|
|
|
|
|
|
if (status & MACB_BIT(HRESP)) {
|
|
@@ -902,8 +905,8 @@ static void macb_sethashtable(struct net_device *dev)
|
|
|
mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
|
|
|
}
|
|
|
|
|
|
- macb_writel(bp, HRB, mc_filter[0]);
|
|
|
- macb_writel(bp, HRT, mc_filter[1]);
|
|
|
+ macb_or_gem_writel(bp, HRB, mc_filter[0]);
|
|
|
+ macb_or_gem_writel(bp, HRT, mc_filter[1]);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -925,8 +928,8 @@ static void macb_set_rx_mode(struct net_device *dev)
|
|
|
|
|
|
if (dev->flags & IFF_ALLMULTI) {
|
|
|
/* Enable all multicast mode */
|
|
|
- macb_writel(bp, HRB, -1);
|
|
|
- macb_writel(bp, HRT, -1);
|
|
|
+ macb_or_gem_writel(bp, HRB, -1);
|
|
|
+ macb_or_gem_writel(bp, HRT, -1);
|
|
|
cfg |= MACB_BIT(NCFGR_MTI);
|
|
|
} else if (!netdev_mc_empty(dev)) {
|
|
|
/* Enable specific multicasts */
|
|
@@ -934,8 +937,8 @@ static void macb_set_rx_mode(struct net_device *dev)
|
|
|
cfg |= MACB_BIT(NCFGR_MTI);
|
|
|
} else if (dev->flags & (~IFF_ALLMULTI)) {
|
|
|
/* Disable all multicast mode */
|
|
|
- macb_writel(bp, HRB, 0);
|
|
|
- macb_writel(bp, HRT, 0);
|
|
|
+ macb_or_gem_writel(bp, HRB, 0);
|
|
|
+ macb_or_gem_writel(bp, HRT, 0);
|
|
|
cfg &= ~MACB_BIT(NCFGR_MTI);
|
|
|
}
|
|
|
|
|
@@ -1196,15 +1199,16 @@ static int __init macb_probe(struct platform_device *pdev)
|
|
|
|
|
|
if (pdata && pdata->is_rmii)
|
|
|
#if defined(CONFIG_ARCH_AT91)
|
|
|
- macb_writel(bp, USRIO, (MACB_BIT(RMII) | MACB_BIT(CLKEN)) );
|
|
|
+ macb_or_gem_writel(bp, USRIO, (MACB_BIT(RMII) |
|
|
|
+ MACB_BIT(CLKEN)));
|
|
|
#else
|
|
|
- macb_writel(bp, USRIO, 0);
|
|
|
+ macb_or_gem_writel(bp, USRIO, 0);
|
|
|
#endif
|
|
|
else
|
|
|
#if defined(CONFIG_ARCH_AT91)
|
|
|
- macb_writel(bp, USRIO, MACB_BIT(CLKEN));
|
|
|
+ macb_or_gem_writel(bp, USRIO, MACB_BIT(CLKEN));
|
|
|
#else
|
|
|
- macb_writel(bp, USRIO, MACB_BIT(MII));
|
|
|
+ macb_or_gem_writel(bp, USRIO, MACB_BIT(MII));
|
|
|
#endif
|
|
|
|
|
|
bp->tx_pending = DEF_TX_RING_PENDING;
|
|
@@ -1221,8 +1225,9 @@ static int __init macb_probe(struct platform_device *pdev)
|
|
|
|
|
|
platform_set_drvdata(pdev, dev);
|
|
|
|
|
|
- netdev_info(dev, "Atmel MACB at 0x%08lx irq %d (%pM)\n",
|
|
|
- dev->base_addr, dev->irq, dev->dev_addr);
|
|
|
+ netdev_info(dev, "Cadence %s at 0x%08lx irq %d (%pM)\n",
|
|
|
+ macb_is_gem(bp) ? "GEM" : "MACB", dev->base_addr,
|
|
|
+ dev->irq, dev->dev_addr);
|
|
|
|
|
|
phydev = bp->phy_dev;
|
|
|
netdev_info(dev, "attached PHY driver [%s] (mii_bus:phy_addr=%s, irq=%d)\n",
|
|
@@ -1332,6 +1337,6 @@ module_init(macb_init);
|
|
|
module_exit(macb_exit);
|
|
|
|
|
|
MODULE_LICENSE("GPL");
|
|
|
-MODULE_DESCRIPTION("Atmel MACB Ethernet driver");
|
|
|
+MODULE_DESCRIPTION("Cadence MACB/GEM Ethernet driver");
|
|
|
MODULE_AUTHOR("Haavard Skinnemoen (Atmel)");
|
|
|
MODULE_ALIAS("platform:macb");
|