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:
		 Koen Vandeputte
					Koen Vandeputte
				
			
				
					committed by
					
						 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
						parent
						
							088e28772c
						
					
				
				
					commit
					e842e16f45
				
			| @@ -4,11 +4,11 @@ LINUX_RELEASE?=1 | |||||||
|  |  | ||||||
| LINUX_VERSION-3.18 = .43 | LINUX_VERSION-3.18 = .43 | ||||||
| LINUX_VERSION-4.4 = .69 | LINUX_VERSION-4.4 = .69 | ||||||
| LINUX_VERSION-4.9 = .20 | LINUX_VERSION-4.9 = .29 | ||||||
|  |  | ||||||
| LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c | LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c | ||||||
| LINUX_KERNEL_HASH-4.4.69 = 207bbc50aaf827d667a2762312bd6127887cc669ff7a7270b876e7102b8f84fa | LINUX_KERNEL_HASH-4.4.69 = 207bbc50aaf827d667a2762312bd6127887cc669ff7a7270b876e7102b8f84fa | ||||||
| LINUX_KERNEL_HASH-4.9.20 = 48660806dd32fb8dcbcf5932291bf6cc7d29240070372230871e0f56fea81341 | LINUX_KERNEL_HASH-4.9.29 = 51b6df767544e593e3161b0109a6a76be18bfc9d6cc1fb7fa92b48de6cff24cf | ||||||
|  |  | ||||||
| ifdef KERNEL_PATCHVER | ifdef KERNEL_PATCHVER | ||||||
|   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) |   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|   |   | ||||||
|  #include "xhci.h" |  #include "xhci.h" | ||||||
|  #include "xhci-trace.h" |  #include "xhci-trace.h" | ||||||
| @@ -221,6 +223,458 @@ static void xhci_pme_acpi_rtd3_enable(st | @@ -224,6 +226,458 @@ static void xhci_pme_acpi_rtd3_enable(st | ||||||
|  static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } |  static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } | ||||||
|  #endif /* CONFIG_ACPI */ |  #endif /* CONFIG_ACPI */ | ||||||
|   |   | ||||||
| @@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|  /* called during probe() after chip reset completes */ |  /* called during probe() after chip reset completes */ | ||||||
|  static int xhci_pci_setup(struct usb_hcd *hcd) |  static int xhci_pci_setup(struct usb_hcd *hcd) | ||||||
|  { |  { | ||||||
| @@ -260,6 +714,22 @@ static int xhci_pci_probe(struct pci_dev | @@ -263,6 +717,22 @@ static int xhci_pci_probe(struct pci_dev | ||||||
|  	struct hc_driver *driver; |  	struct hc_driver *driver; | ||||||
|  	struct usb_hcd *hcd; |  	struct usb_hcd *hcd; | ||||||
|   |   | ||||||
| @@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|  	driver = (struct hc_driver *)id->driver_data; |  	driver = (struct hc_driver *)id->driver_data; | ||||||
|   |   | ||||||
|  	/* Prevent runtime suspending between USB-2 and USB-3 initialization */ |  	/* Prevent runtime suspending between USB-2 and USB-3 initialization */ | ||||||
| @@ -317,6 +787,16 @@ static void xhci_pci_remove(struct pci_d | @@ -320,6 +790,16 @@ static void xhci_pci_remove(struct pci_d | ||||||
|  { |  { | ||||||
|  	struct xhci_hcd *xhci; |  	struct xhci_hcd *xhci; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ produce a noisy warning. | |||||||
|  		/* hcd->irq is 0, we have MSI */ |  		/* hcd->irq is 0, we have MSI */ | ||||||
| --- a/drivers/usb/host/xhci.h | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1674,6 +1674,7 @@ struct xhci_hcd { | @@ -1678,6 +1678,7 @@ struct xhci_hcd { | ||||||
|  	/* support xHCI 0.96 spec USB2 software LPM */ |  	/* support xHCI 0.96 spec USB2 software LPM */ | ||||||
|  	unsigned		sw_lpm_support:1; |  	unsigned		sw_lpm_support:1; | ||||||
|  	/* support xHCI 1.0 spec USB2 hardware LPM */ |  	/* support xHCI 1.0 spec USB2 hardware LPM */ | ||||||
|   | |||||||
| @@ -20,8 +20,8 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/ethernet/stmicro/stmmac/common.h | --- a/drivers/net/ethernet/stmicro/stmmac/common.h | ||||||
| +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | ||||||
| @@ -42,7 +42,7 @@ | @@ -49,7 +49,7 @@ | ||||||
|  #define	DWMAC_CORE_3_50	0x35 |  #define STMMAC_GET_ENTRY(x, size)	((x + 1) & (size - 1)) | ||||||
|   |   | ||||||
|  #undef FRAME_FILTER_DEBUG |  #undef FRAME_FILTER_DEBUG | ||||||
| -/* #define FRAME_FILTER_DEBUG */ | -/* #define FRAME_FILTER_DEBUG */ | ||||||
|   | |||||||
| @@ -20,8 +20,8 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/ethernet/stmicro/stmmac/common.h | --- a/drivers/net/ethernet/stmicro/stmmac/common.h | ||||||
| +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | ||||||
| @@ -42,7 +42,7 @@ | @@ -49,7 +49,7 @@ | ||||||
|  #define	DWMAC_CORE_3_50	0x35 |  #define STMMAC_GET_ENTRY(x, size)	((x + 1) & (size - 1)) | ||||||
|   |   | ||||||
|  #undef FRAME_FILTER_DEBUG |  #undef FRAME_FILTER_DEBUG | ||||||
| -/* #define FRAME_FILTER_DEBUG */ | -/* #define FRAME_FILTER_DEBUG */ | ||||||
|   | |||||||
| @@ -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 | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1657,6 +1657,7 @@ struct xhci_hcd { | @@ -1660,6 +1660,7 @@ struct xhci_hcd { | ||||||
|  #define XHCI_SSIC_PORT_UNUSED	(1 << 22) |  /* For controller with a broken Port Disable implementation */ | ||||||
|  #define XHCI_NO_64BIT_SUPPORT	(1 << 23) |  #define XHCI_BROKEN_PORT_PED	(1 << 25) | ||||||
|  #define XHCI_MISSING_CAS	(1 << 24) |  #define XHCI_LIMIT_ENDPOINT_INTERVAL_7	(1 << 26) | ||||||
| +#define XHCI_FAKE_DOORBELL	(1 << 25) | +#define XHCI_FAKE_DOORBELL	(1 << 27) | ||||||
|  |   | ||||||
|  	unsigned int		num_active_eps; |  	unsigned int		num_active_eps; | ||||||
|  	unsigned int		limit_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/clockchips.h> | ||||||
|  #include <linux/clocksource.h> |  #include <linux/clocksource.h> | ||||||
|  #include <linux/interrupt.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(); |  			arch_timer_rate = arch_timer_get_cntfrq(); | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net> | |||||||
|  |  | ||||||
| --- a/mm/page_alloc.c | --- a/mm/page_alloc.c | ||||||
| +++ b/mm/page_alloc.c | +++ b/mm/page_alloc.c | ||||||
| @@ -7323,8 +7323,6 @@ int alloc_contig_range(unsigned long sta | @@ -7324,8 +7324,6 @@ int alloc_contig_range(unsigned long sta | ||||||
|   |   | ||||||
|  	/* Make sure the range is really isolated. */ |  	/* Make sure the range is really isolated. */ | ||||||
|  	if (test_pages_isolated(outer_start, end, false)) { |  	if (test_pages_isolated(outer_start, end, false)) { | ||||||
|   | |||||||
| @@ -696,7 +696,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org> | |||||||
|  } |  } | ||||||
| --- a/drivers/usb/core/hub.c
 | --- a/drivers/usb/core/hub.c
 | ||||||
| +++ b/drivers/usb/core/hub.c
 | +++ b/drivers/usb/core/hub.c
 | ||||||
| @@ -5009,7 +5009,7 @@ static void port_event(struct usb_hub *h
 | @@ -5025,7 +5025,7 @@ static void port_event(struct usb_hub *h
 | ||||||
|  	if (portchange & USB_PORT_STAT_C_OVERCURRENT) { |  	if (portchange & USB_PORT_STAT_C_OVERCURRENT) { | ||||||
|  		u16 status = 0, unused; |  		u16 status = 0, unused; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org> | |||||||
|  	depends on X86_THERMAL_VECTOR |  	depends on X86_THERMAL_VECTOR | ||||||
| --- a/drivers/thermal/Makefile | --- a/drivers/thermal/Makefile | ||||||
| +++ b/drivers/thermal/Makefile | +++ b/drivers/thermal/Makefile | ||||||
| @@ -41,6 +41,7 @@ obj-$(CONFIG_MAX77620_THERMAL)	+= max776 | @@ -42,6 +42,7 @@ obj-$(CONFIG_MAX77620_THERMAL)	+= max776 | ||||||
|  obj-$(CONFIG_QORIQ_THERMAL)	+= qoriq_thermal.o |  obj-$(CONFIG_QORIQ_THERMAL)	+= qoriq_thermal.o | ||||||
|  obj-$(CONFIG_DB8500_CPUFREQ_COOLING)	+= db8500_cpufreq_cooling.o |  obj-$(CONFIG_DB8500_CPUFREQ_COOLING)	+= db8500_cpufreq_cooling.o | ||||||
|  obj-$(CONFIG_INTEL_POWERCLAMP)	+= intel_powerclamp.o |  obj-$(CONFIG_INTEL_POWERCLAMP)	+= intel_powerclamp.o | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to | |||||||
|  |  | ||||||
| --- a/kernel/cgroup.c | --- a/kernel/cgroup.c | ||||||
| +++ b/kernel/cgroup.c | +++ b/kernel/cgroup.c | ||||||
| @@ -5626,7 +5626,7 @@ int __init cgroup_init_early(void) | @@ -5627,7 +5627,7 @@ int __init cgroup_init_early(void) | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to | |||||||
|   |   | ||||||
|  /** |  /** | ||||||
|   * cgroup_init - cgroup initialization |   * cgroup_init - cgroup initialization | ||||||
| @@ -6163,6 +6163,28 @@ static int __init cgroup_no_v1(char *str | @@ -6164,6 +6164,28 @@ static int __init cgroup_no_v1(char *str | ||||||
|  } |  } | ||||||
|  __setup("cgroup_no_v1=", cgroup_no_v1); |  __setup("cgroup_no_v1=", cgroup_no_v1); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,90 +0,0 @@ | |||||||
| From 89b466914a0d49f08d00be25556ba22497b9a284 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org> |  | ||||||
| Date: Sat, 17 Sep 2016 15:07:10 +0200 |  | ||||||
| Subject: [PATCH] i2c: bcm2835: Fix hang for writing messages larger than 16 |  | ||||||
|  bytes |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| Writing messages larger than the FIFO size results in a hang, rendering |  | ||||||
| the machine unusable. This is because the RXD status flag is set on the |  | ||||||
| first interrupt which results in bcm2835_drain_rxfifo() stealing bytes |  | ||||||
| from the buffer. The controller continues to trigger interrupts waiting |  | ||||||
| for the missing bytes, but bcm2835_fill_txfifo() has none to give. |  | ||||||
| In this situation wait_for_completion_timeout() apparently is unable to |  | ||||||
| stop the madness. |  | ||||||
|  |  | ||||||
| The BCM2835 ARM Peripherals datasheet has this to say about the flags: |  | ||||||
|   TXD: is set when the FIFO has space for at least one byte of data. |  | ||||||
|   RXD: is set when the FIFO contains at least one byte of data. |  | ||||||
|   TXW: is set during a write transfer and the FIFO is less than full. |  | ||||||
|   RXR: is set during a read transfer and the FIFO is or more full. |  | ||||||
|  |  | ||||||
| Implementing the logic from the downstream i2c-bcm2708 driver solved |  | ||||||
| the hang problem. |  | ||||||
|  |  | ||||||
| Signed-off-by: Noralf Trønnes <noralf@tronnes.org> |  | ||||||
| Reviewed-by: Eric Anholt <eric@anholt.net> |  | ||||||
| Reviewed-by: Martin Sperl <kernel@martin.sperl.org> |  | ||||||
| --- |  | ||||||
|  drivers/i2c/busses/i2c-bcm2835.c | 22 ++++++++++++++-------- |  | ||||||
|  1 file changed, 14 insertions(+), 8 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/i2c/busses/i2c-bcm2835.c |  | ||||||
| +++ b/drivers/i2c/busses/i2c-bcm2835.c |  | ||||||
| @@ -64,6 +64,7 @@ struct bcm2835_i2c_dev { |  | ||||||
|  	int irq; |  | ||||||
|  	struct i2c_adapter adapter; |  | ||||||
|  	struct completion completion; |  | ||||||
| +	struct i2c_msg *curr_msg; |  | ||||||
|  	u32 msg_err; |  | ||||||
|  	u8 *msg_buf; |  | ||||||
|  	size_t msg_buf_remaining; |  | ||||||
| @@ -126,14 +127,13 @@ static irqreturn_t bcm2835_i2c_isr(int t |  | ||||||
|  		return IRQ_HANDLED; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	if (val & BCM2835_I2C_S_RXD) { |  | ||||||
| -		bcm2835_drain_rxfifo(i2c_dev); |  | ||||||
| -		if (!(val & BCM2835_I2C_S_DONE)) |  | ||||||
| -			return IRQ_HANDLED; |  | ||||||
| -	} |  | ||||||
| - |  | ||||||
|  	if (val & BCM2835_I2C_S_DONE) { |  | ||||||
| -		if (i2c_dev->msg_buf_remaining) |  | ||||||
| +		if (i2c_dev->curr_msg->flags & I2C_M_RD) { |  | ||||||
| +			bcm2835_drain_rxfifo(i2c_dev); |  | ||||||
| +			val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); |  | ||||||
| +		} |  | ||||||
| + |  | ||||||
| +		if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining) |  | ||||||
|  			i2c_dev->msg_err = BCM2835_I2C_S_LEN; |  | ||||||
|  		else |  | ||||||
|  			i2c_dev->msg_err = 0; |  | ||||||
| @@ -141,11 +141,16 @@ static irqreturn_t bcm2835_i2c_isr(int t |  | ||||||
|  		return IRQ_HANDLED; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	if (val & BCM2835_I2C_S_TXD) { |  | ||||||
| +	if (val & BCM2835_I2C_S_TXW) { |  | ||||||
|  		bcm2835_fill_txfifo(i2c_dev); |  | ||||||
|  		return IRQ_HANDLED; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| +	if (val & BCM2835_I2C_S_RXR) { |  | ||||||
| +		bcm2835_drain_rxfifo(i2c_dev); |  | ||||||
| +		return IRQ_HANDLED; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
|  	return IRQ_NONE; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| @@ -155,6 +160,7 @@ static int bcm2835_i2c_xfer_msg(struct b |  | ||||||
|  	u32 c; |  | ||||||
|  	unsigned long time_left; |  | ||||||
|   |  | ||||||
| +	i2c_dev->curr_msg = msg; |  | ||||||
|  	i2c_dev->msg_buf = msg->buf; |  | ||||||
|  	i2c_dev->msg_buf_remaining = msg->len; |  | ||||||
|  	reinit_completion(&i2c_dev->completion); |  | ||||||
| @@ -1,49 +0,0 @@ | |||||||
| From 3d6159640da9c9175d1ca42f151fc1a14caded59 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Alexey Brodkin <Alexey.Brodkin@synopsys.com> |  | ||||||
| Date: Thu, 13 Apr 2017 15:33:34 +0300 |  | ||||||
| Subject: [PATCH] usb: Make sure usb/phy/of gets built-in |  | ||||||
|  |  | ||||||
| DWC3 driver uses of_usb_get_phy_mode() which is |  | ||||||
| implemented in drivers/usb/phy/of.c and in bare minimal |  | ||||||
| configuration it might not be pulled in kernel binary. |  | ||||||
|  |  | ||||||
| In case of ARC or ARM this could be easily reproduced with |  | ||||||
| "allnodefconfig" +CONFIG_USB=m +CONFIG_USB_DWC3=m. |  | ||||||
|  |  | ||||||
| On building all ends-up with: |  | ||||||
| ---------------------->8------------------ |  | ||||||
|   Kernel: arch/arm/boot/Image is ready |  | ||||||
|   Kernel: arch/arm/boot/zImage is ready |  | ||||||
|   Building modules, stage 2. |  | ||||||
|   MODPOST 5 modules |  | ||||||
| ERROR: "of_usb_get_phy_mode" [drivers/usb/dwc3/dwc3.ko] undefined! |  | ||||||
| make[1]: *** [__modpost] Error 1 |  | ||||||
| make: *** [modules] Error 2 |  | ||||||
| ---------------------->8------------------ |  | ||||||
|  |  | ||||||
| Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> |  | ||||||
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |  | ||||||
| Cc: Masahiro Yamada <yamada.masahiro@socionext.com> |  | ||||||
| Cc: Geert Uytterhoeven <geert+renesas@glider.be> |  | ||||||
| Cc: Nicolas Pitre <nicolas.pitre@linaro.org> |  | ||||||
| Cc: Thomas Gleixner <tglx@linutronix.de> |  | ||||||
| Cc: Felipe Balbi <balbi@kernel.org> |  | ||||||
| Cc: Felix Fietkau <nbd@nbd.name> |  | ||||||
| Cc: Jeremy Kerr <jk@ozlabs.org> |  | ||||||
| Cc: linux-snps-arc@lists.infradead.org |  | ||||||
| Cc: stable@vger.kernel.org |  | ||||||
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |  | ||||||
| --- |  | ||||||
|  drivers/Makefile | 1 + |  | ||||||
|  1 file changed, 1 insertion(+) |  | ||||||
|  |  | ||||||
| --- a/drivers/Makefile |  | ||||||
| +++ b/drivers/Makefile |  | ||||||
| @@ -101,6 +101,7 @@ obj-$(CONFIG_USB_PHY)		+= usb/ |  | ||||||
|  obj-$(CONFIG_USB)		+= usb/ |  | ||||||
|  obj-$(CONFIG_PCI)		+= usb/ |  | ||||||
|  obj-$(CONFIG_USB_GADGET)	+= usb/ |  | ||||||
| +obj-$(CONFIG_OF)		+= usb/ |  | ||||||
|  obj-$(CONFIG_SERIO)		+= input/serio/ |  | ||||||
|  obj-$(CONFIG_GAMEPORT)		+= input/gameport/ |  | ||||||
|  obj-$(CONFIG_INPUT)		+= input/ |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| From: Felix Fietkau <nbd@nbd.name> |  | ||||||
| Date: Mon, 6 Mar 2017 09:48:52 +0100 |  | ||||||
| Subject: [PATCH] ubifs: fix RENAME_WHITEOUT support |  | ||||||
|  |  | ||||||
| Remove faulty leftover check in do_rename(), apparently introduced in a |  | ||||||
| merge that combined whiteout support changes with commit f03b8ad8d386 |  | ||||||
| ("fs: support RENAME_NOREPLACE for local filesystems") |  | ||||||
|  |  | ||||||
| Fixes: 9e0a1fff8db5 ("ubifs: Implement RENAME_WHITEOUT") |  | ||||||
| Cc: stable@vger.kernel.org |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/fs/ubifs/dir.c |  | ||||||
| +++ b/fs/ubifs/dir.c |  | ||||||
| @@ -1088,9 +1088,6 @@ static int do_rename(struct inode *old_d |  | ||||||
|  	struct timespec time; |  | ||||||
|  	unsigned int uninitialized_var(saved_nlink); |  | ||||||
|   |  | ||||||
| -	if (flags & ~RENAME_NOREPLACE) |  | ||||||
| -		return -EINVAL; |  | ||||||
| - |  | ||||||
|  	/* |  | ||||||
|  	 * Budget request settings: deletion direntry, new direntry, removing |  | ||||||
|  	 * the old inode, and changing old and new parent directory inodes. |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Mon, 19 Dec 2016 14:20:56 +0000 |  | ||||||
| Subject: [PATCH] MIPS: Introduce irq_stack |  | ||||||
|  |  | ||||||
| Allocate a per-cpu irq stack for use within interrupt handlers. |  | ||||||
|  |  | ||||||
| Also add a utility function on_irq_stack to determine if a given stack |  | ||||||
| pointer is within the irq stack for that cpu. |  | ||||||
|  |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/arch/mips/include/asm/irq.h |  | ||||||
| +++ b/arch/mips/include/asm/irq.h |  | ||||||
| @@ -17,6 +17,18 @@ |  | ||||||
|   |  | ||||||
|  #include <irq.h> |  | ||||||
|   |  | ||||||
| +#define IRQ_STACK_SIZE			THREAD_SIZE |  | ||||||
| + |  | ||||||
| +extern void *irq_stack[NR_CPUS]; |  | ||||||
| + |  | ||||||
| +static inline bool on_irq_stack(int cpu, unsigned long sp) |  | ||||||
| +{ |  | ||||||
| +	unsigned long low = (unsigned long)irq_stack[cpu]; |  | ||||||
| +	unsigned long high = low + IRQ_STACK_SIZE; |  | ||||||
| + |  | ||||||
| +	return (low <= sp && sp <= high); |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  #ifdef CONFIG_I8259 |  | ||||||
|  static inline int irq_canonicalize(int irq) |  | ||||||
|  { |  | ||||||
| --- a/arch/mips/kernel/asm-offsets.c |  | ||||||
| +++ b/arch/mips/kernel/asm-offsets.c |  | ||||||
| @@ -102,6 +102,7 @@ void output_thread_info_defines(void) |  | ||||||
|  	OFFSET(TI_REGS, thread_info, regs); |  | ||||||
|  	DEFINE(_THREAD_SIZE, THREAD_SIZE); |  | ||||||
|  	DEFINE(_THREAD_MASK, THREAD_MASK); |  | ||||||
| +	DEFINE(_IRQ_STACK_SIZE, IRQ_STACK_SIZE); |  | ||||||
|  	BLANK(); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| --- a/arch/mips/kernel/irq.c |  | ||||||
| +++ b/arch/mips/kernel/irq.c |  | ||||||
| @@ -25,6 +25,8 @@ |  | ||||||
|  #include <linux/atomic.h> |  | ||||||
|  #include <asm/uaccess.h> |  | ||||||
|   |  | ||||||
| +void *irq_stack[NR_CPUS]; |  | ||||||
| + |  | ||||||
|  /* |  | ||||||
|   * 'what should we do if we get a hw irq event on an illegal vector'. |  | ||||||
|   * each architecture has to answer this themselves. |  | ||||||
| @@ -58,6 +60,15 @@ void __init init_IRQ(void) |  | ||||||
|  		clear_c0_status(ST0_IM); |  | ||||||
|   |  | ||||||
|  	arch_init_irq(); |  | ||||||
| + |  | ||||||
| +	for_each_possible_cpu(i) { |  | ||||||
| +		int irq_pages = IRQ_STACK_SIZE / PAGE_SIZE; |  | ||||||
| +		void *s = (void *)__get_free_pages(GFP_KERNEL, irq_pages); |  | ||||||
| + |  | ||||||
| +		irq_stack[i] = s; |  | ||||||
| +		pr_debug("CPU%d IRQ stack at 0x%p - 0x%p\n", i, |  | ||||||
| +			irq_stack[i], irq_stack[i] + IRQ_STACK_SIZE); |  | ||||||
| +	} |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  #ifdef CONFIG_DEBUG_STACKOVERFLOW |  | ||||||
| @@ -1,42 +0,0 @@ | |||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Mon, 19 Dec 2016 14:20:57 +0000 |  | ||||||
| Subject: [PATCH] MIPS: Stack unwinding while on IRQ stack |  | ||||||
|  |  | ||||||
| Within unwind stack, check if the stack pointer being unwound is within |  | ||||||
| the CPU's irq_stack and if so use that page rather than the task's stack |  | ||||||
| page. |  | ||||||
|  |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/arch/mips/kernel/process.c |  | ||||||
| +++ b/arch/mips/kernel/process.c |  | ||||||
| @@ -33,6 +33,7 @@ |  | ||||||
|  #include <asm/dsemul.h> |  | ||||||
|  #include <asm/dsp.h> |  | ||||||
|  #include <asm/fpu.h> |  | ||||||
| +#include <asm/irq.h> |  | ||||||
|  #include <asm/msa.h> |  | ||||||
|  #include <asm/pgtable.h> |  | ||||||
|  #include <asm/mipsregs.h> |  | ||||||
| @@ -556,7 +557,19 @@ EXPORT_SYMBOL(unwind_stack_by_address); |  | ||||||
|  unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, |  | ||||||
|  			   unsigned long pc, unsigned long *ra) |  | ||||||
|  { |  | ||||||
| -	unsigned long stack_page = (unsigned long)task_stack_page(task); |  | ||||||
| +	unsigned long stack_page = 0; |  | ||||||
| +	int cpu; |  | ||||||
| + |  | ||||||
| +	for_each_possible_cpu(cpu) { |  | ||||||
| +		if (on_irq_stack(cpu, *sp)) { |  | ||||||
| +			stack_page = (unsigned long)irq_stack[cpu]; |  | ||||||
| +			break; |  | ||||||
| +		} |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	if (!stack_page) |  | ||||||
| +		stack_page = (unsigned long)task_stack_page(task); |  | ||||||
| + |  | ||||||
|  	return unwind_stack_by_address(stack_page, sp, pc, ra); |  | ||||||
|  } |  | ||||||
|  #endif |  | ||||||
| @@ -1,48 +0,0 @@ | |||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Mon, 19 Dec 2016 14:20:58 +0000 |  | ||||||
| Subject: [PATCH] MIPS: Only change $28 to thread_info if coming from user |  | ||||||
|  mode |  | ||||||
|  |  | ||||||
| The SAVE_SOME macro is used to save the execution context on all |  | ||||||
| exceptions. |  | ||||||
| If an exception occurs while executing user code, the stack is switched |  | ||||||
| to the kernel's stack for the current task, and register $28 is switched |  | ||||||
| to point to the current_thread_info, which is at the bottom of the stack |  | ||||||
| region. |  | ||||||
| If the exception occurs while executing kernel code, the stack is left, |  | ||||||
| and this change ensures that register $28 is not updated. This is the |  | ||||||
| correct behaviour when the kernel can be executing on the separate irq |  | ||||||
| stack, because the thread_info will not be at the base of it. |  | ||||||
|  |  | ||||||
| With this change, register $28 is only switched to it's kernel |  | ||||||
| conventional usage of the currrent thread info pointer at the point at |  | ||||||
| which execution enters kernel space. Doing it on every exception was |  | ||||||
| redundant, but OK without an IRQ stack, but will be erroneous once that |  | ||||||
| is introduced. |  | ||||||
|  |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Reviewed-by: Maciej W. Rozycki <macro@imgtec.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/arch/mips/include/asm/stackframe.h |  | ||||||
| +++ b/arch/mips/include/asm/stackframe.h |  | ||||||
| @@ -216,12 +216,19 @@ |  | ||||||
|  		LONG_S	$25, PT_R25(sp) |  | ||||||
|  		LONG_S	$28, PT_R28(sp) |  | ||||||
|  		LONG_S	$31, PT_R31(sp) |  | ||||||
| + |  | ||||||
| +		/* Set thread_info if we're coming from user mode */ |  | ||||||
| +		mfc0	k0, CP0_STATUS |  | ||||||
| +		sll	k0, 3		/* extract cu0 bit */ |  | ||||||
| +		bltz	k0, 9f |  | ||||||
| + |  | ||||||
|  		ori	$28, sp, _THREAD_MASK |  | ||||||
|  		xori	$28, _THREAD_MASK |  | ||||||
|  #ifdef CONFIG_CPU_CAVIUM_OCTEON |  | ||||||
|  		.set    mips64 |  | ||||||
|  		pref    0, 0($28)       /* Prefetch the current pointer */ |  | ||||||
|  #endif |  | ||||||
| +9: |  | ||||||
|  		.set	pop |  | ||||||
|  		.endm |  | ||||||
|   |  | ||||||
| @@ -1,116 +0,0 @@ | |||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Mon, 19 Dec 2016 14:20:59 +0000 |  | ||||||
| Subject: [PATCH] MIPS: Switch to the irq_stack in interrupts |  | ||||||
|  |  | ||||||
| When enterring interrupt context via handle_int or except_vec_vi, switch |  | ||||||
| to the irq_stack of the current CPU if it is not already in use. |  | ||||||
|  |  | ||||||
| The current stack pointer is masked with the thread size and compared to |  | ||||||
| the base or the irq stack. If it does not match then the stack pointer |  | ||||||
| is set to the top of that stack, otherwise this is a nested irq being |  | ||||||
| handled on the irq stack so the stack pointer should be left as it was. |  | ||||||
|  |  | ||||||
| The in-use stack pointer is placed in the callee saved register s1. It |  | ||||||
| will be saved to the stack when plat_irq_dispatch is invoked and can be |  | ||||||
| restored once control returns here. |  | ||||||
|  |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/arch/mips/kernel/genex.S |  | ||||||
| +++ b/arch/mips/kernel/genex.S |  | ||||||
| @@ -187,9 +187,44 @@ NESTED(handle_int, PT_SIZE, sp) |  | ||||||
|   |  | ||||||
|  	LONG_L	s0, TI_REGS($28) |  | ||||||
|  	LONG_S	sp, TI_REGS($28) |  | ||||||
| -	PTR_LA	ra, ret_from_irq |  | ||||||
| -	PTR_LA	v0, plat_irq_dispatch |  | ||||||
| -	jr	v0 |  | ||||||
| + |  | ||||||
| +	/* |  | ||||||
| +	 * SAVE_ALL ensures we are using a valid kernel stack for the thread. |  | ||||||
| +	 * Check if we are already using the IRQ stack. |  | ||||||
| +	 */ |  | ||||||
| +	move	s1, sp # Preserve the sp |  | ||||||
| + |  | ||||||
| +	/* Get IRQ stack for this CPU */ |  | ||||||
| +	ASM_CPUID_MFC0	k0, ASM_SMP_CPUID_REG |  | ||||||
| +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) |  | ||||||
| +	lui	k1, %hi(irq_stack) |  | ||||||
| +#else |  | ||||||
| +	lui	k1, %highest(irq_stack) |  | ||||||
| +	daddiu	k1, %higher(irq_stack) |  | ||||||
| +	dsll	k1, 16 |  | ||||||
| +	daddiu	k1, %hi(irq_stack) |  | ||||||
| +	dsll	k1, 16 |  | ||||||
| +#endif |  | ||||||
| +	LONG_SRL	k0, SMP_CPUID_PTRSHIFT |  | ||||||
| +	LONG_ADDU	k1, k0 |  | ||||||
| +	LONG_L	t0, %lo(irq_stack)(k1) |  | ||||||
| + |  | ||||||
| +	# Check if already on IRQ stack |  | ||||||
| +	PTR_LI	t1, ~(_THREAD_SIZE-1) |  | ||||||
| +	and	t1, t1, sp |  | ||||||
| +	beq	t0, t1, 2f |  | ||||||
| + |  | ||||||
| +	/* Switch to IRQ stack */ |  | ||||||
| +	li	t1, _IRQ_STACK_SIZE |  | ||||||
| +	PTR_ADD sp, t0, t1 |  | ||||||
| + |  | ||||||
| +2: |  | ||||||
| +	jal	plat_irq_dispatch |  | ||||||
| + |  | ||||||
| +	/* Restore sp */ |  | ||||||
| +	move	sp, s1 |  | ||||||
| + |  | ||||||
| +	j	ret_from_irq |  | ||||||
|  #ifdef CONFIG_CPU_MICROMIPS |  | ||||||
|  	nop |  | ||||||
|  #endif |  | ||||||
| @@ -262,8 +297,44 @@ NESTED(except_vec_vi_handler, 0, sp) |  | ||||||
|   |  | ||||||
|  	LONG_L	s0, TI_REGS($28) |  | ||||||
|  	LONG_S	sp, TI_REGS($28) |  | ||||||
| -	PTR_LA	ra, ret_from_irq |  | ||||||
| -	jr	v0 |  | ||||||
| + |  | ||||||
| +	/* |  | ||||||
| +	 * SAVE_ALL ensures we are using a valid kernel stack for the thread. |  | ||||||
| +	 * Check if we are already using the IRQ stack. |  | ||||||
| +	 */ |  | ||||||
| +	move	s1, sp # Preserve the sp |  | ||||||
| + |  | ||||||
| +	/* Get IRQ stack for this CPU */ |  | ||||||
| +	ASM_CPUID_MFC0	k0, ASM_SMP_CPUID_REG |  | ||||||
| +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) |  | ||||||
| +	lui	k1, %hi(irq_stack) |  | ||||||
| +#else |  | ||||||
| +	lui	k1, %highest(irq_stack) |  | ||||||
| +	daddiu	k1, %higher(irq_stack) |  | ||||||
| +	dsll	k1, 16 |  | ||||||
| +	daddiu	k1, %hi(irq_stack) |  | ||||||
| +	dsll	k1, 16 |  | ||||||
| +#endif |  | ||||||
| +	LONG_SRL	k0, SMP_CPUID_PTRSHIFT |  | ||||||
| +	LONG_ADDU	k1, k0 |  | ||||||
| +	LONG_L	t0, %lo(irq_stack)(k1) |  | ||||||
| + |  | ||||||
| +	# Check if already on IRQ stack |  | ||||||
| +	PTR_LI	t1, ~(_THREAD_SIZE-1) |  | ||||||
| +	and	t1, t1, sp |  | ||||||
| +	beq	t0, t1, 2f |  | ||||||
| + |  | ||||||
| +	/* Switch to IRQ stack */ |  | ||||||
| +	li	t1, _IRQ_STACK_SIZE |  | ||||||
| +	PTR_ADD sp, t0, t1 |  | ||||||
| + |  | ||||||
| +2: |  | ||||||
| +	jal	plat_irq_dispatch |  | ||||||
| + |  | ||||||
| +	/* Restore sp */ |  | ||||||
| +	move	sp, s1 |  | ||||||
| + |  | ||||||
| +	j	ret_from_irq |  | ||||||
|  	END(except_vec_vi_handler) |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Mon, 19 Dec 2016 14:21:00 +0000 |  | ||||||
| Subject: [PATCH] MIPS: Select HAVE_IRQ_EXIT_ON_IRQ_STACK |  | ||||||
|  |  | ||||||
| Since do_IRQ is now invoked on a separate IRQ stack, we select |  | ||||||
| HAVE_IRQ_EXIT_ON_IRQ_STACK so that softirq's may be invoked directly |  | ||||||
| from irq_exit(), rather than requiring do_softirq_own_stack. |  | ||||||
|  |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/arch/mips/Kconfig |  | ||||||
| +++ b/arch/mips/Kconfig |  | ||||||
| @@ -9,6 +9,7 @@ config MIPS |  | ||||||
|  	select HAVE_CONTEXT_TRACKING |  | ||||||
|  	select HAVE_GENERIC_DMA_COHERENT |  | ||||||
|  	select HAVE_IDE |  | ||||||
| +	select HAVE_IRQ_EXIT_ON_IRQ_STACK |  | ||||||
|  	select HAVE_OPROFILE |  | ||||||
|  	select HAVE_PERF_EVENTS |  | ||||||
|  	select PERF_USE_VMALLOC |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| From de856416e7143e32afc4849625616554aa060f7a Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Date: Wed, 25 Jan 2017 17:00:25 +0000 |  | ||||||
| Subject: [PATCH] MIPS: IRQ Stack: Fix erroneous jal to plat_irq_dispatch |  | ||||||
|  |  | ||||||
| Commit dda45f701c9d ("MIPS: Switch to the irq_stack in interrupts") |  | ||||||
| changed both the normal and vectored interrupt handlers. Unfortunately |  | ||||||
| the vectored version, "except_vec_vi_handler", was incorrectly modified |  | ||||||
| to unconditionally jal to plat_irq_dispatch, rather than doing a jalr to |  | ||||||
| the vectored handler that has been set up. This is ok for many platforms |  | ||||||
| which set the vectored handler to plat_irq_dispatch anyway, but will |  | ||||||
| cause problems with platforms that use other handlers. |  | ||||||
|  |  | ||||||
| Fixes: dda45f701c9d ("MIPS: Switch to the irq_stack in interrupts") |  | ||||||
| Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> |  | ||||||
| Cc: Ralf Baechle <ralf@linux-mips.org> |  | ||||||
| Cc: Paul Burton <paul.burton@imgtec.com> |  | ||||||
| Cc: linux-mips@linux-mips.org |  | ||||||
| Patchwork: https://patchwork.linux-mips.org/patch/15110/ |  | ||||||
| Signed-off-by: James Hogan <james.hogan@imgtec.com> |  | ||||||
| --- |  | ||||||
|  arch/mips/kernel/genex.S | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| --- a/arch/mips/kernel/genex.S |  | ||||||
| +++ b/arch/mips/kernel/genex.S |  | ||||||
| @@ -329,7 +329,7 @@ NESTED(except_vec_vi_handler, 0, sp) |  | ||||||
|  	PTR_ADD sp, t0, t1 |  | ||||||
|   |  | ||||||
|  2: |  | ||||||
| -	jal	plat_irq_dispatch |  | ||||||
| +	jalr	v0 |  | ||||||
|   |  | ||||||
|  	/* Restore sp */ |  | ||||||
|  	move	sp, s1 |  | ||||||
| @@ -1,40 +0,0 @@ | |||||||
| From bd5d21310133921021d78995ad6346f908483124 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> |  | ||||||
| Date: Sun, 20 Nov 2016 16:09:30 +0100 |  | ||||||
| Subject: [PATCH] mtd: bcm47xxpart: fix parsing first block after aligned TRX |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| After parsing TRX we should skip to the first block placed behind it. |  | ||||||
| Our code was working only with TRX with length not aligned to the |  | ||||||
| blocksize. In other cases (length aligned) it was missing the block |  | ||||||
| places right after TRX. |  | ||||||
|  |  | ||||||
| This fixes calculation and simplifies the comment. |  | ||||||
|  |  | ||||||
| Signed-off-by: Rafał Miłecki <rafal@milecki.pl> |  | ||||||
| Signed-off-by: Brian Norris <computersforpeace@gmail.com> |  | ||||||
| --- |  | ||||||
|  drivers/mtd/bcm47xxpart.c | 10 ++++------ |  | ||||||
|  1 file changed, 4 insertions(+), 6 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/bcm47xxpart.c |  | ||||||
| +++ b/drivers/mtd/bcm47xxpart.c |  | ||||||
| @@ -229,12 +229,10 @@ static int bcm47xxpart_parse(struct mtd_ |  | ||||||
|   |  | ||||||
|  			last_trx_part = curr_part - 1; |  | ||||||
|   |  | ||||||
| -			/* |  | ||||||
| -			 * We have whole TRX scanned, skip to the next part. Use |  | ||||||
| -			 * roundown (not roundup), as the loop will increase |  | ||||||
| -			 * offset in next step. |  | ||||||
| -			 */ |  | ||||||
| -			offset = rounddown(offset + trx->length, blocksize); |  | ||||||
| +			/* Jump to the end of TRX */ |  | ||||||
| +			offset = roundup(offset + trx->length, blocksize); |  | ||||||
| +			/* Next loop iteration will increase the offset */ |  | ||||||
| +			offset -= blocksize; |  | ||||||
|  			continue; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| @@ -75,7 +75,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de> | |||||||
|  |  | ||||||
| --- a/mm/page_alloc.c | --- a/mm/page_alloc.c | ||||||
| +++ b/mm/page_alloc.c | +++ b/mm/page_alloc.c | ||||||
| @@ -5893,7 +5893,7 @@ static void __ref alloc_node_mem_map(str | @@ -5894,7 +5894,7 @@ static void __ref alloc_node_mem_map(str | ||||||
|  		mem_map = NODE_DATA(0)->node_mem_map; |  		mem_map = NODE_DATA(0)->node_mem_map; | ||||||
|  #if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM) |  #if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM) | ||||||
|  		if (page_to_pfn(mem_map) != pgdat->node_start_pfn) |  		if (page_to_pfn(mem_map) != pgdat->node_start_pfn) | ||||||
|   | |||||||
| @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	if (sock->type == SOCK_PACKET) |  	if (sock->type == SOCK_PACKET) | ||||||
|  		po->prot_hook.func = packet_rcv_spkt; |  		po->prot_hook.func = packet_rcv_spkt; | ||||||
| @@ -3813,6 +3816,16 @@ packet_setsockopt(struct socket *sock, i | @@ -3815,6 +3818,16 @@ packet_setsockopt(struct socket *sock, i | ||||||
|  		po->xmit = val ? packet_direct_xmit : dev_queue_xmit; |  		po->xmit = val ? packet_direct_xmit : dev_queue_xmit; | ||||||
|  		return 0; |  		return 0; | ||||||
|  	} |  	} | ||||||
| @@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	default: |  	default: | ||||||
|  		return -ENOPROTOOPT; |  		return -ENOPROTOOPT; | ||||||
|  	} |  	} | ||||||
| @@ -3865,6 +3878,13 @@ static int packet_getsockopt(struct sock | @@ -3867,6 +3880,13 @@ static int packet_getsockopt(struct sock | ||||||
|  	case PACKET_VNET_HDR: |  	case PACKET_VNET_HDR: | ||||||
|  		val = po->has_vnet_hdr; |  		val = po->has_vnet_hdr; | ||||||
|  		break; |  		break; | ||||||
|   | |||||||
| @@ -302,7 +302,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  /** |  /** | ||||||
|   * ip6_tnl_addr_conflict - compare packet addresses to tunnel's own |   * ip6_tnl_addr_conflict - compare packet addresses to tunnel's own | ||||||
|   *   @t: the outgoing tunnel device |   *   @t: the outgoing tunnel device | ||||||
| @@ -1281,6 +1421,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str | @@ -1283,6 +1423,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str | ||||||
|  { |  { | ||||||
|  	struct ip6_tnl *t = netdev_priv(dev); |  	struct ip6_tnl *t = netdev_priv(dev); | ||||||
|  	struct ipv6hdr *ipv6h = ipv6_hdr(skb); |  	struct ipv6hdr *ipv6h = ipv6_hdr(skb); | ||||||
| @@ -310,7 +310,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	int encap_limit = -1; |  	int encap_limit = -1; | ||||||
|  	__u16 offset; |  	__u16 offset; | ||||||
|  	struct flowi6 fl6; |  	struct flowi6 fl6; | ||||||
| @@ -1336,6 +1477,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str | @@ -1338,6 +1479,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str | ||||||
|  			fl6.flowi6_mark = skb->mark; |  			fl6.flowi6_mark = skb->mark; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -329,7 +329,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6)) |  	if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6)) | ||||||
|  		return -1; |  		return -1; | ||||||
|   |   | ||||||
| @@ -1461,6 +1614,14 @@ ip6_tnl_change(struct ip6_tnl *t, const | @@ -1463,6 +1616,14 @@ ip6_tnl_change(struct ip6_tnl *t, const | ||||||
|  	t->parms.flowinfo = p->flowinfo; |  	t->parms.flowinfo = p->flowinfo; | ||||||
|  	t->parms.link = p->link; |  	t->parms.link = p->link; | ||||||
|  	t->parms.proto = p->proto; |  	t->parms.proto = p->proto; | ||||||
| @@ -344,7 +344,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	dst_cache_reset(&t->dst_cache); |  	dst_cache_reset(&t->dst_cache); | ||||||
|  	ip6_tnl_link_config(t); |  	ip6_tnl_link_config(t); | ||||||
|  	return 0; |  	return 0; | ||||||
| @@ -1499,6 +1660,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ | @@ -1501,6 +1662,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ | ||||||
|  	p->flowinfo = u->flowinfo; |  	p->flowinfo = u->flowinfo; | ||||||
|  	p->link = u->link; |  	p->link = u->link; | ||||||
|  	p->proto = u->proto; |  	p->proto = u->proto; | ||||||
| @@ -352,7 +352,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	memcpy(p->name, u->name, sizeof(u->name)); |  	memcpy(p->name, u->name, sizeof(u->name)); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -1876,6 +2038,15 @@ static int ip6_tnl_validate(struct nlatt | @@ -1878,6 +2040,15 @@ static int ip6_tnl_validate(struct nlatt | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -368,7 +368,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  static void ip6_tnl_netlink_parms(struct nlattr *data[], |  static void ip6_tnl_netlink_parms(struct nlattr *data[], | ||||||
|  				  struct __ip6_tnl_parm *parms) |  				  struct __ip6_tnl_parm *parms) | ||||||
|  { |  { | ||||||
| @@ -1910,6 +2081,46 @@ static void ip6_tnl_netlink_parms(struct | @@ -1912,6 +2083,46 @@ static void ip6_tnl_netlink_parms(struct | ||||||
|   |   | ||||||
|  	if (data[IFLA_IPTUN_COLLECT_METADATA]) |  	if (data[IFLA_IPTUN_COLLECT_METADATA]) | ||||||
|  		parms->collect_md = true; |  		parms->collect_md = true; | ||||||
| @@ -415,7 +415,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[], |  static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[], | ||||||
| @@ -2019,6 +2230,12 @@ static void ip6_tnl_dellink(struct net_d | @@ -2021,6 +2232,12 @@ static void ip6_tnl_dellink(struct net_d | ||||||
|   |   | ||||||
|  static size_t ip6_tnl_get_size(const struct net_device *dev) |  static size_t ip6_tnl_get_size(const struct net_device *dev) | ||||||
|  { |  { | ||||||
| @@ -428,7 +428,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	return |  	return | ||||||
|  		/* IFLA_IPTUN_LINK */ |  		/* IFLA_IPTUN_LINK */ | ||||||
|  		nla_total_size(4) + |  		nla_total_size(4) + | ||||||
| @@ -2046,6 +2263,24 @@ static size_t ip6_tnl_get_size(const str | @@ -2048,6 +2265,24 @@ static size_t ip6_tnl_get_size(const str | ||||||
|  		nla_total_size(2) + |  		nla_total_size(2) + | ||||||
|  		/* IFLA_IPTUN_COLLECT_METADATA */ |  		/* IFLA_IPTUN_COLLECT_METADATA */ | ||||||
|  		nla_total_size(0) + |  		nla_total_size(0) + | ||||||
| @@ -453,7 +453,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  		0; |  		0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -2053,6 +2288,9 @@ static int ip6_tnl_fill_info(struct sk_b | @@ -2055,6 +2290,9 @@ static int ip6_tnl_fill_info(struct sk_b | ||||||
|  { |  { | ||||||
|  	struct ip6_tnl *tunnel = netdev_priv(dev); |  	struct ip6_tnl *tunnel = netdev_priv(dev); | ||||||
|  	struct __ip6_tnl_parm *parm = &tunnel->parms; |  	struct __ip6_tnl_parm *parm = &tunnel->parms; | ||||||
| @@ -463,7 +463,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|   |   | ||||||
|  	if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) || |  	if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) || | ||||||
|  	    nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) || |  	    nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) || | ||||||
| @@ -2061,9 +2299,27 @@ static int ip6_tnl_fill_info(struct sk_b | @@ -2063,9 +2301,27 @@ static int ip6_tnl_fill_info(struct sk_b | ||||||
|  	    nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) || |  	    nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) || | ||||||
|  	    nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) || |  	    nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) || | ||||||
|  	    nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) || |  	    nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) || | ||||||
| @@ -492,7 +492,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> | |||||||
|  	if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) || |  	if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) || | ||||||
|  	    nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) || |  	    nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) || | ||||||
|  	    nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) || |  	    nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) || | ||||||
| @@ -2101,6 +2357,7 @@ static const struct nla_policy ip6_tnl_p | @@ -2103,6 +2359,7 @@ static const struct nla_policy ip6_tnl_p | ||||||
|  	[IFLA_IPTUN_ENCAP_SPORT]	= { .type = NLA_U16 }, |  	[IFLA_IPTUN_ENCAP_SPORT]	= { .type = NLA_U16 }, | ||||||
|  	[IFLA_IPTUN_ENCAP_DPORT]	= { .type = NLA_U16 }, |  	[IFLA_IPTUN_ENCAP_DPORT]	= { .type = NLA_U16 }, | ||||||
|  	[IFLA_IPTUN_COLLECT_METADATA]	= { .type = NLA_FLAG }, |  	[IFLA_IPTUN_COLLECT_METADATA]	= { .type = NLA_FLAG }, | ||||||
|   | |||||||
| @@ -143,7 +143,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  static const struct rt6_info ip6_blk_hole_entry_template = { |  static const struct rt6_info ip6_blk_hole_entry_template = { | ||||||
|  	.dst = { |  	.dst = { | ||||||
|  		.__refcnt	= ATOMIC_INIT(1), |  		.__refcnt	= ATOMIC_INIT(1), | ||||||
| @@ -1953,6 +1970,11 @@ static struct rt6_info *ip6_route_info_c | @@ -1957,6 +1974,11 @@ static struct rt6_info *ip6_route_info_c | ||||||
|  			rt->dst.output = ip6_pkt_prohibit_out; |  			rt->dst.output = ip6_pkt_prohibit_out; | ||||||
|  			rt->dst.input = ip6_pkt_prohibit; |  			rt->dst.input = ip6_pkt_prohibit; | ||||||
|  			break; |  			break; | ||||||
| @@ -155,7 +155,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		case RTN_THROW: |  		case RTN_THROW: | ||||||
|  		case RTN_UNREACHABLE: |  		case RTN_UNREACHABLE: | ||||||
|  		default: |  		default: | ||||||
| @@ -2594,6 +2616,17 @@ static int ip6_pkt_prohibit_out(struct n | @@ -2600,6 +2622,17 @@ static int ip6_pkt_prohibit_out(struct n | ||||||
|  	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); |  	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -173,7 +173,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  /* |  /* | ||||||
|   *	Allocate a dst for local (unicast / anycast) address. |   *	Allocate a dst for local (unicast / anycast) address. | ||||||
|   */ |   */ | ||||||
| @@ -2829,7 +2862,8 @@ static int rtm_to_fib6_config(struct sk_ | @@ -2835,7 +2868,8 @@ static int rtm_to_fib6_config(struct sk_ | ||||||
|  	if (rtm->rtm_type == RTN_UNREACHABLE || |  	if (rtm->rtm_type == RTN_UNREACHABLE || | ||||||
|  	    rtm->rtm_type == RTN_BLACKHOLE || |  	    rtm->rtm_type == RTN_BLACKHOLE || | ||||||
|  	    rtm->rtm_type == RTN_PROHIBIT || |  	    rtm->rtm_type == RTN_PROHIBIT || | ||||||
| @@ -183,7 +183,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		cfg->fc_flags |= RTF_REJECT; |  		cfg->fc_flags |= RTF_REJECT; | ||||||
|   |   | ||||||
|  	if (rtm->rtm_type == RTN_LOCAL) |  	if (rtm->rtm_type == RTN_LOCAL) | ||||||
| @@ -3207,6 +3241,9 @@ static int rt6_fill_node(struct net *net | @@ -3213,6 +3247,9 @@ static int rt6_fill_node(struct net *net | ||||||
|  		case -EACCES: |  		case -EACCES: | ||||||
|  			rtm->rtm_type = RTN_PROHIBIT; |  			rtm->rtm_type = RTN_PROHIBIT; | ||||||
|  			break; |  			break; | ||||||
| @@ -193,7 +193,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		case -EAGAIN: |  		case -EAGAIN: | ||||||
|  			rtm->rtm_type = RTN_THROW; |  			rtm->rtm_type = RTN_THROW; | ||||||
|  			break; |  			break; | ||||||
| @@ -3480,6 +3517,8 @@ static int ip6_route_dev_notify(struct n | @@ -3489,6 +3526,8 @@ static int ip6_route_dev_notify(struct n | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
|  		net->ipv6.ip6_prohibit_entry->dst.dev = dev; |  		net->ipv6.ip6_prohibit_entry->dst.dev = dev; | ||||||
|  		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); |  		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); | ||||||
| @@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  		net->ipv6.ip6_blk_hole_entry->dst.dev = dev; |  		net->ipv6.ip6_blk_hole_entry->dst.dev = dev; | ||||||
|  		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); |  		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); | ||||||
|  #endif |  #endif | ||||||
| @@ -3696,6 +3735,17 @@ static int __net_init ip6_route_net_init | @@ -3711,6 +3750,17 @@ static int __net_init ip6_route_net_init | ||||||
|  	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; |  	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; | ||||||
|  	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, |  	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, | ||||||
|  			 ip6_template_metrics, true); |  			 ip6_template_metrics, true); | ||||||
| @@ -220,7 +220,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
|  	net->ipv6.sysctl.flush_delay = 0; |  	net->ipv6.sysctl.flush_delay = 0; | ||||||
| @@ -3714,6 +3764,8 @@ out: | @@ -3729,6 +3779,8 @@ out: | ||||||
|  	return ret; |  	return ret; | ||||||
|   |   | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
| @@ -229,7 +229,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  out_ip6_prohibit_entry: |  out_ip6_prohibit_entry: | ||||||
|  	kfree(net->ipv6.ip6_prohibit_entry); |  	kfree(net->ipv6.ip6_prohibit_entry); | ||||||
|  out_ip6_null_entry: |  out_ip6_null_entry: | ||||||
| @@ -3731,6 +3783,7 @@ static void __net_exit ip6_route_net_exi | @@ -3746,6 +3798,7 @@ static void __net_exit ip6_route_net_exi | ||||||
|  #ifdef CONFIG_IPV6_MULTIPLE_TABLES |  #ifdef CONFIG_IPV6_MULTIPLE_TABLES | ||||||
|  	kfree(net->ipv6.ip6_prohibit_entry); |  	kfree(net->ipv6.ip6_prohibit_entry); | ||||||
|  	kfree(net->ipv6.ip6_blk_hole_entry); |  	kfree(net->ipv6.ip6_blk_hole_entry); | ||||||
| @@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
|  #endif |  #endif | ||||||
|  	dst_entries_destroy(&net->ipv6.ip6_dst_ops); |  	dst_entries_destroy(&net->ipv6.ip6_dst_ops); | ||||||
|  } |  } | ||||||
| @@ -3828,6 +3881,9 @@ int __init ip6_route_init(void) | @@ -3819,6 +3872,9 @@ void __init ip6_route_init_special_entri | ||||||
|  	init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); |  	init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); | ||||||
|  	init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; |  	init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; | ||||||
|  	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); |  	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); | ||||||
| @@ -245,5 +245,5 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> | |||||||
| +	init_net.ipv6.ip6_policy_failed_entry->rt6i_idev = | +	init_net.ipv6.ip6_policy_failed_entry->rt6i_idev = | ||||||
| +		in6_dev_get(init_net.loopback_dev); | +		in6_dev_get(init_net.loopback_dev); | ||||||
|    #endif |    #endif | ||||||
|  	ret = fib6_init(); |  } | ||||||
|  	if (ret) |   | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ | |||||||
|   * @phydev: the phy_device struct |   * @phydev: the phy_device struct | ||||||
| --- a/include/linux/phy.h | --- a/include/linux/phy.h | ||||||
| +++ b/include/linux/phy.h | +++ b/include/linux/phy.h | ||||||
| @@ -812,6 +812,7 @@ int phy_ethtool_ksettings_get(struct phy | @@ -813,6 +813,7 @@ int phy_ethtool_ksettings_get(struct phy | ||||||
|  			      struct ethtool_link_ksettings *cmd); |  			      struct ethtool_link_ksettings *cmd); | ||||||
|  int phy_ethtool_ksettings_set(struct phy_device *phydev, |  int phy_ethtool_ksettings_set(struct phy_device *phydev, | ||||||
|  			      const struct ethtool_link_ksettings *cmd); |  			      const struct ethtool_link_ksettings *cmd); | ||||||
|   | |||||||
| @@ -50,7 +50,7 @@ | |||||||
|  		phy_device_free(phydev); |  		phy_device_free(phydev); | ||||||
| --- a/include/linux/phy.h | --- a/include/linux/phy.h | ||||||
| +++ b/include/linux/phy.h | +++ b/include/linux/phy.h | ||||||
| @@ -855,6 +855,23 @@ void mdio_bus_exit(void); | @@ -856,6 +856,23 @@ void mdio_bus_exit(void); | ||||||
|   |   | ||||||
|  extern struct bus_type mdio_bus_type; |  extern struct bus_type mdio_bus_type; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ | |||||||
|  /* The Mellanox Tavor device gives false positive parity errors |  /* The Mellanox Tavor device gives false positive parity errors | ||||||
|   * Mark this device with a broken_parity_status, to allow |   * Mark this device with a broken_parity_status, to allow | ||||||
|   * PCI scanning code to "skip" this now blacklisted device. |   * PCI scanning code to "skip" this now blacklisted device. | ||||||
| @@ -3016,6 +3017,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I | @@ -3038,6 +3039,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I | ||||||
|  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata); |  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata); | ||||||
|  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata); |  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata); | ||||||
|   |   | ||||||
| @@ -31,7 +31,7 @@ | |||||||
|   |   | ||||||
|  /* |  /* | ||||||
|   * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.  To |   * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.  To | ||||||
| @@ -3072,6 +3074,8 @@ static void fixup_debug_report(struct pc | @@ -3094,6 +3096,8 @@ static void fixup_debug_report(struct pc | ||||||
|  	} |  	} | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -40,7 +40,7 @@ | |||||||
|  /* |  /* | ||||||
|   * Some BIOS implementations leave the Intel GPU interrupts enabled, |   * Some BIOS implementations leave the Intel GPU interrupts enabled, | ||||||
|   * even though no one is handling them (f.e. i915 driver is never loaded). |   * even though no one is handling them (f.e. i915 driver is never loaded). | ||||||
| @@ -3106,6 +3110,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN | @@ -3128,6 +3132,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN | ||||||
|  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); |  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); | ||||||
|  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); |  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ | |||||||
|   |   | ||||||
|  #include <uapi/linux/dma-buf.h> |  #include <uapi/linux/dma-buf.h> | ||||||
|   |   | ||||||
| @@ -974,4 +975,5 @@ static void __exit dma_buf_deinit(void) | @@ -977,4 +978,5 @@ static void __exit dma_buf_deinit(void) | ||||||
|  { |  { | ||||||
|  	dma_buf_uninit_debugfs(); |  	dma_buf_uninit_debugfs(); | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -1,42 +0,0 @@ | |||||||
| From 9f327845358d3dd0d8a5a7a5436b0aa5c432e757 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Haibo Chen <haibo.chen@nxp.com> |  | ||||||
| Date: Wed, 19 Apr 2017 10:53:51 +0800 |  | ||||||
| Subject: [PATCH] mmc: sdhci-esdhc-imx: increase the pad I/O drive strength for |  | ||||||
|  DDR50 card |  | ||||||
|  |  | ||||||
| Currently for DDR50 card, it need tuning in default. We meet tuning fail |  | ||||||
| issue for DDR50 card and some data CRC error when DDR50 sd card works. |  | ||||||
|  |  | ||||||
| This is because the default pad I/O drive strength can't make sure DDR50 |  | ||||||
| card work stable. So increase the pad I/O drive strength for DDR50 card, |  | ||||||
| and use pins_100mhz. |  | ||||||
|  |  | ||||||
| This fixes DDR50 card support for IMX since DDR50 tuning was enabled from |  | ||||||
| commit 9faac7b95ea4 ("mmc: sdhci: enable tuning for DDR50") |  | ||||||
|  |  | ||||||
| Tested-and-reported-by: Tim Harvey <tharvey@gateworks.com> |  | ||||||
| Signed-off-by: Haibo Chen <haibo.chen@nxp.com> |  | ||||||
| Cc: stable@vger.kernel.org # v4.4+ |  | ||||||
| Acked-by: Dong Aisheng <aisheng.dong@nxp.com> |  | ||||||
| Acked-by: Adrian Hunter <adrian.hunter@intel.com> |  | ||||||
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |  | ||||||
| Signed-off-by: Tim Harvey <tharvey@gateworks.com> |  | ||||||
| --- |  | ||||||
|  drivers/mmc/host/sdhci-esdhc-imx.c | 1 + |  | ||||||
|  1 file changed, 1 insertion(+) |  | ||||||
|  |  | ||||||
| diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c |  | ||||||
| index 7123ef9..445fc47 100644 |  | ||||||
| --- a/drivers/mmc/host/sdhci-esdhc-imx.c |  | ||||||
| +++ b/drivers/mmc/host/sdhci-esdhc-imx.c |  | ||||||
| @@ -830,6 +830,7 @@ static int esdhc_change_pinstate(struct sdhci_host *host, |  | ||||||
|   |  | ||||||
|  	switch (uhs) { |  | ||||||
|  	case MMC_TIMING_UHS_SDR50: |  | ||||||
| +	case MMC_TIMING_UHS_DDR50: |  | ||||||
|  		pinctrl = imx_data->pins_100mhz; |  | ||||||
|  		break; |  | ||||||
|  	case MMC_TIMING_UHS_SDR104: |  | ||||||
| --  |  | ||||||
| 2.7.4 |  | ||||||
|  |  | ||||||
| @@ -13,7 +13,7 @@ Signed-off-by: Andy Gross <agross@codeaurora.org> | |||||||
|  |  | ||||||
| --- a/drivers/phy/Kconfig | --- a/drivers/phy/Kconfig | ||||||
| +++ b/drivers/phy/Kconfig | +++ b/drivers/phy/Kconfig | ||||||
| @@ -489,4 +489,16 @@ config PHY_NS2_PCIE | @@ -490,4 +490,16 @@ config PHY_NS2_PCIE | ||||||
|  	help |  	help | ||||||
|  	  Enable this to support the Broadcom Northstar2 PCIe PHY. |  	  Enable this to support the Broadcom Northstar2 PCIe PHY. | ||||||
|  	  If unsure, say N. |  	  If unsure, say N. | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ Signed-off-by: Ajay Kishore <akisho@codeaurora.org> | |||||||
| + } | + } | ||||||
| --- a/drivers/firmware/qcom_scm-64.c | --- a/drivers/firmware/qcom_scm-64.c | ||||||
| +++ b/drivers/firmware/qcom_scm-64.c | +++ b/drivers/firmware/qcom_scm-64.c | ||||||
| @@ -358,3 +358,12 @@ int __qcom_scm_pas_mss_reset(struct devi | @@ -365,3 +365,12 @@ int __qcom_scm_pas_mss_reset(struct devi | ||||||
|   |   | ||||||
|  	return ret ? : res.a1; |  	return ret ? : res.a1; | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -176,7 +176,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
| -obj-y := prom.o sysctrl.o clk.o reset.o dma.o gptu.o dcdc.o | -obj-y := prom.o sysctrl.o clk.o reset.o dma.o gptu.o dcdc.o | ||||||
| +obj-y := prom.o sysctrl.o clk.o reset.o dma.o timer.o dcdc.o | +obj-y := prom.o sysctrl.o clk.o reset.o dma.o timer.o dcdc.o | ||||||
|   |   | ||||||
|  obj-y += vmmc.o tffs.o |  obj-y += vmmc.o | ||||||
|   |   | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/arch/mips/lantiq/xway/timer.c | +++ b/arch/mips/lantiq/xway/timer.c | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1000,7 +1000,8 @@ void phy_state_machine(struct work_struc | @@ -1032,7 +1032,8 @@ void phy_state_machine(struct work_struc | ||||||
|  		/* If the link is down, give up on negotiation for now */ |  		/* If the link is down, give up on negotiation for now */ | ||||||
|  		if (!phydev->link) { |  		if (!phydev->link) { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  			phydev->adjust_link(phydev->attached_dev); |  			phydev->adjust_link(phydev->attached_dev); | ||||||
|  			break; |  			break; | ||||||
|  		} |  		} | ||||||
| @@ -1083,7 +1084,8 @@ void phy_state_machine(struct work_struc | @@ -1115,7 +1116,8 @@ void phy_state_machine(struct work_struc | ||||||
|  			netif_carrier_on(phydev->attached_dev); |  			netif_carrier_on(phydev->attached_dev); | ||||||
|  		} else { |  		} else { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -31,7 +31,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  		} |  		} | ||||||
|   |   | ||||||
|  		phydev->adjust_link(phydev->attached_dev); |  		phydev->adjust_link(phydev->attached_dev); | ||||||
| @@ -1095,7 +1097,8 @@ void phy_state_machine(struct work_struc | @@ -1127,7 +1129,8 @@ void phy_state_machine(struct work_struc | ||||||
|  	case PHY_HALTED: |  	case PHY_HALTED: | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->link = 0; |  			phydev->link = 0; | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
| +++ b/arch/mips/lantiq/xway/Makefile | +++ b/arch/mips/lantiq/xway/Makefile | ||||||
| @@ -2,4 +2,7 @@ obj-y := prom.o sysctrl.o clk.o reset.o | @@ -2,4 +2,7 @@ obj-y := prom.o sysctrl.o clk.o reset.o | ||||||
|   |   | ||||||
|  obj-y += vmmc.o tffs.o |  obj-y += vmmc.o | ||||||
|   |   | ||||||
| +obj-y += eth_mac.o | +obj-y += eth_mac.o | ||||||
| +obj-$(CONFIG_PCI) += ath5k_eep.o | +obj-$(CONFIG_PCI) += ath5k_eep.o | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1000,7 +1000,8 @@ void phy_state_machine(struct work_struc | @@ -1032,7 +1032,8 @@ void phy_state_machine(struct work_struc | ||||||
|  		/* If the link is down, give up on negotiation for now */ |  		/* If the link is down, give up on negotiation for now */ | ||||||
|  		if (!phydev->link) { |  		if (!phydev->link) { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  			phydev->adjust_link(phydev->attached_dev); |  			phydev->adjust_link(phydev->attached_dev); | ||||||
|  			break; |  			break; | ||||||
|  		} |  		} | ||||||
| @@ -1083,7 +1084,8 @@ void phy_state_machine(struct work_struc | @@ -1115,7 +1116,8 @@ void phy_state_machine(struct work_struc | ||||||
|  			netif_carrier_on(phydev->attached_dev); |  			netif_carrier_on(phydev->attached_dev); | ||||||
|  		} else { |  		} else { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -31,7 +31,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  		} |  		} | ||||||
|   |   | ||||||
|  		phydev->adjust_link(phydev->attached_dev); |  		phydev->adjust_link(phydev->attached_dev); | ||||||
| @@ -1095,7 +1097,8 @@ void phy_state_machine(struct work_struc | @@ -1127,7 +1129,8 @@ void phy_state_machine(struct work_struc | ||||||
|  	case PHY_HALTED: |  	case PHY_HALTED: | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->link = 0; |  			phydev->link = 0; | ||||||
|   | |||||||
| @@ -16,10 +16,8 @@ Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com> | |||||||
|  2 files changed, 35 insertions(+), 5 deletions(-) |  2 files changed, 35 insertions(+), 5 deletions(-) | ||||||
|  create mode 100644 include/dt-bindings/power/mt2701-power.h |  create mode 100644 include/dt-bindings/power/mt2701-power.h | ||||||
|  |  | ||||||
| Index: linux-4.9.14/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt | --- a/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt | ||||||
| =================================================================== | +++ b/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt | ||||||
| --- linux-4.9.14.orig/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt |  | ||||||
| +++ linux-4.9.14/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt |  | ||||||
| @@ -9,17 +9,20 @@ domain control. | @@ -9,17 +9,20 @@ domain control. | ||||||
|   |   | ||||||
|  The driver implements the Generic PM domain bindings described in |  The driver implements the Generic PM domain bindings described in | ||||||
| @@ -46,10 +44,8 @@ Index: linux-4.9.14/Documentation/devicetree/bindings/soc/mediatek/scpsys.txt | |||||||
|   |   | ||||||
|  Optional properties: |  Optional properties: | ||||||
|  - vdec-supply: Power supply for the vdec power domain |  - vdec-supply: Power supply for the vdec power domain | ||||||
| Index: linux-4.9.14/include/dt-bindings/power/mt2701-power.h |  | ||||||
| =================================================================== |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ linux-4.9.14/include/dt-bindings/power/mt2701-power.h | +++ b/include/dt-bindings/power/mt2701-power.h | ||||||
| @@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||||||
| +/* | +/* | ||||||
| + * Copyright (C) 2015 MediaTek Inc. | + * Copyright (C) 2015 MediaTek Inc. | ||||||
|   | |||||||
| @@ -12,8 +12,6 @@ Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com> | |||||||
|  drivers/soc/mediatek/mtk-scpsys.c | 348 +++++++++++++++++++++++--------------- |  drivers/soc/mediatek/mtk-scpsys.c | 348 +++++++++++++++++++++++--------------- | ||||||
|  1 file changed, 210 insertions(+), 138 deletions(-) |  1 file changed, 210 insertions(+), 138 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c |  | ||||||
| index 837effe19907..722aac80e611 100644 |  | ||||||
| --- a/drivers/soc/mediatek/mtk-scpsys.c | --- a/drivers/soc/mediatek/mtk-scpsys.c | ||||||
| +++ b/drivers/soc/mediatek/mtk-scpsys.c | +++ b/drivers/soc/mediatek/mtk-scpsys.c | ||||||
| @@ -11,17 +11,15 @@ | @@ -11,17 +11,15 @@ | ||||||
| @@ -181,7 +179,7 @@ index 837effe19907..722aac80e611 100644 | |||||||
|  	struct genpd_onecell_data pd_data; |  	struct genpd_onecell_data pd_data; | ||||||
|  	struct device *dev; |  	struct device *dev; | ||||||
|  	void __iomem *base; |  	void __iomem *base; | ||||||
| @@ -408,57 +324,55 @@ static bool scpsys_active_wakeup(struct device *dev) | @@ -408,57 +324,55 @@ static bool scpsys_active_wakeup(struct | ||||||
|  	return scpd->data->active_wakeup; |  	return scpd->data->active_wakeup; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -262,7 +260,7 @@ index 837effe19907..722aac80e611 100644 | |||||||
|  		struct scp_domain *scpd = &scp->domains[i]; |  		struct scp_domain *scpd = &scp->domains[i]; | ||||||
|  		const struct scp_domain_data *data = &scp_domain_data[i]; |  		const struct scp_domain_data *data = &scp_domain_data[i]; | ||||||
|   |   | ||||||
| @@ -467,13 +381,15 @@ static int scpsys_probe(struct platform_device *pdev) | @@ -467,13 +381,15 @@ static int scpsys_probe(struct platform_ | ||||||
|  			if (PTR_ERR(scpd->supply) == -ENODEV) |  			if (PTR_ERR(scpd->supply) == -ENODEV) | ||||||
|  				scpd->supply = NULL; |  				scpd->supply = NULL; | ||||||
|  			else |  			else | ||||||
| @@ -273,15 +271,15 @@ index 837effe19907..722aac80e611 100644 | |||||||
|   |   | ||||||
| -	pd_data->num_domains = NUM_DOMAINS; | -	pd_data->num_domains = NUM_DOMAINS; | ||||||
| +	pd_data->num_domains = num; | +	pd_data->num_domains = num; | ||||||
|  | + | ||||||
|  | +	init_clks(pdev, clk); | ||||||
|   |   | ||||||
| -	for (i = 0; i < NUM_DOMAINS; i++) { | -	for (i = 0; i < NUM_DOMAINS; i++) { | ||||||
| +	init_clks(pdev, clk); |  | ||||||
| + |  | ||||||
| +	for (i = 0; i < num; i++) { | +	for (i = 0; i < num; i++) { | ||||||
|  		struct scp_domain *scpd = &scp->domains[i]; |  		struct scp_domain *scpd = &scp->domains[i]; | ||||||
|  		struct generic_pm_domain *genpd = &scpd->genpd; |  		struct generic_pm_domain *genpd = &scpd->genpd; | ||||||
|  		const struct scp_domain_data *data = &scp_domain_data[i]; |  		const struct scp_domain_data *data = &scp_domain_data[i]; | ||||||
| @@ -482,13 +398,37 @@ static int scpsys_probe(struct platform_device *pdev) | @@ -482,13 +398,37 @@ static int scpsys_probe(struct platform_ | ||||||
|  		scpd->scp = scp; |  		scpd->scp = scp; | ||||||
|   |   | ||||||
|  		scpd->data = data; |  		scpd->data = data; | ||||||
| @@ -321,7 +319,7 @@ index 837effe19907..722aac80e611 100644 | |||||||
|   |   | ||||||
|  		/* |  		/* | ||||||
|  		 * Initially turn on all domains to make the domains usable |  		 * Initially turn on all domains to make the domains usable | ||||||
| @@ -507,6 +447,123 @@ static int scpsys_probe(struct platform_device *pdev) | @@ -507,6 +447,123 @@ static int scpsys_probe(struct platform_ | ||||||
|  	 * valid. |  	 * valid. | ||||||
|  	 */ |  	 */ | ||||||
|   |   | ||||||
| @@ -445,7 +443,7 @@ index 837effe19907..722aac80e611 100644 | |||||||
|  	ret = pm_genpd_add_subdomain(pd_data->domains[MT8173_POWER_DOMAIN_MFG_ASYNC], |  	ret = pm_genpd_add_subdomain(pd_data->domains[MT8173_POWER_DOMAIN_MFG_ASYNC], | ||||||
|  		pd_data->domains[MT8173_POWER_DOMAIN_MFG_2D]); |  		pd_data->domains[MT8173_POWER_DOMAIN_MFG_2D]); | ||||||
|  	if (ret && IS_ENABLED(CONFIG_PM)) |  	if (ret && IS_ENABLED(CONFIG_PM)) | ||||||
| @@ -517,21 +574,36 @@ static int scpsys_probe(struct platform_device *pdev) | @@ -517,21 +574,36 @@ static int scpsys_probe(struct platform_ | ||||||
|  	if (ret && IS_ENABLED(CONFIG_PM)) |  	if (ret && IS_ENABLED(CONFIG_PM)) | ||||||
|  		dev_err(&pdev->dev, "Failed to add subdomain: %d\n", ret); |  		dev_err(&pdev->dev, "Failed to add subdomain: %d\n", ret); | ||||||
|   |   | ||||||
| @@ -486,6 +484,3 @@ index 837effe19907..722aac80e611 100644 | |||||||
|  static struct platform_driver scpsys_drv = { |  static struct platform_driver scpsys_drv = { | ||||||
|  	.probe = scpsys_probe, |  	.probe = scpsys_probe, | ||||||
|  	.driver = { |  	.driver = { | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,10 +17,8 @@ Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com> | |||||||
|  drivers/soc/mediatek/mtk-scpsys.c | 117 +++++++++++++++++++++++++++++++++++++- |  drivers/soc/mediatek/mtk-scpsys.c | 117 +++++++++++++++++++++++++++++++++++++- | ||||||
|  2 files changed, 117 insertions(+), 2 deletions(-) |  2 files changed, 117 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
| Index: linux-4.9.14/drivers/soc/mediatek/Kconfig | --- a/drivers/soc/mediatek/Kconfig | ||||||
| =================================================================== | +++ b/drivers/soc/mediatek/Kconfig | ||||||
| --- linux-4.9.14.orig/drivers/soc/mediatek/Kconfig |  | ||||||
| +++ linux-4.9.14/drivers/soc/mediatek/Kconfig |  | ||||||
| @@ -23,7 +23,7 @@ config MTK_PMIC_WRAP | @@ -23,7 +23,7 @@ config MTK_PMIC_WRAP | ||||||
|  config MTK_SCPSYS |  config MTK_SCPSYS | ||||||
|  	bool "MediaTek SCPSYS Support" |  	bool "MediaTek SCPSYS Support" | ||||||
| @@ -30,10 +28,8 @@ Index: linux-4.9.14/drivers/soc/mediatek/Kconfig | |||||||
|  	select REGMAP |  	select REGMAP | ||||||
|  	select MTK_INFRACFG |  	select MTK_INFRACFG | ||||||
|  	select PM_GENERIC_DOMAINS if PM |  	select PM_GENERIC_DOMAINS if PM | ||||||
| Index: linux-4.9.14/drivers/soc/mediatek/mtk-scpsys.c | --- a/drivers/soc/mediatek/mtk-scpsys.c | ||||||
| =================================================================== | +++ b/drivers/soc/mediatek/mtk-scpsys.c | ||||||
| --- linux-4.9.14.orig/drivers/soc/mediatek/mtk-scpsys.c |  | ||||||
| +++ linux-4.9.14/drivers/soc/mediatek/mtk-scpsys.c |  | ||||||
| @@ -20,6 +20,7 @@ | @@ -20,6 +20,7 @@ | ||||||
|  #include <linux/regulator/consumer.h> |  #include <linux/regulator/consumer.h> | ||||||
|  #include <linux/soc/mediatek/infracfg.h> |  #include <linux/soc/mediatek/infracfg.h> | ||||||
|   | |||||||
| @@ -13,10 +13,8 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  5 files changed, 279 insertions(+) |  5 files changed, 279 insertions(+) | ||||||
|  create mode 100644 drivers/pwm/pwm-mediatek.c |  create mode 100644 drivers/pwm/pwm-mediatek.c | ||||||
|  |  | ||||||
| Index: linux-4.9.17/drivers/pwm/Kconfig | --- a/drivers/pwm/Kconfig | ||||||
| =================================================================== | +++ b/drivers/pwm/Kconfig | ||||||
| --- linux-4.9.17.orig/drivers/pwm/Kconfig |  | ||||||
| +++ linux-4.9.17/drivers/pwm/Kconfig |  | ||||||
| @@ -282,6 +282,15 @@ config PWM_MTK_DISP | @@ -282,6 +282,15 @@ config PWM_MTK_DISP | ||||||
|  	  To compile this driver as a module, choose M here: the module |  	  To compile this driver as a module, choose M here: the module | ||||||
|  	  will be called pwm-mtk-disp. |  	  will be called pwm-mtk-disp. | ||||||
| @@ -33,10 +31,8 @@ Index: linux-4.9.17/drivers/pwm/Kconfig | |||||||
|  config PWM_MXS |  config PWM_MXS | ||||||
|  	tristate "Freescale MXS PWM support" |  	tristate "Freescale MXS PWM support" | ||||||
|  	depends on ARCH_MXS && OF |  	depends on ARCH_MXS && OF | ||||||
| Index: linux-4.9.17/drivers/pwm/Makefile | --- a/drivers/pwm/Makefile | ||||||
| =================================================================== | +++ b/drivers/pwm/Makefile | ||||||
| --- linux-4.9.17.orig/drivers/pwm/Makefile |  | ||||||
| +++ linux-4.9.17/drivers/pwm/Makefile |  | ||||||
| @@ -25,6 +25,7 @@ obj-$(CONFIG_PWM_LPSS)		+= pwm-lpss.o | @@ -25,6 +25,7 @@ obj-$(CONFIG_PWM_LPSS)		+= pwm-lpss.o | ||||||
|  obj-$(CONFIG_PWM_LPSS_PCI)	+= pwm-lpss-pci.o |  obj-$(CONFIG_PWM_LPSS_PCI)	+= pwm-lpss-pci.o | ||||||
|  obj-$(CONFIG_PWM_LPSS_PLATFORM)	+= pwm-lpss-platform.o |  obj-$(CONFIG_PWM_LPSS_PLATFORM)	+= pwm-lpss-platform.o | ||||||
| @@ -45,10 +41,8 @@ Index: linux-4.9.17/drivers/pwm/Makefile | |||||||
|  obj-$(CONFIG_PWM_MTK_DISP)	+= pwm-mtk-disp.o |  obj-$(CONFIG_PWM_MTK_DISP)	+= pwm-mtk-disp.o | ||||||
|  obj-$(CONFIG_PWM_MXS)		+= pwm-mxs.o |  obj-$(CONFIG_PWM_MXS)		+= pwm-mxs.o | ||||||
|  obj-$(CONFIG_PWM_OMAP_DMTIMER)	+= pwm-omap-dmtimer.o |  obj-$(CONFIG_PWM_OMAP_DMTIMER)	+= pwm-omap-dmtimer.o | ||||||
| Index: linux-4.9.17/drivers/pwm/pwm-mediatek.c |  | ||||||
| =================================================================== |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ linux-4.9.17/drivers/pwm/pwm-mediatek.c | +++ b/drivers/pwm/pwm-mediatek.c | ||||||
| @@ -0,0 +1,230 @@ | @@ -0,0 +1,230 @@ | ||||||
| +/* | +/* | ||||||
| + * Mediatek Pulse Width Modulator driver | + * Mediatek Pulse Width Modulator driver | ||||||
|   | |||||||
| @@ -26,11 +26,9 @@ Signed-off-by: Sean Wang <sean.wang@mediatek.com> | |||||||
|  drivers/mfd/mt6397-core.c | 4 ++++ |  drivers/mfd/mt6397-core.c | 4 ++++ | ||||||
|  1 file changed, 4 insertions(+) |  1 file changed, 4 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c |  | ||||||
| index e14d8b0..8e601c8 100644 |  | ||||||
| --- a/drivers/mfd/mt6397-core.c | --- a/drivers/mfd/mt6397-core.c | ||||||
| +++ b/drivers/mfd/mt6397-core.c | +++ b/drivers/mfd/mt6397-core.c | ||||||
| @@ -48,6 +48,10 @@ | @@ -48,6 +48,10 @@ static const struct mfd_cell mt6323_devs | ||||||
|  		.name = "mt6323-regulator", |  		.name = "mt6323-regulator", | ||||||
|  		.of_compatible = "mediatek,mt6323-regulator" |  		.of_compatible = "mediatek,mt6323-regulator" | ||||||
|  	}, |  	}, | ||||||
|   | |||||||
| @@ -26,9 +26,6 @@ Signed-off-by: Sean Wang <sean.wang@mediatek.com> | |||||||
|  1 file changed, 60 insertions(+) |  1 file changed, 60 insertions(+) | ||||||
|  create mode 100644 Documentation/devicetree/bindings/leds/leds-mt6323.txt |  create mode 100644 Documentation/devicetree/bindings/leds/leds-mt6323.txt | ||||||
|  |  | ||||||
| diff --git a/Documentation/devicetree/bindings/leds/leds-mt6323.txt b/Documentation/devicetree/bindings/leds/leds-mt6323.txt |  | ||||||
| new file mode 100644 |  | ||||||
| index 0000000..ac38472 |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/Documentation/devicetree/bindings/leds/leds-mt6323.txt | +++ b/Documentation/devicetree/bindings/leds/leds-mt6323.txt | ||||||
| @@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||||||
|   | |||||||
| @@ -26,11 +26,9 @@ Signed-off-by: Sean Wang <sean.wang@mediatek.com> | |||||||
|  Documentation/devicetree/bindings/mfd/mt6397.txt | 1 + |  Documentation/devicetree/bindings/mfd/mt6397.txt | 1 + | ||||||
|  1 file changed, 1 insertion(+) |  1 file changed, 1 insertion(+) | ||||||
|  |  | ||||||
| diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt |  | ||||||
| index c568d52..522a3bb 100644 |  | ||||||
| --- a/Documentation/devicetree/bindings/mfd/mt6397.txt | --- a/Documentation/devicetree/bindings/mfd/mt6397.txt | ||||||
| +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt | +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt | ||||||
| @@ -6,6 +6,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules: | @@ -6,6 +6,7 @@ MT6397/MT6323 is a multifunction device | ||||||
|  - Audio codec |  - Audio codec | ||||||
|  - GPIO |  - GPIO | ||||||
|  - Clock |  - Clock | ||||||
|   | |||||||
| @@ -30,10 +30,8 @@ Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> | |||||||
|  3 files changed, 511 insertions(+) |  3 files changed, 511 insertions(+) | ||||||
|  create mode 100644 drivers/leds/leds-mt6323.c |  create mode 100644 drivers/leds/leds-mt6323.c | ||||||
|  |  | ||||||
| Index: linux-4.9.17/drivers/leds/Kconfig | --- a/drivers/leds/Kconfig | ||||||
| =================================================================== | +++ b/drivers/leds/Kconfig | ||||||
| --- linux-4.9.17.orig/drivers/leds/Kconfig |  | ||||||
| +++ linux-4.9.17/drivers/leds/Kconfig |  | ||||||
| @@ -117,6 +117,14 @@ config LEDS_MIKROTIK_RB532 | @@ -117,6 +117,14 @@ config LEDS_MIKROTIK_RB532 | ||||||
|  	  This option enables support for the so called "User LED" of |  	  This option enables support for the so called "User LED" of | ||||||
|  	  Mikrotik's Routerboard 532. |  	  Mikrotik's Routerboard 532. | ||||||
| @@ -49,10 +47,8 @@ Index: linux-4.9.17/drivers/leds/Kconfig | |||||||
|  config LEDS_S3C24XX |  config LEDS_S3C24XX | ||||||
|  	tristate "LED Support for Samsung S3C24XX GPIO LEDs" |  	tristate "LED Support for Samsung S3C24XX GPIO LEDs" | ||||||
|  	depends on LEDS_CLASS |  	depends on LEDS_CLASS | ||||||
| Index: linux-4.9.17/drivers/leds/leds-mt6323.c |  | ||||||
| =================================================================== |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ linux-4.9.17/drivers/leds/leds-mt6323.c | +++ b/drivers/leds/leds-mt6323.c | ||||||
| @@ -0,0 +1,502 @@ | @@ -0,0 +1,502 @@ | ||||||
| +/* | +/* | ||||||
| + * LED driver for Mediatek MT6323 PMIC | + * LED driver for Mediatek MT6323 PMIC | ||||||
|   | |||||||
| @@ -28,11 +28,9 @@ Acked-by: Lee Jones <lee.jones@linaro.org> | |||||||
|  drivers/mfd/mt6397-core.c | 3 +-- |  drivers/mfd/mt6397-core.c | 3 +-- | ||||||
|  1 file changed, 1 insertion(+), 2 deletions(-) |  1 file changed, 1 insertion(+), 2 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c |  | ||||||
| index 8e601c8..04a601f 100644 |  | ||||||
| --- a/drivers/mfd/mt6397-core.c | --- a/drivers/mfd/mt6397-core.c | ||||||
| +++ b/drivers/mfd/mt6397-core.c | +++ b/drivers/mfd/mt6397-core.c | ||||||
| @@ -47,8 +47,7 @@ | @@ -47,8 +47,7 @@ static const struct mfd_cell mt6323_devs | ||||||
|  	{ |  	{ | ||||||
|  		.name = "mt6323-regulator", |  		.name = "mt6323-regulator", | ||||||
|  		.of_compatible = "mediatek,mt6323-regulator" |  		.of_compatible = "mediatek,mt6323-regulator" | ||||||
|   | |||||||
| @@ -27,9 +27,6 @@ Acked-by: Rob Herring <robh@kernel.org> | |||||||
|  1 file changed, 92 insertions(+) |  1 file changed, 92 insertions(+) | ||||||
|  create mode 100644 Documentation/devicetree/bindings/net/dsa/mt7530.txt |  create mode 100644 Documentation/devicetree/bindings/net/dsa/mt7530.txt | ||||||
|  |  | ||||||
| diff --git a/Documentation/devicetree/bindings/net/dsa/mt7530.txt b/Documentation/devicetree/bindings/net/dsa/mt7530.txt |  | ||||||
| new file mode 100644 |  | ||||||
| index 0000000..a9bc27b |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/Documentation/devicetree/bindings/net/dsa/mt7530.txt | +++ b/Documentation/devicetree/bindings/net/dsa/mt7530.txt | ||||||
| @@ -0,0 +1,92 @@ | @@ -0,0 +1,92 @@ | ||||||
|   | |||||||
| @@ -16,10 +16,8 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  drivers/net/ethernet/mediatek/mtk_eth_soc.c |   33 ++++++++++++++++----------- |  drivers/net/ethernet/mediatek/mtk_eth_soc.c |   33 ++++++++++++++++----------- | ||||||
|  1 file changed, 20 insertions(+), 13 deletions(-) |  1 file changed, 20 insertions(+), 13 deletions(-) | ||||||
|  |  | ||||||
| Index: linux-4.9.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| =================================================================== | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| --- linux-4.9.14.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| +++ linux-4.9.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| @@ -706,7 +706,16 @@ static int mtk_tx_map(struct sk_buff *sk | @@ -706,7 +706,16 @@ static int mtk_tx_map(struct sk_buff *sk | ||||||
|  	WRITE_ONCE(itxd->txd3, (TX_DMA_SWC | TX_DMA_PLEN0(skb_headlen(skb)) | |  	WRITE_ONCE(itxd->txd3, (TX_DMA_SWC | TX_DMA_PLEN0(skb_headlen(skb)) | | ||||||
|  				(!nr_frags * TX_DMA_LS0))); |  				(!nr_frags * TX_DMA_LS0))); | ||||||
|   | |||||||
| @@ -36,11 +36,9 @@ Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | |||||||
|  6 files changed, 127 insertions(+) |  6 files changed, 127 insertions(+) | ||||||
|  create mode 100644 net/dsa/tag_mtk.c |  create mode 100644 net/dsa/tag_mtk.c | ||||||
|  |  | ||||||
| diff --git a/include/net/dsa.h b/include/net/dsa.h |  | ||||||
| index 4e13e69..3276547 100644 |  | ||||||
| --- a/include/net/dsa.h | --- a/include/net/dsa.h | ||||||
| +++ b/include/net/dsa.h | +++ b/include/net/dsa.h | ||||||
| @@ -31,6 +31,7 @@ enum dsa_tag_protocol { | @@ -27,6 +27,7 @@ enum dsa_tag_protocol { | ||||||
|  	DSA_TAG_PROTO_EDSA, |  	DSA_TAG_PROTO_EDSA, | ||||||
|  	DSA_TAG_PROTO_BRCM, |  	DSA_TAG_PROTO_BRCM, | ||||||
|  	DSA_TAG_PROTO_QCA, |  	DSA_TAG_PROTO_QCA, | ||||||
| @@ -48,31 +46,25 @@ index 4e13e69..3276547 100644 | |||||||
|  	DSA_TAG_LAST,		/* MUST BE LAST */ |  	DSA_TAG_LAST,		/* MUST BE LAST */ | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig |  | ||||||
| index 9649238..d78789b 100644 |  | ||||||
| --- a/net/dsa/Kconfig | --- a/net/dsa/Kconfig | ||||||
| +++ b/net/dsa/Kconfig | +++ b/net/dsa/Kconfig | ||||||
| @@ -31,4 +31,6 @@ config NET_DSA_TAG_TRAILER | @@ -41,4 +41,6 @@ config NET_DSA_TAG_TRAILER | ||||||
|  config NET_DSA_TAG_QCA |  config NET_DSA_TAG_QCA | ||||||
|  	bool |  	bool | ||||||
|   |   | ||||||
| +config NET_DSA_TAG_MTK | +config NET_DSA_TAG_MTK | ||||||
| +	bool | +	bool | ||||||
|  endif |  endif | ||||||
| diff --git a/net/dsa/Makefile b/net/dsa/Makefile |  | ||||||
| index 31d3437..9b1d478 100644 |  | ||||||
| --- a/net/dsa/Makefile | --- a/net/dsa/Makefile | ||||||
| +++ b/net/dsa/Makefile | +++ b/net/dsa/Makefile | ||||||
| @@ -8,3 +8,4 @@ dsa_core-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o | @@ -8,3 +8,4 @@ dsa_core-$(CONFIG_NET_DSA_TAG_DSA) += ta | ||||||
|  dsa_core-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o |  dsa_core-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o | ||||||
|  dsa_core-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o |  dsa_core-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o | ||||||
|  dsa_core-$(CONFIG_NET_DSA_TAG_QCA) += tag_qca.o |  dsa_core-$(CONFIG_NET_DSA_TAG_QCA) += tag_qca.o | ||||||
| +dsa_core-$(CONFIG_NET_DSA_TAG_MTK) += tag_mtk.o | +dsa_core-$(CONFIG_NET_DSA_TAG_MTK) += tag_mtk.o | ||||||
| diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c |  | ||||||
| index b6d4f6a..617f736 100644 |  | ||||||
| --- a/net/dsa/dsa.c | --- a/net/dsa/dsa.c | ||||||
| +++ b/net/dsa/dsa.c | +++ b/net/dsa/dsa.c | ||||||
| @@ -53,6 +53,9 @@ static struct sk_buff *dsa_slave_notag_xmit(struct sk_buff *skb, | @@ -57,6 +57,9 @@ const struct dsa_device_ops *dsa_device_ | ||||||
|  #ifdef CONFIG_NET_DSA_TAG_QCA |  #ifdef CONFIG_NET_DSA_TAG_QCA | ||||||
|  	[DSA_TAG_PROTO_QCA] = &qca_netdev_ops, |  	[DSA_TAG_PROTO_QCA] = &qca_netdev_ops, | ||||||
|  #endif |  #endif | ||||||
| @@ -82,11 +74,9 @@ index b6d4f6a..617f736 100644 | |||||||
|  	[DSA_TAG_PROTO_NONE] = &none_ops, |  	[DSA_TAG_PROTO_NONE] = &none_ops, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h |  | ||||||
| index 0706a51..2a31399 100644 |  | ||||||
| --- a/net/dsa/dsa_priv.h | --- a/net/dsa/dsa_priv.h | ||||||
| +++ b/net/dsa/dsa_priv.h | +++ b/net/dsa/dsa_priv.h | ||||||
| @@ -85,4 +85,7 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent, | @@ -84,4 +84,7 @@ extern const struct dsa_device_ops brcm_ | ||||||
|  /* tag_qca.c */ |  /* tag_qca.c */ | ||||||
|  extern const struct dsa_device_ops qca_netdev_ops; |  extern const struct dsa_device_ops qca_netdev_ops; | ||||||
|   |   | ||||||
| @@ -94,9 +84,6 @@ index 0706a51..2a31399 100644 | |||||||
| +extern const struct dsa_device_ops mtk_netdev_ops; | +extern const struct dsa_device_ops mtk_netdev_ops; | ||||||
| + | + | ||||||
|  #endif |  #endif | ||||||
| diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c |  | ||||||
| new file mode 100644 |  | ||||||
| index 0000000..833a9d6 |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/net/dsa/tag_mtk.c | +++ b/net/dsa/tag_mtk.c | ||||||
| @@ -0,0 +1,117 @@ | @@ -0,0 +1,117 @@ | ||||||
|   | |||||||
| @@ -33,11 +33,9 @@ Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | |||||||
|  drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++++ |  drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++++ | ||||||
|  2 files changed, 10 insertions(+) |  2 files changed, 10 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| index 9e75768..c21ed99 100644 |  | ||||||
| --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| @@ -1846,6 +1846,12 @@ static int mtk_hw_init(struct mtk_eth *eth) | @@ -1855,6 +1855,12 @@ static int mtk_hw_init(struct mtk_eth *e | ||||||
|  	/* GE2, Force 1000M/FD, FC ON */ |  	/* GE2, Force 1000M/FD, FC ON */ | ||||||
|  	mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(1)); |  	mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(1)); | ||||||
|   |   | ||||||
| @@ -50,8 +48,6 @@ index 9e75768..c21ed99 100644 | |||||||
|  	/* Enable RX VLan Offloading */ |  	/* Enable RX VLan Offloading */ | ||||||
|  	mtk_w32(eth, 1, MTK_CDMP_EG_CTRL); |  	mtk_w32(eth, 1, MTK_CDMP_EG_CTRL); | ||||||
|   |   | ||||||
| diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h |  | ||||||
| index 99b1c8e..996024d 100644 |  | ||||||
| --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h | ||||||
| +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h | ||||||
| @@ -70,6 +70,10 @@ | @@ -70,6 +70,10 @@ | ||||||
|   | |||||||
| @@ -31,11 +31,9 @@ Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | |||||||
|  drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 ++ |  drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 ++ | ||||||
|  1 file changed, 2 insertions(+) |  1 file changed, 2 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| index c21ed99..84b09a4 100644 |  | ||||||
| --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| @@ -2323,6 +2323,8 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) | @@ -2333,6 +2333,8 @@ static int mtk_add_mac(struct mtk_eth *e | ||||||
|  	eth->netdev[id]->ethtool_ops = &mtk_ethtool_ops; |  	eth->netdev[id]->ethtool_ops = &mtk_ethtool_ops; | ||||||
|   |   | ||||||
|  	eth->netdev[id]->irq = eth->irq[0]; |  	eth->netdev[id]->irq = eth->irq[0]; | ||||||
|   | |||||||
| @@ -49,8 +49,6 @@ Signed-off-by: Landen Chao <Landen.Chao@mediatek.com> | |||||||
|  create mode 100644 drivers/net/dsa/mt7530.c |  create mode 100644 drivers/net/dsa/mt7530.c | ||||||
|  create mode 100644 drivers/net/dsa/mt7530.h |  create mode 100644 drivers/net/dsa/mt7530.h | ||||||
|  |  | ||||||
| diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig |  | ||||||
| index 0659846..5b322b4 100644 |  | ||||||
| --- a/drivers/net/dsa/Kconfig | --- a/drivers/net/dsa/Kconfig | ||||||
| +++ b/drivers/net/dsa/Kconfig | +++ b/drivers/net/dsa/Kconfig | ||||||
| @@ -34,4 +34,12 @@ config NET_DSA_QCA8K | @@ -34,4 +34,12 @@ config NET_DSA_QCA8K | ||||||
| @@ -66,21 +64,16 @@ index 0659846..5b322b4 100644 | |||||||
| +	  chip. | +	  chip. | ||||||
| + | + | ||||||
|  endmenu |  endmenu | ||||||
| diff --git a/drivers/net/dsa/Makefile b/drivers/net/dsa/Makefile |  | ||||||
| index a3c9416..8e629c1 100644 |  | ||||||
| --- a/drivers/net/dsa/Makefile | --- a/drivers/net/dsa/Makefile | ||||||
| +++ b/drivers/net/dsa/Makefile | +++ b/drivers/net/dsa/Makefile | ||||||
| @@ -2,6 +2,6 @@ obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o | @@ -1,6 +1,6 @@ | ||||||
|  obj-$(CONFIG_NET_DSA_BCM_SF2)	+= bcm-sf2.o |  obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o | ||||||
|  bcm-sf2-objs			:= bcm_sf2.o bcm_sf2_cfp.o |  obj-$(CONFIG_NET_DSA_BCM_SF2)	+= bcm_sf2.o | ||||||
|  obj-$(CONFIG_NET_DSA_QCA8K)	+= qca8k.o |  obj-$(CONFIG_NET_DSA_QCA8K)	+= qca8k.o | ||||||
| - | - | ||||||
| +obj-$(CONFIG_NET_DSA_MT7530) += mt7530.o | +obj-$(CONFIG_NET_DSA_MT7530) += mt7530.o | ||||||
|  obj-y				+= b53/ |  obj-y				+= b53/ | ||||||
|  obj-y				+= mv88e6xxx/ |  obj-y				+= mv88e6xxx/ | ||||||
| diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c |  | ||||||
| new file mode 100644 |  | ||||||
| index 0000000..ad2e6f8 |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/drivers/net/dsa/mt7530.c | +++ b/drivers/net/dsa/mt7530.c | ||||||
| @@ -0,0 +1,1126 @@ | @@ -0,0 +1,1126 @@ | ||||||
| @@ -1210,9 +1203,6 @@ index 0000000..ad2e6f8 | |||||||
| +MODULE_DESCRIPTION("Driver for Mediatek MT7530 Switch"); | +MODULE_DESCRIPTION("Driver for Mediatek MT7530 Switch"); | ||||||
| +MODULE_LICENSE("GPL"); | +MODULE_LICENSE("GPL"); | ||||||
| +MODULE_ALIAS("platform:mediatek-mt7530"); | +MODULE_ALIAS("platform:mediatek-mt7530"); | ||||||
| diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h |  | ||||||
| new file mode 100644 |  | ||||||
| index 0000000..05a612f |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/drivers/net/dsa/mt7530.h | +++ b/drivers/net/dsa/mt7530.h | ||||||
| @@ -0,0 +1,390 @@ | @@ -0,0 +1,390 @@ | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.9.17/drivers/net/dsa/mt7530.c | --- a/drivers/net/dsa/mt7530.c | ||||||
| =================================================================== | +++ b/drivers/net/dsa/mt7530.c | ||||||
| --- linux-4.9.17.orig/drivers/net/dsa/mt7530.c |  | ||||||
| +++ linux-4.9.17/drivers/net/dsa/mt7530.c |  | ||||||
| @@ -834,6 +834,7 @@ mt7530_port_bridge_join(struct dsa_switc | @@ -834,6 +834,7 @@ mt7530_port_bridge_join(struct dsa_switc | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| @@ -70,10 +68,8 @@ Index: linux-4.9.17/drivers/net/dsa/mt7530.c | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static void |  static void | ||||||
| Index: linux-4.9.17/drivers/net/dsa/mt7530.h | --- a/drivers/net/dsa/mt7530.h | ||||||
| =================================================================== | +++ b/drivers/net/dsa/mt7530.h | ||||||
| --- linux-4.9.17.orig/drivers/net/dsa/mt7530.h |  | ||||||
| +++ linux-4.9.17/drivers/net/dsa/mt7530.h |  | ||||||
| @@ -379,6 +379,8 @@ struct mt7530_priv { | @@ -379,6 +379,8 @@ struct mt7530_priv { | ||||||
|  	struct mt7530_port	ports[MT7530_NUM_PORTS]; |  	struct mt7530_port	ports[MT7530_NUM_PORTS]; | ||||||
|  	/* protect among processes for registers access*/ |  	/* protect among processes for registers access*/ | ||||||
| @@ -83,10 +79,8 @@ Index: linux-4.9.17/drivers/net/dsa/mt7530.h | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  struct mt7530_hw_stats { |  struct mt7530_hw_stats { | ||||||
| Index: linux-4.9.17/net/dsa/tag_mtk.c | --- a/net/dsa/tag_mtk.c | ||||||
| =================================================================== | +++ b/net/dsa/tag_mtk.c | ||||||
| --- linux-4.9.17.orig/net/dsa/tag_mtk.c |  | ||||||
| +++ linux-4.9.17/net/dsa/tag_mtk.c |  | ||||||
| @@ -35,7 +35,7 @@ static struct sk_buff *mtk_tag_xmit(stru | @@ -35,7 +35,7 @@ static struct sk_buff *mtk_tag_xmit(stru | ||||||
|  	/* Build the tag after the MAC Source Address */ |  	/* Build the tag after the MAC Source Address */ | ||||||
|  	mtk_tag = skb->data + 2 * ETH_ALEN; |  	mtk_tag = skb->data + 2 * ETH_ALEN; | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| =================================================================== | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| --- linux-4.9.17.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| +++ linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| @@ -2459,15 +2459,23 @@ static int mtk_probe(struct platform_dev | @@ -2459,15 +2459,23 @@ static int mtk_probe(struct platform_dev | ||||||
|  			goto err_deinit_hw; |  			goto err_deinit_hw; | ||||||
|  	} |  	} | ||||||
| @@ -26,10 +24,8 @@ Index: linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.c | |||||||
|   |   | ||||||
|  	err = mtk_mdio_init(eth); |  	err = mtk_mdio_init(eth); | ||||||
|  	if (err) |  	if (err) | ||||||
| Index: linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.h | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h | ||||||
| =================================================================== | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h | ||||||
| --- linux-4.9.17.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.h |  | ||||||
| +++ linux-4.9.17/drivers/net/ethernet/mediatek/mtk_eth_soc.h |  | ||||||
| @@ -539,6 +539,7 @@ struct mtk_eth { | @@ -539,6 +539,7 @@ struct mtk_eth { | ||||||
|  	struct net_device		*netdev[MTK_MAX_DEVS]; |  	struct net_device		*netdev[MTK_MAX_DEVS]; | ||||||
|  	struct mtk_mac			*mac[MTK_MAX_DEVS]; |  	struct mtk_mac			*mac[MTK_MAX_DEVS]; | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.9.20/drivers/net/dsa/mt7530.c | --- a/drivers/net/dsa/mt7530.c | ||||||
| =================================================================== | +++ b/drivers/net/dsa/mt7530.c | ||||||
| --- linux-4.9.20.orig/drivers/net/dsa/mt7530.c |  | ||||||
| +++ linux-4.9.20/drivers/net/dsa/mt7530.c |  | ||||||
| @@ -629,6 +629,11 @@ mt7530_setup(struct dsa_switch *ds) | @@ -629,6 +629,11 @@ mt7530_setup(struct dsa_switch *ds) | ||||||
|  	val = mt7530_read(priv, MT7530_MHWTRAP); |  	val = mt7530_read(priv, MT7530_MHWTRAP); | ||||||
|  	val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS; |  	val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS; | ||||||
| @@ -14,10 +12,8 @@ Index: linux-4.9.20/drivers/net/dsa/mt7530.c | |||||||
|  	mt7530_write(priv, MT7530_MHWTRAP, val); |  	mt7530_write(priv, MT7530_MHWTRAP, val); | ||||||
|   |   | ||||||
|  	/* Enable and reset MIB counters */ |  	/* Enable and reset MIB counters */ | ||||||
| Index: linux-4.9.20/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| =================================================================== | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| --- linux-4.9.20.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| +++ linux-4.9.20/drivers/net/ethernet/mediatek/mtk_eth_soc.c |  | ||||||
| @@ -221,6 +221,9 @@ static void mtk_phy_link_adjust(struct n | @@ -221,6 +221,9 @@ static void mtk_phy_link_adjust(struct n | ||||||
|  		netif_carrier_on(dev); |  		netif_carrier_on(dev); | ||||||
|  	else |  	else | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.9.20/drivers/net/dsa/mt7530.c | --- a/drivers/net/dsa/mt7530.c | ||||||
| =================================================================== | +++ b/drivers/net/dsa/mt7530.c | ||||||
| --- linux-4.9.20.orig/drivers/net/dsa/mt7530.c |  | ||||||
| +++ linux-4.9.20/drivers/net/dsa/mt7530.c |  | ||||||
| @@ -996,15 +996,7 @@ err: | @@ -996,15 +996,7 @@ err: | ||||||
|  static enum dsa_tag_protocol |  static enum dsa_tag_protocol | ||||||
|  mtk_get_tag_protocol(struct dsa_switch *ds) |  mtk_get_tag_protocol(struct dsa_switch *ds) | ||||||
| @@ -19,10 +17,8 @@ Index: linux-4.9.20/drivers/net/dsa/mt7530.c | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static struct dsa_switch_ops mt7530_switch_ops = { |  static struct dsa_switch_ops mt7530_switch_ops = { | ||||||
| Index: linux-4.9.20/include/net/dsa.h | --- a/include/net/dsa.h | ||||||
| =================================================================== | +++ b/include/net/dsa.h | ||||||
| --- linux-4.9.20.orig/include/net/dsa.h |  | ||||||
| +++ linux-4.9.20/include/net/dsa.h |  | ||||||
| @@ -145,6 +145,8 @@ struct dsa_port { | @@ -145,6 +145,8 @@ struct dsa_port { | ||||||
|  	struct device_node	*dn; |  	struct device_node	*dn; | ||||||
|  	unsigned int		ageing_time; |  	unsigned int		ageing_time; | ||||||
| @@ -72,10 +68,8 @@ Index: linux-4.9.20/include/net/dsa.h | |||||||
|  struct switchdev_trans; |  struct switchdev_trans; | ||||||
|  struct switchdev_obj; |  struct switchdev_obj; | ||||||
|  struct switchdev_obj_port_fdb; |  struct switchdev_obj_port_fdb; | ||||||
| Index: linux-4.9.20/net/dsa/dsa2.c | --- a/net/dsa/dsa2.c | ||||||
| =================================================================== | +++ b/net/dsa/dsa2.c | ||||||
| --- linux-4.9.20.orig/net/dsa/dsa2.c |  | ||||||
| +++ linux-4.9.20/net/dsa/dsa2.c |  | ||||||
| @@ -248,8 +248,6 @@ static int dsa_cpu_port_apply(struct dev | @@ -248,8 +248,6 @@ static int dsa_cpu_port_apply(struct dev | ||||||
|  		return err; |  		return err; | ||||||
|  	} |  	} | ||||||
| @@ -151,10 +145,8 @@ Index: linux-4.9.20/net/dsa/dsa2.c | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	pr_info("DSA: switch %d %d parsed\n", dst->tree, ds->index); |  	pr_info("DSA: switch %d %d parsed\n", dst->tree, ds->index); | ||||||
| Index: linux-4.9.20/net/dsa/dsa_priv.h | --- a/net/dsa/dsa_priv.h | ||||||
| =================================================================== | +++ b/net/dsa/dsa_priv.h | ||||||
| --- linux-4.9.20.orig/net/dsa/dsa_priv.h |  | ||||||
| +++ linux-4.9.20/net/dsa/dsa_priv.h |  | ||||||
| @@ -43,6 +43,7 @@ struct dsa_slave_priv { | @@ -43,6 +43,7 @@ struct dsa_slave_priv { | ||||||
|  	int			old_duplex; |  	int			old_duplex; | ||||||
|   |   | ||||||
| @@ -163,10 +155,8 @@ Index: linux-4.9.20/net/dsa/dsa_priv.h | |||||||
|  #ifdef CONFIG_NET_POLL_CONTROLLER |  #ifdef CONFIG_NET_POLL_CONTROLLER | ||||||
|  	struct netpoll		*netpoll; |  	struct netpoll		*netpoll; | ||||||
|  #endif |  #endif | ||||||
| Index: linux-4.9.20/net/dsa/slave.c | --- a/net/dsa/slave.c | ||||||
| =================================================================== | +++ b/net/dsa/slave.c | ||||||
| --- linux-4.9.20.orig/net/dsa/slave.c |  | ||||||
| +++ linux-4.9.20/net/dsa/slave.c |  | ||||||
| @@ -61,7 +61,7 @@ static int dsa_slave_get_iflink(const st | @@ -61,7 +61,7 @@ static int dsa_slave_get_iflink(const st | ||||||
|  { |  { | ||||||
|  	struct dsa_slave_priv *p = netdev_priv(dev); |  	struct dsa_slave_priv *p = netdev_priv(dev); | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.9.20/drivers/net/dsa/mt7530.c | --- a/drivers/net/dsa/mt7530.c | ||||||
| =================================================================== | +++ b/drivers/net/dsa/mt7530.c | ||||||
| --- linux-4.9.20.orig/drivers/net/dsa/mt7530.c |  | ||||||
| +++ linux-4.9.20/drivers/net/dsa/mt7530.c |  | ||||||
| @@ -627,7 +627,7 @@ mt7530_setup(struct dsa_switch *ds) | @@ -627,7 +627,7 @@ mt7530_setup(struct dsa_switch *ds) | ||||||
|   |   | ||||||
|  	/* Enable Port 6 only; P5 as GMAC5 which currently is not supported */ |  	/* Enable Port 6 only; P5 as GMAC5 which currently is not supported */ | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/arch/powerpc/platforms/85xx/common.c | --- a/arch/powerpc/platforms/85xx/common.c | ||||||
| +++ b/arch/powerpc/platforms/85xx/common.c | +++ b/arch/powerpc/platforms/85xx/common.c | ||||||
| @@ -33,6 +33,7 @@ static const struct of_device_id mpc85xx_common_ids[] __initconst = { | @@ -33,6 +33,7 @@ static const struct of_device_id mpc85xx | ||||||
|  	{ .compatible = "fsl,mpc8548-guts", }, |  	{ .compatible = "fsl,mpc8548-guts", }, | ||||||
|  	/* Probably unnecessary? */ |  	/* Probably unnecessary? */ | ||||||
|  	{ .compatible = "gpio-leds", }, |  	{ .compatible = "gpio-leds", }, | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/arch/powerpc/boot/Makefile | --- a/arch/powerpc/boot/Makefile | ||||||
| +++ b/arch/powerpc/boot/Makefile | +++ b/arch/powerpc/boot/Makefile | ||||||
| @@ -137,6 +137,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pseries-head.S | @@ -137,6 +137,7 @@ src-plat-$(CONFIG_PPC_PSERIES) += pserie | ||||||
|  src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S |  src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S | ||||||
|  src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S |  src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S | ||||||
|  src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c |  src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c | ||||||
| @@ -25,7 +25,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|   |   | ||||||
|  src-wlib := $(sort $(src-wlib-y)) |  src-wlib := $(sort $(src-wlib-y)) | ||||||
|  src-plat := $(sort $(src-plat-y)) |  src-plat := $(sort $(src-plat-y)) | ||||||
| @@ -320,6 +321,7 @@ image-$(CONFIG_TQM8555)			+= cuImage.tqm8555 | @@ -320,6 +321,7 @@ image-$(CONFIG_TQM8555)			+= cuImage.tqm | ||||||
|  image-$(CONFIG_TQM8560)			+= cuImage.tqm8560 |  image-$(CONFIG_TQM8560)			+= cuImage.tqm8560 | ||||||
|  image-$(CONFIG_SBC8548)			+= cuImage.sbc8548 |  image-$(CONFIG_SBC8548)			+= cuImage.sbc8548 | ||||||
|  image-$(CONFIG_KSI8560)			+= cuImage.ksi8560 |  image-$(CONFIG_KSI8560)			+= cuImage.ksi8560 | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -959,6 +959,16 @@ void phy_start(struct phy_device *phydev | @@ -991,6 +991,16 @@ void phy_start(struct phy_device *phydev | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(phy_start); |  EXPORT_SYMBOL(phy_start); | ||||||
|   |   | ||||||
| @@ -33,7 +33,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  /** |  /** | ||||||
|   * phy_state_machine - Handle the state machine |   * phy_state_machine - Handle the state machine | ||||||
|   * @work: work_struct that describes the work to be done |   * @work: work_struct that describes the work to be done | ||||||
| @@ -1000,8 +1010,7 @@ void phy_state_machine(struct work_struc | @@ -1032,8 +1042,7 @@ void phy_state_machine(struct work_struc | ||||||
|  		/* If the link is down, give up on negotiation for now */ |  		/* If the link is down, give up on negotiation for now */ | ||||||
|  		if (!phydev->link) { |  		if (!phydev->link) { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -43,7 +43,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  			break; |  			break; | ||||||
|  		} |  		} | ||||||
|   |   | ||||||
| @@ -1013,9 +1022,7 @@ void phy_state_machine(struct work_struc | @@ -1045,9 +1054,7 @@ void phy_state_machine(struct work_struc | ||||||
|  		/* If AN is done, we're running */ |  		/* If AN is done, we're running */ | ||||||
|  		if (err > 0) { |  		if (err > 0) { | ||||||
|  			phydev->state = PHY_RUNNING; |  			phydev->state = PHY_RUNNING; | ||||||
| @@ -54,7 +54,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  		} else if (0 == phydev->link_timeout--) |  		} else if (0 == phydev->link_timeout--) | ||||||
|  			needs_aneg = true; |  			needs_aneg = true; | ||||||
|  		break; |  		break; | ||||||
| @@ -1040,8 +1047,7 @@ void phy_state_machine(struct work_struc | @@ -1072,8 +1079,7 @@ void phy_state_machine(struct work_struc | ||||||
|  				} |  				} | ||||||
|  			} |  			} | ||||||
|  			phydev->state = PHY_RUNNING; |  			phydev->state = PHY_RUNNING; | ||||||
| @@ -64,7 +64,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  		} |  		} | ||||||
|  		break; |  		break; | ||||||
|  	case PHY_FORCING: |  	case PHY_FORCING: | ||||||
| @@ -1051,13 +1057,12 @@ void phy_state_machine(struct work_struc | @@ -1083,13 +1089,12 @@ void phy_state_machine(struct work_struc | ||||||
|   |   | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->state = PHY_RUNNING; |  			phydev->state = PHY_RUNNING; | ||||||
| @@ -80,7 +80,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  		break; |  		break; | ||||||
|  	case PHY_RUNNING: |  	case PHY_RUNNING: | ||||||
|  		/* Only register a CHANGE if we are polling and link changed |  		/* Only register a CHANGE if we are polling and link changed | ||||||
| @@ -1080,14 +1085,12 @@ void phy_state_machine(struct work_struc | @@ -1112,14 +1117,12 @@ void phy_state_machine(struct work_struc | ||||||
|   |   | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->state = PHY_RUNNING; |  			phydev->state = PHY_RUNNING; | ||||||
| @@ -97,7 +97,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  		if (phy_interrupt_is_valid(phydev)) |  		if (phy_interrupt_is_valid(phydev)) | ||||||
|  			err = phy_config_interrupt(phydev, |  			err = phy_config_interrupt(phydev, | ||||||
|  						   PHY_INTERRUPT_ENABLED); |  						   PHY_INTERRUPT_ENABLED); | ||||||
| @@ -1095,8 +1098,7 @@ void phy_state_machine(struct work_struc | @@ -1127,8 +1130,7 @@ void phy_state_machine(struct work_struc | ||||||
|  	case PHY_HALTED: |  	case PHY_HALTED: | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->link = 0; |  			phydev->link = 0; | ||||||
| @@ -107,7 +107,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  			do_suspend = true; |  			do_suspend = true; | ||||||
|  		} |  		} | ||||||
|  		break; |  		break; | ||||||
| @@ -1116,11 +1118,11 @@ void phy_state_machine(struct work_struc | @@ -1148,11 +1150,11 @@ void phy_state_machine(struct work_struc | ||||||
|   |   | ||||||
|  				if (phydev->link) { |  				if (phydev->link) { | ||||||
|  					phydev->state = PHY_RUNNING; |  					phydev->state = PHY_RUNNING; | ||||||
| @@ -121,7 +121,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  			} else { |  			} else { | ||||||
|  				phydev->state = PHY_AN; |  				phydev->state = PHY_AN; | ||||||
|  				phydev->link_timeout = PHY_AN_TIMEOUT; |  				phydev->link_timeout = PHY_AN_TIMEOUT; | ||||||
| @@ -1132,11 +1134,11 @@ void phy_state_machine(struct work_struc | @@ -1164,11 +1166,11 @@ void phy_state_machine(struct work_struc | ||||||
|   |   | ||||||
|  			if (phydev->link) { |  			if (phydev->link) { | ||||||
|  				phydev->state = PHY_RUNNING; |  				phydev->state = PHY_RUNNING; | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | |||||||
|  obj-$(CONFIG_MDIO_BOARDINFO)	+= mdio-boardinfo.o |  obj-$(CONFIG_MDIO_BOARDINFO)	+= mdio-boardinfo.o | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1175,91 +1175,6 @@ void phy_mac_interrupt(struct phy_device | @@ -1207,91 +1207,6 @@ void phy_mac_interrupt(struct phy_device | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(phy_mac_interrupt); |  EXPORT_SYMBOL(phy_mac_interrupt); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1311,11 +1311,16 @@ EXPORT_SYMBOL(phy_ethtool_get_eee); | @@ -1343,11 +1343,16 @@ EXPORT_SYMBOL(phy_ethtool_get_eee); | ||||||
|   */ |   */ | ||||||
|  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) |  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1311,16 +1311,33 @@ EXPORT_SYMBOL(phy_ethtool_get_eee); | @@ -1343,16 +1343,33 @@ EXPORT_SYMBOL(phy_ethtool_get_eee); | ||||||
|   */ |   */ | ||||||
|  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) |  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1195,6 +1195,7 @@ int phy_init_eee(struct phy_device *phyd | @@ -1227,6 +1227,7 @@ int phy_init_eee(struct phy_device *phyd | ||||||
|  	if ((phydev->duplex == DUPLEX_FULL) && |  	if ((phydev->duplex == DUPLEX_FULL) && | ||||||
|  	    ((phydev->interface == PHY_INTERFACE_MODE_MII) || |  	    ((phydev->interface == PHY_INTERFACE_MODE_MII) || | ||||||
|  	    (phydev->interface == PHY_INTERFACE_MODE_GMII) || |  	    (phydev->interface == PHY_INTERFACE_MODE_GMII) || | ||||||
|   | |||||||
| @@ -37,7 +37,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | |||||||
|   |   | ||||||
|  /** |  /** | ||||||
|   * phy_aneg_done - return auto-negotiation status |   * phy_aneg_done - return auto-negotiation status | ||||||
| @@ -1407,3 +1425,14 @@ int phy_ethtool_set_link_ksettings(struc | @@ -1439,3 +1457,14 @@ int phy_ethtool_set_link_ksettings(struc | ||||||
|  	return phy_ethtool_ksettings_set(phydev, cmd); |  	return phy_ethtool_ksettings_set(phydev, cmd); | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(phy_ethtool_set_link_ksettings); |  EXPORT_SYMBOL(phy_ethtool_set_link_ksettings); | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -580,6 +580,7 @@ void phy_start_machine(struct phy_device | @@ -612,6 +612,7 @@ void phy_start_machine(struct phy_device | ||||||
|  { |  { | ||||||
|  	queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, HZ); |  	queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, HZ); | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy.c | --- a/drivers/net/phy/phy.c | ||||||
| +++ b/drivers/net/phy/phy.c | +++ b/drivers/net/phy/phy.c | ||||||
| @@ -1000,7 +1000,8 @@ void phy_state_machine(struct work_struc | @@ -1032,7 +1032,8 @@ void phy_state_machine(struct work_struc | ||||||
|  		/* If the link is down, give up on negotiation for now */ |  		/* If the link is down, give up on negotiation for now */ | ||||||
|  		if (!phydev->link) { |  		if (!phydev->link) { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -21,7 +21,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  			phydev->adjust_link(phydev->attached_dev); |  			phydev->adjust_link(phydev->attached_dev); | ||||||
|  			break; |  			break; | ||||||
|  		} |  		} | ||||||
| @@ -1083,7 +1084,8 @@ void phy_state_machine(struct work_struc | @@ -1115,7 +1116,8 @@ void phy_state_machine(struct work_struc | ||||||
|  			netif_carrier_on(phydev->attached_dev); |  			netif_carrier_on(phydev->attached_dev); | ||||||
|  		} else { |  		} else { | ||||||
|  			phydev->state = PHY_NOLINK; |  			phydev->state = PHY_NOLINK; | ||||||
| @@ -31,7 +31,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org> | |||||||
|  		} |  		} | ||||||
|   |   | ||||||
|  		phydev->adjust_link(phydev->attached_dev); |  		phydev->adjust_link(phydev->attached_dev); | ||||||
| @@ -1095,7 +1097,8 @@ void phy_state_machine(struct work_struc | @@ -1127,7 +1129,8 @@ void phy_state_machine(struct work_struc | ||||||
|  	case PHY_HALTED: |  	case PHY_HALTED: | ||||||
|  		if (phydev->link) { |  		if (phydev->link) { | ||||||
|  			phydev->link = 0; |  			phydev->link = 0; | ||||||
|   | |||||||
| @@ -1,21 +0,0 @@ | |||||||
| From 2583143af8111d430bdca0268b6cdb7ccc7c3f9d Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Daniel Golle <daniel@makrotopia.org> |  | ||||||
| Date: Fri, 13 Jan 2017 05:40:04 +0100 |  | ||||||
| Subject: [PATCH] mips: ralink/rt3883: fix typo in pinctrl lna_g_func |  | ||||||
|  |  | ||||||
| Signed-off-by: Daniel Golle <daniel@makrotopia.org> |  | ||||||
| --- |  | ||||||
|  arch/mips/ralink/rt3883.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| --- a/arch/mips/ralink/rt3883.c |  | ||||||
| +++ b/arch/mips/ralink/rt3883.c |  | ||||||
| @@ -36,7 +36,7 @@ static struct rt2880_pmx_func uartlite_f |  | ||||||
|  static struct rt2880_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) }; |  | ||||||
|  static struct rt2880_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) }; |  | ||||||
|  static struct rt2880_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) }; |  | ||||||
| -static struct rt2880_pmx_func lna_g_func[] = { FUNC("lna a", 0, 35, 3) }; |  | ||||||
| +static struct rt2880_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) }; |  | ||||||
|  static struct rt2880_pmx_func pci_func[] = { |  | ||||||
|  	FUNC("pci-dev", 0, 40, 32), |  | ||||||
|  	FUNC("pci-host2", 1, 40, 32), |  | ||||||
| @@ -1,8 +1,6 @@ | |||||||
| diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c |  | ||||||
| index 697007afb99c..4a4e0b4c077c 100644 |  | ||||||
| --- a/drivers/hwmon/w83627ehf.c | --- a/drivers/hwmon/w83627ehf.c | ||||||
| +++ b/drivers/hwmon/w83627ehf.c | +++ b/drivers/hwmon/w83627ehf.c | ||||||
| @@ -2707,8 +2707,8 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr, | @@ -2707,8 +2707,8 @@ static int __init w83627ehf_find(int sio | ||||||
|  	static const char sio_name_W83627UHG[] __initconst = "W83627UHG"; |  	static const char sio_name_W83627UHG[] __initconst = "W83627UHG"; | ||||||
|  	static const char sio_name_W83667HG[] __initconst = "W83667HG"; |  	static const char sio_name_W83667HG[] __initconst = "W83667HG"; | ||||||
|  	static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B"; |  	static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B"; | ||||||
| @@ -13,7 +11,7 @@ index 697007afb99c..4a4e0b4c077c 100644 | |||||||
|   |   | ||||||
|  	u16 val; |  	u16 val; | ||||||
|  	const char *sio_name; |  	const char *sio_name; | ||||||
| @@ -2749,14 +2749,14 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr, | @@ -2749,14 +2749,14 @@ static int __init w83627ehf_find(int sio | ||||||
|  		sio_data->kind = w83667hg_b; |  		sio_data->kind = w83667hg_b; | ||||||
|  		sio_name = sio_name_W83667HG_B; |  		sio_name = sio_name_W83667HG_B; | ||||||
|  		break; |  		break; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user