kernel: update kernel 4.9 to 4.9.29
- Refresh all patches - Removed upstreamed - Adapted 1 Compile tested on: bcm53xx, cns3xxx, imx6, lantiq Run tested on: cns3xxx & imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com> [update from 4.9.28 to 4.9.29] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
committed by
Hauke Mehrtens
parent
088e28772c
commit
e842e16f45
@@ -1,75 +0,0 @@
|
||||
From 09f3510fb70a46c8921f2cf4a90dbcae460a6820 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sat, 29 Oct 2016 13:12:29 +0200
|
||||
Subject: [PATCH] ARM: BCM5301X: Add back handler ignoring external imprecise
|
||||
aborts
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since early BCM5301X days we got abort handler that was removed by
|
||||
commit 937b12306ea79 ("ARM: BCM5301X: remove workaround imprecise abort
|
||||
fault handler"). It assumed we need to deal only with pending aborts
|
||||
left by the bootloader. Unfortunately this isn't true for BCM5301X.
|
||||
|
||||
When probing PCI config space (device enumeration) it is expected to
|
||||
have master aborts on the PCI bus. Most bridges don't forward (or they
|
||||
allow disabling it) these errors onto the AXI/AMBA bus but not the
|
||||
Northstar (BCM5301X) one.
|
||||
|
||||
iProc PCIe controller on Northstar seems to be some older one, without
|
||||
a control register for errors forwarding. It means we need to workaround
|
||||
this at platform level. All newer platforms are not affected by this
|
||||
issue.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm/mach-bcm/bcm_5301x.c | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
--- a/arch/arm/mach-bcm/bcm_5301x.c
|
||||
+++ b/arch/arm/mach-bcm/bcm_5301x.c
|
||||
@@ -9,14 +9,42 @@
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
+#include <asm/siginfo.h>
|
||||
+#include <asm/signal.h>
|
||||
+
|
||||
+#define FSR_EXTERNAL (1 << 12)
|
||||
+#define FSR_READ (0 << 10)
|
||||
+#define FSR_IMPRECISE 0x0406
|
||||
|
||||
static const char *const bcm5301x_dt_compat[] __initconst = {
|
||||
"brcm,bcm4708",
|
||||
NULL,
|
||||
};
|
||||
|
||||
+static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr,
|
||||
+ struct pt_regs *regs)
|
||||
+{
|
||||
+ /*
|
||||
+ * We want to ignore aborts forwarded from the PCIe bus that are
|
||||
+ * expected and shouldn't really be passed by the PCIe controller.
|
||||
+ * The biggest disadvantage is the same FSR code may be reported when
|
||||
+ * reading non-existing APB register and we shouldn't ignore that.
|
||||
+ */
|
||||
+ if (fsr == (FSR_EXTERNAL | FSR_READ | FSR_IMPRECISE))
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static void __init bcm5301x_init_early(void)
|
||||
+{
|
||||
+ hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR,
|
||||
+ "imprecise external abort");
|
||||
+}
|
||||
+
|
||||
DT_MACHINE_START(BCM5301X, "BCM5301X")
|
||||
.l2c_aux_val = 0,
|
||||
.l2c_aux_mask = ~0,
|
||||
.dt_compat = bcm5301x_dt_compat,
|
||||
+ .init_early = bcm5301x_init_early,
|
||||
MACHINE_END
|
||||
@@ -1,41 +0,0 @@
|
||||
From 0e34079cd1f674449749aafe4be07336177de90d Mon Sep 17 00:00:00 2001
|
||||
From: Jon Mason <jon.mason@broadcom.com>
|
||||
Date: Thu, 2 Mar 2017 19:21:32 -0500
|
||||
Subject: [PATCH] ARM: dts: BCM5301X: Correct GIC_PPI interrupt flags
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
GIC_PPI flags were misconfigured for the timers, resulting in errors
|
||||
like:
|
||||
[ 0.000000] GIC: PPI11 is secure or misconfigured
|
||||
|
||||
Changing them to being edge triggered corrects the issue
|
||||
|
||||
Suggested-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Jon Mason <jon.mason@broadcom.com>
|
||||
Fixes: d27509f1 ("ARM: BCM5301X: add dts files for BCM4708 SoC")
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/bcm5301x.dtsi | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm5301x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
|
||||
@@ -66,14 +66,14 @@
|
||||
timer@20200 {
|
||||
compatible = "arm,cortex-a9-global-timer";
|
||||
reg = <0x20200 0x100>;
|
||||
- interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&periph_clk>;
|
||||
};
|
||||
|
||||
local-timer@20600 {
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0x20600 0x100>;
|
||||
- interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupts = <GIC_PPI 13 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&periph_clk>;
|
||||
};
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
From 6e347b5e05ea2ac4ac467a5a1cfaebb2c7f06f80 Mon Sep 17 00:00:00 2001
|
||||
From: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Date: Thu, 9 Mar 2017 11:27:07 -0600
|
||||
Subject: [PATCH] PCI: iproc: Save host bridge window resource in struct
|
||||
iproc_pcie
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The host bridge memory window resource is inserted into the iomem_resource
|
||||
tree and cannot be deallocated until the host bridge itself is removed.
|
||||
|
||||
Previously, the window was on the stack, which meant the iomem_resource
|
||||
entry pointed into the stack and was corrupted as soon as the probe
|
||||
function returned, which caused memory corruption and errors like this:
|
||||
|
||||
pcie_iproc_bcma bcma0:8: resource collision: [mem 0x40000000-0x47ffffff] conflicts with PCIe MEM space [mem 0x40000000-0x47ffffff]
|
||||
|
||||
Move the memory window resource from the stack into struct iproc_pcie so
|
||||
its lifetime matches that of the host bridge.
|
||||
|
||||
Fixes: c3245a566400 ("PCI: iproc: Request host bridge window resources")
|
||||
Reported-and-tested-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
CC: stable@vger.kernel.org # v4.8+
|
||||
---
|
||||
drivers/pci/host/pcie-iproc-bcma.c | 24 ++++++++++++------------
|
||||
drivers/pci/host/pcie-iproc-platform.c | 19 ++++++++++---------
|
||||
drivers/pci/host/pcie-iproc.h | 1 +
|
||||
3 files changed, 23 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/drivers/pci/host/pcie-iproc-bcma.c
|
||||
+++ b/drivers/pci/host/pcie-iproc-bcma.c
|
||||
@@ -44,8 +44,7 @@ static int iproc_pcie_bcma_probe(struct
|
||||
{
|
||||
struct device *dev = &bdev->dev;
|
||||
struct iproc_pcie *pcie;
|
||||
- LIST_HEAD(res);
|
||||
- struct resource res_mem;
|
||||
+ LIST_HEAD(resources);
|
||||
int ret;
|
||||
|
||||
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
|
||||
@@ -62,22 +61,23 @@ static int iproc_pcie_bcma_probe(struct
|
||||
|
||||
pcie->base_addr = bdev->addr;
|
||||
|
||||
- res_mem.start = bdev->addr_s[0];
|
||||
- res_mem.end = bdev->addr_s[0] + SZ_128M - 1;
|
||||
- res_mem.name = "PCIe MEM space";
|
||||
- res_mem.flags = IORESOURCE_MEM;
|
||||
- pci_add_resource(&res, &res_mem);
|
||||
+ pcie->mem.start = bdev->addr_s[0];
|
||||
+ pcie->mem.end = bdev->addr_s[0] + SZ_128M - 1;
|
||||
+ pcie->mem.name = "PCIe MEM space";
|
||||
+ pcie->mem.flags = IORESOURCE_MEM;
|
||||
+ pci_add_resource(&resources, &pcie->mem);
|
||||
|
||||
pcie->map_irq = iproc_pcie_bcma_map_irq;
|
||||
|
||||
- ret = iproc_pcie_setup(pcie, &res);
|
||||
- if (ret)
|
||||
+ ret = iproc_pcie_setup(pcie, &resources);
|
||||
+ if (ret) {
|
||||
dev_err(dev, "PCIe controller setup failed\n");
|
||||
-
|
||||
- pci_free_resource_list(&res);
|
||||
+ pci_free_resource_list(&resources);
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
bcma_set_drvdata(bdev, pcie);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void iproc_pcie_bcma_remove(struct bcma_device *bdev)
|
||||
--- a/drivers/pci/host/pcie-iproc-platform.c
|
||||
+++ b/drivers/pci/host/pcie-iproc-platform.c
|
||||
@@ -46,7 +46,7 @@ static int iproc_pcie_pltfm_probe(struct
|
||||
struct device_node *np = dev->of_node;
|
||||
struct resource reg;
|
||||
resource_size_t iobase = 0;
|
||||
- LIST_HEAD(res);
|
||||
+ LIST_HEAD(resources);
|
||||
int ret;
|
||||
|
||||
of_id = of_match_device(iproc_pcie_of_match_table, dev);
|
||||
@@ -108,23 +108,24 @@ static int iproc_pcie_pltfm_probe(struct
|
||||
pcie->phy = NULL;
|
||||
}
|
||||
|
||||
- ret = of_pci_get_host_bridge_resources(np, 0, 0xff, &res, &iobase);
|
||||
+ ret = of_pci_get_host_bridge_resources(np, 0, 0xff, &resources,
|
||||
+ &iobase);
|
||||
if (ret) {
|
||||
- dev_err(dev,
|
||||
- "unable to get PCI host bridge resources\n");
|
||||
+ dev_err(dev, "unable to get PCI host bridge resources\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
pcie->map_irq = of_irq_parse_and_map_pci;
|
||||
|
||||
- ret = iproc_pcie_setup(pcie, &res);
|
||||
- if (ret)
|
||||
+ ret = iproc_pcie_setup(pcie, &resources);
|
||||
+ if (ret) {
|
||||
dev_err(dev, "PCIe controller setup failed\n");
|
||||
-
|
||||
- pci_free_resource_list(&res);
|
||||
+ pci_free_resource_list(&resources);
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
platform_set_drvdata(pdev, pcie);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int iproc_pcie_pltfm_remove(struct platform_device *pdev)
|
||||
--- a/drivers/pci/host/pcie-iproc.h
|
||||
+++ b/drivers/pci/host/pcie-iproc.h
|
||||
@@ -68,6 +68,7 @@ struct iproc_pcie {
|
||||
#ifdef CONFIG_ARM
|
||||
struct pci_sys_data sysdata;
|
||||
#endif
|
||||
+ struct resource mem;
|
||||
struct pci_bus *root_bus;
|
||||
struct phy *phy;
|
||||
int (*map_irq)(const struct pci_dev *, u8, u8);
|
||||
@@ -127,11 +127,11 @@ it on BCM4708 family.
|
||||
/*
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1657,6 +1657,7 @@ struct xhci_hcd {
|
||||
#define XHCI_SSIC_PORT_UNUSED (1 << 22)
|
||||
#define XHCI_NO_64BIT_SUPPORT (1 << 23)
|
||||
#define XHCI_MISSING_CAS (1 << 24)
|
||||
+#define XHCI_FAKE_DOORBELL (1 << 25)
|
||||
@@ -1660,6 +1660,7 @@ struct xhci_hcd {
|
||||
/* For controller with a broken Port Disable implementation */
|
||||
#define XHCI_BROKEN_PORT_PED (1 << 25)
|
||||
#define XHCI_LIMIT_ENDPOINT_INTERVAL_7 (1 << 26)
|
||||
+#define XHCI_FAKE_DOORBELL (1 << 27)
|
||||
|
||||
unsigned int num_active_eps;
|
||||
unsigned int limit_active_eps;
|
||||
/* There are two roothubs to keep track of bus suspend info for */
|
||||
|
||||
@@ -69,7 +69,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
#include <linux/clockchips.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/interrupt.h>
|
||||
@@ -513,6 +514,16 @@ arch_timer_detect_rate(void __iomem *cnt
|
||||
@@ -514,6 +515,16 @@ arch_timer_detect_rate(void __iomem *cnt
|
||||
arch_timer_rate = arch_timer_get_cntfrq();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user