Browse Source

Bump kernel to 4.4.120 and update e2fsprogs

RISCi_ATOM 1 year ago
parent
commit
f569eb5ecc
57 changed files with 333 additions and 4114 deletions
  1. 2 1
      include/kernel-version.mk
  2. 3 0
      target/linux/ar71xx/patches-4.4/004-register_gpio_driver_earlier.patch
  3. 38 0
      target/linux/ar71xx/patches-4.4/622-MIPS-ath79-add-more-register-defines-for-QCA956x-SoC.patch
  4. 1 1
      target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
  5. 2 2
      target/linux/ar71xx/patches-4.4/820-MIPS-ath79-add_gpio_function2_setup.patch
  6. 10 10
      target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch
  7. 1 1
      target/linux/generic/patches-4.4/051-0005-ovl-proper-cleanup-of-workdir.patch
  8. 0 46
      target/linux/generic/patches-4.4/070-v4.5-0003-net-bgmac-clarify-CONFIG_BCMA-dependency.patch
  9. 0 106
      target/linux/generic/patches-4.4/070-v4.6-0001-bgmac-add-helper-checking-for-BCM4707-BCM53018-chip-.patch
  10. 0 39
      target/linux/generic/patches-4.4/070-v4.6-0002-bgmac-support-Ethernet-device-on-BCM47094-SoC.patch
  11. 0 34
      target/linux/generic/patches-4.4/070-v4.6-0004-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch
  12. 0 25
      target/linux/generic/patches-4.4/070-v4.8-0001-bgmac-Bind-net_device-with-backing-device-structure.patch
  13. 0 175
      target/linux/generic/patches-4.4/070-v4.8-0002-bgmac-Add-support-for-ethtool-statistics.patch
  14. 0 68
      target/linux/generic/patches-4.4/070-v4.8-0003-bgmac-Maintain-some-netdev-statistics.patch
  15. 0 105
      target/linux/generic/patches-4.4/070-v4.8-0004-net-ethernet-bgmac-use-phydev-from-struct-net_device.patch
  16. 0 407
      target/linux/generic/patches-4.4/071-v4.8-0001-net-ethernet-bgmac-change-bgmac_-prints-to-dev_-prin.patch
  17. 0 112
      target/linux/generic/patches-4.4/071-v4.8-0002-net-ethernet-bgmac-add-dma_dev-pointer.patch
  18. 0 676
      target/linux/generic/patches-4.4/071-v4.8-0003-net-ethernet-bgmac-move-BCMA-MDIO-Phy-code-into-a-se.patch
  19. 0 384
      target/linux/generic/patches-4.4/071-v4.8-0004-net-ethernet-bgmac-convert-to-feature-flags.patch
  20. 0 1260
      target/linux/generic/patches-4.4/071-v4.8-0005-net-ethernet-bgmac-Add-platform-device-support.patch
  21. 0 26
      target/linux/generic/patches-4.4/071-v4.8-0006-net-ethernet-bgmac-Fix-return-value-check-in-bgmac_p.patch
  22. 0 42
      target/linux/generic/patches-4.4/071-v4.8-0007-net-ethernet-bgmac-Remove-redundant-dev_err-call-in-.patch
  23. 0 28
      target/linux/generic/patches-4.4/071-v4.8-0009-net-bgmac-fix-reversed-check-for-MII-registration-er.patch
  24. 0 161
      target/linux/generic/patches-4.4/071-v4.9-0001-net-bgmac-support-Ethernet-core-on-BCM53573-SoCs.patch
  25. 0 31
      target/linux/generic/patches-4.4/071-v4.9-0002-net-bgmac-make-it-clear-when-setting-interface-type-.patch
  26. 0 33
      target/linux/generic/patches-4.4/071-v4.9-0003-net-bgmac-Fix-errant-feature-flag-check.patch
  27. 0 25
      target/linux/generic/patches-4.4/071-v4.9-0004-net-bgmac-fix-spelling-mistake-connecton-connection.patch
  28. 0 35
      target/linux/generic/patches-4.4/071-v4.9-0005-net-bgmac-fix-reversed-checks-for-clock-control-flag.patch
  29. 28 0
      target/linux/generic/patches-4.4/087-Revert-led-core-Fix-brightness-setting-when-setting-.patch
  30. 1 1
      target/linux/generic/patches-4.4/201-extra_optimization.patch
  31. 1 1
      target/linux/generic/patches-4.4/202-reduce_module_size.patch
  32. 11 8
      target/linux/generic/patches-4.4/204-module_strip.patch
  33. 1 1
      target/linux/generic/patches-4.4/221-module_exports.patch
  34. 2 2
      target/linux/generic/patches-4.4/491-ubi-auto-create-ubiblock-device-for-rootfs.patch
  35. 2 2
      target/linux/generic/patches-4.4/493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
  36. 11 2
      target/linux/generic/patches-4.4/610-netfilter_match_bypass_default_checks.patch
  37. 86 0
      target/linux/generic/patches-4.4/620-net_sched-codel-do-not-defer-queue-length-update.patch
  38. 1 1
      target/linux/generic/patches-4.4/653-disable_netlink_trim.patch
  39. 1 1
      target/linux/generic/patches-4.4/660-fq_codel_defaults.patch
  40. 2 2
      target/linux/generic/patches-4.4/662-use_fq_codel_by_default.patch
  41. 20 20
      target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
  42. 9 9
      target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
  43. 5 5
      target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
  44. 1 1
      target/linux/generic/patches-4.4/701-phy_extension.patch
  45. 1 1
      target/linux/generic/patches-4.4/710-phy-add-mdio_register_board_info.patch
  46. 0 88
      target/linux/generic/patches-4.4/773-bgmac-add-srab-switch.patch
  47. 4 4
      target/linux/generic/patches-4.4/834-ledtrig-libata.patch
  48. 1 1
      target/linux/generic/patches-4.4/901-debloat_sock_diag.patch
  49. 3 3
      target/linux/generic/patches-4.4/902-debloat_proc.patch
  50. 0 80
      target/linux/generic/patches-4.4/903-debloat_direct_io.patch
  51. 2 2
      target/linux/generic/patches-4.4/904-debloat_dma_buf.patch
  52. 0 12
      target/linux/generic/patches-4.4/920-cve-2018-5333-fix.patch
  53. 1 1
      target/linux/generic/patches-4.4/921-use_preinit_as_init.patch
  54. 3 3
      target/linux/generic/patches-4.4/995-mangle_bootargs.patch
  55. 25 29
      target/linux/x86/config-4.4
  56. 1 1
      tools/e2fsprogs/Makefile
  57. 53 0
      tools/e2fsprogs/patches/005-misc-rename-copy_file_range-to-copy_file_chunk.patch

+ 2 - 1
include/kernel-version.mk

@@ -2,9 +2,10 @@
 
 LINUX_RELEASE?=1
 
-LINUX_VERSION-4.4 = .115
+LINUX_VERSION-4.4 = .120
 
 LINUX_KERNEL_HASH-4.4.115 = 184861c36af4094120417c2270abaca4b90a275019f667c79574f6f8e41858ca
+LINUX_KERNEL_HASH-4.4.120 = 667fcda44441106b649afe0952a3f4243ee9a214d9445491a3710e75572bf39f
 
 ifdef KERNEL_PATCHVER
   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))

+ 3 - 0
target/linux/ar71xx/patches-4.4/004-register_gpio_driver_earlier.patch

@@ -1,3 +1,6 @@
+HACK: register the GPIO driver earlier to ensure that gpio_request calls
+from mach files succeed.
+
 --- a/drivers/gpio/gpio-ath79.c
 +++ b/drivers/gpio/gpio-ath79.c
 @@ -202,7 +202,11 @@ static struct platform_driver ath79_gpio

+ 38 - 0
target/linux/ar71xx/patches-4.4/622-MIPS-ath79-add-more-register-defines-for-QCA956x-SoC.patch

@@ -0,0 +1,38 @@
+--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
+@@ -157,6 +157,10 @@
+ #define QCA956X_EHCI0_BASE	0x1b000000
+ #define QCA956X_EHCI1_BASE	0x1b400000
+ #define QCA956X_EHCI_SIZE	0x200
++#define QCA956X_GMAC_SGMII_BASE	(AR71XX_APB_BASE + 0x00070000)
++#define QCA956X_GMAC_SGMII_SIZE	0x64
++#define QCA956X_PLL_BASE	(AR71XX_APB_BASE + 0x00050000)
++#define QCA956X_PLL_SIZE	0x50
+ #define QCA956X_GMAC_BASE	(AR71XX_APB_BASE + 0x00070000)
+ #define QCA956X_GMAC_SIZE	0x64
+ 
+@@ -404,6 +408,7 @@
+ #define QCA956X_PLL_DDR_CONFIG_REG			0x08
+ #define QCA956X_PLL_DDR_CONFIG1_REG			0x0c
+ #define QCA956X_PLL_CLK_CTRL_REG			0x10
++#define QCA956X_PLL_ETH_XMII_CONTROL_REG		0x30
+ 
+ #define QCA956X_PLL_CPU_CONFIG_REFDIV_SHIFT		12
+ #define QCA956X_PLL_CPU_CONFIG_REFDIV_MASK		0x1f
+@@ -1186,4 +1191,16 @@
+ #define QCA955X_ETH_CFG_TXE_DELAY_MASK	0x3
+ #define QCA955X_ETH_CFG_TXE_DELAY_SHIFT	20
+ 
++/*
++ * QCA956X GMAC Interface
++ */
++
++#define QCA956X_GMAC_REG_ETH_CFG		0x00
++
++#define QCA956X_ETH_CFG_SW_ONLY_MODE		BIT(7)
++#define QCA956X_ETH_CFG_SW_PHY_SWAP		    BIT(8)
++#define QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP	BIT(9)
++#define QCA956X_ETH_CFG_SW_APB_ACCESS		BIT(10)
++#define QCA956X_ETH_CFG_SW_ACC_MSB_FIRST	BIT(13)
++
+ #endif /* __ASM_MACH_AR71XX_REGS_H */

+ 1 - 1
target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch

@@ -20,7 +20,7 @@
  #define AR71XX_UART_BASE	(AR71XX_APB_BASE + 0x00020000)
  #define AR71XX_UART_SIZE	0x100
  #define AR71XX_USB_CTRL_BASE	(AR71XX_APB_BASE + 0x00030000)
-@@ -218,6 +218,9 @@
+@@ -222,6 +222,9 @@
  #define QCA953X_DDR_REG_FLUSH_PCIE	0xa8
  #define QCA953X_DDR_REG_FLUSH_WMAC	0xac
  

+ 2 - 2
target/linux/ar71xx/patches-4.4/820-MIPS-ath79-add_gpio_function2_setup.patch

@@ -48,7 +48,7 @@ functions on the Arduino Yun.
  	void __iomem *reg = ath79_gpio_get_function_reg();
 --- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
 +++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
-@@ -850,6 +850,7 @@
+@@ -855,6 +855,7 @@
  #define AR71XX_GPIO_REG_INT_PENDING	0x20
  #define AR71XX_GPIO_REG_INT_ENABLE	0x24
  #define AR71XX_GPIO_REG_FUNC		0x28
@@ -56,7 +56,7 @@ functions on the Arduino Yun.
  
  #define AR934X_GPIO_REG_OUT_FUNC0	0x2c
  #define AR934X_GPIO_REG_OUT_FUNC1	0x30
-@@ -974,6 +975,8 @@
+@@ -979,6 +980,8 @@
  #define AR724X_GPIO_FUNC_UART_EN		BIT(1)
  #define AR724X_GPIO_FUNC_JTAG_DISABLE		BIT(0)
  

+ 10 - 10
target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch

@@ -276,7 +276,7 @@
  
  	t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
  				 key, greh->protocol);
-@@ -479,11 +479,11 @@ static int ip6gre_rcv(struct sk_buff *sk
+@@ -482,11 +482,11 @@ static int ip6gre_rcv(struct sk_buff *sk
  			offset += 4;
  		}
  		if (flags&GRE_KEY) {
@@ -290,7 +290,7 @@
  			offset += 4;
  		}
  	}
