From 6bc743ef6ff69ff6dbd89f1d85a0d6432dd84a2d Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 13 Apr 2015 17:32:12 +0000 Subject: kernel: add bgmac fixes for bcm53xx (fix ethernet bringup on a bcm4709 based device) Signed-off-by: Felix Fietkau SVN-Revision: 45417 --- ...gmac-fix-MAC-soft-reset-bit-for-corerev-4.patch | 24 +++++++++++++++++++ ...7-14-bgmac-reset-all-4-GMAC-cores-on-init.patch | 28 ++++++++++++++++++++++ .../patches-3.18/773-bgmac-add-srab-switch.patch | 4 ++-- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 target/linux/generic/patches-3.18/077-13-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch create mode 100644 target/linux/generic/patches-3.18/077-14-bgmac-reset-all-4-GMAC-cores-on-init.patch (limited to 'target/linux/generic') diff --git a/target/linux/generic/patches-3.18/077-13-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch b/target/linux/generic/patches-3.18/077-13-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch new file mode 100644 index 0000000000..a3d9fd6cd9 --- /dev/null +++ b/target/linux/generic/patches-3.18/077-13-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch @@ -0,0 +1,24 @@ +From: Felix Fietkau +Date: Mon, 13 Apr 2015 15:54:04 +0200 +Subject: [PATCH] bgmac: fix MAC soft-reset bit for corerev > 4 + +Only core revisions older than 4 use BGMAC_CMDCFG_SR_REV0 + +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/ethernet/broadcom/bgmac.h ++++ b/drivers/net/ethernet/broadcom/bgmac.h +@@ -198,9 +198,9 @@ + #define BGMAC_CMDCFG_TAI 0x00000200 + #define BGMAC_CMDCFG_HD 0x00000400 /* Set if in half duplex mode */ + #define BGMAC_CMDCFG_HD_SHIFT 10 +-#define BGMAC_CMDCFG_SR_REV0 0x00000800 /* Set to reset mode, for other revs */ +-#define BGMAC_CMDCFG_SR_REV4 0x00002000 /* Set to reset mode, only for core rev 4 */ +-#define BGMAC_CMDCFG_SR(rev) ((rev == 4) ? BGMAC_CMDCFG_SR_REV4 : BGMAC_CMDCFG_SR_REV0) ++#define BGMAC_CMDCFG_SR_REV0 0x00000800 /* Set to reset mode, for core rev 0-3 */ ++#define BGMAC_CMDCFG_SR_REV4 0x00002000 /* Set to reset mode, for core rev >= 4 */ ++#define BGMAC_CMDCFG_SR(rev) ((rev >= 4) ? BGMAC_CMDCFG_SR_REV4 : BGMAC_CMDCFG_SR_REV0) + #define BGMAC_CMDCFG_ML 0x00008000 /* Set to activate mac loopback mode */ + #define BGMAC_CMDCFG_AE 0x00400000 + #define BGMAC_CMDCFG_CFE 0x00800000 diff --git a/target/linux/generic/patches-3.18/077-14-bgmac-reset-all-4-GMAC-cores-on-init.patch b/target/linux/generic/patches-3.18/077-14-bgmac-reset-all-4-GMAC-cores-on-init.patch new file mode 100644 index 0000000000..d1b63f155b --- /dev/null +++ b/target/linux/generic/patches-3.18/077-14-bgmac-reset-all-4-GMAC-cores-on-init.patch @@ -0,0 +1,28 @@ +From: Felix Fietkau +Date: Mon, 13 Apr 2015 15:56:26 +0200 +Subject: [PATCH] bgmac: reset all 4 GMAC cores on init + +On a BCM4709 based device, I found that GMAC cores may be enabled at +probe time, but only become usable after a full reset. +Disable cores before re-enabling them to ensure that they are properly +reset. + +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/ethernet/broadcom/bgmac.c ++++ b/drivers/net/ethernet/broadcom/bgmac.c +@@ -1609,8 +1609,11 @@ static int bgmac_probe(struct bcma_devic + ns_core = bcma_find_core_unit(core->bus, + BCMA_CORE_MAC_GBIT, + ns_gmac); +- if (ns_core && !bcma_core_is_enabled(ns_core)) +- bcma_core_enable(ns_core, 0); ++ if (!ns_core) ++ continue; ++ ++ bcma_core_disable(ns_core, 0); ++ bcma_core_enable(ns_core, 0); + } + } + diff --git a/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch index 2219f85f3c..a18be96417 100644 --- a/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch +++ b/target/linux/generic/patches-3.18/773-bgmac-add-srab-switch.patch @@ -30,7 +30,7 @@ Signed-off-by: Hauke Mehrtens /************************************************** * BCMA bus ops **************************************************/ -@@ -1647,6 +1659,16 @@ static int bgmac_probe(struct bcma_devic +@@ -1650,6 +1662,16 @@ static int bgmac_probe(struct bcma_devic net_dev->hw_features = net_dev->features; net_dev->vlan_features = net_dev->features; @@ -47,7 +47,7 @@ Signed-off-by: Hauke Mehrtens err = register_netdev(bgmac->net_dev); if (err) { bgmac_err(bgmac, "Cannot register net device\n"); -@@ -1673,6 +1695,10 @@ static void bgmac_remove(struct bcma_dev +@@ -1676,6 +1698,10 @@ static void bgmac_remove(struct bcma_dev { struct bgmac *bgmac = bcma_get_drvdata(core); -- cgit v1.2.3