From af89f1030a611ffb4bb4f879d301539d26c3c9cf Mon Sep 17 00:00:00 2001 From: hauke Date: Wed, 6 Feb 2013 14:57:00 +0000 Subject: brcm47xx: bgmac: make it possible to set the devices into promisc mode when it is already up This fixes #12927. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35507 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../brcm47xx/patches-3.6/760-bgmac-fixes.patch | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch (limited to 'target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch') diff --git a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch new file mode 100644 index 000000000..dfe9ccf7e --- /dev/null +++ b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch @@ -0,0 +1,112 @@ +--- a/drivers/net/ethernet/broadcom/bgmac.c ++++ b/drivers/net/ethernet/broadcom/bgmac.c +@@ -761,6 +761,26 @@ static void bgmac_cmdcfg_maskset(struct + udelay(2); + } + ++static void bgmac_write_mac_address(struct bgmac *bgmac, u8 *addr) ++{ ++ u32 tmp; ++ ++ tmp = (addr[0] << 24) | (addr[1] << 16) | (addr[2] << 8) | addr[3]; ++ bgmac_write(bgmac, BGMAC_MACADDR_HIGH, tmp); ++ tmp = (addr[4] << 8) | addr[5]; ++ bgmac_write(bgmac, BGMAC_MACADDR_LOW, tmp); ++} ++ ++static void bgmac_set_rx_mode(struct net_device *net_dev) ++{ ++ struct bgmac *bgmac = netdev_priv(net_dev); ++ ++ if (net_dev->flags & IFF_PROMISC) ++ bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, false); ++ else ++ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, false); ++} ++ + #if 0 /* We don't use that regs yet */ + static void bgmac_chip_stats_update(struct bgmac *bgmac) + { +@@ -889,8 +909,10 @@ static void bgmac_chip_reset(struct bgma + sw_type = et_swtype; + } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == 9) { + sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII; +- } else if (0) { +- /* TODO */ ++ } else if ((ci->id != BCMA_CHIP_ID_BCM53572 && ci->pkg == 10) || ++ (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == 9)) { ++ sw_type = BGMAC_CHIPCTL_1_IF_TYPE_RGMII | ++ BGMAC_CHIPCTL_1_SW_TYPE_RGMII; + } + bcma_chipco_chipctl_maskset(cc, 1, + ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK | +@@ -1004,8 +1026,6 @@ static void bgmac_enable(struct bgmac *b + static void bgmac_chip_init(struct bgmac *bgmac, bool full_init) + { + struct bgmac_dma_ring *ring; +- u8 *mac = bgmac->net_dev->dev_addr; +- u32 tmp; + int i; + + /* 1 interrupt per received frame */ +@@ -1014,16 +1034,9 @@ static void bgmac_chip_init(struct bgmac + /* Enable 802.3x tx flow control (honor received PAUSE frames) */ + bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); + +- if (bgmac->net_dev->flags & IFF_PROMISC) +- bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, false); +- else +- bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, false); ++ bgmac_set_rx_mode(bgmac->net_dev); + +- /* Set MAC addr */ +- tmp = (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3]; +- bgmac_write(bgmac, BGMAC_MACADDR_HIGH, tmp); +- tmp = (mac[4] << 8) | mac[5]; +- bgmac_write(bgmac, BGMAC_MACADDR_LOW, tmp); ++ bgmac_write_mac_address(bgmac, bgmac->net_dev->dev_addr); + + if (bgmac->loopback) + bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_ML, true); +@@ -1160,6 +1173,19 @@ static netdev_tx_t bgmac_start_xmit(stru + return bgmac_dma_tx_add(bgmac, ring, skb); + } + ++static int bgmac_set_mac_address(struct net_device *net_dev, void *addr) ++{ ++ struct bgmac *bgmac = netdev_priv(net_dev); ++ int ret; ++ ++ ret = eth_prepare_mac_addr_change(net_dev, addr); ++ if (ret < 0) ++ return ret; ++ bgmac_write_mac_address(bgmac, (u8 *)addr); ++ eth_commit_mac_addr_change(net_dev, addr); ++ return 0; ++} ++ + static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd) + { + struct bgmac *bgmac = netdev_priv(net_dev); +@@ -1190,7 +1216,9 @@ static const struct net_device_ops bgmac + .ndo_open = bgmac_open, + .ndo_stop = bgmac_stop, + .ndo_start_xmit = bgmac_start_xmit, +- .ndo_set_mac_address = eth_mac_addr, /* generic, sets dev_addr */ ++ .ndo_set_rx_mode = bgmac_set_rx_mode, ++ .ndo_set_mac_address = bgmac_set_mac_address, ++ .ndo_validate_addr = eth_validate_addr, + .ndo_do_ioctl = bgmac_ioctl, + }; + +--- a/drivers/net/ethernet/broadcom/bgmac.h ++++ b/drivers/net/ethernet/broadcom/bgmac.h +@@ -339,7 +339,7 @@ + #define BGMAC_CHIPCTL_1_SW_TYPE_EPHY 0x00000000 + #define BGMAC_CHIPCTL_1_SW_TYPE_EPHYMII 0x00000040 + #define BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII 0x00000080 +-#define BGMAC_CHIPCTL_1_SW_TYPE_RGMI 0x000000C0 ++#define BGMAC_CHIPCTL_1_SW_TYPE_RGMII 0x000000C0 + #define BGMAC_CHIPCTL_1_RXC_DLL_BYPASS 0x00010000 + + #define BGMAC_SPEED_10 0x0001 -- cgit v1.2.3 From 771df83794d5fbf66e9ce6e680bc986f572fc301 Mon Sep 17 00:00:00 2001 From: hauke Date: Tue, 12 Feb 2013 20:10:38 +0000 Subject: brcm47xx: add some more fixes to bgmac MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you Rafał Miłecki and Nathan Hintz git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35574 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../brcm47xx/patches-3.6/760-bgmac-fixes.patch | 42 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch') diff --git a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch index dfe9ccf7e..9a971e07a 100644 --- a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch +++ b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch @@ -19,9 +19,9 @@ + struct bgmac *bgmac = netdev_priv(net_dev); + + if (net_dev->flags & IFF_PROMISC) -+ bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, false); ++ bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_PROM, true); + else -+ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, false); ++ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_PROM, 0, true); +} + #if 0 /* We don't use that regs yet */ @@ -40,7 +40,15 @@ } bcma_chipco_chipctl_maskset(cc, 1, ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK | -@@ -1004,8 +1026,6 @@ static void bgmac_enable(struct bgmac *b +@@ -948,6 +970,7 @@ static void bgmac_chip_intrs_on(struct b + static void bgmac_chip_intrs_off(struct bgmac *bgmac) + { + bgmac_write(bgmac, BGMAC_INT_MASK, 0); ++ bgmac_read(bgmac, BGMAC_INT_MASK); + } + + /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_enable */ +@@ -1004,8 +1027,6 @@ static void bgmac_enable(struct bgmac *b static void bgmac_chip_init(struct bgmac *bgmac, bool full_init) { struct bgmac_dma_ring *ring; @@ -49,7 +57,7 @@ int i; /* 1 interrupt per received frame */ -@@ -1014,16 +1034,9 @@ static void bgmac_chip_init(struct bgmac +@@ -1014,21 +1035,14 @@ static void bgmac_chip_init(struct bgmac /* Enable 802.3x tx flow control (honor received PAUSE frames) */ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); @@ -67,8 +75,15 @@ + bgmac_write_mac_address(bgmac, bgmac->net_dev->dev_addr); if (bgmac->loopback) - bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_ML, true); -@@ -1160,6 +1173,19 @@ static netdev_tx_t bgmac_start_xmit(stru +- bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_ML, true); ++ bgmac_cmdcfg_maskset(bgmac, ~0, BGMAC_CMDCFG_ML, false); + else +- bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_ML, 0, true); ++ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_ML, 0, false); + + bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + ETHER_MAX_LEN); + +@@ -1160,6 +1174,19 @@ static netdev_tx_t bgmac_start_xmit(stru return bgmac_dma_tx_add(bgmac, ring, skb); } @@ -88,7 +103,7 @@ static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd) { struct bgmac *bgmac = netdev_priv(net_dev); -@@ -1190,7 +1216,9 @@ static const struct net_device_ops bgmac +@@ -1190,7 +1217,9 @@ static const struct net_device_ops bgmac .ndo_open = bgmac_open, .ndo_stop = bgmac_stop, .ndo_start_xmit = bgmac_start_xmit, @@ -99,6 +114,19 @@ .ndo_do_ioctl = bgmac_ioctl, }; +@@ -1290,6 +1319,12 @@ static int bgmac_probe(struct bcma_devic + return -ENOTSUPP; + } + ++ if (!is_valid_ether_addr(mac)) { ++ dev_err(&core->dev, "Invalid MAC addr: %pM\n", mac); ++ eth_random_addr(mac); ++ dev_warn(&core->dev, "Using random MAC: %pM\n", mac); ++ } ++ + /* Allocation and references */ + net_dev = alloc_etherdev(sizeof(*bgmac)); + if (!net_dev) --- a/drivers/net/ethernet/broadcom/bgmac.h +++ b/drivers/net/ethernet/broadcom/bgmac.h @@ -339,7 +339,7 @@ -- cgit v1.2.3 From a6416d65a2343b65811e0dbaa937b1f5bdb26c6f Mon Sep 17 00:00:00 2001 From: hauke Date: Sat, 16 Feb 2013 14:38:17 +0000 Subject: brcm47xx: bgmac: fix unaligned accesses to network headers. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35621 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../brcm47xx/patches-3.6/760-bgmac-fixes.patch | 68 +++++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) (limited to 'target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch') diff --git a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch index 9a971e07a..bfabaee3a 100644 --- a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch +++ b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch @@ -1,6 +1,50 @@ --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c -@@ -761,6 +761,26 @@ static void bgmac_cmdcfg_maskset(struct +@@ -301,8 +301,9 @@ static int bgmac_dma_rx_read(struct bgma + bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n", + ring->start); + } else { +- new_skb = netdev_alloc_skb(bgmac->net_dev, len); ++ new_skb = netdev_alloc_skb(bgmac->net_dev, len + 2); + if (new_skb) { ++ skb_reserve(new_skb, 2); + skb_put(new_skb, len); + skb_copy_from_linear_data_offset(skb, BGMAC_RX_FRAME_OFFSET, + new_skb->data, +@@ -535,7 +536,7 @@ static void bgmac_dma_init(struct bgmac + * PHY ops + **************************************************/ + +-u16 bgmac_phy_read(struct bgmac *bgmac, u8 phyaddr, u8 reg) ++static u16 bgmac_phy_read(struct bgmac *bgmac, u8 phyaddr, u8 reg) + { + struct bcma_device *core; + u16 phy_access_addr; +@@ -584,7 +585,7 @@ u16 bgmac_phy_read(struct bgmac *bgmac, + } + + /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphywr */ +-void bgmac_phy_write(struct bgmac *bgmac, u8 phyaddr, u8 reg, u16 value) ++static int bgmac_phy_write(struct bgmac *bgmac, u8 phyaddr, u8 reg, u16 value) + { + struct bcma_device *core; + u16 phy_access_addr; +@@ -617,9 +618,13 @@ void bgmac_phy_write(struct bgmac *bgmac + tmp |= value; + bcma_write32(core, phy_access_addr, tmp); + +- if (!bgmac_wait_value(core, phy_access_addr, BGMAC_PA_START, 0, 1000)) ++ if (!bgmac_wait_value(core, phy_access_addr, BGMAC_PA_START, 0, 1000)) { + bgmac_err(bgmac, "Writing to PHY %d register 0x%X failed\n", + phyaddr, reg); ++ return -ETIMEDOUT; ++ } ++ ++ return 0; + } + + /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyforce */ +@@ -761,6 +766,26 @@ static void bgmac_cmdcfg_maskset(struct udelay(2); } @@ -27,7 +71,7 @@ #if 0 /* We don't use that regs yet */ static void bgmac_chip_stats_update(struct bgmac *bgmac) { -@@ -889,8 +909,10 @@ static void bgmac_chip_reset(struct bgma +@@ -889,8 +914,10 @@ static void bgmac_chip_reset(struct bgma sw_type = et_swtype; } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == 9) { sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII; @@ -40,7 +84,7 @@ } bcma_chipco_chipctl_maskset(cc, 1, ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK | -@@ -948,6 +970,7 @@ static void bgmac_chip_intrs_on(struct b +@@ -948,6 +975,7 @@ static void bgmac_chip_intrs_on(struct b static void bgmac_chip_intrs_off(struct bgmac *bgmac) { bgmac_write(bgmac, BGMAC_INT_MASK, 0); @@ -48,7 +92,7 @@ } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_enable */ -@@ -1004,8 +1027,6 @@ static void bgmac_enable(struct bgmac *b +@@ -1004,8 +1032,6 @@ static void bgmac_enable(struct bgmac *b static void bgmac_chip_init(struct bgmac *bgmac, bool full_init) { struct bgmac_dma_ring *ring; @@ -57,7 +101,7 @@ int i; /* 1 interrupt per received frame */ -@@ -1014,21 +1035,14 @@ static void bgmac_chip_init(struct bgmac +@@ -1014,21 +1040,14 @@ static void bgmac_chip_init(struct bgmac /* Enable 802.3x tx flow control (honor received PAUSE frames) */ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); @@ -83,7 +127,7 @@ bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + ETHER_MAX_LEN); -@@ -1160,6 +1174,19 @@ static netdev_tx_t bgmac_start_xmit(stru +@@ -1160,6 +1179,19 @@ static netdev_tx_t bgmac_start_xmit(stru return bgmac_dma_tx_add(bgmac, ring, skb); } @@ -103,7 +147,7 @@ static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd) { struct bgmac *bgmac = netdev_priv(net_dev); -@@ -1190,7 +1217,9 @@ static const struct net_device_ops bgmac +@@ -1190,7 +1222,9 @@ static const struct net_device_ops bgmac .ndo_open = bgmac_open, .ndo_stop = bgmac_stop, .ndo_start_xmit = bgmac_start_xmit, @@ -114,7 +158,7 @@ .ndo_do_ioctl = bgmac_ioctl, }; -@@ -1290,6 +1319,12 @@ static int bgmac_probe(struct bcma_devic +@@ -1290,6 +1324,12 @@ static int bgmac_probe(struct bcma_devic return -ENOTSUPP; } @@ -138,3 +182,11 @@ #define BGMAC_CHIPCTL_1_RXC_DLL_BYPASS 0x00010000 #define BGMAC_SPEED_10 0x0001 +@@ -450,7 +450,4 @@ static inline void bgmac_set(struct bgma + bgmac_maskset(bgmac, offset, ~0, set); + } + +-u16 bgmac_phy_read(struct bgmac *bgmac, u8 phyaddr, u8 reg); +-void bgmac_phy_write(struct bgmac *bgmac, u8 phyaddr, u8 reg, u16 value); +- + #endif /* _BGMAC_H */ -- cgit v1.2.3 From bfc8398a013ee62652af3e65b66d261a1e96b438 Mon Sep 17 00:00:00 2001 From: hauke Date: Thu, 28 Feb 2013 13:24:39 +0000 Subject: brcm47xx: bgmac: update to version form netdev git repository git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35833 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../brcm47xx/patches-3.6/760-bgmac-fixes.patch | 83 ++++++++++++++++++---- 1 file changed, 68 insertions(+), 15 deletions(-) (limited to 'target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch') diff --git a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch index bfabaee3a..225c67768 100644 --- a/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch +++ b/target/linux/brcm47xx/patches-3.6/760-bgmac-fixes.patch @@ -1,17 +1,70 @@ --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c -@@ -301,8 +301,9 @@ static int bgmac_dma_rx_read(struct bgma +@@ -301,7 +301,7 @@ static int bgmac_dma_rx_read(struct bgma bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n", ring->start); } else { - new_skb = netdev_alloc_skb(bgmac->net_dev, len); -+ new_skb = netdev_alloc_skb(bgmac->net_dev, len + 2); ++ new_skb = netdev_alloc_skb_ip_align(bgmac->net_dev, len); if (new_skb) { -+ skb_reserve(new_skb, 2); skb_put(new_skb, len); skb_copy_from_linear_data_offset(skb, BGMAC_RX_FRAME_OFFSET, - new_skb->data, -@@ -535,7 +536,7 @@ static void bgmac_dma_init(struct bgmac +@@ -436,6 +436,8 @@ static int bgmac_dma_alloc(struct bgmac + } + + for (i = 0; i < BGMAC_MAX_RX_RINGS; i++) { ++ int j; ++ + ring = &bgmac->rx_ring[i]; + ring->num_slots = BGMAC_RX_RING_SLOTS; + ring->mmio_base = ring_base[i]; +@@ -458,8 +460,8 @@ static int bgmac_dma_alloc(struct bgmac + bgmac_warn(bgmac, "DMA address using 0xC0000000 bit(s), it may need translation trick\n"); + + /* Alloc RX slots */ +- for (i = 0; i < ring->num_slots; i++) { +- err = bgmac_dma_rx_skb_for_slot(bgmac, &ring->slots[i]); ++ for (j = 0; j < ring->num_slots; j++) { ++ err = bgmac_dma_rx_skb_for_slot(bgmac, &ring->slots[j]); + if (err) { + bgmac_err(bgmac, "Can't allocate skb for slot in RX ring\n"); + goto err_dma_free; +@@ -496,6 +498,8 @@ static void bgmac_dma_init(struct bgmac + } + + for (i = 0; i < BGMAC_MAX_RX_RINGS; i++) { ++ int j; ++ + ring = &bgmac->rx_ring[i]; + + /* We don't implement unaligned addressing, so enable first */ +@@ -505,11 +509,11 @@ static void bgmac_dma_init(struct bgmac + bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_RX_RINGHI, + upper_32_bits(ring->dma_base)); + +- for (i = 0, dma_desc = ring->cpu_base; i < ring->num_slots; +- i++, dma_desc++) { ++ for (j = 0, dma_desc = ring->cpu_base; j < ring->num_slots; ++ j++, dma_desc++) { + ctl0 = ctl1 = 0; + +- if (i == ring->num_slots - 1) ++ if (j == ring->num_slots - 1) + ctl0 |= BGMAC_DESC_CTL0_EOT; + ctl1 |= BGMAC_RX_BUF_SIZE & BGMAC_DESC_CTL1_LEN; + /* Is there any BGMAC device that requires extension? */ +@@ -517,8 +521,8 @@ static void bgmac_dma_init(struct bgmac + * B43_DMA64_DCTL1_ADDREXT_MASK; + */ + +- dma_desc->addr_low = cpu_to_le32(lower_32_bits(ring->slots[i].dma_addr)); +- dma_desc->addr_high = cpu_to_le32(upper_32_bits(ring->slots[i].dma_addr)); ++ dma_desc->addr_low = cpu_to_le32(lower_32_bits(ring->slots[j].dma_addr)); ++ dma_desc->addr_high = cpu_to_le32(upper_32_bits(ring->slots[j].dma_addr)); + dma_desc->ctl0 = cpu_to_le32(ctl0); + dma_desc->ctl1 = cpu_to_le32(ctl1); + } +@@ -535,7 +539,7 @@ static void bgmac_dma_init(struct bgmac * PHY ops **************************************************/ @@ -20,7 +73,7 @@ { struct bcma_device *core; u16 phy_access_addr; -@@ -584,7 +585,7 @@ u16 bgmac_phy_read(struct bgmac *bgmac, +@@ -584,7 +588,7 @@ u16 bgmac_phy_read(struct bgmac *bgmac, } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphywr */ @@ -29,7 +82,7 @@ { struct bcma_device *core; u16 phy_access_addr; -@@ -617,9 +618,13 @@ void bgmac_phy_write(struct bgmac *bgmac +@@ -617,9 +621,13 @@ void bgmac_phy_write(struct bgmac *bgmac tmp |= value; bcma_write32(core, phy_access_addr, tmp); @@ -44,7 +97,7 @@ } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyforce */ -@@ -761,6 +766,26 @@ static void bgmac_cmdcfg_maskset(struct +@@ -761,6 +769,26 @@ static void bgmac_cmdcfg_maskset(struct udelay(2); } @@ -71,7 +124,7 @@ #if 0 /* We don't use that regs yet */ static void bgmac_chip_stats_update(struct bgmac *bgmac) { -@@ -889,8 +914,10 @@ static void bgmac_chip_reset(struct bgma +@@ -889,8 +917,10 @@ static void bgmac_chip_reset(struct bgma sw_type = et_swtype; } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == 9) { sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII; @@ -84,7 +137,7 @@ } bcma_chipco_chipctl_maskset(cc, 1, ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK | -@@ -948,6 +975,7 @@ static void bgmac_chip_intrs_on(struct b +@@ -948,6 +978,7 @@ static void bgmac_chip_intrs_on(struct b static void bgmac_chip_intrs_off(struct bgmac *bgmac) { bgmac_write(bgmac, BGMAC_INT_MASK, 0); @@ -92,7 +145,7 @@ } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_enable */ -@@ -1004,8 +1032,6 @@ static void bgmac_enable(struct bgmac *b +@@ -1004,8 +1035,6 @@ static void bgmac_enable(struct bgmac *b static void bgmac_chip_init(struct bgmac *bgmac, bool full_init) { struct bgmac_dma_ring *ring; @@ -101,7 +154,7 @@ int i; /* 1 interrupt per received frame */ -@@ -1014,21 +1040,14 @@ static void bgmac_chip_init(struct bgmac +@@ -1014,21 +1043,14 @@ static void bgmac_chip_init(struct bgmac /* Enable 802.3x tx flow control (honor received PAUSE frames) */ bgmac_cmdcfg_maskset(bgmac, ~BGMAC_CMDCFG_RPI, 0, true); @@ -127,7 +180,7 @@ bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + ETHER_MAX_LEN); -@@ -1160,6 +1179,19 @@ static netdev_tx_t bgmac_start_xmit(stru +@@ -1160,6 +1182,19 @@ static netdev_tx_t bgmac_start_xmit(stru return bgmac_dma_tx_add(bgmac, ring, skb); } @@ -147,7 +200,7 @@ static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd) { struct bgmac *bgmac = netdev_priv(net_dev); -@@ -1190,7 +1222,9 @@ static const struct net_device_ops bgmac +@@ -1190,7 +1225,9 @@ static const struct net_device_ops bgmac .ndo_open = bgmac_open, .ndo_stop = bgmac_stop, .ndo_start_xmit = bgmac_start_xmit, @@ -158,7 +211,7 @@ .ndo_do_ioctl = bgmac_ioctl, }; -@@ -1290,6 +1324,12 @@ static int bgmac_probe(struct bcma_devic +@@ -1290,6 +1327,12 @@ static int bgmac_probe(struct bcma_devic return -ENOTSUPP; } -- cgit v1.2.3