-@@ -745,7 +745,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
+@@ -748,7 +748,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
  
  		if (tunnel->parms.o_flags&GRE_SEQ) {
  			++tunnel->o_seqno;
@@ -299,7 +299,7 @@
  			ptr--;
  		}
  		if (tunnel->parms.o_flags&GRE_KEY) {
-@@ -841,7 +841,7 @@ static inline int ip6gre_xmit_ipv6(struc
+@@ -844,7 +844,7 @@ static inline int ip6gre_xmit_ipv6(struc
  
  	dsfield = ipv6_get_dsfield(ipv6h);
  	if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
@@ -310,7 +310,7 @@
  	if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
 --- a/net/ipv6/ip6_tunnel.c
 +++ b/net/ipv6/ip6_tunnel.c
-@@ -1409,7 +1409,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1307,7 +1307,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
  
  	dsfield = ipv6_get_dsfield(ipv6h);
  	if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
@@ -491,7 +491,7 @@
  		memcpy(p, foc->val, foc->len);
 --- a/net/ipv4/igmp.c
 +++ b/net/ipv4/igmp.c
-@@ -505,7 +505,7 @@ static struct sk_buff *add_grec(struct s
+@@ -533,7 +533,7 @@ static struct sk_buff *add_grec(struct s
  		if (!skb)
  			return NULL;
  		psrc = (__be32 *)skb_put(skb, sizeof(__be32));
@@ -664,7 +664,7 @@
  
  #define	IP6_MF		0x0001
  #define	IP6_OFFSET	0xFFF8
-@@ -417,8 +417,8 @@ static inline void __ipv6_addr_set_half(
+@@ -418,8 +418,8 @@ static inline void __ipv6_addr_set_half(
  	}
  #endif
  #endif
@@ -675,7 +675,7 @@
  }
  
  static inline void ipv6_addr_set(struct in6_addr *addr, 
-@@ -477,6 +477,8 @@ static inline bool ipv6_prefix_equal(con
+@@ -478,6 +478,8 @@ static inline bool ipv6_prefix_equal(con
  	const __be32 *a1 = addr1->s6_addr32;
  	const __be32 *a2 = addr2->s6_addr32;
  	unsigned int pdw, pbi;
@@ -684,7 +684,7 @@
  
  	/* check complete u32 in prefix */
  	pdw = prefixlen >> 5;
-@@ -485,7 +487,9 @@ static inline bool ipv6_prefix_equal(con
+@@ -486,7 +488,9 @@ static inline bool ipv6_prefix_equal(con
  
  	/* check incomplete u32 in prefix */
  	pbi = prefixlen & 0x1f;
@@ -695,7 +695,7 @@
  		return false;
  
  	return true;
-@@ -629,13 +633,13 @@ static inline void ipv6_addr_set_v4mappe
+@@ -630,13 +634,13 @@ static inline void ipv6_addr_set_v4mappe
   */
  static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
  {
@@ -711,7 +711,7 @@
  		if (xb)
  			return i * 32 + 31 - __fls(ntohl(xb));
  	}
-@@ -804,17 +808,18 @@ static inline int ip6_default_np_autolab
+@@ -805,17 +809,18 @@ static inline int ip6_default_np_autolab
  static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
  				__be32 flowlabel)
  {

+ 1 - 1
target/linux/generic/patches-4.4/051-0005-ovl-proper-cleanup-of-workdir.patch

@@ -53,7 +53,7 @@ Cc: <stable@vger.kernel.org>
  		err = ovl_check_whiteouts(realpath->dentry, rdd);
  
  	fput(realfile);
-@@ -569,3 +569,64 @@ void ovl_cleanup_whiteouts(struct dentry
+@@ -573,3 +573,64 @@ void ovl_cleanup_whiteouts(struct dentry
  	}
  	mutex_unlock(&upper->d_inode->i_mutex);
  }

+ 0 - 46
target/linux/generic/patches-4.4/070-v4.5-0003-net-bgmac-clarify-CONFIG_BCMA-dependency.patch

@@ -1,46 +0,0 @@
-From 1f820f538f7396db7fd40684b9c3620816acc5a3 Mon Sep 17 00:00:00 2001
-From: Arnd Bergmann <arnd@arndb.de>
-Date: Fri, 29 Jan 2016 12:39:12 +0100
-Subject: [PATCH] net: bgmac: clarify CONFIG_BCMA dependency
-
-The bgmac driver depends on BCMA_HOST_SOC, which is only used
-when CONFIG_BCMA is enabled. However, it is a bool option and can
-be set when CONFIG_BCMA=m, and then bgmac can be built-in, leading
-to an obvious link error:
-
-drivers/built-in.o: In function `bgmac_init':
-:(.init.text+0x7f2c): undefined reference to `__bcma_driver_register'
-drivers/built-in.o: In function `bgmac_exit':
-:(.exit.text+0x110a): undefined reference to `bcma_driver_unregister'
-
-To avoid this case, we need to depend on both BCMA and BCMA_SOC,
-as this patch does. I'm also trying to make the dependency more
-readable by splitting it into three lines, and adding a COMPILE_TEST
-alternative so we can test-build it in all configurations that
-support BCMA.
-
-The added dependency on FIXED_PHY addresses a related issue where
-we cannot call fixed_phy_register() when CONFIG_FIXED_PHY=m and
-CONFIG_BGMAC=y.
-
-Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/Kconfig | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/Kconfig
-+++ b/drivers/net/ethernet/broadcom/Kconfig
-@@ -151,8 +151,11 @@ config BNX2X_VXLAN
- 
- config BGMAC
- 	tristate "BCMA bus GBit core support"
--	depends on BCMA_HOST_SOC && HAS_DMA && (BCM47XX || ARCH_BCM_5301X)
-+	depends on BCMA && BCMA_HOST_SOC
-+	depends on HAS_DMA
-+	depends on BCM47XX || ARCH_BCM_5301X || COMPILE_TEST
- 	select PHYLIB
-+	select FIXED_PHY
- 	---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.

+ 0 - 106
target/linux/generic/patches-4.4/070-v4.6-0001-bgmac-add-helper-checking-for-BCM4707-BCM53018-chip-.patch

@@ -1,106 +0,0 @@
-From 387b75f8b31437792e8334390fdf5cf060d1e3da Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
-Date: Tue, 2 Feb 2016 07:47:14 +0100
-Subject: [PATCH] bgmac: add helper checking for BCM4707 / BCM53018 chip id
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Chipsets with BCM4707 / BCM53018 ID require special handling at a few
-places in the code. It's likely there will be more IDs to check in the
-future. To simplify it add this trivial helper.
-
-Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 30 ++++++++++++++++--------------
- 1 file changed, 16 insertions(+), 14 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -26,6 +26,17 @@ static const struct bcma_device_id bgmac
- };
- MODULE_DEVICE_TABLE(bcma, bgmac_bcma_tbl);
- 
-+static inline bool bgmac_is_bcm4707_family(struct bgmac *bgmac)
-+{
-+	switch (bgmac->core->bus->chipinfo.id) {
-+	case BCMA_CHIP_ID_BCM4707:
-+	case BCMA_CHIP_ID_BCM53018:
-+		return true;
-+	default:
-+		return false;
-+	}
-+}
-+
- static bool bgmac_wait_value(struct bcma_device *core, u16 reg, u32 mask,
- 			     u32 value, int timeout)
- {
-@@ -991,11 +1002,9 @@ static void bgmac_mac_speed(struct bgmac
- static void bgmac_miiconfig(struct bgmac *bgmac)
- {
- 	struct bcma_device *core = bgmac->core;
--	struct bcma_chipinfo *ci = &core->bus->chipinfo;
- 	u8 imode;
- 
--	if (ci->id == BCMA_CHIP_ID_BCM4707 ||
--	    ci->id == BCMA_CHIP_ID_BCM53018) {
-+	if (bgmac_is_bcm4707_family(bgmac)) {
- 		bcma_awrite32(core, BCMA_IOCTL,
- 			      bcma_aread32(core, BCMA_IOCTL) | 0x40 |
- 			      BGMAC_BCMA_IOCTL_SW_CLKEN);
-@@ -1059,9 +1068,7 @@ static void bgmac_chip_reset(struct bgma
- 	}
- 
- 	/* Request Misc PLL for corerev > 2 */
--	if (core->id.rev > 2 &&
--	    ci->id != BCMA_CHIP_ID_BCM4707 &&
--	    ci->id != BCMA_CHIP_ID_BCM53018) {
-+	if (core->id.rev > 2 && !bgmac_is_bcm4707_family(bgmac)) {
- 		bgmac_set(bgmac, BCMA_CLKCTLST,
- 			  BGMAC_BCMA_CLKCTLST_MISC_PLL_REQ);
- 		bgmac_wait_value(bgmac->core, BCMA_CLKCTLST,
-@@ -1197,8 +1204,7 @@ static void bgmac_enable(struct bgmac *b
- 		break;
- 	}
- 
--	if (ci->id != BCMA_CHIP_ID_BCM4707 &&
--	    ci->id != BCMA_CHIP_ID_BCM53018) {
-+	if (!bgmac_is_bcm4707_family(bgmac)) {
- 		rxq_ctl = bgmac_read(bgmac, BGMAC_RXQ_CTL);
- 		rxq_ctl &= ~BGMAC_RXQ_CTL_MDP_MASK;
- 		bp_clk = bcma_pmu_get_bus_clock(&bgmac->core->bus->drv_cc) /
-@@ -1477,14 +1483,12 @@ static int bgmac_fixed_phy_register(stru
- 
- 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)
-+	if (bgmac_is_bcm4707_family(bgmac))
- 		return bgmac_fixed_phy_register(bgmac);
- 
- 	mii_bus = mdiobus_alloc();
-@@ -1555,7 +1559,6 @@ static void bgmac_mii_unregister(struct
- /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipattach */
- static int bgmac_probe(struct bcma_device *core)
- {
--	struct bcma_chipinfo *ci = &core->bus->chipinfo;
- 	struct net_device *net_dev;
- 	struct bgmac *bgmac;
- 	struct ssb_sprom *sprom = &core->bus->sprom;
-@@ -1641,8 +1644,7 @@ static int bgmac_probe(struct bcma_devic
- 	bgmac_chip_reset(bgmac);
- 
- 	/* For Northstar, we have to take all GMAC core out of reset */
--	if (ci->id == BCMA_CHIP_ID_BCM4707 ||
--	    ci->id == BCMA_CHIP_ID_BCM53018) {
-+	if (bgmac_is_bcm4707_family(bgmac)) {
- 		struct bcma_device *ns_core;
- 		int ns_gmac;
- 

+ 0 - 39
target/linux/generic/patches-4.4/070-v4.6-0002-bgmac-support-Ethernet-device-on-BCM47094-SoC.patch

@@ -1,39 +0,0 @@
-From 9e4e6206c67ae11d68fc96882256f37c237087d4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
-Date: Mon, 22 Feb 2016 22:51:13 +0100
-Subject: [PATCH] bgmac: support Ethernet device on BCM47094 SoC
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It needs very similar workarounds to the one on BCM4707. It was tested
-on D-Link DIR-885L home router.
-
-Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -30,6 +30,7 @@ static inline bool bgmac_is_bcm4707_fami
- {
- 	switch (bgmac->core->bus->chipinfo.id) {
- 	case BCMA_CHIP_ID_BCM4707:
-+	case BCMA_CHIP_ID_BCM47094:
- 	case BCMA_CHIP_ID_BCM53018:
- 		return true;
- 	default:
-@@ -1056,8 +1057,9 @@ static void bgmac_chip_reset(struct bgma
- 	    (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == BCMA_PKG_ID_BCM47188))
- 		iost &= ~BGMAC_BCMA_IOST_ATTACHED;
- 
--	/* 3GMAC: for BCM4707, only do core reset at bgmac_probe() */
--	if (ci->id != BCMA_CHIP_ID_BCM4707) {
-+	/* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
-+	if (ci->id != BCMA_CHIP_ID_BCM4707 &&
-+	    ci->id != BCMA_CHIP_ID_BCM47094) {
- 		flags = 0;
- 		if (iost & BGMAC_BCMA_IOST_ATTACHED) {
- 			flags = BGMAC_BCMA_IOCTL_SW_CLKEN;

+ 0 - 34
target/linux/generic/patches-4.4/070-v4.6-0004-bgmac-fix-MAC-soft-reset-bit-for-corerev-4.patch

@@ -1,34 +0,0 @@
-From c02bc350f9dbce7d637c394a6e1c4d29dc5b28b2 Mon Sep 17 00:00:00 2001
-From: Felix Fietkau <nbd@nbd.name>
-Date: Tue, 12 Apr 2016 18:27:29 +0200
-Subject: [PATCH] bgmac: fix MAC soft-reset bit for corerev > 4
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only core revisions older than 4 use BGMAC_CMDCFG_SR_REV0. This mainly
-fixes support for BCM4708A0KF SoCs with Ethernet core rev 5 (it means
-only some devices as most of BCM4708A0KF-s got core rev 4).
-This was tested for regressions on BCM47094 which doesn't seem to care
-which bit gets used.
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
-
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -199,9 +199,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

+ 0 - 25
target/linux/generic/patches-4.4/070-v4.8-0001-bgmac-Bind-net_device-with-backing-device-structure.patch

@@ -1,25 +0,0 @@
-From 2022e9d50798aa592887ccb5a7d045e537f3855f Mon Sep 17 00:00:00 2001
-From: Florian Fainelli <f.fainelli@gmail.com>
-Date: Tue, 7 Jun 2016 15:06:13 -0700
-Subject: [PATCH 1/3] bgmac: Bind net_device with backing device structure
-
-In preparation for allowing different helpers to be utilized against
-network devices created by the bgmac driver, make sure that we bind the
-net_device with core->dev.
-
-Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -1604,6 +1604,7 @@ static int bgmac_probe(struct bcma_devic
- 	bgmac->net_dev = net_dev;
- 	bgmac->core = core;
- 	bcma_set_drvdata(core, bgmac);
-+	SET_NETDEV_DEV(net_dev, &core->dev);
- 
- 	/* Defaults */
- 	memcpy(bgmac->net_dev->dev_addr, mac, ETH_ALEN);

+ 0 - 175
target/linux/generic/patches-4.4/070-v4.8-0002-bgmac-Add-support-for-ethtool-statistics.patch

@@ -1,175 +0,0 @@
-From f6613d4fa937fa8388f2c1cb4e69ccc25e9e2336 Mon Sep 17 00:00:00 2001
-From: Florian Fainelli <f.fainelli@gmail.com>
-Date: Tue, 7 Jun 2016 15:06:14 -0700
-Subject: [PATCH 2/3] bgmac: Add support for ethtool statistics
-
-Read the statistics from the BGMAC's builtin MAC and return them to
-user-space using the standard ethtool helpers.
-
-Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 124 ++++++++++++++++++++++++++++++++++
- drivers/net/ethernet/broadcom/bgmac.h |   4 +-
- 2 files changed, 126 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -1387,6 +1387,127 @@ static const struct net_device_ops bgmac
-  * ethtool_ops
-  **************************************************/
- 
-+struct bgmac_stat {
-+	u8 size;
-+	u32 offset;
-+	const char *name;
-+};
-+
-+static struct bgmac_stat bgmac_get_strings_stats[] = {
-+	{ 8, BGMAC_TX_GOOD_OCTETS, "tx_good_octets" },
-+	{ 4, BGMAC_TX_GOOD_PKTS, "tx_good" },
-+	{ 8, BGMAC_TX_OCTETS, "tx_octets" },
-+	{ 4, BGMAC_TX_PKTS, "tx_pkts" },
-+	{ 4, BGMAC_TX_BROADCAST_PKTS, "tx_broadcast" },
-+	{ 4, BGMAC_TX_MULTICAST_PKTS, "tx_multicast" },
-+	{ 4, BGMAC_TX_LEN_64, "tx_64" },
-+	{ 4, BGMAC_TX_LEN_65_TO_127, "tx_65_127" },
-+	{ 4, BGMAC_TX_LEN_128_TO_255, "tx_128_255" },
-+	{ 4, BGMAC_TX_LEN_256_TO_511, "tx_256_511" },
-+	{ 4, BGMAC_TX_LEN_512_TO_1023, "tx_512_1023" },
-+	{ 4, BGMAC_TX_LEN_1024_TO_1522, "tx_1024_1522" },
-+	{ 4, BGMAC_TX_LEN_1523_TO_2047, "tx_1523_2047" },
-+	{ 4, BGMAC_TX_LEN_2048_TO_4095, "tx_2048_4095" },
-+	{ 4, BGMAC_TX_LEN_4096_TO_8191, "tx_4096_8191" },
-+	{ 4, BGMAC_TX_LEN_8192_TO_MAX, "tx_8192_max" },
-+	{ 4, BGMAC_TX_JABBER_PKTS, "tx_jabber" },
-+	{ 4, BGMAC_TX_OVERSIZE_PKTS, "tx_oversize" },
-+	{ 4, BGMAC_TX_FRAGMENT_PKTS, "tx_fragment" },
-+	{ 4, BGMAC_TX_UNDERRUNS, "tx_underruns" },
-+	{ 4, BGMAC_TX_TOTAL_COLS, "tx_total_cols" },
-+	{ 4, BGMAC_TX_SINGLE_COLS, "tx_single_cols" },
-+	{ 4, BGMAC_TX_MULTIPLE_COLS, "tx_multiple_cols" },
-+	{ 4, BGMAC_TX_EXCESSIVE_COLS, "tx_excessive_cols" },
-+	{ 4, BGMAC_TX_LATE_COLS, "tx_late_cols" },
-+	{ 4, BGMAC_TX_DEFERED, "tx_defered" },
-+	{ 4, BGMAC_TX_CARRIER_LOST, "tx_carrier_lost" },
-+	{ 4, BGMAC_TX_PAUSE_PKTS, "tx_pause" },
-+	{ 4, BGMAC_TX_UNI_PKTS, "tx_unicast" },
-+	{ 4, BGMAC_TX_Q0_PKTS, "tx_q0" },
-+	{ 8, BGMAC_TX_Q0_OCTETS, "tx_q0_octets" },
-+	{ 4, BGMAC_TX_Q1_PKTS, "tx_q1" },
-+	{ 8, BGMAC_TX_Q1_OCTETS, "tx_q1_octets" },
-+	{ 4, BGMAC_TX_Q2_PKTS, "tx_q2" },
-+	{ 8, BGMAC_TX_Q2_OCTETS, "tx_q2_octets" },
-+	{ 4, BGMAC_TX_Q3_PKTS, "tx_q3" },
-+	{ 8, BGMAC_TX_Q3_OCTETS, "tx_q3_octets" },
-+	{ 8, BGMAC_RX_GOOD_OCTETS, "rx_good_octets" },
-+	{ 4, BGMAC_RX_GOOD_PKTS, "rx_good" },
-+	{ 8, BGMAC_RX_OCTETS, "rx_octets" },
-+	{ 4, BGMAC_RX_PKTS, "rx_pkts" },
-+	{ 4, BGMAC_RX_BROADCAST_PKTS, "rx_broadcast" },
-+	{ 4, BGMAC_RX_MULTICAST_PKTS, "rx_multicast" },
-+	{ 4, BGMAC_RX_LEN_64, "rx_64" },
-+	{ 4, BGMAC_RX_LEN_65_TO_127, "rx_65_127" },
-+	{ 4, BGMAC_RX_LEN_128_TO_255, "rx_128_255" },
-+	{ 4, BGMAC_RX_LEN_256_TO_511, "rx_256_511" },
-+	{ 4, BGMAC_RX_LEN_512_TO_1023, "rx_512_1023" },
-+	{ 4, BGMAC_RX_LEN_1024_TO_1522, "rx_1024_1522" },
-+	{ 4, BGMAC_RX_LEN_1523_TO_2047, "rx_1523_2047" },
-+	{ 4, BGMAC_RX_LEN_2048_TO_4095, "rx_2048_4095" },
-+	{ 4, BGMAC_RX_LEN_4096_TO_8191, "rx_4096_8191" },
-+	{ 4, BGMAC_RX_LEN_8192_TO_MAX, "rx_8192_max" },
-+	{ 4, BGMAC_RX_JABBER_PKTS, "rx_jabber" },
-+	{ 4, BGMAC_RX_OVERSIZE_PKTS, "rx_oversize" },
-+	{ 4, BGMAC_RX_FRAGMENT_PKTS, "rx_fragment" },
-+	{ 4, BGMAC_RX_MISSED_PKTS, "rx_missed" },
-+	{ 4, BGMAC_RX_CRC_ALIGN_ERRS, "rx_crc_align" },
-+	{ 4, BGMAC_RX_UNDERSIZE, "rx_undersize" },
-+	{ 4, BGMAC_RX_CRC_ERRS, "rx_crc" },
-+	{ 4, BGMAC_RX_ALIGN_ERRS, "rx_align" },
-+	{ 4, BGMAC_RX_SYMBOL_ERRS, "rx_symbol" },
-+	{ 4, BGMAC_RX_PAUSE_PKTS, "rx_pause" },
-+	{ 4, BGMAC_RX_NONPAUSE_PKTS, "rx_nonpause" },
-+	{ 4, BGMAC_RX_SACHANGES, "rx_sa_changes" },
-+	{ 4, BGMAC_RX_UNI_PKTS, "rx_unicast" },
-+};
-+
-+#define BGMAC_STATS_LEN	ARRAY_SIZE(bgmac_get_strings_stats)
-+
-+static int bgmac_get_sset_count(struct net_device *dev, int string_set)
-+{
-+	switch (string_set) {
-+	case ETH_SS_STATS:
-+		return BGMAC_STATS_LEN;
-+	}
-+
-+	return -EOPNOTSUPP;
-+}
-+
-+static void bgmac_get_strings(struct net_device *dev, u32 stringset,
-+			      u8 *data)
-+{
-+	int i;
-+
-+	if (stringset != ETH_SS_STATS)
-+		return;
-+
-+	for (i = 0; i < BGMAC_STATS_LEN; i++)
-+		strlcpy(data + i * ETH_GSTRING_LEN,
-+			bgmac_get_strings_stats[i].name, ETH_GSTRING_LEN);
-+}
-+
-+static void bgmac_get_ethtool_stats(struct net_device *dev,
-+				    struct ethtool_stats *ss, uint64_t *data)
-+{
-+	struct bgmac *bgmac = netdev_priv(dev);
-+	const struct bgmac_stat *s;
-+	unsigned int i;
-+	u64 val;
-+
-+	if (!netif_running(dev))
-+		return;
-+
-+	for (i = 0; i < BGMAC_STATS_LEN; i++) {
-+		s = &bgmac_get_strings_stats[i];
-+		val = 0;
-+		if (s->size == 8)
-+			val = (u64)bgmac_read(bgmac, s->offset + 4) << 32;
-+		val |= bgmac_read(bgmac, s->offset);
-+		data[i] = val;
-+	}
-+}
-+
- static int bgmac_get_settings(struct net_device *net_dev,
- 			      struct ethtool_cmd *cmd)
- {
-@@ -1411,6 +1532,9 @@ static void bgmac_get_drvinfo(struct net
- }
- 
- static const struct ethtool_ops bgmac_ethtool_ops = {
-+	.get_strings		= bgmac_get_strings,
-+	.get_sset_count		= bgmac_get_sset_count,
-+	.get_ethtool_stats	= bgmac_get_ethtool_stats,
- 	.get_settings		= bgmac_get_settings,
- 	.set_settings		= bgmac_set_settings,
- 	.get_drvinfo		= bgmac_get_drvinfo,
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -123,7 +123,7 @@
- #define BGMAC_TX_LEN_1024_TO_1522		0x334
- #define BGMAC_TX_LEN_1523_TO_2047		0x338
- #define BGMAC_TX_LEN_2048_TO_4095		0x33c
--#define BGMAC_TX_LEN_4095_TO_8191		0x340
-+#define BGMAC_TX_LEN_4096_TO_8191		0x340
- #define BGMAC_TX_LEN_8192_TO_MAX		0x344
- #define BGMAC_TX_JABBER_PKTS			0x348		/* Error */
- #define BGMAC_TX_OVERSIZE_PKTS			0x34c		/* Error */
-@@ -166,7 +166,7 @@
- #define BGMAC_RX_LEN_1024_TO_1522		0x3e4
- #define BGMAC_RX_LEN_1523_TO_2047		0x3e8
- #define BGMAC_RX_LEN_2048_TO_4095		0x3ec
--#define BGMAC_RX_LEN_4095_TO_8191		0x3f0
-+#define BGMAC_RX_LEN_4096_TO_8191		0x3f0
- #define BGMAC_RX_LEN_8192_TO_MAX		0x3f4
- #define BGMAC_RX_JABBER_PKTS			0x3f8		/* Error */
- #define BGMAC_RX_OVERSIZE_PKTS			0x3fc		/* Error */

+ 0 - 68
target/linux/generic/patches-4.4/070-v4.8-0003-bgmac-Maintain-some-netdev-statistics.patch

@@ -1,68 +0,0 @@
-From 6d490f62a4c7f11c552591bdd08eda3636aa0db9 Mon Sep 17 00:00:00 2001
-From: Florian Fainelli <f.fainelli@gmail.com>
-Date: Tue, 7 Jun 2016 15:06:15 -0700
-Subject: [PATCH 3/3] bgmac: Maintain some netdev statistics
-
-Add a few netdev statistics to report transmitted and received bytes and
-packets and a few obvious errors.
-
-Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -246,6 +246,8 @@ err_dma_head:
- 
- err_drop:
- 	dev_kfree_skb(skb);
-+	net_dev->stats.tx_dropped++;
-+	net_dev->stats.tx_errors++;
- 	return NETDEV_TX_OK;
- }
- 
-@@ -285,6 +287,8 @@ static void bgmac_dma_tx_free(struct bgm
- 				       DMA_TO_DEVICE);
- 
- 		if (slot->skb) {
-+			bgmac->net_dev->stats.tx_bytes += slot->skb->len;
-+			bgmac->net_dev->stats.tx_packets++;
- 			bytes_compl += slot->skb->len;
- 			pkts_compl++;
- 
-@@ -468,6 +472,7 @@ static int bgmac_dma_rx_read(struct bgma
- 				bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n",
- 					  ring->start);
- 				put_page(virt_to_head_page(buf));
-+				bgmac->net_dev->stats.rx_errors++;
- 				break;
- 			}
- 
-@@ -475,6 +480,8 @@ static int bgmac_dma_rx_read(struct bgma
- 				bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n",
- 					  ring->start);
- 				put_page(virt_to_head_page(buf));
-+				bgmac->net_dev->stats.rx_length_errors++;
-+				bgmac->net_dev->stats.rx_errors++;
- 				break;
- 			}
- 
-@@ -485,6 +492,7 @@ static int bgmac_dma_rx_read(struct bgma
- 			if (unlikely(!skb)) {
- 				bgmac_err(bgmac, "build_skb failed\n");
- 				put_page(virt_to_head_page(buf));
-+				bgmac->net_dev->stats.rx_errors++;
- 				break;
- 			}
- 			skb_put(skb, BGMAC_RX_FRAME_OFFSET +
-@@ -494,6 +502,8 @@ static int bgmac_dma_rx_read(struct bgma
- 
- 			skb_checksum_none_assert(skb);
- 			skb->protocol = eth_type_trans(skb, bgmac->net_dev);
-+			bgmac->net_dev->stats.rx_bytes += len;
-+			bgmac->net_dev->stats.rx_packets++;
- 			napi_gro_receive(&bgmac->napi, skb);
- 			handled++;
- 		} while (0);

+ 0 - 105
target/linux/generic/patches-4.4/070-v4.8-0004-net-ethernet-bgmac-use-phydev-from-struct-net_device.patch

@@ -1,105 +0,0 @@
-From b21fcb259313bcf7d4f73ecd5e44948995c8957c Mon Sep 17 00:00:00 2001
-From: Philippe Reynes <tremyfr@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@gmail.com>
-Signed-off-by: David S. Miller <davem@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
-@@ -1324,7 +1324,7 @@ static int bgmac_open(struct net_device
- 	}
- 	napi_enable(&bgmac->napi);
- 
--	phy_start(bgmac->phy_dev);
-+	phy_start(net_dev->phydev);
- 
- 	netif_start_queue(net_dev);
- 
-@@ -1337,7 +1337,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);
-@@ -1375,12 +1375,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 = {
-@@ -1523,7 +1521,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,
-@@ -1531,7 +1529,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,
-@@ -1568,7 +1566,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) {
-@@ -1612,8 +1610,6 @@ static int bgmac_fixed_phy_register(stru
- 		return err;
- 	}
- 
--	bgmac->phy_dev = phy_dev;
--
- 	return err;
- }
- 
-@@ -1666,7 +1662,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];

+ 0 - 407
target/linux/generic/patches-4.4/071-v4.8-0001-net-ethernet-bgmac-change-bgmac_-prints-to-dev_-prin.patch

@@ -1,407 +0,0 @@
-From d00a8281bcc962027dfe409c2f3e3f0546be9200 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@broadcom.com>
-Date: Thu, 7 Jul 2016 19:08:53 -0400
-Subject: [PATCH 1/5] net: ethernet: bgmac: change bgmac_* prints to dev_*
- prints
-
-The bgmac_* print wrappers call dev_* prints with the dev pointer from
-the bcma core.  In anticipation of removing the bcma requirement for
-this driver, these must be changed to not reference that struct.  So,
-simply change all of the bgmac_* prints to their dev_* counterparts.  In
-some cases netdev_* prints are more appropriate, so change those as
-well.
-
-Signed-off-by: Jon Mason <jon.mason@broadcom.com>
-Acked-by: Arnd Bergmann <arnd@arndb.de>
-Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-Tested-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 103 +++++++++++++++++-----------------
- drivers/net/ethernet/broadcom/bgmac.h |  14 +----
- 2 files changed, 55 insertions(+), 62 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -50,7 +50,7 @@ static bool bgmac_wait_value(struct bcma
- 			return true;
- 		udelay(10);
- 	}
--	pr_err("Timeout waiting for reg 0x%X\n", reg);
-+	dev_err(&core->dev, "Timeout waiting for reg 0x%X\n", reg);
- 	return false;
- }
- 
-@@ -84,8 +84,8 @@ static void bgmac_dma_tx_reset(struct bg
- 		udelay(10);
- 	}
- 	if (i)
--		bgmac_err(bgmac, "Timeout suspending DMA TX ring 0x%X (BGMAC_DMA_TX_STAT: 0x%08X)\n",
--			  ring->mmio_base, val);
-+		dev_err(bgmac->dev, "Timeout suspending DMA TX ring 0x%X (BGMAC_DMA_TX_STAT: 0x%08X)\n",
-+			ring->mmio_base, val);
- 
- 	/* Remove SUSPEND bit */
- 	bgmac_write(bgmac, ring->mmio_base + BGMAC_DMA_TX_CTL, 0);
-@@ -93,13 +93,13 @@ static void bgmac_dma_tx_reset(struct bg
- 			      ring->mmio_base + BGMAC_DMA_TX_STATUS,
- 			      BGMAC_DMA_TX_STAT, BGMAC_DMA_TX_STAT_DISABLED,
- 			      10000)) {
--		bgmac_warn(bgmac, "DMA TX ring 0x%X wasn't disabled on time, waiting additional 300us\n",
--			   ring->mmio_base);
-+		dev_warn(bgmac->dev, "DMA TX ring 0x%X wasn't disabled on time, waiting additional 300us\n",
-+			 ring->mmio_base);
- 		udelay(300);
- 		val = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_TX_STATUS);
- 		if ((val & BGMAC_DMA_TX_STAT) != BGMAC_DMA_TX_STAT_DISABLED)
--			bgmac_err(bgmac, "Reset of DMA TX ring 0x%X failed\n",
--				  ring->mmio_base);
-+			dev_err(bgmac->dev, "Reset of DMA TX ring 0x%X failed\n",
-+				ring->mmio_base);
- 	}
- }
- 
-@@ -161,7 +161,7 @@ static netdev_tx_t bgmac_dma_tx_add(stru
- 	int i;
- 
- 	if (skb->len > BGMAC_DESC_CTL1_LEN) {
--		bgmac_err(bgmac, "Too long skb (%d)\n", skb->len);
-+		netdev_err(bgmac->net_dev, "Too long skb (%d)\n", skb->len);
- 		goto err_drop;
- 	}
- 
-@@ -174,7 +174,7 @@ static netdev_tx_t bgmac_dma_tx_add(stru
- 	 * even when ring->end overflows
- 	 */
- 	if (ring->end - ring->start + nr_frags + 1 >= BGMAC_TX_RING_SLOTS) {
--		bgmac_err(bgmac, "TX ring is full, queue should be stopped!\n");
-+		netdev_err(bgmac->net_dev, "TX ring is full, queue should be stopped!\n");
- 		netif_stop_queue(net_dev);
- 		return NETDEV_TX_BUSY;
- 	}
-@@ -241,8 +241,8 @@ err_dma:
- 	}
- 
- err_dma_head:
--	bgmac_err(bgmac, "Mapping error of skb on ring 0x%X\n",
--		  ring->mmio_base);
-+	netdev_err(bgmac->net_dev, "Mapping error of skb on ring 0x%X\n",
-+		   ring->mmio_base);
- 
- err_drop:
- 	dev_kfree_skb(skb);
-@@ -321,8 +321,8 @@ static void bgmac_dma_rx_reset(struct bg
- 			      ring->mmio_base + BGMAC_DMA_RX_STATUS,
- 			      BGMAC_DMA_RX_STAT, BGMAC_DMA_RX_STAT_DISABLED,
- 			      10000))
--		bgmac_err(bgmac, "Reset of ring 0x%X RX failed\n",
--			  ring->mmio_base);
-+		dev_err(bgmac->dev, "Reset of ring 0x%X RX failed\n",
-+			ring->mmio_base);
- }
- 
- static void bgmac_dma_rx_enable(struct bgmac *bgmac,
-@@ -374,7 +374,7 @@ static int bgmac_dma_rx_skb_for_slot(str
- 	dma_addr = dma_map_single(dma_dev, buf + BGMAC_RX_BUF_OFFSET,
- 				  BGMAC_RX_BUF_SIZE, DMA_FROM_DEVICE);
- 	if (dma_mapping_error(dma_dev, dma_addr)) {
--		bgmac_err(bgmac, "DMA mapping error\n");
-+		netdev_err(bgmac->net_dev, "DMA mapping error\n");
- 		put_page(virt_to_head_page(buf));
- 		return -ENOMEM;
- 	}
-@@ -469,16 +469,16 @@ static int bgmac_dma_rx_read(struct bgma
- 
- 			/* Check for poison and drop or pass the packet */
- 			if (len == 0xdead && flags == 0xbeef) {
--				bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n",
--					  ring->start);
-+				netdev_err(bgmac->net_dev, "Found poisoned packet at slot %d, DMA issue!\n",
-+					   ring->start);
- 				put_page(virt_to_head_page(buf));
- 				bgmac->net_dev->stats.rx_errors++;
- 				break;
- 			}
- 
- 			if (len > BGMAC_RX_ALLOC_SIZE) {
--				bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n",
--					  ring->start);
-+				netdev_err(bgmac->net_dev, "Found oversized packet at slot %d, DMA issue!\n",
-+					   ring->start);
- 				put_page(virt_to_head_page(buf));
- 				bgmac->net_dev->stats.rx_length_errors++;
- 				bgmac->net_dev->stats.rx_errors++;
-@@ -490,7 +490,7 @@ static int bgmac_dma_rx_read(struct bgma
- 
- 			skb = build_skb(buf, BGMAC_RX_ALLOC_SIZE);
- 			if (unlikely(!skb)) {
--				bgmac_err(bgmac, "build_skb failed\n");
-+				netdev_err(bgmac->net_dev, "build_skb failed\n");
- 				put_page(virt_to_head_page(buf));
- 				bgmac->net_dev->stats.rx_errors++;
- 				break;
-@@ -644,7 +644,7 @@ static int bgmac_dma_alloc(struct bgmac
- 	BUILD_BUG_ON(BGMAC_MAX_RX_RINGS > ARRAY_SIZE(ring_base));
- 
- 	if (!(bcma_aread32(bgmac->core, BCMA_IOST) & BCMA_IOST_DMA64)) {
--		bgmac_err(bgmac, "Core does not report 64-bit DMA\n");
-+		dev_err(bgmac->dev, "Core does not report 64-bit DMA\n");
- 		return -ENOTSUPP;
- 	}
- 
-@@ -658,8 +658,8 @@ static int bgmac_dma_alloc(struct bgmac
- 						     &ring->dma_base,
- 						     GFP_KERNEL);
- 		if (!ring->cpu_base) {
--			bgmac_err(bgmac, "Allocation of TX ring 0x%X failed\n",
--				  ring->mmio_base);
-+			dev_err(bgmac->dev, "Allocation of TX ring 0x%X failed\n",
-+				ring->mmio_base);
- 			goto err_dma_free;
- 		}
- 
-@@ -683,8 +683,8 @@ static int bgmac_dma_alloc(struct bgmac
- 						     &ring->dma_base,
- 						     GFP_KERNEL);
- 		if (!ring->cpu_base) {
--			bgmac_err(bgmac, "Allocation of RX ring 0x%X failed\n",
--				  ring->mmio_base);
-+			dev_err(bgmac->dev, "Allocation of RX ring 0x%X failed\n",
-+				ring->mmio_base);
- 			err = -ENOMEM;
- 			goto err_dma_free;
- 		}
-@@ -803,8 +803,8 @@ static u16 bgmac_phy_read(struct bgmac *
- 	bcma_write32(core, phy_access_addr, tmp);
- 
- 	if (!bgmac_wait_value(core, phy_access_addr, BGMAC_PA_START, 0, 1000)) {
--		bgmac_err(bgmac, "Reading PHY %d register 0x%X failed\n",
--			  phyaddr, reg);
-+		dev_err(bgmac->dev, "Reading PHY %d register 0x%X failed\n",
-+			phyaddr, reg);
- 		return 0xffff;
- 	}
- 
-@@ -836,7 +836,7 @@ static int bgmac_phy_write(struct bgmac
- 
- 	bgmac_write(bgmac, BGMAC_INT_STATUS, BGMAC_IS_MDIO);
- 	if (bgmac_read(bgmac, BGMAC_INT_STATUS) & BGMAC_IS_MDIO)
--		bgmac_warn(bgmac, "Error setting MDIO int\n");
-+		dev_warn(bgmac->dev, "Error setting MDIO int\n");
- 
- 	tmp = BGMAC_PA_START;
- 	tmp |= BGMAC_PA_WRITE;
-@@ -846,8 +846,8 @@ static int bgmac_phy_write(struct bgmac
- 	bcma_write32(core, phy_access_addr, tmp);
- 
- 	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);
-+		dev_err(bgmac->dev, "Writing to PHY %d register 0x%X failed\n",
-+			phyaddr, reg);
- 		return -ETIMEDOUT;
- 	}
- 
-@@ -900,7 +900,7 @@ static void bgmac_phy_reset(struct bgmac
- 	bgmac_phy_write(bgmac, bgmac->phyaddr, MII_BMCR, BMCR_RESET);
- 	udelay(100);
- 	if (bgmac_phy_read(bgmac, bgmac->phyaddr, MII_BMCR) & BMCR_RESET)
--		bgmac_err(bgmac, "PHY reset failed\n");
-+		dev_err(bgmac->dev, "PHY reset failed\n");
- 	bgmac_phy_init(bgmac);
- }
- 
-@@ -1001,7 +1001,8 @@ static void bgmac_mac_speed(struct bgmac
- 		set |= BGMAC_CMDCFG_ES_2500;
- 		break;
- 	default:
--		bgmac_err(bgmac, "Unsupported speed: %d\n", bgmac->mac_speed);
-+		dev_err(bgmac->dev, "Unsupported speed: %d\n",
-+			bgmac->mac_speed);
- 	}
- 
- 	if (bgmac->mac_duplex == DUPLEX_HALF)
-@@ -1100,8 +1101,8 @@ static void bgmac_chip_reset(struct bgma
- 
- 		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);
-+				dev_err(bgmac->dev, "Failed to parse et_swtype (%s)\n",
-+					buf);
- 			et_swtype &= 0x0f;
- 			et_swtype <<= 4;
- 			sw_type = et_swtype;
-@@ -1264,7 +1265,7 @@ static irqreturn_t bgmac_interrupt(int i
- 
- 	int_status &= ~(BGMAC_IS_TX0 | BGMAC_IS_RX);
- 	if (int_status)
--		bgmac_err(bgmac, "Unknown IRQs: 0x%08X\n", int_status);
-+		dev_err(bgmac->dev, "Unknown IRQs: 0x%08X\n", int_status);
- 
- 	/* Disable new interrupts until handling existing ones */
- 	bgmac_chip_intrs_off(bgmac);
-@@ -1318,7 +1319,7 @@ static int bgmac_open(struct net_device
- 	err = request_irq(bgmac->core->irq, bgmac_interrupt, IRQF_SHARED,
- 			  KBUILD_MODNAME, net_dev);
- 	if (err < 0) {
--		bgmac_err(bgmac, "IRQ request error: %d!\n", err);
-+		dev_err(bgmac->dev, "IRQ request error: %d!\n", err);
- 		bgmac_dma_cleanup(bgmac);
- 		return err;
- 	}
-@@ -1599,14 +1600,14 @@ static int bgmac_fixed_phy_register(stru
- 
- 	phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, -1, NULL);
- 	if (!phy_dev || IS_ERR(phy_dev)) {
--		bgmac_err(bgmac, "Failed to register fixed PHY device\n");
-+		dev_err(bgmac->dev, "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");
-+		dev_err(bgmac->dev, "Connecting PHY failed\n");
- 		return err;
- 	}
- 
-@@ -1646,7 +1647,7 @@ static int bgmac_mii_register(struct bgm
- 
- 	err = mdiobus_register(mii_bus);
- 	if (err) {
--		bgmac_err(bgmac, "Registration of mii bus failed\n");
-+		dev_err(bgmac->dev, "Registration of mii bus failed\n");
- 		goto err_free_irq;
- 	}
- 
-@@ -1658,7 +1659,7 @@ static int bgmac_mii_register(struct bgm
- 	phy_dev = phy_connect(bgmac->net_dev, bus_id, &bgmac_adjust_link,
- 			      PHY_INTERFACE_MODE_MII);
- 	if (IS_ERR(phy_dev)) {
--		bgmac_err(bgmac, "PHY connecton failed\n");
-+		dev_err(bgmac->dev, "PHY connecton failed\n");
- 		err = PTR_ERR(phy_dev);
- 		goto err_unregister_bus;
- 	}
-@@ -1707,7 +1708,8 @@ static int bgmac_probe(struct bcma_devic
- 		mac = sprom->et2mac;
- 		break;
- 	default:
--		pr_err("Unsupported core_unit %d\n", core->core_unit);
-+		dev_err(&core->dev, "Unsupported core_unit %d\n",
-+			core->core_unit);
- 		return -ENOTSUPP;
- 	}
- 
-@@ -1730,6 +1732,7 @@ static int bgmac_probe(struct bcma_devic
- 	net_dev->irq = core->irq;
- 	net_dev->ethtool_ops = &bgmac_ethtool_ops;
- 	bgmac = netdev_priv(net_dev);
-+	bgmac->dev = &core->dev;
- 	bgmac->net_dev = net_dev;
- 	bgmac->core = core;
- 	bcma_set_drvdata(core, bgmac);
-@@ -1741,7 +1744,7 @@ static int bgmac_probe(struct bcma_devic
- 	/* On BCM4706 we need common core to access PHY */
- 	if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
- 	    !core->bus->drv_gmac_cmn.core) {
--		bgmac_err(bgmac, "GMAC CMN core not found (required for BCM4706)\n");
-+		dev_err(bgmac->dev, "GMAC CMN core not found (required for BCM4706)\n");
- 		err = -ENODEV;
- 		goto err_netdev_free;
- 	}
-@@ -1760,15 +1763,15 @@ static int bgmac_probe(struct bcma_devic
- 	}
- 	bgmac->phyaddr &= BGMAC_PHY_MASK;
- 	if (bgmac->phyaddr == BGMAC_PHY_MASK) {
--		bgmac_err(bgmac, "No PHY found\n");
-+		dev_err(bgmac->dev, "No PHY found\n");
- 		err = -ENODEV;
- 		goto err_netdev_free;
- 	}
--	bgmac_info(bgmac, "Found PHY addr: %d%s\n", bgmac->phyaddr,
--		   bgmac->phyaddr == BGMAC_PHY_NOREGS ? " (NOREGS)" : "");
-+	dev_info(bgmac->dev, "Found PHY addr: %d%s\n", bgmac->phyaddr,
-+		 bgmac->phyaddr == BGMAC_PHY_NOREGS ? " (NOREGS)" : "");
- 
- 	if (core->bus->hosttype == BCMA_HOSTTYPE_PCI) {
--		bgmac_err(bgmac, "PCI setup not implemented\n");
-+		dev_err(bgmac->dev, "PCI setup not implemented\n");
- 		err = -ENOTSUPP;
- 		goto err_netdev_free;
- 	}
-@@ -1797,7 +1800,7 @@ static int bgmac_probe(struct bcma_devic
- 
- 	err = bgmac_dma_alloc(bgmac);
- 	if (err) {
--		bgmac_err(bgmac, "Unable to alloc memory for DMA\n");
-+		dev_err(bgmac->dev, "Unable to alloc memory for DMA\n");
- 		goto err_netdev_free;
- 	}
- 
-@@ -1811,16 +1814,16 @@ static int bgmac_probe(struct bcma_devic
- 	bgmac->has_robosw = !!(core->bus->sprom.boardflags_lo &
- 			       BGMAC_BFL_ENETROBO);
- 	if (bgmac->has_robosw)
--		bgmac_warn(bgmac, "Support for Roboswitch not implemented\n");
-+		dev_warn(bgmac->dev, "Support for Roboswitch not implemented\n");
- 
- 	if (core->bus->sprom.boardflags_lo & BGMAC_BFL_ENETADM)
--		bgmac_warn(bgmac, "Support for ADMtek ethernet switch not implemented\n");
-+		dev_warn(bgmac->dev, "Support for ADMtek ethernet switch not implemented\n");
- 
- 	netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
- 
- 	err = bgmac_mii_register(bgmac);
- 	if (err) {
--		bgmac_err(bgmac, "Cannot register MDIO\n");
-+		dev_err(bgmac->dev, "Cannot connect to phy\n");
- 		goto err_dma_free;
- 	}
- 
-@@ -1830,7 +1833,7 @@ static int bgmac_probe(struct bcma_devic
- 
- 	err = register_netdev(bgmac->net_dev);
- 	if (err) {
--		bgmac_err(bgmac, "Cannot register net device\n");
-+		dev_err(bgmac->dev, "Cannot register net device\n");
- 		goto err_mii_unregister;
- 	}
- 
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -1,17 +1,6 @@
- #ifndef _BGMAC_H
- #define _BGMAC_H
- 
--#define pr_fmt(fmt)		KBUILD_MODNAME ": " fmt
--
--#define bgmac_err(bgmac, fmt, ...) \
--	dev_err(&(bgmac)->core->dev, fmt, ##__VA_ARGS__)
--#define bgmac_warn(bgmac, fmt, ...) \
--	dev_warn(&(bgmac)->core->dev, fmt,  ##__VA_ARGS__)
--#define bgmac_info(bgmac, fmt, ...) \
--	dev_info(&(bgmac)->core->dev, fmt,  ##__VA_ARGS__)
--#define bgmac_dbg(bgmac, fmt, ...) \
--	dev_dbg(&(bgmac)->core->dev, fmt, ##__VA_ARGS__)
--
- #include <linux/bcma/bcma.h>
- #include <linux/brcmphy.h>
- #include <linux/netdevice.h>
-@@ -438,6 +427,8 @@ struct bgmac_rx_header {
- struct bgmac {
- 	struct bcma_device *core;
- 	struct bcma_device *cmn; /* Reference to CMN core for BCM4706 */
-+
-+	struct device *dev;
- 	struct net_device *net_dev;
- 	struct napi_struct napi;
- 	struct mii_bus *mii_bus;
-@@ -489,5 +480,4 @@ static inline void bgmac_set(struct bgma
- {
- 	bgmac_maskset(bgmac, offset, ~0, set);
- }
--
- #endif /* _BGMAC_H */

+ 0 - 112
target/linux/generic/patches-4.4/071-v4.8-0002-net-ethernet-bgmac-add-dma_dev-pointer.patch

@@ -1,112 +0,0 @@
-From a0b68486f6f680c7c0352a47c60042d7d95ffd87 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@broadcom.com>
-Date: Thu, 7 Jul 2016 19:08:54 -0400
-Subject: [PATCH 2/5] net: ethernet: bgmac: add dma_dev pointer
-
-The dma buffer allocation, etc references a dma_dev device pointer from
-the bcma core.  In anticipation of removing the bcma requirement for
-this driver, these must be changed to not reference that struct.  Add a
-dma_dev device pointer to the bgmac stuct and reference that instead.
-
-Signed-off-by: Jon Mason <jon.mason@broadcom.com>
-Acked-by: Arnd Bergmann <arnd@arndb.de>
-Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-Tested-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 17 +++++++++--------
- drivers/net/ethernet/broadcom/bgmac.h |  1 +
- 2 files changed, 10 insertions(+), 8 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -152,7 +152,7 @@ static netdev_tx_t bgmac_dma_tx_add(stru
- 				    struct bgmac_dma_ring *ring,
- 				    struct sk_buff *skb)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	struct net_device *net_dev = bgmac->net_dev;
- 	int index = ring->end % BGMAC_TX_RING_SLOTS;
- 	struct bgmac_slot_info *slot = &ring->slots[index];
-@@ -254,7 +254,7 @@ err_drop:
- /* Free transmitted packets */
- static void bgmac_dma_tx_free(struct bgmac *bgmac, struct bgmac_dma_ring *ring)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	int empty_slot;
- 	bool freed = false;
- 	unsigned bytes_compl = 0, pkts_compl = 0;
-@@ -355,7 +355,7 @@ static void bgmac_dma_rx_enable(struct b
- static int bgmac_dma_rx_skb_for_slot(struct bgmac *bgmac,
- 				     struct bgmac_slot_info *slot)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	dma_addr_t dma_addr;
- 	struct bgmac_rx_header *rx;
- 	void *buf;
-@@ -444,7 +444,7 @@ static int bgmac_dma_rx_read(struct bgma
- 	end_slot /= sizeof(struct bgmac_dma_desc);
- 
- 	while (ring->start != end_slot) {
--		struct device *dma_dev = bgmac->core->dma_dev;
-+		struct device *dma_dev = bgmac->dma_dev;
- 		struct bgmac_slot_info *slot = &ring->slots[ring->start];
- 		struct bgmac_rx_header *rx = slot->buf + BGMAC_RX_BUF_OFFSET;
- 		struct sk_buff *skb;
-@@ -547,7 +547,7 @@ static bool bgmac_dma_unaligned(struct b
- static void bgmac_dma_tx_ring_free(struct bgmac *bgmac,
- 				   struct bgmac_dma_ring *ring)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	struct bgmac_dma_desc *dma_desc = ring->cpu_base;
- 	struct bgmac_slot_info *slot;
- 	int i;
-@@ -573,7 +573,7 @@ static void bgmac_dma_tx_ring_free(struc
- static void bgmac_dma_rx_ring_free(struct bgmac *bgmac,
- 				   struct bgmac_dma_ring *ring)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	struct bgmac_slot_info *slot;
- 	int i;
- 
-@@ -594,7 +594,7 @@ static void bgmac_dma_ring_desc_free(str
- 				     struct bgmac_dma_ring *ring,
- 				     int num_slots)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	int size;
- 
- 	if (!ring->cpu_base)
-@@ -632,7 +632,7 @@ static void bgmac_dma_free(struct bgmac
- 
- static int bgmac_dma_alloc(struct bgmac *bgmac)
- {
--	struct device *dma_dev = bgmac->core->dma_dev;
-+	struct device *dma_dev = bgmac->dma_dev;
- 	struct bgmac_dma_ring *ring;
- 	static const u16 ring_base[] = { BGMAC_DMA_BASE0, BGMAC_DMA_BASE1,
- 					 BGMAC_DMA_BASE2, BGMAC_DMA_BASE3, };
-@@ -1733,6 +1733,7 @@ static int bgmac_probe(struct bcma_devic
- 	net_dev->ethtool_ops = &bgmac_ethtool_ops;
- 	bgmac = netdev_priv(net_dev);
- 	bgmac->dev = &core->dev;
-+	bgmac->dma_dev = core->dma_dev;
- 	bgmac->net_dev = net_dev;
- 	bgmac->core = core;
- 	bcma_set_drvdata(core, bgmac);
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -429,6 +429,7 @@ struct bgmac {
- 	struct bcma_device *cmn; /* Reference to CMN core for BCM4706 */
- 
- 	struct device *dev;
-+	struct device *dma_dev;
- 	struct net_device *net_dev;
- 	struct napi_struct napi;
- 	struct mii_bus *mii_bus;

+ 0 - 676
target/linux/generic/patches-4.4/071-v4.8-0003-net-ethernet-bgmac-move-BCMA-MDIO-Phy-code-into-a-se.patch

@@ -1,676 +0,0 @@
-From 55954f3bfdacc5908515b0c306cea23e77fab740 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@broadcom.com>
-Date: Thu, 7 Jul 2016 19:08:55 -0400
-Subject: [PATCH 3/5] net: ethernet: bgmac: move BCMA MDIO Phy code into a
- separate file
-
-Move the BCMA MDIO phy into a separate file, as it is very tightly
-coupled with the BCMA bus.  This will help with the upcoming BCMA
-removal from the bgmac driver.  Optimally, this should be moved into
-phy drivers, but it is too tightly coupled with the bgmac driver to
-effectively move it without more changes to the driver.
-
-Note: the phy_reset was intentionally removed, as the mdio phy subsystem
-automatically resets the phy if a reset function pointer is present.  In
-addition to the moving of the driver, this reset function is added.
-
-Signed-off-by: Jon Mason <jon.mason@broadcom.com>
-Acked-by: Arnd Bergmann <arnd@arndb.de>
-Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-Tested-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/Makefile          |   2 +-
- drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c | 264 ++++++++++++++++++++++++
- drivers/net/ethernet/broadcom/bgmac.c           | 246 +++-------------------
- drivers/net/ethernet/broadcom/bgmac.h           |   3 +
- 4 files changed, 298 insertions(+), 217 deletions(-)
- create mode 100644 drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c
-
---- a/drivers/net/ethernet/broadcom/Makefile
-+++ b/drivers/net/ethernet/broadcom/Makefile
-@@ -10,6 +10,6 @@ obj-$(CONFIG_CNIC) += cnic.o
- obj-$(CONFIG_BNX2X) += bnx2x/
- obj-$(CONFIG_SB1250_MAC) += sb1250-mac.o
- obj-$(CONFIG_TIGON3) += tg3.o
--obj-$(CONFIG_BGMAC) += bgmac.o
-+obj-$(CONFIG_BGMAC) += bgmac.o bgmac-bcma-mdio.o
- obj-$(CONFIG_SYSTEMPORT) += bcmsysport.o
- obj-$(CONFIG_BNXT) += bnxt/
---- /dev/null
-+++ b/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c
-@@ -0,0 +1,275 @@
-+/*
-+ * Driver for (BCM4706)? GBit MAC core on BCMA bus.
-+ *
-+ * Copyright (C) 2012 Rafał Miłecki <zajec5@gmail.com>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#define pr_fmt(fmt)		KBUILD_MODNAME ": " fmt
-+
-+#include <linux/bcma/bcma.h>
-+#include <linux/brcmphy.h>
-+#include "bgmac.h"
-+
-+struct bcma_mdio {
-+	struct bcma_device *core;
-+	u8 phyaddr;
-+};
-+
-+static bool bcma_mdio_wait_value(struct bcma_device *core, u16 reg, u32 mask,
-+				 u32 value, int timeout)
-+{
-+	u32 val;
-+	int i;
-+
-+	for (i = 0; i < timeout / 10; i++) {
-+		val = bcma_read32(core, reg);
-+		if ((val & mask) == value)
-+			return true;
-+		udelay(10);
-+	}
-+	dev_err(&core->dev, "Timeout waiting for reg 0x%X\n", reg);
-+	return false;
-+}
-+
-+/**************************************************
-+ * PHY ops
-+ **************************************************/
-+
-+static u16 bcma_mdio_phy_read(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg)
-+{
-+	struct bcma_device *core;
-+	u16 phy_access_addr;
-+	u16 phy_ctl_addr;
-+	u32 tmp;
-+
-+	BUILD_BUG_ON(BGMAC_PA_DATA_MASK != BCMA_GMAC_CMN_PA_DATA_MASK);
-+	BUILD_BUG_ON(BGMAC_PA_ADDR_MASK != BCMA_GMAC_CMN_PA_ADDR_MASK);
-+	BUILD_BUG_ON(BGMAC_PA_ADDR_SHIFT != BCMA_GMAC_CMN_PA_ADDR_SHIFT);
-+	BUILD_BUG_ON(BGMAC_PA_REG_MASK != BCMA_GMAC_CMN_PA_REG_MASK);
-+	BUILD_BUG_ON(BGMAC_PA_REG_SHIFT != BCMA_GMAC_CMN_PA_REG_SHIFT);
-+	BUILD_BUG_ON(BGMAC_PA_WRITE != BCMA_GMAC_CMN_PA_WRITE);
-+	BUILD_BUG_ON(BGMAC_PA_START != BCMA_GMAC_CMN_PA_START);
-+	BUILD_BUG_ON(BGMAC_PC_EPA_MASK != BCMA_GMAC_CMN_PC_EPA_MASK);
-+	BUILD_BUG_ON(BGMAC_PC_MCT_MASK != BCMA_GMAC_CMN_PC_MCT_MASK);
-+	BUILD_BUG_ON(BGMAC_PC_MCT_SHIFT != BCMA_GMAC_CMN_PC_MCT_SHIFT);
-+	BUILD_BUG_ON(BGMAC_PC_MTE != BCMA_GMAC_CMN_PC_MTE);
-+
-+	if (bcma_mdio->core->id.id == BCMA_CORE_4706_MAC_GBIT) {
-+		core = bcma_mdio->core->bus->drv_gmac_cmn.core;
-+		phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS;
-+		phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL;
-+	} else {
-+		core = bcma_mdio->core;
-+		phy_access_addr = BGMAC_PHY_ACCESS;
-+		phy_ctl_addr = BGMAC_PHY_CNTL;
-+	}
-+
-+	tmp = bcma_read32(core, phy_ctl_addr);
-+	tmp &= ~BGMAC_PC_EPA_MASK;
-+	tmp |= phyaddr;
-+	bcma_write32(core, phy_ctl_addr, tmp);
-+
-+	tmp = BGMAC_PA_START;
-+	tmp |= phyaddr << BGMAC_PA_ADDR_SHIFT;
-+	tmp |= reg << BGMAC_PA_REG_SHIFT;
-+	bcma_write32(core, phy_access_addr, tmp);
-+
-+	if (!bcma_mdio_wait_value(core, phy_access_addr, BGMAC_PA_START, 0,
-+				  1000)) {
-+		dev_err(&core->dev, "Reading PHY %d register 0x%X failed\n",
-+			phyaddr, reg);
-+		return 0xffff;
-+	}
-+
-+	return bcma_read32(core, phy_access_addr) & BGMAC_PA_DATA_MASK;
-+}
-+
-+/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphywr */
-+static int bcma_mdio_phy_write(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg,
-+			       u16 value)
-+{
-+	struct bcma_device *core;
-+	u16 phy_access_addr;
-+	u16 phy_ctl_addr;
-+	u32 tmp;
-+
-+	if (bcma_mdio->core->id.id == BCMA_CORE_4706_MAC_GBIT) {
-+		core = bcma_mdio->core->bus->drv_gmac_cmn.core;
-+		phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS;
-+		phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL;
-+	} else {
-+		core = bcma_mdio->core;
-+		phy_access_addr = BGMAC_PHY_ACCESS;
-+		phy_ctl_addr = BGMAC_PHY_CNTL;
-+	}
-+
-+	tmp = bcma_read32(core, phy_ctl_addr);
-+	tmp &= ~BGMAC_PC_EPA_MASK;
-+	tmp |= phyaddr;
-+	bcma_write32(core, phy_ctl_addr, tmp);
-+
-+	bcma_write32(bcma_mdio->core, BGMAC_INT_STATUS, BGMAC_IS_MDIO);
-+	if (bcma_read32(bcma_mdio->core, BGMAC_INT_STATUS) & BGMAC_IS_MDIO)
-+		dev_warn(&core->dev, "Error setting MDIO int\n");
-+
-+	tmp = BGMAC_PA_START;
-+	tmp |= BGMAC_PA_WRITE;
-+	tmp |= phyaddr << BGMAC_PA_ADDR_SHIFT;
-+	tmp |= reg << BGMAC_PA_REG_SHIFT;
-+	tmp |= value;
-+	bcma_write32(core, phy_access_addr, tmp);
-+
-+	if (!bcma_mdio_wait_value(core, phy_access_addr, BGMAC_PA_START, 0,
-+				  1000)) {
-+		dev_err(&core->dev, "Writing to PHY %d register 0x%X failed\n",
-+			phyaddr, reg);
-+		return -ETIMEDOUT;
-+	}
-+
-+	return 0;
-+}
-+
-+/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyinit */
-+static void bcma_mdio_phy_init(struct bcma_mdio *bcma_mdio)
-+{
-+	struct bcma_chipinfo *ci = &bcma_mdio->core->bus->chipinfo;
-+	u8 i;
-+
-+	if (ci->id == BCMA_CHIP_ID_BCM5356) {
-+		for (i = 0; i < 5; i++) {
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x008b);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x15, 0x0100);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x12, 0x2aaa);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b);
-+		}
-+	}
-+	if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg != 10) ||
-+	    (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg != 10) ||
-+	    (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg != 9)) {
-+		struct bcma_drv_cc *cc = &bcma_mdio->core->bus->drv_cc;
-+
-+		bcma_chipco_chipctl_maskset(cc, 2, ~0xc0000000, 0);
-+		bcma_chipco_chipctl_maskset(cc, 4, ~0x80000000, 0);
-+		for (i = 0; i < 5; i++) {
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x5284);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x0010);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x5296);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x1073);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x9073);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x52b6);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x9273);
-+			bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b);
-+		}
-+	}
-+}
-+
-+/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyreset */
-+static int bcma_mdio_phy_reset(struct mii_bus *bus)
-+{
-+	struct bcma_mdio *bcma_mdio = bus->priv;
-+	u8 phyaddr = bcma_mdio->phyaddr;
-+
-+	if (bcma_mdio->phyaddr == BGMAC_PHY_NOREGS)
-+		return 0;
-+
-+	bcma_mdio_phy_write(bcma_mdio, phyaddr, MII_BMCR, BMCR_RESET);
-+	udelay(100);
-+	if (bcma_mdio_phy_read(bcma_mdio, phyaddr, MII_BMCR) & BMCR_RESET)
-+		dev_err(&bcma_mdio->core->dev, "PHY reset failed\n");
-+	bcma_mdio_phy_init(bcma_mdio);
-+
-+	return 0;
-+}
-+
-+/**************************************************
-+ * MII
-+ **************************************************/
-+
-+static int bcma_mdio_mii_read(struct mii_bus *bus, int mii_id, int regnum)
-+{
-+	return bcma_mdio_phy_read(bus->priv, mii_id, regnum);
-+}
-+
-+static int bcma_mdio_mii_write(struct mii_bus *bus, int mii_id, int regnum,
-+			       u16 value)
-+{
-+	return bcma_mdio_phy_write(bus->priv, mii_id, regnum, value);
-+}
-+
-+struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr)
-+{
-+	struct bcma_mdio *bcma_mdio;
-+	struct mii_bus *mii_bus;
-+	int i, err;
-+
-+	bcma_mdio = kzalloc(sizeof(*bcma_mdio), GFP_KERNEL);
-+	if (!bcma_mdio)
-+		return ERR_PTR(-ENOMEM);
-+
-+	mii_bus = mdiobus_alloc();
-+	if (!mii_bus) {
-+		err = -ENOMEM;
-+		goto err;
-+	}
-+
-+	mii_bus->name = "bcma_mdio mii bus";
-+	sprintf(mii_bus->id, "%s-%d-%d", "bcma_mdio", core->bus->num,
-+		core->core_unit);
-+	mii_bus->priv = bcma_mdio;
-+	mii_bus->read = bcma_mdio_mii_read;
-+	mii_bus->write = bcma_mdio_mii_write;
-+	mii_bus->reset = bcma_mdio_phy_reset;
-+	mii_bus->parent = &core->dev;
-+	mii_bus->phy_mask = ~(1 << phyaddr);
-+ 
-+	mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-+	if (!mii_bus->irq) {
-+		err = -ENOMEM;
-+		goto err_free_bus;
-+	}
-+	for (i = 0; i < PHY_MAX_ADDR; i++)
-+		mii_bus->irq[i] = PHY_POLL;
-+
-+	bcma_mdio->core = core;
-+	bcma_mdio->phyaddr = phyaddr;
-+
-+	err = mdiobus_register(mii_bus);
-+	if (err) {
-+		dev_err(&core->dev, "Registration of mii bus failed\n");
-+		goto err_free_irq;
-+	}
-+
-+	return mii_bus;
-+
-+err_free_irq:
-+	kfree(mii_bus->irq);
-+err_free_bus:
-+	mdiobus_free(mii_bus);
-+err:
-+	kfree(bcma_mdio);
-+	return ERR_PTR(err);
-+}
-+
-+void bcma_mdio_mii_unregister(struct mii_bus *mii_bus)
-+{
-+	struct bcma_mdio *bcma_mdio;
-+
-+	if (!mii_bus)
-+		return;
-+
-+	bcma_mdio = mii_bus->priv;
-+
-+	mdiobus_unregister(mii_bus);
-+	kfree(mii_bus->irq);
-+	mdiobus_free(mii_bus);
-+	kfree(bcma_mdio);
-+}
-+
-+MODULE_AUTHOR("Rafał Miłecki");
-+MODULE_LICENSE("GPL");
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -759,150 +759,6 @@ error:
- 	return err;
- }
- 
--/**************************************************
-- * PHY ops
-- **************************************************/
--
--static u16 bgmac_phy_read(struct bgmac *bgmac, u8 phyaddr, u8 reg)
--{
--	struct bcma_device *core;
--	u16 phy_access_addr;
--	u16 phy_ctl_addr;
--	u32 tmp;
--
--	BUILD_BUG_ON(BGMAC_PA_DATA_MASK != BCMA_GMAC_CMN_PA_DATA_MASK);
--	BUILD_BUG_ON(BGMAC_PA_ADDR_MASK != BCMA_GMAC_CMN_PA_ADDR_MASK);
--	BUILD_BUG_ON(BGMAC_PA_ADDR_SHIFT != BCMA_GMAC_CMN_PA_ADDR_SHIFT);
--	BUILD_BUG_ON(BGMAC_PA_REG_MASK != BCMA_GMAC_CMN_PA_REG_MASK);
--	BUILD_BUG_ON(BGMAC_PA_REG_SHIFT != BCMA_GMAC_CMN_PA_REG_SHIFT);
--	BUILD_BUG_ON(BGMAC_PA_WRITE != BCMA_GMAC_CMN_PA_WRITE);
--	BUILD_BUG_ON(BGMAC_PA_START != BCMA_GMAC_CMN_PA_START);
--	BUILD_BUG_ON(BGMAC_PC_EPA_MASK != BCMA_GMAC_CMN_PC_EPA_MASK);
--	BUILD_BUG_ON(BGMAC_PC_MCT_MASK != BCMA_GMAC_CMN_PC_MCT_MASK);
--	BUILD_BUG_ON(BGMAC_PC_MCT_SHIFT != BCMA_GMAC_CMN_PC_MCT_SHIFT);
--	BUILD_BUG_ON(BGMAC_PC_MTE != BCMA_GMAC_CMN_PC_MTE);
--
--	if (bgmac->core->id.id == BCMA_CORE_4706_MAC_GBIT) {
--		core = bgmac->core->bus->drv_gmac_cmn.core;
--		phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS;
--		phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL;
--	} else {
--		core = bgmac->core;
--		phy_access_addr = BGMAC_PHY_ACCESS;
--		phy_ctl_addr = BGMAC_PHY_CNTL;
--	}
--
--	tmp = bcma_read32(core, phy_ctl_addr);
--	tmp &= ~BGMAC_PC_EPA_MASK;
--	tmp |= phyaddr;
--	bcma_write32(core, phy_ctl_addr, tmp);
--
--	tmp = BGMAC_PA_START;
--	tmp |= phyaddr << BGMAC_PA_ADDR_SHIFT;
--	tmp |= reg << BGMAC_PA_REG_SHIFT;
--	bcma_write32(core, phy_access_addr, tmp);
--
--	if (!bgmac_wait_value(core, phy_access_addr, BGMAC_PA_START, 0, 1000)) {
--		dev_err(bgmac->dev, "Reading PHY %d register 0x%X failed\n",
--			phyaddr, reg);
--		return 0xffff;
--	}
--
--	return bcma_read32(core, phy_access_addr) & BGMAC_PA_DATA_MASK;
--}
--
--/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphywr */
--static int bgmac_phy_write(struct bgmac *bgmac, u8 phyaddr, u8 reg, u16 value)
--{
--	struct bcma_device *core;
--	u16 phy_access_addr;
--	u16 phy_ctl_addr;
--	u32 tmp;
--
--	if (bgmac->core->id.id == BCMA_CORE_4706_MAC_GBIT) {
--		core = bgmac->core->bus->drv_gmac_cmn.core;
--		phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS;
--		phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL;
--	} else {
--		core = bgmac->core;
--		phy_access_addr = BGMAC_PHY_ACCESS;
--		phy_ctl_addr = BGMAC_PHY_CNTL;
--	}
--
--	tmp = bcma_read32(core, phy_ctl_addr);
--	tmp &= ~BGMAC_PC_EPA_MASK;
--	tmp |= phyaddr;
--	bcma_write32(core, phy_ctl_addr, tmp);
--
--	bgmac_write(bgmac, BGMAC_INT_STATUS, BGMAC_IS_MDIO);
--	if (bgmac_read(bgmac, BGMAC_INT_STATUS) & BGMAC_IS_MDIO)
--		dev_warn(bgmac->dev, "Error setting MDIO int\n");
--
--	tmp = BGMAC_PA_START;
--	tmp |= BGMAC_PA_WRITE;
--	tmp |= phyaddr << BGMAC_PA_ADDR_SHIFT;
--	tmp |= reg << BGMAC_PA_REG_SHIFT;
--	tmp |= value;
--	bcma_write32(core, phy_access_addr, tmp);
--
--	if (!bgmac_wait_value(core, phy_access_addr, BGMAC_PA_START, 0, 1000)) {
--		dev_err(bgmac->dev, "Writing to PHY %d register 0x%X failed\n",
--			phyaddr, reg);
--		return -ETIMEDOUT;
--	}
--
--	return 0;
--}
--
--/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyinit */
--static void bgmac_phy_init(struct bgmac *bgmac)
--{
--	struct bcma_chipinfo *ci = &bgmac->core->bus->chipinfo;
--	struct bcma_drv_cc *cc = &bgmac->core->bus->drv_cc;
--	u8 i;
--
--	if (ci->id == BCMA_CHIP_ID_BCM5356) {
--		for (i = 0; i < 5; i++) {
--			bgmac_phy_write(bgmac, i, 0x1f, 0x008b);
--			bgmac_phy_write(bgmac, i, 0x15, 0x0100);
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000f);
--			bgmac_phy_write(bgmac, i, 0x12, 0x2aaa);
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000b);
--		}
--	}
--	if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg != 10) ||
--	    (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg != 10) ||
--	    (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg != 9)) {
--		bcma_chipco_chipctl_maskset(cc, 2, ~0xc0000000, 0);
--		bcma_chipco_chipctl_maskset(cc, 4, ~0x80000000, 0);
--		for (i = 0; i < 5; i++) {
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000f);
--			bgmac_phy_write(bgmac, i, 0x16, 0x5284);
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000b);
--			bgmac_phy_write(bgmac, i, 0x17, 0x0010);
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000f);
--			bgmac_phy_write(bgmac, i, 0x16, 0x5296);
--			bgmac_phy_write(bgmac, i, 0x17, 0x1073);
--			bgmac_phy_write(bgmac, i, 0x17, 0x9073);
--			bgmac_phy_write(bgmac, i, 0x16, 0x52b6);
--			bgmac_phy_write(bgmac, i, 0x17, 0x9273);
--			bgmac_phy_write(bgmac, i, 0x1f, 0x000b);
--		}
--	}
--}
--
--/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyreset */
--static void bgmac_phy_reset(struct bgmac *bgmac)
--{
--	if (bgmac->phyaddr == BGMAC_PHY_NOREGS)
--		return;
--
--	bgmac_phy_write(bgmac, bgmac->phyaddr, MII_BMCR, BMCR_RESET);
--	udelay(100);
--	if (bgmac_phy_read(bgmac, bgmac->phyaddr, MII_BMCR) & BMCR_RESET)
--		dev_err(bgmac->dev, "PHY reset failed\n");
--	bgmac_phy_init(bgmac);
--}
- 
- /**************************************************
-  * Chip ops
-@@ -1159,7 +1015,8 @@ static void bgmac_chip_reset(struct bgma
- 	else
- 		bgmac_set(bgmac, BGMAC_PHY_CNTL, BGMAC_PC_MTE);
- 	bgmac_miiconfig(bgmac);
--	bgmac_phy_init(bgmac);
-+	if (bgmac->mii_bus)
-+		bgmac->mii_bus->reset(bgmac->mii_bus);
- 
- 	netdev_reset_queue(bgmac->net_dev);
- }
-@@ -1553,17 +1410,6 @@ static const struct ethtool_ops bgmac_et
-  * MII
-  **************************************************/
- 
--static int bgmac_mii_read(struct mii_bus *bus, int mii_id, int regnum)
--{
--	return bgmac_phy_read(bus->priv, mii_id, regnum);
--}
--
--static int bgmac_mii_write(struct mii_bus *bus, int mii_id, int regnum,
--			   u16 value)
--{
--	return bgmac_phy_write(bus->priv, mii_id, regnum, value);
--}
--
- static void bgmac_adjust_link(struct net_device *net_dev)
- {
- 	struct bgmac *bgmac = netdev_priv(net_dev);
-@@ -1588,7 +1434,7 @@ static void bgmac_adjust_link(struct net
- 	}
- }
- 
--static int bgmac_fixed_phy_register(struct bgmac *bgmac)
-+static int bgmac_phy_connect_direct(struct bgmac *bgmac)
- {
- 	struct fixed_phy_status fphy_status = {
- 		.link = 1,
-@@ -1614,81 +1460,24 @@ static int bgmac_fixed_phy_register(stru
- 	return err;
- }
- 
--static int bgmac_mii_register(struct bgmac *bgmac)
-+static int bgmac_phy_connect(struct bgmac *bgmac)
- {
--	struct mii_bus *mii_bus;
- 	struct phy_device *phy_dev;
- 	char bus_id[MII_BUS_ID_SIZE + 3];
--	int i, err = 0;
--
--	if (bgmac_is_bcm4707_family(bgmac))
--		return bgmac_fixed_phy_register(bgmac);
--
--	mii_bus = mdiobus_alloc();
--	if (!mii_bus)
--		return -ENOMEM;
--
--	mii_bus->name = "bgmac mii bus";
--	sprintf(mii_bus->id, "%s-%d-%d", "bgmac", bgmac->core->bus->num,
--		bgmac->core->core_unit);
--	mii_bus->priv = bgmac;
--	mii_bus->read = bgmac_mii_read;
--	mii_bus->write = bgmac_mii_write;
--	mii_bus->parent = &bgmac->core->dev;
--	mii_bus->phy_mask = ~(1 << bgmac->phyaddr);
--
--	mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
--	if (!mii_bus->irq) {
--		err = -ENOMEM;
--		goto err_free_bus;
--	}
--	for (i = 0; i < PHY_MAX_ADDR; i++)
--		mii_bus->irq[i] = PHY_POLL;
--
--	err = mdiobus_register(mii_bus);
--	if (err) {
--		dev_err(bgmac->dev, "Registration of mii bus failed\n");
--		goto err_free_irq;
--	}
--
--	bgmac->mii_bus = mii_bus;
- 
- 	/* Connect to the PHY */
--	snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, mii_bus->id,
-+	snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, bgmac->mii_bus->id,
- 		 bgmac->phyaddr);
- 	phy_dev = phy_connect(bgmac->net_dev, bus_id, &bgmac_adjust_link,
- 			      PHY_INTERFACE_MODE_MII);
- 	if (IS_ERR(phy_dev)) {
- 		dev_err(bgmac->dev, "PHY connecton failed\n");
--		err = PTR_ERR(phy_dev);
--		goto err_unregister_bus;
-+		return PTR_ERR(phy_dev);
- 	}
- 
--	return err;
--
--err_unregister_bus:
--	mdiobus_unregister(mii_bus);
--err_free_irq:
--	kfree(mii_bus->irq);
--err_free_bus:
--	mdiobus_free(mii_bus);
--	return err;
--}
--
--static void bgmac_mii_unregister(struct bgmac *bgmac)
--{
--	struct mii_bus *mii_bus = bgmac->mii_bus;
--
--	mdiobus_unregister(mii_bus);
--	kfree(mii_bus->irq);
--	mdiobus_free(mii_bus);
-+	return 0;
- }
- 
--/**************************************************
-- * BCMA bus ops
-- **************************************************/
--
--/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipattach */
- static int bgmac_probe(struct bcma_device *core)
- {
- 	struct net_device *net_dev;
-@@ -1809,9 +1598,6 @@ static int bgmac_probe(struct bcma_devic
- 	if (bcm47xx_nvram_getenv("et0_no_txint", NULL, 0) == 0)
- 		bgmac->int_mask &= ~BGMAC_IS_TX_MASK;
- 
--	/* TODO: reset the external phy. Specs are needed */
--	bgmac_phy_reset(bgmac);
--
- 	bgmac->has_robosw = !!(core->bus->sprom.boardflags_lo &
- 			       BGMAC_BFL_ENETROBO);
- 	if (bgmac->has_robosw)
-@@ -1822,10 +1608,25 @@ static int bgmac_probe(struct bcma_devic
- 
- 	netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
- 
--	err = bgmac_mii_register(bgmac);
-+	if (!bgmac_is_bcm4707_family(bgmac)) {
-+		struct mii_bus *mii_bus;
-+
-+		mii_bus = bcma_mdio_mii_register(core, bgmac->phyaddr);
-+		if (!IS_ERR(mii_bus)) {
-+			err = PTR_ERR(mii_bus);
-+			goto err_dma_free;
-+		}
-+
-+		bgmac->mii_bus = mii_bus;
-+	}
-+
-+	if (!bgmac->mii_bus)
-+		err = bgmac_phy_connect_direct(bgmac);
-+	else
-+		err = bgmac_phy_connect(bgmac);
- 	if (err) {
- 		dev_err(bgmac->dev, "Cannot connect to phy\n");
--		goto err_dma_free;
-+		goto err_mii_unregister;
- 	}
- 
- 	net_dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-@@ -1835,18 +1636,19 @@ static int bgmac_probe(struct bcma_devic
- 	err = register_netdev(bgmac->net_dev);
- 	if (err) {
- 		dev_err(bgmac->dev, "Cannot register net device\n");
--		goto err_mii_unregister;
-+		goto err_phy_disconnect;
- 	}
- 
- 	netif_carrier_off(net_dev);
- 
- 	return 0;
- 
-+err_phy_disconnect:
-+	phy_disconnect(net_dev->phydev);
- err_mii_unregister:
--	bgmac_mii_unregister(bgmac);
-+	bcma_mdio_mii_unregister(bgmac->mii_bus);
- err_dma_free:
- 	bgmac_dma_free(bgmac);
--
- err_netdev_free:
- 	bcma_set_drvdata(core, NULL);
- 	free_netdev(net_dev);
-@@ -1859,7 +1661,8 @@ static void bgmac_remove(struct bcma_dev
- 	struct bgmac *bgmac = bcma_get_drvdata(core);
- 
- 	unregister_netdev(bgmac->net_dev);
--	bgmac_mii_unregister(bgmac);
-+	phy_disconnect(bgmac->net_dev->phydev);
-+	bcma_mdio_mii_unregister(bgmac->mii_bus);
- 	netif_napi_del(&bgmac->napi);
- 	bgmac_dma_free(bgmac);
- 	bcma_set_drvdata(core, NULL);
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -456,6 +456,9 @@ struct bgmac {
- 	bool loopback;
- };
- 
-+struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr);
-+void bcma_mdio_mii_unregister(struct mii_bus *mii_bus);
-+
- static inline u32 bgmac_read(struct bgmac *bgmac, u16 offset)
- {
- 	return bcma_read32(bgmac->core, offset);

+ 0 - 384
target/linux/generic/patches-4.4/071-v4.8-0004-net-ethernet-bgmac-convert-to-feature-flags.patch

@@ -1,384 +0,0 @@
-From db791eb2970bad193b1dc95a4461b222dd22cb64 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@broadcom.com>
-Date: Thu, 7 Jul 2016 19:08:56 -0400
-Subject: [PATCH 4/5] net: ethernet: bgmac: convert to feature flags
-
-The bgmac driver is using the bcma provides device ID and revision, as
-well as the SoC ID and package, to determine which features are
-necessary to enable, reset, etc in the driver.   In anticipation of
-removing the bcma requirement for this driver, these must be changed to
-not reference that struct.  In place of that, each "feature" has been
-given a flag, and the flags are enabled for their respective device and
-SoC.
-
-Signed-off-by: Jon Mason <jon.mason@broadcom.com>
-Acked-by: Arnd Bergmann <arnd@arndb.de>
-Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-Tested-by: Florian Fainelli <f.fainelli@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 167 ++++++++++++++++++++++++----------
- drivers/net/ethernet/broadcom/bgmac.h |  21 ++++-
- 2 files changed, 140 insertions(+), 48 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -109,7 +109,7 @@ static void bgmac_dma_tx_enable(struct b
- 	u32 ctl;
- 
- 	ctl = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_TX_CTL);
--	if (bgmac->core->id.rev >= 4) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_TX_MASK_SETUP) {
- 		ctl &= ~BGMAC_DMA_TX_BL_MASK;
- 		ctl |= BGMAC_DMA_TX_BL_128 << BGMAC_DMA_TX_BL_SHIFT;
- 
-@@ -335,7 +335,7 @@ static void bgmac_dma_rx_enable(struct b
- 	/* preserve ONLY bits 16-17 from current hardware value */
- 	ctl &= BGMAC_DMA_RX_ADDREXT_MASK;
- 
--	if (bgmac->core->id.rev >= 4) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_RX_MASK_SETUP) {
- 		ctl &= ~BGMAC_DMA_RX_BL_MASK;
- 		ctl |= BGMAC_DMA_RX_BL_128 << BGMAC_DMA_RX_BL_SHIFT;
- 
-@@ -772,14 +772,20 @@ static void bgmac_cmdcfg_maskset(struct
- {
- 	u32 cmdcfg = bgmac_read(bgmac, BGMAC_CMDCFG);
- 	u32 new_val = (cmdcfg & mask) | set;
-+	u32 cmdcfg_sr;
- 
--	bgmac_set(bgmac, BGMAC_CMDCFG, BGMAC_CMDCFG_SR(bgmac->core->id.rev));
-+	if (bgmac->feature_flags & BGMAC_FEAT_CMDCFG_SR_REV4)
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV4;
-+	else
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV0;
-+
-+	bgmac_set(bgmac, BGMAC_CMDCFG, cmdcfg_sr);
- 	udelay(2);
- 
- 	if (new_val != cmdcfg || force)
- 		bgmac_write(bgmac, BGMAC_CMDCFG, new_val);
- 
--	bgmac_mask(bgmac, BGMAC_CMDCFG, ~BGMAC_CMDCFG_SR(bgmac->core->id.rev));
-+	bgmac_mask(bgmac, BGMAC_CMDCFG, ~cmdcfg_sr);
- 	udelay(2);
- }
- 
-@@ -808,7 +814,7 @@ static void bgmac_chip_stats_update(stru
- {
- 	int i;
- 
--	if (bgmac->core->id.id != BCMA_CORE_4706_MAC_GBIT) {
-+	if (!(bgmac->feature_flags & BGMAC_FEAT_NO_CLR_MIB)) {
- 		for (i = 0; i < BGMAC_NUM_MIB_TX_REGS; i++)
- 			bgmac->mib_tx_regs[i] =
- 				bgmac_read(bgmac,
-@@ -827,7 +833,7 @@ static void bgmac_clear_mib(struct bgmac
- {
- 	int i;
- 
--	if (bgmac->core->id.id == BCMA_CORE_4706_MAC_GBIT)
-+	if (bgmac->feature_flags & BGMAC_FEAT_NO_CLR_MIB)
- 		return;
- 
- 	bgmac_set(bgmac, BGMAC_DEV_CTL, BGMAC_DC_MROR);
-@@ -870,9 +876,8 @@ static void bgmac_mac_speed(struct bgmac
- static void bgmac_miiconfig(struct bgmac *bgmac)
- {
- 	struct bcma_device *core = bgmac->core;
--	u8 imode;
- 
--	if (bgmac_is_bcm4707_family(bgmac)) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_FORCE_SPEED_2500) {
- 		bcma_awrite32(core, BCMA_IOCTL,
- 			      bcma_aread32(core, BCMA_IOCTL) | 0x40 |
- 			      BGMAC_BCMA_IOCTL_SW_CLKEN);
-@@ -880,6 +885,8 @@ static void bgmac_miiconfig(struct bgmac
- 		bgmac->mac_duplex = DUPLEX_FULL;
- 		bgmac_mac_speed(bgmac);
- 	} else {
-+		u8 imode;
-+
- 		imode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) &
- 			BGMAC_DS_MM_MASK) >> BGMAC_DS_MM_SHIFT;
- 		if (imode == 0 || imode == 1) {
-@@ -894,9 +901,7 @@ static void bgmac_miiconfig(struct bgmac
- static void bgmac_chip_reset(struct bgmac *bgmac)
- {
- 	struct bcma_device *core = bgmac->core;
--	struct bcma_bus *bus = core->bus;
--	struct bcma_chipinfo *ci = &bus->chipinfo;
--	u32 flags;
-+	u32 cmdcfg_sr;
- 	u32 iost;
- 	int i;
- 
-@@ -919,15 +924,12 @@ static void bgmac_chip_reset(struct bgma
- 	}
- 
- 	iost = bcma_aread32(core, BCMA_IOST);
--	if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == BCMA_PKG_ID_BCM47186) ||
--	    (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg == 10) ||
--	    (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == BCMA_PKG_ID_BCM47188))
-+	if (bgmac->feature_flags & BGMAC_FEAT_IOST_ATTACHED)
- 		iost &= ~BGMAC_BCMA_IOST_ATTACHED;
- 
- 	/* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
--	if (ci->id != BCMA_CHIP_ID_BCM4707 &&
--	    ci->id != BCMA_CHIP_ID_BCM47094) {
--		flags = 0;
-+	if (!(bgmac->feature_flags & BGMAC_FEAT_NO_RESET)) {
-+		u32 flags = 0;
- 		if (iost & BGMAC_BCMA_IOST_ATTACHED) {
- 			flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
- 			if (!bgmac->has_robosw)
-@@ -937,7 +939,7 @@ static void bgmac_chip_reset(struct bgma
- 	}
- 
- 	/* Request Misc PLL for corerev > 2 */
--	if (core->id.rev > 2 && !bgmac_is_bcm4707_family(bgmac)) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_MISC_PLL_REQ) {
- 		bgmac_set(bgmac, BCMA_CLKCTLST,
- 			  BGMAC_BCMA_CLKCTLST_MISC_PLL_REQ);
- 		bgmac_wait_value(bgmac->core, BCMA_CLKCTLST,
-@@ -946,9 +948,7 @@ static void bgmac_chip_reset(struct bgma
- 				 1000);
- 	}
- 
--	if (ci->id == BCMA_CHIP_ID_BCM5357 ||
--	    ci->id == BCMA_CHIP_ID_BCM4749 ||
--	    ci->id == BCMA_CHIP_ID_BCM53572) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_SW_TYPE_PHY) {
- 		struct bcma_drv_cc *cc = &bgmac->core->bus->drv_cc;
- 		u8 et_swtype = 0;
- 		u8 sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHY |
-@@ -962,11 +962,9 @@ static void bgmac_chip_reset(struct bgma
- 			et_swtype &= 0x0f;
- 			et_swtype <<= 4;
- 			sw_type = et_swtype;
--		} else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == BCMA_PKG_ID_BCM5358) {
-+		} else if (bgmac->feature_flags & BGMAC_FEAT_SW_TYPE_EPHYRMII) {
- 			sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII;
--		} else if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == BCMA_PKG_ID_BCM47186) ||
--			   (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg == 10) ||
--			   (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == BCMA_PKG_ID_BCM47188)) {
-+		} else if (bgmac->feature_flags & BGMAC_FEAT_SW_TYPE_RGMII) {
- 			sw_type = BGMAC_CHIPCTL_1_IF_TYPE_RGMII |
- 				  BGMAC_CHIPCTL_1_SW_TYPE_RGMII;
- 		}
-@@ -986,6 +984,11 @@ static void bgmac_chip_reset(struct bgma
- 	 * BGMAC_CMDCFG is read _after_ putting chip in a reset. So it has to
- 	 * be keps until taking MAC out of the reset.
- 	 */
-+	if (bgmac->feature_flags & BGMAC_FEAT_CMDCFG_SR_REV4)
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV4;
-+	else
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV0;
-+
- 	bgmac_cmdcfg_maskset(bgmac,
- 			     ~(BGMAC_CMDCFG_TE |
- 			       BGMAC_CMDCFG_RE |
-@@ -1003,13 +1006,13 @@ static void bgmac_chip_reset(struct bgma
- 			     BGMAC_CMDCFG_PROM |
- 			     BGMAC_CMDCFG_NLC |
- 			     BGMAC_CMDCFG_CFE |
--			     BGMAC_CMDCFG_SR(core->id.rev),
-+			     cmdcfg_sr,
- 			     false);
- 	bgmac->mac_speed = SPEED_UNKNOWN;
- 	bgmac->mac_duplex = DUPLEX_UNKNOWN;
- 
- 	bgmac_clear_mib(bgmac);
--	if (core->id.id == BCMA_CORE_4706_MAC_GBIT)
-+	if (bgmac->feature_flags & BGMAC_FEAT_CMN_PHY_CTL)
- 		bcma_maskset32(bgmac->cmn, BCMA_GMAC_CMN_PHY_CTL, ~0,
- 			       BCMA_GMAC_CMN_PC_MTE);
- 	else
-@@ -1035,46 +1038,48 @@ static void bgmac_chip_intrs_off(struct
- /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_enable */
- static void bgmac_enable(struct bgmac *bgmac)
- {
--	struct bcma_chipinfo *ci = &bgmac->core->bus->chipinfo;
-+	u32 cmdcfg_sr;
- 	u32 cmdcfg;
- 	u32 mode;
--	u32 rxq_ctl;
--	u32 fl_ctl;
--	u16 bp_clk;
--	u8 mdp;
-+
-+	if (bgmac->feature_flags & BGMAC_FEAT_CMDCFG_SR_REV4)
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV4;
-+	else
-+		cmdcfg_sr = BGMAC_CMDCFG_SR_REV0;
- 
- 	cmdcfg = bgmac_read(bgmac, BGMAC_CMDCFG);
- 	bgmac_cmdcfg_maskset(bgmac, ~(BGMAC_CMDCFG_TE | BGMAC_CMDCFG_RE),
--			     BGMAC_CMDCFG_SR(bgmac->core->id.rev), true);
-+			     cmdcfg_sr, true);
- 	udelay(2);
- 	cmdcfg |= BGMAC_CMDCFG_TE | BGMAC_CMDCFG_RE;
- 	bgmac_write(bgmac, BGMAC_CMDCFG, cmdcfg);
- 
- 	mode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) & BGMAC_DS_MM_MASK) >>
- 		BGMAC_DS_MM_SHIFT;
--	if (ci->id != BCMA_CHIP_ID_BCM47162 || mode != 0)
-+	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST || mode != 0)
- 		bgmac_set(bgmac, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT);
--	if (ci->id == BCMA_CHIP_ID_BCM47162 && mode == 2)
-+	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST && mode == 2)
- 		bcma_chipco_chipctl_maskset(&bgmac->core->bus->drv_cc, 1, ~0,
- 					    BGMAC_CHIPCTL_1_RXC_DLL_BYPASS);
- 
--	switch (ci->id) {
--	case BCMA_CHIP_ID_BCM5357:
--	case BCMA_CHIP_ID_BCM4749:
--	case BCMA_CHIP_ID_BCM53572:
--	case BCMA_CHIP_ID_BCM4716:
--	case BCMA_CHIP_ID_BCM47162:
--		fl_ctl = 0x03cb04cb;
--		if (ci->id == BCMA_CHIP_ID_BCM5357 ||
--		    ci->id == BCMA_CHIP_ID_BCM4749 ||
--		    ci->id == BCMA_CHIP_ID_BCM53572)
-+	if (bgmac->feature_flags & (BGMAC_FEAT_FLW_CTRL1 |
-+				    BGMAC_FEAT_FLW_CTRL2)) {
-+		u32 fl_ctl;
-+
-+		if (bgmac->feature_flags & BGMAC_FEAT_FLW_CTRL1)
- 			fl_ctl = 0x2300e1;
-+		else
-+			fl_ctl = 0x03cb04cb;
-+
- 		bgmac_write(bgmac, BGMAC_FLOW_CTL_THRESH, fl_ctl);
- 		bgmac_write(bgmac, BGMAC_PAUSE_CTL, 0x27fff);
--		break;
- 	}
- 
--	if (!bgmac_is_bcm4707_family(bgmac)) {
-+	if (bgmac->feature_flags & BGMAC_FEAT_SET_RXQ_CLK) {
-+		u32 rxq_ctl;
-+		u16 bp_clk;
-+		u8 mdp;
-+
- 		rxq_ctl = bgmac_read(bgmac, BGMAC_RXQ_CTL);
- 		rxq_ctl &= ~BGMAC_RXQ_CTL_MDP_MASK;
- 		bp_clk = bcma_pmu_get_bus_clock(&bgmac->core->bus->drv_cc) /
-@@ -1606,6 +1611,74 @@ static int bgmac_probe(struct bcma_devic
- 	if (core->bus->sprom.boardflags_lo & BGMAC_BFL_ENETADM)
- 		dev_warn(bgmac->dev, "Support for ADMtek ethernet switch not implemented\n");
- 
-+	/* Feature Flags */
-+	switch (core->bus->chipinfo.id) {
-+	case BCMA_CHIP_ID_BCM5357:
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
-+		bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
-+		if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM47186) {
-+			bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
-+			bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
-+		}
-+		if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM5358)
-+			bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_EPHYRMII;
-+		break;
-+	case BCMA_CHIP_ID_BCM53572:
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
-+		bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
-+		if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM47188) {
-+			bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
-+			bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
-+		}
-+		break;
-+	case BCMA_CHIP_ID_BCM4749:
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
-+		bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
-+		if (core->bus->chipinfo.pkg == 10) {
-+			bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
-+			bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
-+		}
-+		break;
-+	case BCMA_CHIP_ID_BCM4716:
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		/* fallthrough */
-+	case BCMA_CHIP_ID_BCM47162:
-+		bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL2;
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+		break;
-+	/* bcm4707_family */
-+	case BCMA_CHIP_ID_BCM4707:
-+	case BCMA_CHIP_ID_BCM47094:
-+	case BCMA_CHIP_ID_BCM53018:
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_NO_RESET;
-+		bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
-+		break;
-+	default:
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+	}
-+
-+	if (!bgmac_is_bcm4707_family(bgmac) && core->id.rev > 2)
-+		bgmac->feature_flags |= BGMAC_FEAT_MISC_PLL_REQ;
-+
-+	if (core->id.id == BCMA_CORE_4706_MAC_GBIT) {
-+		bgmac->feature_flags |= BGMAC_FEAT_CMN_PHY_CTL;
-+		bgmac->feature_flags |= BGMAC_FEAT_NO_CLR_MIB;
-+	}
-+
-+	if (core->id.rev >= 4) {
-+		bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4;
-+		bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP;
-+		bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP;
-+	}
-+
- 	netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
- 
- 	if (!bgmac_is_bcm4707_family(bgmac)) {
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -190,7 +190,6 @@
- #define  BGMAC_CMDCFG_HD_SHIFT			10
- #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
-@@ -376,6 +375,24 @@
- 
- #define ETHER_MAX_LEN   1518
- 
-+/* Feature Flags */
-+#define BGMAC_FEAT_TX_MASK_SETUP	BIT(0)
-+#define BGMAC_FEAT_RX_MASK_SETUP	BIT(1)
-+#define BGMAC_FEAT_IOST_ATTACHED	BIT(2)
-+#define BGMAC_FEAT_NO_RESET		BIT(3)
-+#define BGMAC_FEAT_MISC_PLL_REQ		BIT(4)
-+#define BGMAC_FEAT_SW_TYPE_PHY		BIT(5)
-+#define BGMAC_FEAT_SW_TYPE_EPHYRMII	BIT(6)
-+#define BGMAC_FEAT_SW_TYPE_RGMII	BIT(7)
-+#define BGMAC_FEAT_CMN_PHY_CTL		BIT(8)
-+#define BGMAC_FEAT_FLW_CTRL1		BIT(9)
-+#define BGMAC_FEAT_FLW_CTRL2		BIT(10)
-+#define BGMAC_FEAT_SET_RXQ_CLK		BIT(11)
-+#define BGMAC_FEAT_CLKCTLST		BIT(12)
-+#define BGMAC_FEAT_NO_CLR_MIB		BIT(13)
-+#define BGMAC_FEAT_FORCE_SPEED_2500	BIT(14)
-+#define BGMAC_FEAT_CMDCFG_SR_REV4	BIT(15)
-+
- struct bgmac_slot_info {
- 	union {
- 		struct sk_buff *skb;
-@@ -430,6 +447,8 @@ struct bgmac {
- 
- 	struct device *dev;
- 	struct device *dma_dev;
-+	u32 feature_flags;
-+
- 	struct net_device *net_dev;
- 	struct napi_struct napi;
- 	struct mii_bus *mii_bus;

File diff suppressed because it is too large
+ 0 - 1260
target/linux/generic/patches-4.4/071-v4.8-0005-net-ethernet-bgmac-Add-platform-device-support.patch


+ 0 - 26
target/linux/generic/patches-4.4/071-v4.8-0006-net-ethernet-bgmac-Fix-return-value-check-in-bgmac_p.patch

@@ -1,26 +0,0 @@
-From 12c2e32f14da857b58af281b029d4549d24c3292 Mon Sep 17 00:00:00 2001
-From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
-Date: Tue, 12 Jul 2016 00:17:28 +0000
-Subject: [PATCH] net: ethernet: bgmac: Fix return value check in bgmac_probe()
-
-In case of error, the function devm_ioremap_resource() returns ERR_PTR()
-and never returns NULL. The NULL test in the return value check should be
-replaced with IS_ERR().
-
-Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac-platform.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac-platform.c
-+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
-@@ -141,7 +141,7 @@ static int bgmac_probe(struct platform_d
- 	}
- 
- 	bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
--	if (!bgmac->plat.idm_base) {
-+	if (IS_ERR(bgmac->plat.idm_base)) {
- 		dev_err(&pdev->dev, "Unable to map idm resource\n");
- 		return PTR_ERR(bgmac->plat.idm_base);
- 	}

+ 0 - 42
target/linux/generic/patches-4.4/071-v4.8-0007-net-ethernet-bgmac-Remove-redundant-dev_err-call-in-.patch

@@ -1,42 +0,0 @@
-From ce3a380dddd0cb16cb3d8d947b69657d7646c121 Mon Sep 17 00:00:00 2001
-From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
-Date: Wed, 13 Jul 2016 12:46:57 +0000
-Subject: [PATCH] net: ethernet: bgmac: Remove redundant dev_err call in
- bgmac_probe()
-
-There is a error message within devm_ioremap_resource
-already, so remove the dev_err call to avoid redundant
-error message.
-
-Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac-platform.c | 8 ++------
- 1 file changed, 2 insertions(+), 6 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac-platform.c
-+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
-@@ -129,10 +129,8 @@ static int bgmac_probe(struct platform_d
- 	}
- 
- 	bgmac->plat.base = devm_ioremap_resource(&pdev->dev, regs);
--	if (IS_ERR(bgmac->plat.base)) {
--		dev_err(&pdev->dev, "Unable to map base resource\n");
-+	if (IS_ERR(bgmac->plat.base))
- 		return PTR_ERR(bgmac->plat.base);
--	}
- 
- 	regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base");
- 	if (!regs) {
-@@ -141,10 +139,8 @@ static int bgmac_probe(struct platform_d
- 	}
- 
- 	bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
--	if (IS_ERR(bgmac->plat.idm_base)) {
--		dev_err(&pdev->dev, "Unable to map idm resource\n");
-+	if (IS_ERR(bgmac->plat.idm_base))
- 		return PTR_ERR(bgmac->plat.idm_base);
--	}
- 
- 	bgmac->read = platform_bgmac_read;
- 	bgmac->write = platform_bgmac_write;

+ 0 - 28
target/linux/generic/patches-4.4/071-v4.8-0009-net-bgmac-fix-reversed-check-for-MII-registration-er.patch

@@ -1,28 +0,0 @@
-From b9f63ae7ba2de2ba19137c5757c0607ce40f3ed5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Wed, 17 Aug 2016 15:37:14 +0200
-Subject: [PATCH] net: bgmac: fix reversed check for MII registration error
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It was failing on successful registration returning meaningless errors.
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Fixes: 55954f3bfdac ("net: ethernet: bgmac: move BCMA MDIO Phy code into a separate file")
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac-bcma.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
-+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
-@@ -159,7 +159,7 @@ static int bgmac_probe(struct bcma_devic
- 
- 	if (!bgmac_is_bcm4707_family(core)) {
- 		mii_bus = bcma_mdio_mii_register(core, bgmac->phyaddr);
--		if (!IS_ERR(mii_bus)) {
-+		if (IS_ERR(mii_bus)) {
- 			err = PTR_ERR(mii_bus);
- 			goto err;
- 		}

+ 0 - 161
target/linux/generic/patches-4.4/071-v4.9-0001-net-bgmac-support-Ethernet-core-on-BCM53573-SoCs.patch

@@ -1,161 +0,0 @@
-From 1cb94db3d1bfe0075bde78fb2989f17e0a8a3936 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Wed, 17 Aug 2016 23:00:30 +0200
-Subject: [PATCH] net: bgmac: support Ethernet core on BCM53573 SoCs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-BCM53573 is a new series of Broadcom's SoCs. It's based on ARM and can
-be found in two packages (versions): BCM53573 and BCM47189. It shares
-some code with the Northstar family, but also requires some new quirks.
-
-First of all there can be up to 2 Ethernet cores on this SoC. If that is
-the case, they are connected to two different switch ports allowing some
-more complex/optimized setups. It seems the second unit doesn't come
-fully configured and requires some IRQ quirk.
-
-Other than that only the first core is connected to the PHY. For the
-second one we have to register fixed PHY (similarly to the Northstar),
-otherwise generic PHY driver would get some invalid info.
-
-This has been successfully tested on Tenda AC9 (BCM47189B0).
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac-bcma.c | 19 ++++++++++++++++++-
- drivers/net/ethernet/broadcom/bgmac.c      | 25 +++++++++++++++++++++++++
- drivers/net/ethernet/broadcom/bgmac.h      | 19 +++++++++++++++++++
- include/linux/bcma/bcma.h                  |  3 +++
- include/linux/bcma/bcma_regs.h             |  1 +
- 5 files changed, 66 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
-+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
-@@ -92,6 +92,7 @@ MODULE_DEVICE_TABLE(bcma, bgmac_bcma_tbl
- /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipattach */
- static int bgmac_probe(struct bcma_device *core)
- {
-+	struct bcma_chipinfo *ci = &core->bus->chipinfo;
- 	struct ssb_sprom *sprom = &core->bus->sprom;
- 	struct mii_bus *mii_bus;
- 	struct bgmac *bgmac;
-@@ -157,7 +158,8 @@ static int bgmac_probe(struct bcma_devic
- 	dev_info(bgmac->dev, "Found PHY addr: %d%s\n", bgmac->phyaddr,
- 		 bgmac->phyaddr == BGMAC_PHY_NOREGS ? " (NOREGS)" : "");
- 
--	if (!bgmac_is_bcm4707_family(core)) {
-+	if (!bgmac_is_bcm4707_family(core) &&
-+	    !(ci->id == BCMA_CHIP_ID_BCM53573 && core->core_unit == 1)) {
- 		mii_bus = bcma_mdio_mii_register(core, bgmac->phyaddr);
- 		if (IS_ERR(mii_bus)) {
- 			err = PTR_ERR(mii_bus);
-@@ -230,6 +232,21 @@ static int bgmac_probe(struct bcma_devic
- 		bgmac->feature_flags |= BGMAC_FEAT_NO_RESET;
- 		bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
- 		break;
-+	case BCMA_CHIP_ID_BCM53573:
-+		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
-+		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
-+		if (ci->pkg == BCMA_PKG_ID_BCM47189)
-+			bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
-+		if (core->core_unit == 0) {
-+			bgmac->feature_flags |= BGMAC_FEAT_CC4_IF_SW_TYPE;
-+			if (ci->pkg == BCMA_PKG_ID_BCM47189)
-+				bgmac->feature_flags |=
-+					BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII;
-+		} else if (core->core_unit == 1) {
-+			bgmac->feature_flags |= BGMAC_FEAT_IRQ_ID_OOB_6;
-+			bgmac->feature_flags |= BGMAC_FEAT_CC7_IF_TYPE_RGMII;
-+		}
-+		break;
- 	default:
- 		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
- 		bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -943,6 +943,27 @@ static void bgmac_chip_reset(struct bgma
- 		bgmac_cco_ctl_maskset(bgmac, 1, ~(BGMAC_CHIPCTL_1_IF_TYPE_MASK |
- 						  BGMAC_CHIPCTL_1_SW_TYPE_MASK),
- 				      sw_type);
-+	} else if (bgmac->feature_flags & BGMAC_FEAT_CC4_IF_SW_TYPE) {
-+		u32 sw_type = BGMAC_CHIPCTL_4_IF_TYPE_MII |
-+			      BGMAC_CHIPCTL_4_SW_TYPE_EPHY;
-+		u8 et_swtype = 0;
-+		char buf[4];
-+
-+		if (bcm47xx_nvram_getenv("et_swtype", buf, sizeof(buf)) > 0) {
-+			if (kstrtou8(buf, 0, &et_swtype))
-+				dev_err(bgmac->dev, "Failed to parse et_swtype (%s)\n",
-+					buf);
-+			sw_type = (et_swtype & 0x0f) << 12;
-+		} else if (bgmac->feature_flags & BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII) {
-+			sw_type = BGMAC_CHIPCTL_4_IF_TYPE_RGMII |
-+				  BGMAC_CHIPCTL_4_SW_TYPE_RGMII;
-+		}
-+		bgmac_cco_ctl_maskset(bgmac, 4, ~(BGMAC_CHIPCTL_4_IF_TYPE_MASK |
-+						  BGMAC_CHIPCTL_4_SW_TYPE_MASK),
-+				      sw_type);
-+	} else if (bgmac->feature_flags & BGMAC_FEAT_CC7_IF_TYPE_RGMII) {
-+		bgmac_cco_ctl_maskset(bgmac, 7, ~BGMAC_CHIPCTL_7_IF_TYPE_MASK,
-+				      BGMAC_CHIPCTL_7_IF_TYPE_RGMII);
- 	}
- 
- 	if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
-@@ -1486,6 +1507,10 @@ int bgmac_enet_probe(struct bgmac *info)
- 	 */
- 	bgmac_clk_enable(bgmac, 0);
- 
-+	/* This seems to be fixing IRQ by assigning OOB #6 to the core */
-+	if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
-+		bgmac_idm_write(bgmac, BCMA_OOB_SEL_OUT_A30, 0x86);
-+
- 	bgmac_chip_reset(bgmac);
- 
- 	err = bgmac_dma_alloc(bgmac);
---- a/drivers/net/ethernet/broadcom/bgmac.h
-+++ b/drivers/net/ethernet/broadcom/bgmac.h
-@@ -369,6 +369,21 @@
- #define BGMAC_CHIPCTL_1_SW_TYPE_RGMII		0x000000C0
- #define BGMAC_CHIPCTL_1_RXC_DLL_BYPASS		0x00010000
- 
-+#define BGMAC_CHIPCTL_4_IF_TYPE_MASK		0x00003000
-+#define BGMAC_CHIPCTL_4_IF_TYPE_RMII		0x00000000
-+#define BGMAC_CHIPCTL_4_IF_TYPE_MII		0x00001000
-+#define BGMAC_CHIPCTL_4_IF_TYPE_RGMII		0x00002000
-+#define BGMAC_CHIPCTL_4_SW_TYPE_MASK		0x0000C000
-+#define BGMAC_CHIPCTL_4_SW_TYPE_EPHY		0x00000000
-+#define BGMAC_CHIPCTL_4_SW_TYPE_EPHYMII		0x00004000
-+#define BGMAC_CHIPCTL_4_SW_TYPE_EPHYRMII	0x00008000
-+#define BGMAC_CHIPCTL_4_SW_TYPE_RGMII		0x0000C000
-+
-+#define BGMAC_CHIPCTL_7_IF_TYPE_MASK		0x000000C0
-+#define BGMAC_CHIPCTL_7_IF_TYPE_RMII		0x00000000
-+#define BGMAC_CHIPCTL_7_IF_TYPE_MII		0x00000040
-+#define BGMAC_CHIPCTL_7_IF_TYPE_RGMII		0x00000080
-+
- #define BGMAC_WEIGHT	64
- 
- #define ETHER_MAX_LEN   1518
-@@ -390,6 +405,10 @@
- #define BGMAC_FEAT_NO_CLR_MIB		BIT(13)
- #define BGMAC_FEAT_FORCE_SPEED_2500	BIT(14)
- #define BGMAC_FEAT_CMDCFG_SR_REV4	BIT(15)
-+#define BGMAC_FEAT_IRQ_ID_OOB_6		BIT(16)
-+#define BGMAC_FEAT_CC4_IF_SW_TYPE	BIT(17)
-+#define BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII	BIT(18)
-+#define BGMAC_FEAT_CC7_IF_TYPE_RGMII	BIT(19)
- 
- struct bgmac_slot_info {
- 	union {
---- a/include/linux/bcma/bcma_regs.h
-+++ b/include/linux/bcma/bcma_regs.h
-@@ -23,6 +23,7 @@
- #define  BCMA_CLKCTLST_4328A0_HAVEALP	0x00020000 /* 4328a0 has reversed bits */
- 
- /* Agent registers (common for every core) */
-+#define BCMA_OOB_SEL_OUT_A30		0x0100
- #define BCMA_IOCTL			0x0408 /* IO control */
- #define  BCMA_IOCTL_CLK			0x0001
- #define  BCMA_IOCTL_FGC			0x0002

+ 0 - 31
target/linux/generic/patches-4.4/071-v4.9-0002-net-bgmac-make-it-clear-when-setting-interface-type-.patch

@@ -1,31 +0,0 @@
-From e2d8f646c79f26e094bfaf9b21be614d1e148a67 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Wed, 17 Aug 2016 23:11:52 +0200
-Subject: [PATCH] net: bgmac: make it clear when setting interface type to RMII
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It doesn't really change anything as BGMAC_CHIPCTL_1_IF_TYPE_RMII is
-equal to 0. It make code a bit clener, so far when reading it one could
-think we forgot to set a proper mode. It also keeps this mode code in
-sync with other ones.
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -935,7 +935,8 @@ static void bgmac_chip_reset(struct bgma
- 			et_swtype <<= 4;
- 			sw_type = et_swtype;
- 		} else if (bgmac->feature_flags & BGMAC_FEAT_SW_TYPE_EPHYRMII) {
--			sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII;
-+			sw_type = BGMAC_CHIPCTL_1_IF_TYPE_RMII |
-+				  BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII;
- 		} else if (bgmac->feature_flags & BGMAC_FEAT_SW_TYPE_RGMII) {
- 			sw_type = BGMAC_CHIPCTL_1_IF_TYPE_RGMII |
- 				  BGMAC_CHIPCTL_1_SW_TYPE_RGMII;

+ 0 - 33
target/linux/generic/patches-4.4/071-v4.9-0003-net-bgmac-Fix-errant-feature-flag-check.patch

@@ -1,33 +0,0 @@
-From 4af1474e6198b10fee7bb20e81f7e033ad1b586c Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@broadcom.com>
-Date: Wed, 5 Oct 2016 15:36:49 -0400
-Subject: [PATCH] net: bgmac: Fix errant feature flag check
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During the conversion to the feature flags, a check against
-ci->id != BCMA_CHIP_ID_BCM47162
-became
-bgmac->feature_flags & BGMAC_FEAT_CLKCTLS
-instead of
-!(bgmac->feature_flags & BGMAC_FEAT_CLKCTLS)
-
-Reported-by: Rafał Miłecki <zajec5@gmail.com>
-Signed-off-by: Jon Mason <jon.mason@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -1049,7 +1049,7 @@ static void bgmac_enable(struct bgmac *b
- 
- 	mode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) & BGMAC_DS_MM_MASK) >>
- 		BGMAC_DS_MM_SHIFT;
--	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST || mode != 0)
-+	if (!(bgmac->feature_flags & BGMAC_FEAT_CLKCTLST) || mode != 0)
- 		bgmac_set(bgmac, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT);
- 	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST && mode == 2)
- 		bgmac_cco_ctl_maskset(bgmac, 1, ~0,

+ 0 - 25
target/linux/generic/patches-4.4/071-v4.9-0004-net-bgmac-fix-spelling-mistake-connecton-connection.patch

@@ -1,25 +0,0 @@
-From c121f72a66c5f92fbe2fc53baa274eef39875cec Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Mon, 24 Oct 2016 23:46:18 +0100
-Subject: [PATCH] net: bgmac: fix spelling mistake: "connecton" -> "connection"
-
-trivial fix to spelling mistake in dev_err message
-
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Acked-by: Jon Mason <jon.mason@broadcom.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -1468,7 +1468,7 @@ static int bgmac_phy_connect(struct bgma
- 	phy_dev = phy_connect(bgmac->net_dev, bus_id, &bgmac_adjust_link,
- 			      PHY_INTERFACE_MODE_MII);
- 	if (IS_ERR(phy_dev)) {
--		dev_err(bgmac->dev, "PHY connecton failed\n");
-+		dev_err(bgmac->dev, "PHY connection failed\n");
- 		return PTR_ERR(phy_dev);
- 	}
- 

+ 0 - 35
target/linux/generic/patches-4.4/071-v4.9-0005-net-bgmac-fix-reversed-checks-for-clock-control-flag.patch

@@ -1,35 +0,0 @@
-From cdb26d3387f0cdf7b2a2eea581385173547ef21f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Mon, 7 Nov 2016 13:53:27 +0100
-Subject: [PATCH] net: bgmac: fix reversed checks for clock control flag
-
-This fixes regression introduced by patch adding feature flags. It was
-already reported and patch followed (it got accepted) but it appears it
-was incorrect. Instead of fixing reversed condition it broke a good one.
-
-This patch was verified to actually fix SoC hanges caused by bgmac on
-BCM47186B0.
-
-Fixes: db791eb2970b ("net: ethernet: bgmac: convert to feature flags")
-Fixes: 4af1474e6198 ("net: bgmac: Fix errant feature flag check")
-Cc: Jon Mason <jon.mason@broadcom.com>
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/broadcom/bgmac.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bgmac.c
-+++ b/drivers/net/ethernet/broadcom/bgmac.c
-@@ -1049,9 +1049,9 @@ static void bgmac_enable(struct bgmac *b
- 
- 	mode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) & BGMAC_DS_MM_MASK) >>
- 		BGMAC_DS_MM_SHIFT;
--	if (!(bgmac->feature_flags & BGMAC_FEAT_CLKCTLST) || mode != 0)
-+	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST || mode != 0)
- 		bgmac_set(bgmac, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT);
--	if (bgmac->feature_flags & BGMAC_FEAT_CLKCTLST && mode == 2)
-+	if (!(bgmac->feature_flags & BGMAC_FEAT_CLKCTLST) && mode == 2)
- 		bgmac_cco_ctl_maskset(bgmac, 1, ~0,
- 				      BGMAC_CHIPCTL_1_RXC_DLL_BYPASS);
- 

+ 28 - 0
target/linux/generic/patches-4.4/087-Revert-led-core-Fix-brightness-setting-when-setting-.patch

@@ -0,0 +1,28 @@
+From 4b98deaa353d8f7af3f7543d0b59497fe1275599 Mon Sep 17 00:00:00 2001
+Message-Id: <4b98deaa353d8f7af3f7543d0b59497