summaryrefslogtreecommitdiff
path: root/target/linux/brcm47xx
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm47xx')
-rw-r--r--target/linux/brcm47xx/patches-3.10/710-bgmac_fix_internal_switch_initialization.patch33
-rw-r--r--target/linux/brcm47xx/patches-3.10/711-bgmac_fix_parsing_of_et_swtype.patch14
-rw-r--r--target/linux/brcm47xx/patches-3.10/712-bgmac_implement_unaligned_addressing.patch140
-rw-r--r--target/linux/brcm47xx/patches-3.10/740-bgmac-add-support-for-Byte-Queue-Limits.patch50
-rw-r--r--target/linux/brcm47xx/patches-3.10/770-bgmac-phylib.patch10
5 files changed, 0 insertions, 247 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/710-bgmac_fix_internal_switch_initialization.patch b/target/linux/brcm47xx/patches-3.10/710-bgmac_fix_internal_switch_initialization.patch
deleted file mode 100644
index 8601888..0000000
--- a/target/linux/brcm47xx/patches-3.10/710-bgmac_fix_internal_switch_initialization.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-bgmac: fix internal switch initialization
-
-Some devices (BCM4749, BCM5357, BCM53572) have internal switch that
-requires initialization. We already have code for this, but because
-of the typo in code it was never working. This resulted in network not
-working for some routers and possibility of soft-bricking them.
-
-Use correct bit for switch initialization and fix typo in the define.
-
-Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -908,7 +908,7 @@ static void bgmac_chip_reset(struct bgma
- struct bcma_drv_cc *cc = &bgmac->core->bus->drv_cc;
- u8 et_swtype = 0;
- u8 sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHY |
-- BGMAC_CHIPCTL_1_IF_TYPE_RMII;
-+ BGMAC_CHIPCTL_1_IF_TYPE_MII;
- char buf[2];
-
- if (bcm47xx_nvram_getenv("et_swtype", buf, 1) > 0) {
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -333,7 +333,7 @@
-
- #define BGMAC_CHIPCTL_1_IF_TYPE_MASK 0x00000030
- #define BGMAC_CHIPCTL_1_IF_TYPE_RMII 0x00000000
--#define BGMAC_CHIPCTL_1_IF_TYPE_MI 0x00000010
-+#define BGMAC_CHIPCTL_1_IF_TYPE_MII 0x00000010
- #define BGMAC_CHIPCTL_1_IF_TYPE_RGMII 0x00000020
- #define BGMAC_CHIPCTL_1_SW_TYPE_MASK 0x000000C0
- #define BGMAC_CHIPCTL_1_SW_TYPE_EPHY 0x00000000
diff --git a/target/linux/brcm47xx/patches-3.10/711-bgmac_fix_parsing_of_et_swtype.patch b/target/linux/brcm47xx/patches-3.10/711-bgmac_fix_parsing_of_et_swtype.patch
deleted file mode 100644
index 21342ff..0000000
--- a/target/linux/brcm47xx/patches-3.10/711-bgmac_fix_parsing_of_et_swtype.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -909,9 +909,9 @@ static void bgmac_chip_reset(struct bgma
- u8 et_swtype = 0;
- u8 sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHY |
- BGMAC_CHIPCTL_1_IF_TYPE_MII;
-- char buf[2];
-+ char buf[4];
-
-- if (bcm47xx_nvram_getenv("et_swtype", buf, 1) > 0) {
-+ if (bcm47xx_nvram_getenv("et_swtype", buf, sizeof(buf)) > 0) {
- if (kstrtou8(buf, 0, &et_swtype))
- bgmac_err(bgmac, "Failed to parse et_swtype (%s)\n",
- buf);
diff --git a/target/linux/brcm47xx/patches-3.10/712-bgmac_implement_unaligned_addressing.patch b/target/linux/brcm47xx/patches-3.10/712-bgmac_implement_unaligned_addressing.patch
deleted file mode 100644
index 939ae11..0000000
--- a/target/linux/brcm47xx/patches-3.10/712-bgmac_implement_unaligned_addressing.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-bgmac: implement unaligned addressing for DMA rings that support it
-
-This is important patch for new devices that support unaligned
-addressing. That devices suffer from the backward-compatibility bug in
-DMA engine. In theory we should be able to use old mechanism, but in
-practice DMA address seems to be randomly copied into status register
-when hardware reaches end of a ring. This breaks reading slot number
-from status register and we can't use DMA anymore.
-
-Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -157,6 +157,7 @@ static netdev_tx_t bgmac_dma_tx_add(stru
- if (++ring->end >= BGMAC_TX_RING_SLOTS)
- ring->end = 0;
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_TX_INDEX,
-+ ring->index_base +
- ring->end * sizeof(struct bgmac_dma_desc));
-
- /* Always keep one slot free to allow detecting bugged calls. */
-@@ -181,6 +182,8 @@ static void bgmac_dma_tx_free(struct bgm
- /* The last slot that hardware didn't consume yet */
- empty_slot = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_TX_STATUS);
- empty_slot &= BGMAC_DMA_TX_STATDPTR;
-+ empty_slot -= ring->index_base;
-+ empty_slot &= BGMAC_DMA_TX_STATDPTR;
- empty_slot /= sizeof(struct bgmac_dma_desc);
-
- while (ring->start != empty_slot) {
-@@ -274,6 +277,8 @@ static int bgmac_dma_rx_read(struct bgma
-
- end_slot = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_RX_STATUS);
- end_slot &= BGMAC_DMA_RX_STATDPTR;
-+ end_slot -= ring->index_base;
-+ end_slot &= BGMAC_DMA_RX_STATDPTR;
- end_slot /= sizeof(struct bgmac_dma_desc);
-
- ring->end = end_slot;
-@@ -418,9 +423,6 @@ static int bgmac_dma_alloc(struct bgmac
- ring = &bgmac->tx_ring[i];
- ring->num_slots = BGMAC_TX_RING_SLOTS;
- ring->mmio_base = ring_base[i];
-- if (bgmac_dma_unaligned(bgmac, ring, BGMAC_DMA_RING_TX))
-- bgmac_warn(bgmac, "TX on ring 0x%X supports unaligned addressing but this feature is not implemented\n",
-- ring->mmio_base);
-
- /* Alloc ring of descriptors */
- size = ring->num_slots * sizeof(struct bgmac_dma_desc);
-@@ -435,6 +437,13 @@ static int bgmac_dma_alloc(struct bgmac
- if (ring->dma_base & 0xC0000000)
- bgmac_warn(bgmac, "DMA address using 0xC0000000 bit(s), it may need translation trick\n");
-
-+ ring->unaligned = bgmac_dma_unaligned(bgmac, ring,
-+ BGMAC_DMA_RING_TX);
-+ if (ring->unaligned)
-+ ring->index_base = lower_32_bits(ring->dma_base);
-+ else
-+ ring->index_base = 0;
-+
- /* No need to alloc TX slots yet */
- }
-
-@@ -444,9 +453,6 @@ static int bgmac_dma_alloc(struct bgmac
- ring = &bgmac->rx_ring[i];
- ring->num_slots = BGMAC_RX_RING_SLOTS;
- ring->mmio_base = ring_base[i];
-- if (bgmac_dma_unaligned(bgmac, ring, BGMAC_DMA_RING_RX))
-- bgmac_warn(bgmac, "RX on ring 0x%X supports unaligned addressing but this feature is not implemented\n",
-- ring->mmio_base);
-
- /* Alloc ring of descriptors */
- size = ring->num_slots * sizeof(struct bgmac_dma_desc);
-@@ -462,6 +468,13 @@ static int bgmac_dma_alloc(struct bgmac
- if (ring->dma_base & 0xC0000000)
- bgmac_warn(bgmac, "DMA address using 0xC0000000 bit(s), it may need translation trick\n");
-
-+ ring->unaligned = bgmac_dma_unaligned(bgmac, ring,
-+ BGMAC_DMA_RING_RX);
-+ if (ring->unaligned)
-+ ring->index_base = lower_32_bits(ring->dma_base);
-+ else
-+ ring->index_base = 0;
-+
- /* Alloc RX slots */
- for (j = 0; j < ring->num_slots; j++) {
- err = bgmac_dma_rx_skb_for_slot(bgmac, &ring->slots[j]);
-@@ -489,12 +502,14 @@ static void bgmac_dma_init(struct bgmac
- for (i = 0; i < BGMAC_MAX_TX_RINGS; i++) {
- ring = &bgmac->tx_ring[i];
-
-- /* We don't implement unaligned addressing, so enable first */
-- bgmac_dma_tx_enable(bgmac, ring);
-+ if (!ring->unaligned)
-+ bgmac_dma_tx_enable(bgmac, ring);
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_TX_RINGLO,
- lower_32_bits(ring->dma_base));
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_TX_RINGHI,
- upper_32_bits(ring->dma_base));
-+ if (ring->unaligned)
-+ bgmac_dma_tx_enable(bgmac, ring);
-
- ring->start = 0;
- ring->end = 0; /* Points the slot that should *not* be read */
-@@ -505,12 +520,14 @@ static void bgmac_dma_init(struct bgmac
-
- ring = &bgmac->rx_ring[i];
-
-- /* We don't implement unaligned addressing, so enable first */
-- bgmac_dma_rx_enable(bgmac, ring);
-+ if (!ring->unaligned)
-+ bgmac_dma_rx_enable(bgmac, ring);
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_RX_RINGLO,
- lower_32_bits(ring->dma_base));
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_RX_RINGHI,
- upper_32_bits(ring->dma_base));
-+ if (ring->unaligned)
-+ bgmac_dma_rx_enable(bgmac, ring);
-
- for (j = 0, dma_desc = ring->cpu_base; j < ring->num_slots;
- j++, dma_desc++) {
-@@ -531,6 +548,7 @@ static void bgmac_dma_init(struct bgmac
- }
-
- bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_RX_INDEX,
-+ ring->index_base +
- ring->num_slots * sizeof(struct bgmac_dma_desc));
-
- ring->start = 0;
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -384,6 +384,8 @@ struct bgmac_dma_ring {
- u16 mmio_base;
- struct bgmac_dma_desc *cpu_base;
- dma_addr_t dma_base;
-+ u32 index_base; /* Used for unaligned rings only, otherwise 0 */
-+ bool unaligned;
-
- struct bgmac_slot_info slots[BGMAC_RX_RING_SLOTS];
- };
diff --git a/target/linux/brcm47xx/patches-3.10/740-bgmac-add-support-for-Byte-Queue-Limits.patch b/target/linux/brcm47xx/patches-3.10/740-bgmac-add-support-for-Byte-Queue-Limits.patch
deleted file mode 100644
index 68d1bc9..0000000
--- a/target/linux/brcm47xx/patches-3.10/740-bgmac-add-support-for-Byte-Queue-Limits.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From: Hauke Mehrtens <hauke@hauke-m.de>
-bgmac: add support for Byte Queue Limits
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -178,6 +178,7 @@ static void bgmac_dma_tx_free(struct bgm
- struct device *dma_dev = bgmac->core->dma_dev;
- int empty_slot;
- bool freed = false;
-+ unsigned bytes_compl = 0, pkts_compl = 0;
-
- /* The last slot that hardware didn't consume yet */
- empty_slot = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_TX_STATUS);
-@@ -195,6 +196,9 @@ static void bgmac_dma_tx_free(struct bgm
- slot->skb->len, DMA_TO_DEVICE);
- slot->dma_addr = 0;
-
-+ bytes_compl += slot->skb->len;
-+ pkts_compl++;
-+
- /* Free memory! :) */
- dev_kfree_skb(slot->skb);
- slot->skb = NULL;
-@@ -208,6 +212,8 @@ static void bgmac_dma_tx_free(struct bgm
- freed = true;
- }
-
-+ netdev_completed_queue(bgmac->net_dev, pkts_compl, bytes_compl);
-+
- if (freed && netif_queue_stopped(bgmac->net_dev))
- netif_wake_queue(bgmac->net_dev);
- }
-@@ -987,6 +993,8 @@ static void bgmac_chip_reset(struct bgma
- bgmac_set(bgmac, BGMAC_PHY_CNTL, BGMAC_PC_MTE);
- bgmac_miiconfig(bgmac);
- bgmac_phy_init(bgmac);
-+
-+ netdev_reset_queue(bgmac->net_dev);
-
- bgmac->int_status = 0;
- }
-@@ -1198,6 +1206,8 @@ static netdev_tx_t bgmac_start_xmit(stru
- struct bgmac *bgmac = netdev_priv(net_dev);
- struct bgmac_dma_ring *ring;
-
-+ netdev_sent_queue(net_dev, skb->len);
-+
- /* No QOS support yet */
- ring = &bgmac->tx_ring[0];
- return bgmac_dma_tx_add(bgmac, ring, skb);
diff --git a/target/linux/brcm47xx/patches-3.10/770-bgmac-phylib.patch b/target/linux/brcm47xx/patches-3.10/770-bgmac-phylib.patch
index 13a7ea5..50aaeaa 100644
--- a/target/linux/brcm47xx/patches-3.10/770-bgmac-phylib.patch
+++ b/target/linux/brcm47xx/patches-3.10/770-bgmac-phylib.patch
@@ -1,13 +1,3 @@
---- a/drivers/net/ethernet/broadcom/Kconfig
-+++ b/drivers/net/ethernet/broadcom/Kconfig
-@@ -133,6 +133,7 @@ config BNX2X_SRIOV
- config BGMAC
- tristate "BCMA bus GBit core support"
- depends on BCMA_HOST_SOC && HAS_DMA
-+ select PHYLIB
- ---help---
- This driver supports GBit MAC and BCM4706 GBit MAC cores on BCMA bus.
- They can be found on BCM47xx SoCs and provide gigabit ethernet.
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -1229,27 +1229,14 @@ static int bgmac_set_mac_address(struct