aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/arm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/arm')
-rw-r--r--drivers/net/arm/am79c961a.c12
-rw-r--r--drivers/net/arm/at91_ether.c9
-rw-r--r--drivers/net/arm/ep93xx_eth.c140
-rw-r--r--drivers/net/arm/ether3.c2
-rw-r--r--drivers/net/arm/ixp4xx_eth.c13
-rw-r--r--drivers/net/arm/ks8695net.c23
-rw-r--r--drivers/net/arm/w90p910_ether.c8
7 files changed, 100 insertions, 107 deletions
diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c
index 164b37e85eea..f1f58c5e27bf 100644
--- a/drivers/net/arm/am79c961a.c
+++ b/drivers/net/arm/am79c961a.c
@@ -351,13 +351,13 @@ static struct net_device_stats *am79c961_getstats (struct net_device *dev)
351 return &priv->stats; 351 return &priv->stats;
352} 352}
353 353
354static void am79c961_mc_hash(struct dev_mc_list *dmi, unsigned short *hash) 354static void am79c961_mc_hash(char *addr, unsigned short *hash)
355{ 355{
356 if (dmi->dmi_addrlen == ETH_ALEN && dmi->dmi_addr[0] & 0x01) { 356 if (addr[0] & 0x01) {
357 int idx, bit; 357 int idx, bit;
358 u32 crc; 358 u32 crc;
359 359
360 crc = ether_crc_le(ETH_ALEN, dmi->dmi_addr); 360 crc = ether_crc_le(ETH_ALEN, addr);
361 361
362 idx = crc >> 30; 362 idx = crc >> 30;
363 bit = (crc >> 26) & 15; 363 bit = (crc >> 26) & 15;
@@ -387,8 +387,8 @@ static void am79c961_setmulticastlist (struct net_device *dev)
387 387
388 memset(multi_hash, 0x00, sizeof(multi_hash)); 388 memset(multi_hash, 0x00, sizeof(multi_hash));
389 389
390 for (dmi = dev->mc_list; dmi; dmi = dmi->next) 390 netdev_for_each_mc_addr(dmi, dev)
391 am79c961_mc_hash(dmi, multi_hash); 391 am79c961_mc_hash(dmi->dmi_addr, multi_hash);
392 } 392 }
393 393
394 spin_lock_irqsave(&priv->chip_lock, flags); 394 spin_lock_irqsave(&priv->chip_lock, flags);
@@ -680,7 +680,7 @@ static const struct net_device_ops am79c961_netdev_ops = {
680#endif 680#endif
681}; 681};
682 682
683static int __init am79c961_probe(struct platform_device *pdev) 683static int __devinit am79c961_probe(struct platform_device *pdev)
684{ 684{
685 struct resource *res; 685 struct resource *res;
686 struct net_device *dev; 686 struct net_device *dev;
diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
index c8bc60a7040c..8b23d5a175bf 100644
--- a/drivers/net/arm/at91_ether.c
+++ b/drivers/net/arm/at91_ether.c
@@ -558,14 +558,11 @@ static void at91ether_sethashtable(struct net_device *dev)
558{ 558{
559 struct dev_mc_list *curr; 559 struct dev_mc_list *curr;
560 unsigned long mc_filter[2]; 560 unsigned long mc_filter[2];
561 unsigned int i, bitnr; 561 unsigned int bitnr;
562 562
563 mc_filter[0] = mc_filter[1] = 0; 563 mc_filter[0] = mc_filter[1] = 0;
564 564
565 curr = dev->mc_list; 565 netdev_for_each_mc_addr(curr, dev) {
566 for (i = 0; i < dev->mc_count; i++, curr = curr->next) {
567 if (!curr) break; /* unexpected end of list */
568
569 bitnr = hash_get_index(curr->dmi_addr); 566 bitnr = hash_get_index(curr->dmi_addr);
570 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31); 567 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
571 } 568 }
@@ -592,7 +589,7 @@ static void at91ether_set_multicast_list(struct net_device *dev)
592 at91_emac_write(AT91_EMAC_HSH, -1); 589 at91_emac_write(AT91_EMAC_HSH, -1);
593 at91_emac_write(AT91_EMAC_HSL, -1); 590 at91_emac_write(AT91_EMAC_HSL, -1);
594 cfg |= AT91_EMAC_MTI; 591 cfg |= AT91_EMAC_MTI;
595 } else if (dev->mc_count > 0) { /* Enable specific multicasts */ 592 } else if (!netdev_mc_empty(dev)) { /* Enable specific multicasts */
596 at91ether_sethashtable(dev); 593 at91ether_sethashtable(dev);
597 cfg |= AT91_EMAC_MTI; 594 cfg |= AT91_EMAC_MTI;
598 } else if (dev->flags & (~IFF_ALLMULTI)) { /* Disable all multicast mode */ 595 } else if (dev->flags & (~IFF_ALLMULTI)) { /* Disable all multicast mode */
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
index b25467ac895c..bf72d57a0afd 100644
--- a/drivers/net/arm/ep93xx_eth.c
+++ b/drivers/net/arm/ep93xx_eth.c
@@ -9,6 +9,8 @@
9 * (at your option) any later version. 9 * (at your option) any later version.
10 */ 10 */
11 11
12#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
13
12#include <linux/dma-mapping.h> 14#include <linux/dma-mapping.h>
13#include <linux/module.h> 15#include <linux/module.h>
14#include <linux/kernel.h> 16#include <linux/kernel.h>
@@ -20,9 +22,9 @@
20#include <linux/moduleparam.h> 22#include <linux/moduleparam.h>
21#include <linux/platform_device.h> 23#include <linux/platform_device.h>
22#include <linux/delay.h> 24#include <linux/delay.h>
23#include <mach/ep93xx-regs.h> 25#include <linux/io.h>
24#include <mach/platform.h> 26
25#include <asm/io.h> 27#include <mach/hardware.h>
26 28
27#define DRV_MODULE_NAME "ep93xx-eth" 29#define DRV_MODULE_NAME "ep93xx-eth"
28#define DRV_MODULE_VERSION "0.1" 30#define DRV_MODULE_VERSION "0.1"
@@ -185,7 +187,47 @@ struct ep93xx_priv
185#define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off)) 187#define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off))
186#define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off)) 188#define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off))
187 189
188static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg); 190static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
191{
192 struct ep93xx_priv *ep = netdev_priv(dev);
193 int data;
194 int i;
195
196 wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
197
198 for (i = 0; i < 10; i++) {
199 if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
200 break;
201 msleep(1);
202 }
203
204 if (i == 10) {
205 pr_info("mdio read timed out\n");
206 data = 0xffff;
207 } else {
208 data = rdl(ep, REG_MIIDATA);
209 }
210
211 return data;
212}
213
214static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
215{
216 struct ep93xx_priv *ep = netdev_priv(dev);
217 int i;
218
219 wrl(ep, REG_MIIDATA, data);
220 wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
221
222 for (i = 0; i < 10; i++) {
223 if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
224 break;
225 msleep(1);
226 }
227
228 if (i == 10)
229 pr_info("mdio write timed out\n");
230}
189 231
190static struct net_device_stats *ep93xx_get_stats(struct net_device *dev) 232static struct net_device_stats *ep93xx_get_stats(struct net_device *dev)
191{ 233{
@@ -217,14 +259,11 @@ static int ep93xx_rx(struct net_device *dev, int processed, int budget)
217 rstat->rstat1 = 0; 259 rstat->rstat1 = 0;
218 260
219 if (!(rstat0 & RSTAT0_EOF)) 261 if (!(rstat0 & RSTAT0_EOF))
220 printk(KERN_CRIT "ep93xx_rx: not end-of-frame " 262 pr_crit("not end-of-frame %.8x %.8x\n", rstat0, rstat1);
221 " %.8x %.8x\n", rstat0, rstat1);
222 if (!(rstat0 & RSTAT0_EOB)) 263 if (!(rstat0 & RSTAT0_EOB))
223 printk(KERN_CRIT "ep93xx_rx: not end-of-buffer " 264 pr_crit("not end-of-buffer %.8x %.8x\n", rstat0, rstat1);
224 " %.8x %.8x\n", rstat0, rstat1);
225 if ((rstat1 & RSTAT1_BUFFER_INDEX) >> 16 != entry) 265 if ((rstat1 & RSTAT1_BUFFER_INDEX) >> 16 != entry)
226 printk(KERN_CRIT "ep93xx_rx: entry mismatch " 266 pr_crit("entry mismatch %.8x %.8x\n", rstat0, rstat1);
227 " %.8x %.8x\n", rstat0, rstat1);
228 267
229 if (!(rstat0 & RSTAT0_RWE)) { 268 if (!(rstat0 & RSTAT0_RWE)) {
230 ep->stats.rx_errors++; 269 ep->stats.rx_errors++;
@@ -241,8 +280,7 @@ static int ep93xx_rx(struct net_device *dev, int processed, int budget)
241 280
242 length = rstat1 & RSTAT1_FRAME_LENGTH; 281 length = rstat1 & RSTAT1_FRAME_LENGTH;
243 if (length > MAX_PKT_SIZE) { 282 if (length > MAX_PKT_SIZE) {
244 printk(KERN_NOTICE "ep93xx_rx: invalid length " 283 pr_notice("invalid length %.8x %.8x\n", rstat0, rstat1);
245 " %.8x %.8x\n", rstat0, rstat1);
246 goto err; 284 goto err;
247 } 285 }
248 286
@@ -371,11 +409,9 @@ static void ep93xx_tx_complete(struct net_device *dev)
371 tstat->tstat0 = 0; 409 tstat->tstat0 = 0;
372 410
373 if (tstat0 & TSTAT0_FA) 411 if (tstat0 & TSTAT0_FA)
374 printk(KERN_CRIT "ep93xx_tx_complete: frame aborted " 412 pr_crit("frame aborted %.8x\n", tstat0);
375 " %.8x\n", tstat0);
376 if ((tstat0 & TSTAT0_BUFFER_INDEX) != entry) 413 if ((tstat0 & TSTAT0_BUFFER_INDEX) != entry)
377 printk(KERN_CRIT "ep93xx_tx_complete: entry mismatch " 414 pr_crit("entry mismatch %.8x\n", tstat0);
378 " %.8x\n", tstat0);
379 415
380 if (tstat0 & TSTAT0_TXWE) { 416 if (tstat0 & TSTAT0_TXWE) {
381 int length = ep->descs->tdesc[entry].tdesc1 & 0xfff; 417 int length = ep->descs->tdesc[entry].tdesc1 & 0xfff;
@@ -536,7 +572,7 @@ static int ep93xx_start_hw(struct net_device *dev)
536 } 572 }
537 573
538 if (i == 10) { 574 if (i == 10) {
539 printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to reset\n"); 575 pr_crit("hw failed to reset\n");
540 return 1; 576 return 1;
541 } 577 }
542 578
@@ -581,7 +617,7 @@ static int ep93xx_start_hw(struct net_device *dev)
581 } 617 }
582 618
583 if (i == 10) { 619 if (i == 10) {
584 printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to start\n"); 620 pr_crit("hw failed to start\n");
585 return 1; 621 return 1;
586 } 622 }
587 623
@@ -617,7 +653,7 @@ static void ep93xx_stop_hw(struct net_device *dev)
617 } 653 }
618 654
619 if (i == 10) 655 if (i == 10)
620 printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to reset\n"); 656 pr_crit("hw failed to reset\n");
621} 657}
622 658
623static int ep93xx_open(struct net_device *dev) 659static int ep93xx_open(struct net_device *dev)
@@ -681,48 +717,6 @@ static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
681 return generic_mii_ioctl(&ep->mii, data, cmd, NULL); 717 return generic_mii_ioctl(&ep->mii, data, cmd, NULL);
682} 718}
683 719
684static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
685{
686 struct ep93xx_priv *ep = netdev_priv(dev);
687 int data;
688 int i;
689
690 wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
691
692 for (i = 0; i < 10; i++) {
693 if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
694 break;
695 msleep(1);
696 }
697
698 if (i == 10) {
699 printk(KERN_INFO DRV_MODULE_NAME ": mdio read timed out\n");
700 data = 0xffff;
701 } else {
702 data = rdl(ep, REG_MIIDATA);
703 }
704
705 return data;
706}
707
708static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
709{
710 struct ep93xx_priv *ep = netdev_priv(dev);
711 int i;
712
713 wrl(ep, REG_MIIDATA, data);
714 wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
715
716 for (i = 0; i < 10; i++) {
717 if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
718 break;
719 msleep(1);
720 }
721
722 if (i == 10)
723 printk(KERN_INFO DRV_MODULE_NAME ": mdio write timed out\n");
724}
725
726static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 720static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
727{ 721{
728 strcpy(info->driver, DRV_MODULE_NAME); 722 strcpy(info->driver, DRV_MODULE_NAME);
@@ -825,12 +819,19 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
825 struct ep93xx_eth_data *data; 819 struct ep93xx_eth_data *data;
826 struct net_device *dev; 820 struct net_device *dev;
827 struct ep93xx_priv *ep; 821 struct ep93xx_priv *ep;
822 struct resource *mem;
823 int irq;
828 int err; 824 int err;
829 825
830 if (pdev == NULL) 826 if (pdev == NULL)
831 return -ENODEV; 827 return -ENODEV;
832 data = pdev->dev.platform_data; 828 data = pdev->dev.platform_data;
833 829
830 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
831 irq = platform_get_irq(pdev, 0);
832 if (!mem || irq < 0)
833 return -ENXIO;
834
834 dev = ep93xx_dev_alloc(data); 835 dev = ep93xx_dev_alloc(data);
835 if (dev == NULL) { 836 if (dev == NULL) {
836 err = -ENOMEM; 837 err = -ENOMEM;
@@ -842,23 +843,21 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
842 843
843 platform_set_drvdata(pdev, dev); 844 platform_set_drvdata(pdev, dev);
844 845
845 ep->res = request_mem_region(pdev->resource[0].start, 846 ep->res = request_mem_region(mem->start, resource_size(mem),
846 pdev->resource[0].end - pdev->resource[0].start + 1, 847 dev_name(&pdev->dev));
847 dev_name(&pdev->dev));
848 if (ep->res == NULL) { 848 if (ep->res == NULL) {
849 dev_err(&pdev->dev, "Could not reserve memory region\n"); 849 dev_err(&pdev->dev, "Could not reserve memory region\n");
850 err = -ENOMEM; 850 err = -ENOMEM;
851 goto err_out; 851 goto err_out;
852 } 852 }
853 853
854 ep->base_addr = ioremap(pdev->resource[0].start, 854 ep->base_addr = ioremap(mem->start, resource_size(mem));
855 pdev->resource[0].end - pdev->resource[0].start);
856 if (ep->base_addr == NULL) { 855 if (ep->base_addr == NULL) {
857 dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n"); 856 dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
858 err = -EIO; 857 err = -EIO;
859 goto err_out; 858 goto err_out;
860 } 859 }
861 ep->irq = pdev->resource[1].start; 860 ep->irq = irq;
862 861
863 ep->mii.phy_id = data->phy_id; 862 ep->mii.phy_id = data->phy_id;
864 ep->mii.phy_id_mask = 0x1f; 863 ep->mii.phy_id_mask = 0x1f;
@@ -877,11 +876,8 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
877 goto err_out; 876 goto err_out;
878 } 877 }
879 878
880 printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, " 879 printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, %pM\n",
881 "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name, 880 dev->name, ep->irq, dev->dev_addr);
882 ep->irq, data->dev_addr[0], data->dev_addr[1],
883 data->dev_addr[2], data->dev_addr[3],
884 data->dev_addr[4], data->dev_addr[5]);
885 881
886 return 0; 882 return 0;
887 883
diff --git a/drivers/net/arm/ether3.c b/drivers/net/arm/ether3.c
index 1f7a69c929a6..d9de9bce2395 100644
--- a/drivers/net/arm/ether3.c
+++ b/drivers/net/arm/ether3.c
@@ -463,7 +463,7 @@ static void ether3_setmulticastlist(struct net_device *dev)
463 if (dev->flags & IFF_PROMISC) { 463 if (dev->flags & IFF_PROMISC) {
464 /* promiscuous mode */ 464 /* promiscuous mode */
465 priv(dev)->regs.config1 |= CFG1_RECVPROMISC; 465 priv(dev)->regs.config1 |= CFG1_RECVPROMISC;
466 } else if (dev->flags & IFF_ALLMULTI || dev->mc_count) { 466 } else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) {
467 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI; 467 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI;
468 } else 468 } else
469 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD; 469 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD;
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index c3dfbdd2cdcf..6e2ae1d06df1 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -735,22 +735,25 @@ static int eth_xmit(struct sk_buff *skb, struct net_device *dev)
735static void eth_set_mcast_list(struct net_device *dev) 735static void eth_set_mcast_list(struct net_device *dev)
736{ 736{
737 struct port *port = netdev_priv(dev); 737 struct port *port = netdev_priv(dev);
738 struct dev_mc_list *mclist = dev->mc_list; 738 struct dev_mc_list *mclist;
739 u8 diffs[ETH_ALEN], *addr; 739 u8 diffs[ETH_ALEN], *addr;
740 int cnt = dev->mc_count, i; 740 int i;
741 741
742 if ((dev->flags & IFF_PROMISC) || !mclist || !cnt) { 742 if ((dev->flags & IFF_PROMISC) || netdev_mc_empty(dev)) {
743 __raw_writel(DEFAULT_RX_CNTRL0 & ~RX_CNTRL0_ADDR_FLTR_EN, 743 __raw_writel(DEFAULT_RX_CNTRL0 & ~RX_CNTRL0_ADDR_FLTR_EN,
744 &port->regs->rx_control[0]); 744 &port->regs->rx_control[0]);
745 return; 745 return;
746 } 746 }
747 747
748 memset(diffs, 0, ETH_ALEN); 748 memset(diffs, 0, ETH_ALEN);
749 addr = mclist->dmi_addr; /* first MAC address */
750 749
751 while (--cnt && (mclist = mclist->next)) 750 addr = NULL;
751 netdev_for_each_mc_addr(mclist, dev) {
752 if (!addr)
753 addr = mclist->dmi_addr; /* first MAC address */
752 for (i = 0; i < ETH_ALEN; i++) 754 for (i = 0; i < ETH_ALEN; i++)
753 diffs[i] |= addr[i] ^ mclist->dmi_addr[i]; 755 diffs[i] |= addr[i] ^ mclist->dmi_addr[i];
756 }
754 757
755 for (i = 0; i < ETH_ALEN; i++) { 758 for (i = 0; i < ETH_ALEN; i++) {
756 __raw_writel(addr[i], &port->regs->mcast_addr[i]); 759 __raw_writel(addr[i], &port->regs->mcast_addr[i]);
diff --git a/drivers/net/arm/ks8695net.c b/drivers/net/arm/ks8695net.c
index be256b34cea8..8ca639127dbc 100644
--- a/drivers/net/arm/ks8695net.c
+++ b/drivers/net/arm/ks8695net.c
@@ -327,25 +327,24 @@ ks8695_refill_rxbuffers(struct ks8695_priv *ksp)
327 */ 327 */
328static void 328static void
329ks8695_init_partial_multicast(struct ks8695_priv *ksp, 329ks8695_init_partial_multicast(struct ks8695_priv *ksp,
330 struct dev_mc_list *addr, 330 struct net_device *ndev)
331 int nr_addr)
332{ 331{
333 u32 low, high; 332 u32 low, high;
334 int i; 333 int i;
334 struct dev_mc_list *dmi;
335 335
336 for (i = 0; i < nr_addr; i++, addr = addr->next) { 336 i = 0;
337 /* Ran out of addresses? */ 337 netdev_for_each_mc_addr(dmi, ndev) {
338 if (!addr)
339 break;
340 /* Ran out of space in chip? */ 338 /* Ran out of space in chip? */
341 BUG_ON(i == KS8695_NR_ADDRESSES); 339 BUG_ON(i == KS8695_NR_ADDRESSES);
342 340
343 low = (addr->dmi_addr[2] << 24) | (addr->dmi_addr[3] << 16) | 341 low = (dmi->dmi_addr[2] << 24) | (dmi->dmi_addr[3] << 16) |
344 (addr->dmi_addr[4] << 8) | (addr->dmi_addr[5]); 342 (dmi->dmi_addr[4] << 8) | (dmi->dmi_addr[5]);
345 high = (addr->dmi_addr[0] << 8) | (addr->dmi_addr[1]); 343 high = (dmi->dmi_addr[0] << 8) | (dmi->dmi_addr[1]);
346 344
347 ks8695_writereg(ksp, KS8695_AAL_(i), low); 345 ks8695_writereg(ksp, KS8695_AAL_(i), low);
348 ks8695_writereg(ksp, KS8695_AAH_(i), AAH_E | high); 346 ks8695_writereg(ksp, KS8695_AAH_(i), AAH_E | high);
347 i++;
349 } 348 }
350 349
351 /* Clear the remaining Additional Station Addresses */ 350 /* Clear the remaining Additional Station Addresses */
@@ -1207,7 +1206,7 @@ ks8695_set_multicast(struct net_device *ndev)
1207 if (ndev->flags & IFF_ALLMULTI) { 1206 if (ndev->flags & IFF_ALLMULTI) {
1208 /* enable all multicast mode */ 1207 /* enable all multicast mode */
1209 ctrl |= DRXC_RM; 1208 ctrl |= DRXC_RM;
1210 } else if (ndev->mc_count > KS8695_NR_ADDRESSES) { 1209 } else if (netdev_mc_count(ndev) > KS8695_NR_ADDRESSES) {
1211 /* more specific multicast addresses than can be 1210 /* more specific multicast addresses than can be
1212 * handled in hardware 1211 * handled in hardware
1213 */ 1212 */
@@ -1215,8 +1214,7 @@ ks8695_set_multicast(struct net_device *ndev)
1215 } else { 1214 } else {
1216 /* enable specific multicasts */ 1215 /* enable specific multicasts */
1217 ctrl &= ~DRXC_RM; 1216 ctrl &= ~DRXC_RM;
1218 ks8695_init_partial_multicast(ksp, ndev->mc_list, 1217 ks8695_init_partial_multicast(ksp, ndev);
1219 ndev->mc_count);
1220 } 1218 }
1221 1219
1222 ks8695_writereg(ksp, KS8695_DRXC, ctrl); 1220 ks8695_writereg(ksp, KS8695_DRXC, ctrl);
@@ -1335,7 +1333,6 @@ ks8695_stop(struct net_device *ndev)
1335 1333
1336 netif_stop_queue(ndev); 1334 netif_stop_queue(ndev);
1337 napi_disable(&ksp->napi); 1335 napi_disable(&ksp->napi);
1338 netif_carrier_off(ndev);
1339 1336
1340 ks8695_shutdown(ksp); 1337 ks8695_shutdown(ksp);
1341 1338
diff --git a/drivers/net/arm/w90p910_ether.c b/drivers/net/arm/w90p910_ether.c
index b7f3866d546f..febd813c916d 100644
--- a/drivers/net/arm/w90p910_ether.c
+++ b/drivers/net/arm/w90p910_ether.c
@@ -858,10 +858,10 @@ static void w90p910_ether_set_multicast_list(struct net_device *dev)
858 858
859 if (dev->flags & IFF_PROMISC) 859 if (dev->flags & IFF_PROMISC)
860 rx_mode = CAMCMR_AUP | CAMCMR_AMP | CAMCMR_ABP | CAMCMR_ECMP; 860 rx_mode = CAMCMR_AUP | CAMCMR_AMP | CAMCMR_ABP | CAMCMR_ECMP;
861 else if ((dev->flags & IFF_ALLMULTI) || dev->mc_list) 861 else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
862 rx_mode = CAMCMR_AMP | CAMCMR_ABP | CAMCMR_ECMP; 862 rx_mode = CAMCMR_AMP | CAMCMR_ABP | CAMCMR_ECMP;
863 else 863 else
864 rx_mode = CAMCMR_ECMP | CAMCMR_ABP; 864 rx_mode = CAMCMR_ECMP | CAMCMR_ABP;
865 __raw_writel(rx_mode, ether->reg + REG_CAMCMR); 865 __raw_writel(rx_mode, ether->reg + REG_CAMCMR);
866} 866}
867 867