diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2015-03-21 11:45:50 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2015-03-21 11:45:50 +0000 |
commit | ba10454b9115bd876a4c1cbf694d582b87039feb (patch) | |
tree | 0065877da06e708bc5052463ca349fcb1a436c1d /target/linux/generic/patches-4.0 | |
parent | 782e432797d90904bab73fac9f458ac5ad8de1aa (diff) | |
download | upstream-ba10454b9115bd876a4c1cbf694d582b87039feb.tar.gz upstream-ba10454b9115bd876a4c1cbf694d582b87039feb.tar.bz2 upstream-ba10454b9115bd876a4c1cbf694d582b87039feb.zip |
kernel: backport bgmac patches
This allows dropping some hacky bcm53xx bgmac patch forcing link state.
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
SVN-Revision: 44917
Diffstat (limited to 'target/linux/generic/patches-4.0')
4 files changed, 120 insertions, 6 deletions
diff --git a/target/linux/generic/patches-4.0/070-bgmac-register-fixed-PHY-for-ARM-BCM470X-BCM5301X-ch.patch b/target/linux/generic/patches-4.0/070-bgmac-register-fixed-PHY-for-ARM-BCM470X-BCM5301X-ch.patch new file mode 100644 index 0000000000..472b22b0e7 --- /dev/null +++ b/target/linux/generic/patches-4.0/070-bgmac-register-fixed-PHY-for-ARM-BCM470X-BCM5301X-ch.patch @@ -0,0 +1,81 @@ +From c25b23b8a387e7d31f7a74af8e37b61e9e6ebb21 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> +Date: Fri, 20 Mar 2015 23:14:31 +0100 +Subject: [PATCH] bgmac: register fixed PHY for ARM BCM470X / BCM5301X chipsets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On ARM SoCs with bgmac Ethernet hardware we don't have any normal PHY. +There is always a switch attached but it's not even controlled over MDIO +like in case of MIPS devices. +We need a fixed PHY to be able to send/receive packets from the switch. + +Signed-off-by: Rafał Miłecki <zajec5@gmail.com> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + drivers/net/ethernet/broadcom/bgmac.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c +index 0469f72..efda7cf 100644 +--- a/drivers/net/ethernet/broadcom/bgmac.c ++++ b/drivers/net/ethernet/broadcom/bgmac.c +@@ -14,6 +14,7 @@ + #include <linux/etherdevice.h> + #include <linux/mii.h> + #include <linux/phy.h> ++#include <linux/phy_fixed.h> + #include <linux/interrupt.h> + #include <linux/dma-mapping.h> + #include <bcm47xx_nvram.h> +@@ -1330,13 +1331,46 @@ static void bgmac_adjust_link(struct net_device *net_dev) + } + } + ++static int bgmac_fixed_phy_register(struct bgmac *bgmac) ++{ ++ struct fixed_phy_status fphy_status = { ++ .link = 1, ++ .speed = SPEED_1000, ++ .duplex = DUPLEX_FULL, ++ }; ++ struct phy_device *phy_dev; ++ int err; ++ ++ phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, NULL); ++ if (!phy_dev || IS_ERR(phy_dev)) { ++ bgmac_err(bgmac, "Failed to register fixed PHY device\n"); ++ return -ENODEV; ++ } ++ ++ err = phy_connect_direct(bgmac->net_dev, phy_dev, bgmac_adjust_link, ++ PHY_INTERFACE_MODE_MII); ++ if (err) { ++ bgmac_err(bgmac, "Connecting PHY failed\n"); ++ return err; ++ } ++ ++ bgmac->phy_dev = phy_dev; ++ ++ return err; ++} ++ + static int bgmac_mii_register(struct bgmac *bgmac) + { ++ struct bcma_chipinfo *ci = &bgmac->core->bus->chipinfo; + struct mii_bus *mii_bus; + struct phy_device *phy_dev; + char bus_id[MII_BUS_ID_SIZE + 3]; + int i, err = 0; + ++ if (ci->id == BCMA_CHIP_ID_BCM4707 || ++ ci->id == BCMA_CHIP_ID_BCM53018) ++ return bgmac_fixed_phy_register(bgmac); ++ + mii_bus = mdiobus_alloc(); + if (!mii_bus) + return -ENOMEM; +-- +1.8.4.5 + diff --git a/target/linux/generic/patches-4.0/071-bgmac-allow-enabling-on-ARCH_BCM_5301X.patch b/target/linux/generic/patches-4.0/071-bgmac-allow-enabling-on-ARCH_BCM_5301X.patch new file mode 100644 index 0000000000..674d561181 --- /dev/null +++ b/target/linux/generic/patches-4.0/071-bgmac-allow-enabling-on-ARCH_BCM_5301X.patch @@ -0,0 +1,33 @@ +From fc300dc3733fdc328e6e10c7b8379b60c26cd648 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> +Date: Fri, 20 Mar 2015 23:14:32 +0100 +Subject: [PATCH] bgmac: allow enabling on ARCH_BCM_5301X +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Home routers based on ARM SoCs like BCM4708 also have bcma bus with core +supported by bgmac. + +Signed-off-by: Rafał Miłecki <zajec5@gmail.com> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + drivers/net/ethernet/broadcom/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig +index ee4fdfe..a6f9142 100644 +--- a/drivers/net/ethernet/broadcom/Kconfig ++++ b/drivers/net/ethernet/broadcom/Kconfig +@@ -142,7 +142,7 @@ config BNX2X_SRIOV + + config BGMAC + tristate "BCMA bus GBit core support" +- depends on BCMA_HOST_SOC && HAS_DMA && BCM47XX ++ depends on BCMA_HOST_SOC && HAS_DMA && (BCM47XX || ARCH_BCM_5301X) + select PHYLIB + ---help--- + This driver supports GBit MAC and BCM4706 GBit MAC cores on BCMA bus. +-- +1.8.4.5 + diff --git a/target/linux/generic/patches-4.0/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-4.0/773-bgmac-add-srab-switch.patch index e49a841b0b..0a8b451247 100644 --- a/target/linux/generic/patches-4.0/773-bgmac-add-srab-switch.patch +++ b/target/linux/generic/patches-4.0/773-bgmac-add-srab-switch.patch @@ -4,15 +4,15 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c -@@ -16,6 +16,7 @@ - #include <linux/phy.h> +@@ -17,6 +17,7 @@ + #include <linux/phy_fixed.h> #include <linux/interrupt.h> #include <linux/dma-mapping.h> +#include <linux/platform_data/b53.h> #include <bcm47xx_nvram.h> static const struct bcma_device_id bgmac_bcma_tbl[] = { -@@ -1398,6 +1399,17 @@ static void bgmac_mii_unregister(struct +@@ -1432,6 +1433,17 @@ static void bgmac_mii_unregister(struct mdiobus_free(mii_bus); } @@ -30,7 +30,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> /************************************************** * BCMA bus ops **************************************************/ -@@ -1517,6 +1529,16 @@ static int bgmac_probe(struct bcma_devic +@@ -1551,6 +1563,16 @@ static int bgmac_probe(struct bcma_devic goto err_dma_free; } @@ -47,7 +47,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> err = register_netdev(bgmac->net_dev); if (err) { bgmac_err(bgmac, "Cannot register net device\n"); -@@ -1543,6 +1565,10 @@ static void bgmac_remove(struct bcma_dev +@@ -1577,6 +1599,10 @@ static void bgmac_remove(struct bcma_dev { struct bgmac *bgmac = bcma_get_drvdata(core); diff --git a/target/linux/generic/patches-4.0/775-bgmac-check-length-of-received-frame.patch b/target/linux/generic/patches-4.0/775-bgmac-check-length-of-received-frame.patch index d39626b160..883c77b2f5 100644 --- a/target/linux/generic/patches-4.0/775-bgmac-check-length-of-received-frame.patch +++ b/target/linux/generic/patches-4.0/775-bgmac-check-length-of-received-frame.patch @@ -9,7 +9,7 @@ Subject: [PATCH] bgmac: check length of received frame --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c -@@ -360,6 +360,27 @@ static int bgmac_dma_rx_read(struct bgma +@@ -361,6 +361,27 @@ static int bgmac_dma_rx_read(struct bgma dma_addr_t old_dma_addr = slot->dma_addr; int err; |