LINUX_RELEASE?=1
-LINUX_VERSION-3.18 = .14
+LINUX_VERSION-3.18 = .16
-LINUX_KERNEL_MD5SUM-3.18.14 = cb6f534b83333ba52f1fed7979824a1b
+LINUX_KERNEL_MD5SUM-3.18.16 = 3b0e66fdf47b0660521d79b881eabf04
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
};
struct at803x_context {
-@@ -61,6 +71,43 @@ struct at803x_context {
+@@ -61,6 +72,43 @@ struct at803x_context {
u16 led_control;
};
/* save relevant PHY registers to private copy */
static void at803x_context_save(struct phy_device *phydev,
struct at803x_context *context)
-@@ -208,8 +255,16 @@ static int at803x_probe(struct phy_devic
+@@ -208,8 +256,16 @@ static int at803x_probe(struct phy_devic
return 0;
}
int ret;
ret = genphy_config_init(phydev);
-@@ -227,6 +282,26 @@ static int at803x_config_init(struct phy
+@@ -227,6 +283,26 @@ static int at803x_config_init(struct phy
return ret;
}
/*
* Conduct a hardware reset for AT8030 every time a link loss is
-@@ -287,6 +365,26 @@ static void at803x_link_change_notify(st
- } else {
+@@ -288,6 +366,26 @@ static void at803x_link_change_notify(st
priv->phy_reset = false;
}
-+ }
+ }
+ if (pdata->fixup_rgmii_tx_delay &&
+ phydev->speed != priv->prev_speed) {
+ switch (phydev->speed) {
+ }
+
+ priv->prev_speed = phydev->speed;
- }
++ }
}
+ static struct phy_driver at803x_driver[] = {
--- /dev/null
+++ b/include/linux/platform_data/phy-at803x.h
@@ -0,0 +1,11 @@
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
-@@ -687,6 +687,26 @@ config ATH79_MACH_OM5P
+@@ -694,6 +694,26 @@ config ATH79_MACH_OM5P
select ATH79_DEV_M25P80
select ATH79_DEV_WMAC
select SOC_AR934X
--- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile
-@@ -78,6 +78,8 @@ obj-$(CONFIG_ATH79_MACH_JA76PF) +
+@@ -78,6 +78,8 @@ obj-$(CONFIG_ATH79_MACH_JA76PF) += mach
obj-$(CONFIG_ATH79_MACH_JWAP003) += mach-jwap003.o
obj-$(CONFIG_ATH79_MACH_HORNET_UB) += mach-hornet-ub.o
obj-$(CONFIG_ATH79_MACH_MC_MAC1200R) += mach-mc-mac1200r.o
+ ATH79_MACH_MR16, /* Cisco Meraki MR16 */
ATH79_MACH_MR600V2, /* OpenMesh MR600v2 */
ATH79_MACH_MR600, /* OpenMesh MR600 */
- ATH79_MACH_MR900, /* OpenMesh MR900 */
+ ATH79_MACH_MR900, /* OpenMesh MR900 */
select SOC_AR934X
--- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile
-@@ -96,6 +96,7 @@ obj-$(CONFIG_ATH79_MACH_R6100) += mach-
+@@ -98,6 +98,7 @@ obj-$(CONFIG_ATH79_MACH_R6100) += mach-
obj-$(CONFIG_ATH79_MACH_RB4XX) += mach-rb4xx.o
obj-$(CONFIG_ATH79_MACH_RB750) += mach-rb750.o
obj-$(CONFIG_ATH79_MACH_RB91X) += mach-rb91x.o
obj-$(CONFIG_ATH79_MACH_RBSXTLITE) += mach-rbsxtlite.o
--- a/arch/mips/ath79/machtypes.h
+++ b/arch/mips/ath79/machtypes.h
-@@ -103,6 +103,7 @@ enum ath79_mach_type {
+@@ -105,6 +105,7 @@ enum ath79_mach_type {
ATH79_MACH_RB_750G_R3, /* MikroTik RouterBOARD 750GL */
ATH79_MACH_RB_751, /* MikroTik RouterBOARD 751 */
ATH79_MACH_RB_751G, /* Mikrotik RouterBOARD 751G */
--- a/arch/mips/ath79/machtypes.h
+++ b/arch/mips/ath79/machtypes.h
-@@ -169,6 +169,7 @@ enum ath79_mach_type {
+@@ -171,6 +171,7 @@ enum ath79_mach_type {
ATH79_MACH_UBNT_NANO_M, /* Ubiquiti NanoStation M */
ATH79_MACH_UBNT_NANO_M_XW, /* Ubiquiti NanoStation M XW */
ATH79_MACH_UBNT_ROCKET_M, /* Ubiquiti Rocket M */
arch/arm/mach-bcm/bcm_5301x.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
-diff --git a/arch/arm/mach-bcm/bcm_5301x.c b/arch/arm/mach-bcm/bcm_5301x.c
-index e9bcbdb..7aef927 100644
--- a/arch/arm/mach-bcm/bcm_5301x.c
+++ b/arch/arm/mach-bcm/bcm_5301x.c
@@ -18,15 +18,16 @@ static bool first_fault = true;
/* Returning non-zero causes fault display and panic */
return 0;
---
-1.8.4.5
-
14 files changed, 50 insertions(+), 6 deletions(-)
create mode 100644 arch/arm/boot/dts/bcm5301x-nand-cs0-bch8.dtsi
-diff --git a/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts b/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
-index 71cff8d..112a5a8 100644
--- a/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
+++ b/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
@@ -10,6 +10,7 @@
/ {
compatible = "asus,rt-ac56u", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts b/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
-index 8b62836..3600f56 100644
--- a/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
+++ b/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
@@ -10,6 +10,7 @@
/ {
compatible = "asus,rt-ac68u", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts b/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
-index 78e95c0..24f0ab5 100644
--- a/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
+++ b/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
@@ -10,6 +10,7 @@
/ {
compatible = "buffalo,wzr-1750dhp", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts b/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
-index 946c728..f039393 100644
--- a/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
+++ b/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
@@ -10,6 +10,7 @@
partition@0 {
label = "ubi";
reg = <0x00000000 0x08000000>;
-diff --git a/arch/arm/boot/dts/bcm4708-netgear-r6250.dts b/arch/arm/boot/dts/bcm4708-netgear-r6250.dts
-index 2ed9e57..326ce8f 100644
--- a/arch/arm/boot/dts/bcm4708-netgear-r6250.dts
+++ b/arch/arm/boot/dts/bcm4708-netgear-r6250.dts
@@ -10,6 +10,7 @@
/ {
compatible = "netgear,r6250v1", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts b/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
-index 3991042..3a94606 100644
--- a/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
+++ b/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
@@ -10,6 +10,7 @@
/ {
compatible = "netgear,r6300v2", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts b/arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts
-index 66dfb53..d6a033b 100644
--- a/arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts
+++ b/arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts
@@ -10,6 +10,7 @@
/ {
compatible = "smartrg,sr400ac", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts b/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
-index 0ee85ea..71b98cf 100644
--- a/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
+++ b/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
@@ -10,6 +10,7 @@
/ {
compatible = "asus,rt-n18u", "brcm,bcm47081", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts b/arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts
-index db9131e..bb0cb0b 100644
--- a/arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts
+++ b/arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts
@@ -10,6 +10,7 @@
/ {
compatible = "buffalo,wzr-600dhp2", "brcm,bcm47081", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts b/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
-index 7d6868a..184fd92 100644
--- a/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
+++ b/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
@@ -10,6 +10,7 @@
/ {
compatible = "buffalo,wzr-900dhp", "brcm,bcm47081", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts b/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
-index 548e93b..2a92e8d 100644
--- a/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
+++ b/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
@@ -10,6 +10,7 @@
/ {
compatible = "buffalo,wxr-1900dhp", "brcm,bcm4709", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm4709-netgear-r8000.dts b/arch/arm/boot/dts/bcm4709-netgear-r8000.dts
-index ea26dd3..446c586 100644
--- a/arch/arm/boot/dts/bcm4709-netgear-r8000.dts
+++ b/arch/arm/boot/dts/bcm4709-netgear-r8000.dts
@@ -10,6 +10,7 @@
/ {
compatible = "netgear,r8000", "brcm,bcm4709", "brcm,bcm4708";
-diff --git a/arch/arm/boot/dts/bcm5301x-nand-cs0-bch8.dtsi b/arch/arm/boot/dts/bcm5301x-nand-cs0-bch8.dtsi
-new file mode 100644
-index 0000000..d10781e
--- /dev/null
+++ b/arch/arm/boot/dts/bcm5301x-nand-cs0-bch8.dtsi
@@ -0,0 +1,24 @@
+ };
+ };
+};
-diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi
-index 78aec62..a97f631 100644
--- a/arch/arm/boot/dts/bcm5301x.dtsi
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
@@ -143,4 +143,16 @@
+ brcm,nand-has-wp;
+ };
};
---
-1.8.4.5
-
arch/arm/boot/dts/bcm5301x.dtsi | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
-diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi
-index a97f631..21fefd4 100644
--- a/arch/arm/boot/dts/bcm5301x.dtsi
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
@@ -108,6 +108,30 @@
/* USB 2.0 Controller */
<0x00021000 0 &gic GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
---
-1.8.4.5
-
2 files changed, 66 insertions(+)
create mode 100644 arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index 4802376..4e76f68 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -65,6 +65,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
bcm4709-buffalo-wxr-1900dhp.dtb \
bcm4709-netgear-r8000.dtb
dtb-$(CONFIG_ARCH_BCM_63XX) += bcm963138dvt.dtb
-diff --git a/arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts b/arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
-new file mode 100644
-index 0000000..aedf3c4
--- /dev/null
+++ b/arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
@@ -0,0 +1,65 @@
+ };
+ };
+};
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 5 -----
1 file changed, 5 deletions(-)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index cd6d0af..080587e 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
@@ -214,16 +214,11 @@ err_alloc:
/* TODO: Probably need checks here; is the core connected? */
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index 080587e..853bf9d 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
-@@ -233,7 +233,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -233,7 +233,8 @@ static int bcma_hcd_probe(struct bcma_de
/* In AI chips EHCI is addrspace 0, OHCI is 1 */
ohci_addr = dev->addr_s[0];
&& chipinfo->rev == 0)
ohci_addr = 0x18009000;
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index 853bf9d..d7ea50d 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
-@@ -225,7 +225,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -225,7 +225,8 @@ static int bcma_hcd_probe(struct bcma_de
if (dma_set_mask_and_coherent(dev->dma_dev, DMA_BIT_MASK(32)))
return -EOPNOTSUPP;
if (!usb_dev)
return -ENOMEM;
-@@ -239,10 +240,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -239,10 +240,8 @@ static int bcma_hcd_probe(struct bcma_de
ohci_addr = 0x18009000;
usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, true, ohci_addr);
usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, false, dev->addr);
if (IS_ERR(usb_dev->ehci_dev)) {
-@@ -255,8 +254,6 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -255,8 +254,6 @@ static int bcma_hcd_probe(struct bcma_de
err_unregister_ohci_dev:
platform_device_unregister(usb_dev->ohci_dev);
return err;
}
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index d7ea50d..8a38313 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
-@@ -169,7 +169,7 @@ static struct platform_device *bcma_hcd_create_pdev(struct bcma_device *dev, boo
+@@ -169,7 +169,7 @@ static struct platform_device *bcma_hcd_
{
struct platform_device *hci_dev;
struct resource hci_res[2];
memset(hci_res, 0, sizeof(hci_res));
-@@ -183,7 +183,7 @@ static struct platform_device *bcma_hcd_create_pdev(struct bcma_device *dev, boo
+@@ -183,7 +183,7 @@ static struct platform_device *bcma_hcd_
hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
"ehci-platform" , 0);
if (!hci_dev)
hci_dev->dev.parent = &dev->dev;
hci_dev->dev.dma_mask = &hci_dev->dev.coherent_dma_mask;
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 81 +++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 78 insertions(+), 3 deletions(-)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index 8a38313..983bc67 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
@@ -2,7 +2,8 @@
*
* Based on ssb-ohci driver
* Copyright 2007 Michael Buesch <m@bues.ch>
-@@ -88,7 +89,7 @@ static void bcma_hcd_4716wa(struct bcma_device *dev)
+@@ -88,7 +89,7 @@ static void bcma_hcd_4716wa(struct bcma_
}
/* based on arch/mips/brcm-boards/bcm947xx/pcibios.c */
{
u32 tmp;
-@@ -159,6 +160,70 @@ static void bcma_hcd_init_chip(struct bcma_device *dev)
+@@ -159,6 +160,70 @@ static void bcma_hcd_init_chip(struct bc
}
}
static const struct usb_ehci_pdata ehci_pdata = {
};
-@@ -230,7 +295,16 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -230,7 +295,16 @@ static int bcma_hcd_probe(struct bcma_de
if (!usb_dev)
return -ENOMEM;
/* In AI chips EHCI is addrspace 0, OHCI is 1 */
ohci_addr = dev->addr_s[0];
-@@ -299,6 +373,7 @@ static int bcma_hcd_resume(struct bcma_device *dev)
+@@ -299,6 +373,7 @@ static int bcma_hcd_resume(struct bcma_d
static const struct bcma_device_id bcma_hcd_table[] = {
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_USB20_HOST, BCMA_ANY_REV, BCMA_ANY_CLASS),
BCMA_CORETABLE_END
};
MODULE_DEVICE_TABLE(bcma, bcma_hcd_table);
---
-1.8.4.5
-
drivers/usb/host/bcma-hcd.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
-diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
-index 983bc67..a01c6ce 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
@@ -24,6 +24,8 @@
#include <linux/usb/ehci_pdriver.h>
#include <linux/usb/ohci_pdriver.h>
-@@ -224,6 +226,23 @@ static void bcma_hcd_init_chip_arm(struct bcma_device *dev)
+@@ -224,6 +226,23 @@ static void bcma_hcd_init_chip_arm(struc
}
}
static const struct usb_ehci_pdata ehci_pdata = {
};
-@@ -295,6 +314,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
+@@ -295,6 +314,8 @@ static int bcma_hcd_probe(struct bcma_de
if (!usb_dev)
return -ENOMEM;
switch (dev->id.id) {
case BCMA_CORE_NS_USB20:
bcma_hcd_init_chip_arm(dev);
-@@ -347,6 +368,7 @@ static void bcma_hcd_remove(struct bcma_device *dev)
+@@ -347,6 +368,7 @@ static void bcma_hcd_remove(struct bcma_
static void bcma_hcd_shutdown(struct bcma_device *dev)
{
bcma_core_disable(dev, 0);
}
-@@ -354,6 +376,7 @@ static void bcma_hcd_shutdown(struct bcma_device *dev)
+@@ -354,6 +376,7 @@ static void bcma_hcd_shutdown(struct bcm
static int bcma_hcd_suspend(struct bcma_device *dev)
{
bcma_core_disable(dev, 0);
return 0;
-@@ -361,6 +384,7 @@ static int bcma_hcd_suspend(struct bcma_device *dev)
+@@ -361,6 +384,7 @@ static int bcma_hcd_suspend(struct bcma_
static int bcma_hcd_resume(struct bcma_device *dev)
{
bcma_core_enable(dev, 0);
return 0;
---
-1.8.4.5
-
arch/arm/boot/dts/bcm5301x.dtsi | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi
-index 21fefd4..58515f8 100644
--- a/arch/arm/boot/dts/bcm5301x.dtsi
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
@@ -95,6 +95,10 @@
axi@18000000 {
compatible = "brcm,bus-axi";
reg = <0x18000000 0x1000>;
---
-1.8.4.5
-
arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts | 12 ++++++++++++
1 file changed, 12 insertions(+)
-diff --git a/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts b/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
-index b84a503..413978a 100644
--- a/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
+++ b/arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
@@ -34,6 +34,18 @@
nand: nand@18028000 {
nandcs@0 {
partition@0 {
---
-1.8.4.5
-
arch/mips/bcm47xx/nvram.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
-diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c
-index ba632ff..dee1c32 100644
--- a/arch/mips/bcm47xx/nvram.c
+++ b/arch/mips/bcm47xx/nvram.c
@@ -98,7 +98,7 @@ found:
}
err = mtd_read(mtd, 0, len, &bytes_read, dst);
---
-1.8.4.5
-
arch/mips/bcm47xx/nvram.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
-diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c
-index dee1c32..95d028c 100644
--- a/arch/mips/bcm47xx/nvram.c
+++ b/arch/mips/bcm47xx/nvram.c
@@ -171,7 +171,7 @@ static int nvram_init(void)
if (!name)
return -EINVAL;
-@@ -184,19 +184,16 @@ int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len)
+@@ -184,19 +184,16 @@ int bcm47xx_nvram_getenv(const char *nam
/* Look for name=value and return value */
var = &nvram_buf[sizeof(struct nvram_header)];
}
return -ENOENT;
}
---
-1.8.4.5
-
include/linux/ssb/ssb.h | 5 ++++-
2 files changed, 7 insertions(+), 1 deletion(-)
-diff --git a/arch/mips/bcm47xx/sprom.c b/arch/mips/bcm47xx/sprom.c
-index 68ebf23..4048083 100644
--- a/arch/mips/bcm47xx/sprom.c
+++ b/arch/mips/bcm47xx/sprom.c
-@@ -201,6 +201,9 @@ static void bcm47xx_sprom_fill_auto(struct ssb_sprom *sprom,
+@@ -201,6 +201,9 @@ static void bcm47xx_sprom_fill_auto(stru
bool fb = fallback;
ENTRY(0xfffffffe, u16, pre, "boardrev", board_rev, 0, true);
include/linux/ssb/ssb.h | 3 +++
2 files changed, 9 insertions(+)
-diff --git a/arch/mips/bcm47xx/sprom.c b/arch/mips/bcm47xx/sprom.c
-index 4048083..92a6c9d 100644
--- a/arch/mips/bcm47xx/sprom.c
+++ b/arch/mips/bcm47xx/sprom.c
@@ -531,6 +531,8 @@ static int mac_addr_used = 2;
nvram_read_macaddr(prefix, "et0macaddr", sprom->et0mac, fallback);
nvram_read_u8(prefix, NULL, "et0mdcport", &sprom->et0mdcport, 0,
fallback);
-@@ -543,6 +545,10 @@ static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom,
+@@ -543,6 +545,10 @@ static void bcm47xx_fill_sprom_ethernet(
nvram_read_u8(prefix, NULL, "et1phyaddr", &sprom->et1phyaddr, 0,
fallback);
arch/mips/include/asm/mach-bcm47xx/bcm47xx.h | 4 ---
3 files changed, 22 insertions(+), 29 deletions(-)
-diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
-index 82ff9fd..98c075f 100644
--- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c
@@ -206,9 +206,6 @@ void __init bcm47xx_bus_setup(void)
}
#endif
-diff --git a/arch/mips/bcm47xx/sprom.c b/arch/mips/bcm47xx/sprom.c
-index 92a6c9d..b0d62e7 100644
--- a/arch/mips/bcm47xx/sprom.c
+++ b/arch/mips/bcm47xx/sprom.c
-@@ -640,19 +640,6 @@ void bcm47xx_fill_ssb_boardinfo(struct ssb_boardinfo *boardinfo,
+@@ -640,19 +640,6 @@ void bcm47xx_fill_ssb_boardinfo(struct s
}
#endif
#if defined(CONFIG_BCM47XX_SSB)
static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out)
{
-@@ -707,33 +694,46 @@ static void bcm47xx_sprom_apply_prefix_alias(char *prefix, size_t prefix_size)
+@@ -707,33 +694,46 @@ static void bcm47xx_sprom_apply_prefix_a
static int bcm47xx_get_sprom_bcma(struct bcma_bus *bus, struct ssb_sprom *out)
{
}
#endif
-diff --git a/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h b/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h
-index 8ed77f6..1461c10 100644
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h
-@@ -52,10 +52,6 @@ void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix,
+@@ -52,10 +52,6 @@ void bcm47xx_fill_sprom(struct ssb_sprom
void bcm47xx_fill_ssb_boardinfo(struct ssb_boardinfo *boardinfo,
const char *prefix);
#endif
void bcm47xx_set_system_type(u16 chip_id);
---
-1.8.4.5
-
arch/mips/mm/tlb-r4k.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
-diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
-index ab698ba..135a540 100644
--- a/arch/mips/bcm47xx/prom.c
+++ b/arch/mips/bcm47xx/prom.c
@@ -126,7 +126,7 @@ void __init prom_free_prom_memory(void)
{
write_c0_pagemask(PM_DEFAULT_MASK);
write_c0_wired(0);
-diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
-index 7d56686..832e216 100644
--- a/arch/mips/include/asm/pgtable-32.h
+++ b/arch/mips/include/asm/pgtable-32.h
@@ -18,7 +18,7 @@
/*
* - add_temporary_entry() add a temporary TLB entry. We use TLB entries
-diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
-index 08318ec..5037d58 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
-@@ -411,7 +411,7 @@ int __init has_transparent_hugepage(void)
+@@ -411,7 +411,7 @@ int __init has_transparent_hugepage(void
* lifetime of the system
*/
__init int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
unsigned long entryhi, unsigned long pagemask)
---
-1.8.4.5
-
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 2 ++
4 files changed, 28 insertions(+)
-diff --git a/arch/mips/bcm47xx/board.c b/arch/mips/bcm47xx/board.c
-index bd56415..a88975a 100644
--- a/arch/mips/bcm47xx/board.c
+++ b/arch/mips/bcm47xx/board.c
-@@ -149,6 +149,7 @@ struct bcm47xx_board_type_list2 bcm47xx_board_list_boot_hw[] __initconst = {
+@@ -149,6 +149,7 @@ struct bcm47xx_board_type_list2 bcm47xx_
/* board_id */
static const
struct bcm47xx_board_type_list1 bcm47xx_board_list_board_id[] __initconst = {
{{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614 V8"}, "U12H072T00_NETGEAR"},
{{BCM47XX_BOARD_NETGEAR_WGR614V9, "Netgear WGR614 V9"}, "U12H094T00_NETGEAR"},
{{BCM47XX_BOARD_NETGEAR_WGR614_V10, "Netgear WGR614 V10"}, "U12H139T01_NETGEAR"},
-diff --git a/arch/mips/bcm47xx/buttons.c b/arch/mips/bcm47xx/buttons.c
-index 276276a..08a4abf 100644
--- a/arch/mips/bcm47xx/buttons.c
+++ b/arch/mips/bcm47xx/buttons.c
-@@ -299,6 +299,13 @@ bcm47xx_buttons_linksys_wrtsl54gs[] __initconst = {
+@@ -299,6 +299,13 @@ bcm47xx_buttons_linksys_wrtsl54gs[] __in
BCM47XX_GPIO_KEY(6, KEY_RESTART),
};
/* Microsoft */
static const struct gpio_keys_button
-@@ -555,6 +562,10 @@ int __init bcm47xx_buttons_register(void)
+@@ -555,6 +562,10 @@ int __init bcm47xx_buttons_register(void
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs);
break;
case BCM47XX_BOARD_MICROSOFT_MN700:
err = bcm47xx_copy_bdata(bcm47xx_buttons_microsoft_nm700);
break;
-diff --git a/arch/mips/bcm47xx/leds.c b/arch/mips/bcm47xx/leds.c
-index 0e4ade3..d20ae63 100644
--- a/arch/mips/bcm47xx/leds.c
+++ b/arch/mips/bcm47xx/leds.c
-@@ -370,6 +370,16 @@ bcm47xx_leds_linksys_wrtsl54gs[] __initconst = {
+@@ -370,6 +370,16 @@ bcm47xx_leds_linksys_wrtsl54gs[] __initc
BCM47XX_GPIO_LED(7, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF),
};
case BCM47XX_BOARD_MICROSOFT_MN700:
bcm47xx_set_pdata(bcm47xx_leds_microsoft_nm700);
break;
-diff --git a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
-index c41d1dc..2afb840 100644
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
@@ -80,6 +80,8 @@ enum bcm47xx_board {
BCM47XX_BOARD_MICROSOFT_MN700,
BCM47XX_BOARD_MOTOROLA_WE800G,
---
-1.8.4.5
-
include/linux/bcm47xx_nvram.h | 15 +++++++++++
2 files changed, 60 insertions(+), 15 deletions(-)
-diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c
-index 95d028c..2ed762e 100644
--- a/arch/mips/bcm47xx/nvram.c
+++ b/arch/mips/bcm47xx/nvram.c
-@@ -94,17 +94,22 @@ static int nvram_find_and_copy(void __iomem *iobase, u32 lim)
+@@ -94,17 +94,22 @@ static int nvram_find_and_copy(void __io
return -ENXIO;
found:
return 0;
}
#endif
-@@ -219,3 +226,26 @@ int bcm47xx_nvram_gpio_pin(const char *name)
+@@ -219,3 +226,26 @@ int bcm47xx_nvram_gpio_pin(const char *n
return -ENOENT;
}
EXPORT_SYMBOL(bcm47xx_nvram_gpio_pin);
+ return nvram;
+}
+EXPORT_SYMBOL(bcm47xx_nvram_get_contents);
-diff --git a/include/linux/bcm47xx_nvram.h b/include/linux/bcm47xx_nvram.h
-index b12b07e..c73927c 100644
--- a/include/linux/bcm47xx_nvram.h
+++ b/include/linux/bcm47xx_nvram.h
@@ -10,11 +10,17 @@
#else
static inline int bcm47xx_nvram_init_from_mem(u32 base, u32 lim)
{
-@@ -29,6 +35,15 @@ static inline int bcm47xx_nvram_gpio_pin(const char *name)
+@@ -29,6 +35,15 @@ static inline int bcm47xx_nvram_gpio_pin
{
return -ENOTSUPP;
};
#endif
#endif /* __BCM47XX_NVRAM_H */
---
-1.8.4.5
-
arch/mips/bcm47xx/nvram.c | 37 ++++++++++++++++---------------------
1 file changed, 16 insertions(+), 21 deletions(-)
-diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c
-index 2ed762e..9ccdce8 100644
--- a/arch/mips/bcm47xx/nvram.c
+++ b/arch/mips/bcm47xx/nvram.c
@@ -35,6 +35,7 @@ struct nvram_header {
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
static u32 find_nvram_size(void __iomem *end)
-@@ -60,7 +61,7 @@ static int nvram_find_and_copy(void __iomem *iobase, u32 lim)
+@@ -60,7 +61,7 @@ static int nvram_find_and_copy(void __io
u32 *src, *dst;
u32 size;
}
#endif
-@@ -183,7 +180,7 @@ int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len)
+@@ -183,7 +180,7 @@ int bcm47xx_nvram_getenv(const char *nam
if (!name)
return -EINVAL;
err = nvram_init();
if (err)
return err;
-@@ -231,16 +228,14 @@ char *bcm47xx_nvram_get_contents(size_t *nvram_size)
+@@ -231,16 +228,14 @@ char *bcm47xx_nvram_get_contents(size_t
{
int err;
char *nvram;
nvram = vmalloc(*nvram_size);
if (!nvram)
return NULL;
---
-1.8.4.5
-
arch/mips/bcm47xx/Kconfig | 1 -
1 file changed, 1 deletion(-)
-diff --git a/arch/mips/bcm47xx/Kconfig b/arch/mips/bcm47xx/Kconfig
-index fc21d36..51ed599 100644
--- a/arch/mips/bcm47xx/Kconfig
+++ b/arch/mips/bcm47xx/Kconfig
@@ -25,7 +25,6 @@ config BCM47XX_BCMA
select BCMA_DRIVER_PCI_HOSTMODE if PCI
select BCMA_DRIVER_GPIO
default y
---
-1.8.4.5
-
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1928,6 +1928,53 @@
-
- .spis = DGND3700v1_3800B_spi_devices,
+@@ -1930,6 +1930,53 @@ static struct board_info __initdata boar
.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
-+};
-+
+ };
+
+static struct board_info __initdata board_HG655b = {
+ .name = "HW65x",
+ .expected_cpu_id = 0x6368,
+ },
+ },
+ },
- };
-
++};
++
static struct sprom_fixup __initdata vr3025u_fixups[] = {
-@@ -2380,6 +2427,7 @@
+ { .offset = 97, .value = 0xfeb3 },
+ { .offset = 98, .value = 0x1618 },
+@@ -2380,6 +2427,7 @@ static const struct board_info __initcon
&board_96368mvwg,
&board_96368mvngr,
&board_DGND3700v1_3800B,
&board_P870HW51A_V2,
&board_VR3025u,
&board_VR3025un,
-@@ -2483,6 +2531,7 @@
+@@ -2483,6 +2531,7 @@ static struct of_device_id const bcm963x
{ .compatible = "comtrend,vr-3025u", .data = &board_VR3025u, },
{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -300,6 +300,9 @@ int ovl_copy_up_one(struct dentry *paren
- struct cred *override_cred;
- char *link = NULL;
-
+ struct cred *override_cred;
+ char *link = NULL;
+
+ if (WARN_ON(!workdir))
+ return -EROFS;
+
- ovl_path_upper(parent, &parentpath);
- upperdir = parentpath.dentry;
-
+ ovl_path_upper(parent, &parentpath);
+ upperdir = parentpath.dentry;
+
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -222,6 +222,9 @@ static struct dentry *ovl_clear_empty(st
- struct kstat stat;
- int err;
-
+ struct kstat stat;
+ int err;
+
+ if (WARN_ON(!workdir))
+ return ERR_PTR(-EROFS);
+
- err = ovl_lock_rename_workdir(workdir, upperdir);
- if (err)
- goto out;
+ err = ovl_lock_rename_workdir(workdir, upperdir);
+ if (err)
+ goto out;
@@ -322,6 +325,9 @@ static int ovl_create_over_whiteout(stru
- struct dentry *newdentry;
- int err;
-
+ struct dentry *newdentry;
+ int err;
+
+ if (WARN_ON(!workdir))
+ return -EROFS;
+
- err = ovl_lock_rename_workdir(workdir, upperdir);
- if (err)
- goto out;
+ err = ovl_lock_rename_workdir(workdir, upperdir);
+ if (err)
+ goto out;
@@ -506,6 +512,9 @@ static int ovl_remove_and_whiteout(struc
- struct dentry *opaquedir = NULL;
- int err;
-
+ struct dentry *opaquedir = NULL;
+ int err;
+
+ if (WARN_ON(!workdir))
+ return -EROFS;
+
- if (is_dir) {
- opaquedir = ovl_check_empty_and_clear(dentry);
- err = PTR_ERR(opaquedir);
+ if (is_dir) {
+ opaquedir = ovl_check_empty_and_clear(dentry);
+ err = PTR_ERR(opaquedir);
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -740,9 +740,15 @@ static int ovl_fill_super(struct super_b
- ufs->workdir = ovl_workdir_create(ufs->upper_mnt, workpath.dentry);
- err = PTR_ERR(ufs->workdir);
- if (IS_ERR(ufs->workdir)) {
+ ufs->workdir = ovl_workdir_create(ufs->upper_mnt, workpath.dentry);
+ err = PTR_ERR(ufs->workdir);
+ if (IS_ERR(ufs->workdir)) {
- pr_err("overlayfs: failed to create directory %s/%s\n",
- ufs->config.workdir, OVL_WORKDIR_NAME);
- goto out_put_lower_mnt;
+ ufs->config.workdir, OVL_WORKDIR_NAME);
+ goto out_put_lower_mnt;
+ }
- }
-
- /*
+ }
+
+ /*
{USB_DEVICE(0x0af0, 0xd155)},
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
-@@ -1323,6 +1323,12 @@ UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0
+@@ -1330,6 +1330,12 @@ UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
0 ),
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -862,6 +865,12 @@ struct ata_port {
+@@ -871,6 +874,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
create mode 100644 Documentation/devicetree/bindings/mfd/qcom-rpm.txt
create mode 100644 include/dt-bindings/mfd/qcom-rpm.h
-diff --git a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
-new file mode 100644
-index 0000000..85e3198
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
@@ -0,0 +1,70 @@
+ #size-cells = <0>;
+ };
+
-diff --git a/include/dt-bindings/mfd/qcom-rpm.h b/include/dt-bindings/mfd/qcom-rpm.h
-new file mode 100644
-index 0000000..388a6f3
--- /dev/null
+++ b/include/dt-bindings/mfd/qcom-rpm.h
@@ -0,0 +1,154 @@
+#define QCOM_RPM_FORCE_MODE_BYPASS 4
+
+#endif
---
-2.1.4
-
if (ltq_pci_plat_arch_init)
return ltq_pci_plat_arch_init(dev);
-@@ -25,5 +31,10 @@
+@@ -25,5 +31,10 @@ int pcibios_plat_dev_init(struct pci_dev
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{
-int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name)
{
+ struct gpio_chip *chip;
unsigned long flags;
- int status;
-@@ -557,6 +557,8 @@ int gpiod_export(struct gpio_desc *desc,
+@@ -566,6 +566,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (desc->chip->names && desc->chip->names[offset])
ioname = desc->chip->names[offset];
dev = device_create_with_groups(&gpio_class, desc->chip->dev,
MKDEV(0, 0), desc, gpio_groups,
-@@ -593,6 +595,12 @@ fail_unlock:
+@@ -602,6 +604,12 @@ fail_unlock:
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}
Acked-by: John Crispin <blogic@openwrt.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-diff --git a/drivers/gpio/gpio-stp-xway.c b/drivers/gpio/gpio-stp-xway.c
-index 202361e..6d4148f 100644
--- a/drivers/gpio/gpio-stp-xway.c
+++ b/drivers/gpio/gpio-stp-xway.c
@@ -58,7 +58,7 @@
#include "ifxmips_pcie.h"
#include "ifxmips_pcie_reg.h"
-@@ -1048,7 +1050,7 @@ pcie_rc_initialize(int pcie_port)
- extern int (*ltq_pci_plat_arch_init)(struct pci_dev *dev);
- extern int (*ltq_pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
+@@ -1045,7 +1047,7 @@ pcie_rc_initialize(int pcie_port)
+ return 0;
+ }
-static int __init ifx_pcie_bios_init(void)
+static int __init ifx_pcie_bios_probe(struct platform_device *pdev)
{
void __iomem *io_map_base;
int pcie_port;
-@@ -1090,6 +1092,30 @@ static int __init ifx_pcie_bios_init(voi
+@@ -1083,6 +1085,30 @@ static int __init ifx_pcie_bios_init(voi
return 0;
}
marvell,function = "gpio";
--- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
+++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
-@@ -77,7 +77,7 @@
+@@ -81,7 +81,7 @@
serial@12100 {
status = "okay";
};
+};
--- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
+++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
-@@ -77,12 +77,7 @@
+@@ -81,12 +81,7 @@
serial@12100 {
status = "okay";
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
-@@ -187,3 +182,10 @@
+@@ -191,3 +186,10 @@
};
};
};
+++ /dev/null
-This patch is a partial backport of commit ef01c6c36bb8 ("ARM: mvebu:
-remove Armada 375 Z1 workaround for I/O coherency"). This commit was
-merged in v3.19, so kernel versions later than v3.19 are not affected
-by the problem that this commit fixes.
-
-It does not make a lot of sense to backport this commit entirely,
-since it is mainly removing some no longer useful code. However, this
-commit is also making sure that the bus_register_notifier that
-register the custom DMA operations that should be used for HW I/O
-coherency does not get registered when said HW I/O coherency is not
-enabled.
-
-This is particularly critical since we have decided to disable HW I/O
-coherency completely in all kernels < 4.0, to be on the safe side,
-while experimenting a new implementation of the HW I/O coherency in >=
-4.0.
-
-Without this commit, kernels earlier than 3.18 have the custom DMA
-operations normally used for HW I/O coherency registered (they don't
-do cache maintenance operations), while HW I/O coherency is
-disabled. It essentially causes every DMA transfer to transfer
-garbage.
-
-The issue fixed by this commit was introduced by 5ab5afd8ba83 ("ARM:
-mvebu: implement Armada 375 coherency workaround"), but it was not
-visible until now since it didn't cause any problem when HW I/O
-coherency is enabled.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Cc: <stable@vger.kernel.org> v3.16..v3.18
----
- arch/arm/mach-mvebu/coherency.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
---- a/arch/arm/mach-mvebu/coherency.c
-+++ b/arch/arm/mach-mvebu/coherency.c
-@@ -391,8 +391,9 @@ static int __init coherency_late_init(vo
- armada_375_coherency_init_wa();
- }
-
-- bus_register_notifier(&platform_bus_type,
-- &mvebu_hwcc_nb);
-+ if (coherency_available())
-+ bus_register_notifier(&platform_bus_type,
-+ &mvebu_hwcc_nb);
-
- return 0;
- }
--- a/arch/arm/boot/dts/imx23-olinuxino.dts
+++ b/arch/arm/boot/dts/imx23-olinuxino.dts
-@@ -88,6 +88,25 @@
+@@ -89,6 +89,25 @@
usbphy0: usbphy@8007c000 {
status = "okay";
};
};
};
-@@ -125,4 +144,10 @@
- gpios = <&gpio2 1 1>;
+@@ -127,4 +146,10 @@
+ gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
};
};
+
status = "disabled";
--- a/arch/arm/boot/dts/imx23-olinuxino.dts
+++ b/arch/arm/boot/dts/imx23-olinuxino.dts
-@@ -73,6 +73,12 @@
+@@ -74,6 +74,12 @@
status = "okay";
};
duart: serial@80070000 {
pinctrl-names = "default";
pinctrl-0 = <&duart_pins_a>;
-@@ -88,7 +94,7 @@
+@@ -89,7 +95,7 @@
usbphy0: usbphy@8007c000 {
status = "okay";
};
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -891,6 +891,8 @@ struct ata_port_operations {
+@@ -900,6 +900,8 @@ struct ata_port_operations {
void (*qc_prep)(struct ata_queued_cmd *qc);
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
/*
* Configuration and exception handling
-@@ -981,6 +983,9 @@ struct ata_port_operations {
+@@ -990,6 +992,9 @@ struct ata_port_operations {
void (*phy_reset)(struct ata_port *ap);
void (*eng_timeout)(struct ata_port *ap);
-int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name)
{
+ struct gpio_chip *chip;
unsigned long flags;
- int status;
-@@ -557,6 +557,8 @@ int gpiod_export(struct gpio_desc *desc,
+@@ -566,6 +566,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (desc->chip->names && desc->chip->names[offset])
ioname = desc->chip->names[offset];
dev = device_create_with_groups(&gpio_class, desc->chip->dev,
MKDEV(0, 0), desc, gpio_groups,
-@@ -593,6 +595,12 @@ fail_unlock:
+@@ -602,6 +604,12 @@ fail_unlock:
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}
return 1;
}
-@@ -2805,6 +2809,7 @@ static int prepare_ring(struct xhci_hcd
+@@ -2810,6 +2814,7 @@ static int prepare_ring(struct xhci_hcd
next = ring->enqueue;
while (last_trb(xhci, ring, ring->enq_seg, next)) {
/* If we're not dealing with 0.95 hardware or isoc rings
* on AMD 0.96 host, clear the chain bit.
*/
-@@ -2814,6 +2819,9 @@ static int prepare_ring(struct xhci_hcd
+@@ -2819,6 +2824,9 @@ static int prepare_ring(struct xhci_hcd
next->link.control &= cpu_to_le32(~TRB_CHAIN);
else
next->link.control |= cpu_to_le32(TRB_CHAIN);
wmb();
next->link.control ^= cpu_to_le32(TRB_CYCLE);
-@@ -2944,6 +2952,9 @@ static void giveback_first_trb(struct xh
+@@ -2949,6 +2957,9 @@ static void giveback_first_trb(struct xh
start_trb->field[3] |= cpu_to_le32(start_cycle);
else
start_trb->field[3] &= cpu_to_le32(~TRB_CYCLE);
xhci_ring_ep_doorbell(xhci, slot_id, ep_index, stream_id);
}
-@@ -2999,6 +3010,29 @@ static u32 xhci_td_remainder(unsigned in
+@@ -3004,6 +3015,29 @@ static u32 xhci_td_remainder(unsigned in
return (remainder >> 10) << 17;
}
/*
* For xHCI 1.0 host controllers, TD size is the number of max packet sized
* packets remaining in the TD (*not* including this TRB).
-@@ -3136,6 +3170,7 @@ static int queue_bulk_sg_tx(struct xhci_
+@@ -3141,6 +3175,7 @@ static int queue_bulk_sg_tx(struct xhci_
}
/* Set the TRB length, TD size, and interrupter fields. */
if (xhci->hci_version < 0x100) {
remainder = xhci_td_remainder(
urb->transfer_buffer_length -
-@@ -3145,6 +3180,12 @@ static int queue_bulk_sg_tx(struct xhci_
+@@ -3150,6 +3185,12 @@ static int queue_bulk_sg_tx(struct xhci_
trb_buff_len, total_packet_count, urb,
num_trbs - 1);
}
length_field = TRB_LEN(trb_buff_len) |
remainder |
TRB_INTR_TARGET(0);
-@@ -3207,6 +3248,9 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3212,6 +3253,9 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
int running_total, trb_buff_len, ret;
unsigned int total_packet_count;
u64 addr;
if (urb->num_sgs)
return queue_bulk_sg_tx(xhci, mem_flags, urb, slot_id, ep_index);
-@@ -3232,6 +3276,25 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3237,6 +3281,25 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
running_total += TRB_MAX_BUFF_SIZE;
}
/* FIXME: this doesn't deal with URB_ZERO_PACKET - need one more */
ret = prepare_transfer(xhci, xhci->devs[slot_id],
ep_index, urb->stream_id,
-@@ -3291,6 +3354,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3296,6 +3359,7 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
field |= TRB_ISP;
/* Set the TRB length, TD size, and interrupter fields. */
if (xhci->hci_version < 0x100) {
remainder = xhci_td_remainder(
urb->transfer_buffer_length -
-@@ -3300,6 +3364,10 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3305,6 +3369,10 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
trb_buff_len, total_packet_count, urb,
num_trbs - 1);
}
length_field = TRB_LEN(trb_buff_len) |
remainder |
TRB_INTR_TARGET(0);
-@@ -3389,7 +3457,11 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3394,7 +3462,11 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
field |= 0x1;
/* xHCI 1.0 6.4.1.2.1: Transfer Type field */
if (urb->transfer_buffer_length > 0) {
if (setup->bRequestType & USB_DIR_IN)
field |= TRB_TX_TYPE(TRB_DATA_IN);
-@@ -3413,7 +3485,12 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3418,7 +3490,12 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
field = TRB_TYPE(TRB_DATA);
length_field = TRB_LEN(urb->transfer_buffer_length) |
TRB_INTR_TARGET(0);
if (urb->transfer_buffer_length > 0) {
if (setup->bRequestType & USB_DIR_IN)
-@@ -3536,6 +3613,9 @@ static int xhci_queue_isoc_tx(struct xhc
+@@ -3541,6 +3618,9 @@ static int xhci_queue_isoc_tx(struct xhc
u64 start_addr, addr;
int i, j;
bool more_trbs_coming;
ep_ring = xhci->devs[slot_id]->eps[ep_index].ring;
-@@ -3549,6 +3629,21 @@ static int xhci_queue_isoc_tx(struct xhc
+@@ -3554,6 +3634,21 @@ static int xhci_queue_isoc_tx(struct xhc
start_trb = &ep_ring->enqueue->generic;
start_cycle = ep_ring->cycle_state;
urb_priv = urb->hcpriv;
/* Queue the first TRB, even if it's zero-length */
for (i = 0; i < num_tds; i++) {
-@@ -3620,9 +3715,13 @@ static int xhci_queue_isoc_tx(struct xhc
+@@ -3625,9 +3720,13 @@ static int xhci_queue_isoc_tx(struct xhc
} else {
td->last_trb = ep_ring->enqueue;
field |= TRB_IOC;
/* Set BEI bit except for the last td */
if (i < num_tds - 1)
field |= TRB_BEI;
-@@ -3637,6 +3736,7 @@ static int xhci_queue_isoc_tx(struct xhc
+@@ -3642,6 +3741,7 @@ static int xhci_queue_isoc_tx(struct xhc
trb_buff_len = td_remain_len;
/* Set the TRB length, TD size, & interrupter fields. */
if (xhci->hci_version < 0x100) {
remainder = xhci_td_remainder(
td_len - running_total);
-@@ -3646,6 +3746,10 @@ static int xhci_queue_isoc_tx(struct xhc
+@@ -3651,6 +3751,10 @@ static int xhci_queue_isoc_tx(struct xhc
total_packet_count, urb,
(trbs_per_td - j - 1));
}
--- a/arch/mips/ralink/Kconfig
+++ b/arch/mips/ralink/Kconfig
-@@ -13,9 +13,9 @@
+@@ -13,9 +13,9 @@ config CLKEVT_RT3352
select CEVT_SYSTICK_QUIRK
config RALINK_ILL_ACC