[source] kernel: update bgmac by adding Florian's upstream changes
LEDE Commits
lede-commits at lists.infradead.org
Tue Aug 16 13:42:37 PDT 2016
rmilecki pushed a commit to source.git, branch master:
https://git.lede-project.org/?p=source.git;a=commitdiff;h=13e20e6956320bd642314a4e364d5eea584a5849
commit 13e20e6956320bd642314a4e364d5eea584a5849
Author: Rafał Miłecki <rafal at milecki.pl>
AuthorDate: Tue Aug 16 17:40:32 2016 +0200
kernel: update bgmac by adding Florian's upstream changes
Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
...t-bgmac-use-phydev-from-struct-net_device.patch | 105 +++++++++++++++++++++
.../074-0001-net-bgmac-Fix-SOF-bit-checking.patch | 37 ++++++++
...-bgmac-Start-transmit-queue-in-bgmac_open.patch | 28 ++++++
...-bgmac-Remove-superflous-netif_carrier_on.patch | 28 ++++++
.../patches-4.4/773-bgmac-add-srab-switch.patch | 8 +-
5 files changed, 202 insertions(+), 4 deletions(-)
diff --git a/target/linux/generic/patches-4.4/073-0001-net-ethernet-bgmac-use-phydev-from-struct-net_device.patch b/target/linux/generic/patches-4.4/073-0001-net-ethernet-bgmac-use-phydev-from-struct-net_device.patch
new file mode 100644
index 0000000..17fbea0
--- /dev/null
+++ b/target/linux/generic/patches-4.4/073-0001-net-ethernet-bgmac-use-phydev-from-struct-net_device.patch
@@ -0,0 +1,105 @@
+From b21fcb259313bcf7d4f73ecd5e44948995c8957c Mon Sep 17 00:00:00 2001
+From: Philippe Reynes <tremyfr at gmail.com>
+Date: Sun, 19 Jun 2016 22:37:05 +0200
+Subject: [PATCH 1/2] net: ethernet: bgmac: use phydev from struct net_device
+
+The private structure contain a pointer to phydev, but the structure
+net_device already contain such pointer. So we can remove the pointer
+phydev in the private structure, and update the driver to use the
+one contained in struct net_device.
+
+Signed-off-by: Philippe Reynes <tremyfr at gmail.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 17 ++++++-----------
+ drivers/net/ethernet/broadcom/bgmac.h | 1 -
+ 2 files changed, 6 insertions(+), 12 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1320,7 +1320,7 @@ static int bgmac_open(struct net_device
+ }
+ napi_enable(&bgmac->napi);
+
+- phy_start(bgmac->phy_dev);
++ phy_start(net_dev->phydev);
+
+ netif_carrier_on(net_dev);
+ return 0;
+@@ -1332,7 +1332,7 @@ static int bgmac_stop(struct net_device
+
+ netif_carrier_off(net_dev);
+
+- phy_stop(bgmac->phy_dev);
++ phy_stop(net_dev->phydev);
+
+ napi_disable(&bgmac->napi);
+ bgmac_chip_intrs_off(bgmac);
+@@ -1370,12 +1370,10 @@ static int bgmac_set_mac_address(struct
+
+ static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd)
+ {
+- struct bgmac *bgmac = netdev_priv(net_dev);
+-
+ if (!netif_running(net_dev))
+ return -EINVAL;
+
+- return phy_mii_ioctl(bgmac->phy_dev, ifr, cmd);
++ return phy_mii_ioctl(net_dev->phydev, ifr, cmd);
+ }
+
+ static const struct net_device_ops bgmac_netdev_ops = {
+@@ -1518,7 +1516,7 @@ static int bgmac_get_settings(struct net
+ {
+ struct bgmac *bgmac = netdev_priv(net_dev);
+
+- return phy_ethtool_gset(bgmac->phy_dev, cmd);
++ return phy_ethtool_gset(net_dev->phydev, cmd);
+ }
+
+ static int bgmac_set_settings(struct net_device *net_dev,
+@@ -1526,7 +1524,7 @@ static int bgmac_set_settings(struct net
+ {
+ struct bgmac *bgmac = netdev_priv(net_dev);
+
+- return phy_ethtool_sset(bgmac->phy_dev, cmd);
++ return phy_ethtool_sset(net_dev->phydev, cmd);
+ }
+
+ static void bgmac_get_drvinfo(struct net_device *net_dev,
+@@ -1563,7 +1561,7 @@ static int bgmac_mii_write(struct mii_bu
+ static void bgmac_adjust_link(struct net_device *net_dev)
+ {
+ struct bgmac *bgmac = netdev_priv(net_dev);
+- struct phy_device *phy_dev = bgmac->phy_dev;
++ struct phy_device *phy_dev = net_dev->phydev;
+ bool update = false;
+
+ if (phy_dev->link) {
+@@ -1607,8 +1605,6 @@ static int bgmac_fixed_phy_register(stru
+ return err;
+ }
+
+- bgmac->phy_dev = phy_dev;
+-
+ return err;
+ }
+
+@@ -1661,7 +1657,6 @@ static int bgmac_mii_register(struct bgm
+ err = PTR_ERR(phy_dev);
+ goto err_unregister_bus;
+ }
+- bgmac->phy_dev = phy_dev;
+
+ return err;
+
+--- a/drivers/net/ethernet/broadcom/bgmac.h
++++ b/drivers/net/ethernet/broadcom/bgmac.h
+@@ -441,7 +441,6 @@ struct bgmac {
+ struct net_device *net_dev;
+ struct napi_struct napi;
+ struct mii_bus *mii_bus;
+- struct phy_device *phy_dev;
+
+ /* DMA */
+ struct bgmac_dma_ring tx_ring[BGMAC_MAX_TX_RINGS];
diff --git a/target/linux/generic/patches-4.4/074-0001-net-bgmac-Fix-SOF-bit-checking.patch b/target/linux/generic/patches-4.4/074-0001-net-bgmac-Fix-SOF-bit-checking.patch
new file mode 100644
index 0000000..ea73fda
--- /dev/null
+++ b/target/linux/generic/patches-4.4/074-0001-net-bgmac-Fix-SOF-bit-checking.patch
@@ -0,0 +1,37 @@
+From d2b13233879ca1268a1c027d4573109e5a777811 Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli at gmail.com>
+Date: Thu, 23 Jun 2016 14:23:12 -0700
+Subject: [PATCH 1/3] net: bgmac: Fix SOF bit checking
+
+We are checking for the Start of Frame bit in the ctl1 word, while this
+bit is set in the ctl0 word instead. Read the ctl0 word and update the
+check to verify that.
+
+Fixes: 9cde94506eac ("bgmac: implement scatter/gather support")
+Signed-off-by: Florian Fainelli <f.fainelli at gmail.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -269,15 +269,16 @@ static void bgmac_dma_tx_free(struct bgm
+ while (ring->start != ring->end) {
+ int slot_idx = ring->start % BGMAC_TX_RING_SLOTS;
+ struct bgmac_slot_info *slot = &ring->slots[slot_idx];
+- u32 ctl1;
++ u32 ctl0, ctl1;
+ int len;
+
+ if (slot_idx == empty_slot)
+ break;
+
++ ctl0 = le32_to_cpu(ring->cpu_base[slot_idx].ctl0);
+ ctl1 = le32_to_cpu(ring->cpu_base[slot_idx].ctl1);
+ len = ctl1 & BGMAC_DESC_CTL1_LEN;
+- if (ctl1 & BGMAC_DESC_CTL0_SOF)
++ if (ctl0 & BGMAC_DESC_CTL0_SOF)
+ /* Unmap no longer used buffer */
+ dma_unmap_single(dma_dev, slot->dma_addr, len,
+ DMA_TO_DEVICE);
diff --git a/target/linux/generic/patches-4.4/074-0002-net-bgmac-Start-transmit-queue-in-bgmac_open.patch b/target/linux/generic/patches-4.4/074-0002-net-bgmac-Start-transmit-queue-in-bgmac_open.patch
new file mode 100644
index 0000000..84772aa
--- /dev/null
+++ b/target/linux/generic/patches-4.4/074-0002-net-bgmac-Start-transmit-queue-in-bgmac_open.patch
@@ -0,0 +1,28 @@
+From c3897f2a69e54dd113fc9abd2daf872e5b495798 Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli at gmail.com>
+Date: Thu, 23 Jun 2016 14:25:32 -0700
+Subject: [PATCH 2/3] net: bgmac: Start transmit queue in bgmac_open
+
+The driver does not start the transmit queue in bgmac_open(). If the
+queue was stopped prior to closing then re-opening the interface, we
+would never be able to wake-up again.
+
+Fixes: dd4544f05469 ("bgmac: driver for GBit MAC core on BCMA bus")
+Signed-off-by: Florian Fainelli <f.fainelli at gmail.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1324,6 +1324,9 @@ static int bgmac_open(struct net_device
+ phy_start(net_dev->phydev);
+
+ netif_carrier_on(net_dev);
++
++ netif_start_queue(net_dev);
++
+ return 0;
+ }
+
diff --git a/target/linux/generic/patches-4.4/074-0003-net-bgmac-Remove-superflous-netif_carrier_on.patch b/target/linux/generic/patches-4.4/074-0003-net-bgmac-Remove-superflous-netif_carrier_on.patch
new file mode 100644
index 0000000..edb027c
--- /dev/null
+++ b/target/linux/generic/patches-4.4/074-0003-net-bgmac-Remove-superflous-netif_carrier_on.patch
@@ -0,0 +1,28 @@
+From 3894396e64994f31c3ef5c7e6f63dded0593e567 Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli at gmail.com>
+Date: Thu, 23 Jun 2016 14:25:33 -0700
+Subject: [PATCH 3/3] net: bgmac: Remove superflous netif_carrier_on()
+
+bgmac_open() calls phy_start() to initialize the PHY state machine,
+which will set the interface's carrier state accordingly, no need to
+force that as this could be conflicting with the PHY state determined by
+PHYLIB.
+
+Fixes: dd4544f05469 ("bgmac: driver for GBit MAC core on BCMA bus")
+Signed-off-by: Florian Fainelli <f.fainelli at gmail.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ethernet/broadcom/bgmac.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -1323,8 +1323,6 @@ static int bgmac_open(struct net_device
+
+ phy_start(net_dev->phydev);
+
+- netif_carrier_on(net_dev);
+-
+ netif_start_queue(net_dev);
+
+ return 0;
diff --git a/target/linux/generic/patches-4.4/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-4.4/773-bgmac-add-srab-switch.patch
index 4348574..14986b5 100644
--- a/target/linux/generic/patches-4.4/773-bgmac-add-srab-switch.patch
+++ b/target/linux/generic/patches-4.4/773-bgmac-add-srab-switch.patch
@@ -12,7 +12,7 @@ Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
#include <linux/bcm47xx_nvram.h>
static const struct bcma_device_id bgmac_bcma_tbl[] = {
-@@ -1683,6 +1684,17 @@ static void bgmac_mii_unregister(struct
+@@ -1680,6 +1681,17 @@ static void bgmac_mii_unregister(struct
mdiobus_free(mii_bus);
}
@@ -30,7 +30,7 @@ Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
/**************************************************
* BCMA bus ops
**************************************************/
-@@ -1828,6 +1840,14 @@ static int bgmac_probe(struct bcma_devic
+@@ -1825,6 +1837,14 @@ static int bgmac_probe(struct bcma_devic
net_dev->hw_features = net_dev->features;
net_dev->vlan_features = net_dev->features;
@@ -45,7 +45,7 @@ Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
err = register_netdev(bgmac->net_dev);
if (err) {
bgmac_err(bgmac, "Cannot register net device\n");
-@@ -1854,6 +1874,10 @@ static void bgmac_remove(struct bcma_dev
+@@ -1851,6 +1871,10 @@ static void bgmac_remove(struct bcma_dev
{
struct bgmac *bgmac = bcma_get_drvdata(core);
@@ -58,7 +58,7 @@ Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
netif_napi_del(&bgmac->napi);
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -463,6 +463,9 @@ struct bgmac {
+@@ -462,6 +462,9 @@ struct bgmac {
bool has_robosw;
bool loopback;
More information about the lede-commits
mailing list