kernel: bump 4.14 to 4.14.59
Drop patch that was superseded upstream: ramips/0036-mtd-fix-cfi-cmdset-0002-erase-status-check.patch Drop upstreamed patches: - apm821xx/020-0001-crypto-crypto4xx-remove-bad-list_del.patch - apm821xx/020-0011-crypto-crypto4xx-fix-crypto4xx_build_pdr-crypto4xx_b.patch - ath79/0011-MIPS-ath79-fix-register-address-in-ath79_ddr_wb_flus.patch - brcm63xx/001-4.15-08-bcm63xx_enet-correct-clock-usage.patch - brcm63xx/001-4.15-09-bcm63xx_enet-do-not-write-to-random-DMA-channel-on-B.patch - generic/backport/080-net-convert-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch - generic/pending/170-usb-dwc2-Fix-DMA-alignment-to-start-at-allocated-boun.patch - generic/pending/900-gen_stats-fix-netlink-stats-padding.patch In 4.14.55, a patch was introduced that breaks ext4 images in some cases. The newly introduced patch backport-4.14/500-ext4-fix-check-to-prevent-initializing-reserved-inod.patch addresses this breakage. Fixes the following CVEs: - CVE-2018-10876 - CVE-2018-10877 - CVE-2018-10879 - CVE-2018-10880 - CVE-2018-10881 - CVE-2018-10882 - CVE-2018-10883 Compile-tested: ath79, octeon, x86/64 Runtime-tested: ath79, octeon, x86/64 Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
This commit is contained in:
		| @@ -5,12 +5,12 @@ LINUX_RELEASE?=1 | |||||||
| LINUX_VERSION-3.18 = .71 | LINUX_VERSION-3.18 = .71 | ||||||
| LINUX_VERSION-4.4 = .121 | LINUX_VERSION-4.4 = .121 | ||||||
| LINUX_VERSION-4.9 = .111 | LINUX_VERSION-4.9 = .111 | ||||||
| LINUX_VERSION-4.14 = .54 | LINUX_VERSION-4.14 = .59 | ||||||
|  |  | ||||||
| LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240 | LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240 | ||||||
| LINUX_KERNEL_HASH-4.4.121 = 44a88268b5088dc326b30c9b9133ac35a9a200b636b7268d08f32abeae6ca729 | LINUX_KERNEL_HASH-4.4.121 = 44a88268b5088dc326b30c9b9133ac35a9a200b636b7268d08f32abeae6ca729 | ||||||
| LINUX_KERNEL_HASH-4.9.111 = 5966558959dc580f163766f3fdefd7e57c01b2b45d51202d00b3807c253759dd | LINUX_KERNEL_HASH-4.9.111 = 5966558959dc580f163766f3fdefd7e57c01b2b45d51202d00b3807c253759dd | ||||||
| LINUX_KERNEL_HASH-4.14.54 = 451642ac28c539a91072f1fb83b1c061d6d44df870ddf5562400ade5e1c4b6c6 | LINUX_KERNEL_HASH-4.14.59 = 7ec633c661bba941239e340bb35391d356eda541fb4c323d07034d09d05b319b | ||||||
|  |  | ||||||
| remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) | remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) | ||||||
| sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) | sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) | ||||||
|   | |||||||
| @@ -1,32 +0,0 @@ | |||||||
| From a728a196d253530f17da5c86dc7dfbe58c5f7094 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Christian Lamparter <chunkeey@googlemail.com> |  | ||||||
| Date: Fri, 25 Aug 2017 15:47:14 +0200 |  | ||||||
| Subject: [PATCH 01/25] crypto: crypto4xx - remove bad list_del |  | ||||||
|  |  | ||||||
| alg entries are only added to the list, after the registration |  | ||||||
| was successful. If the registration failed, it was never added |  | ||||||
| to the list in the first place. |  | ||||||
|  |  | ||||||
| Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> |  | ||||||
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |  | ||||||
| --- |  | ||||||
|  drivers/crypto/amcc/crypto4xx_core.c | 6 ++---- |  | ||||||
|  1 file changed, 2 insertions(+), 4 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c |  | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c |  | ||||||
| @@ -1033,12 +1033,10 @@ int crypto4xx_register_alg(struct crypto |  | ||||||
|  			break; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		if (rc) { |  | ||||||
| -			list_del(&alg->entry); |  | ||||||
| +		if (rc) |  | ||||||
|  			kfree(alg); |  | ||||||
| -		} else { |  | ||||||
| +		else |  | ||||||
|  			list_add_tail(&alg->entry, &sec_dev->alg_list); |  | ||||||
| -		} |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	return 0; |  | ||||||
| @@ -67,7 +67,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|   |   | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c | --- a/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c | +++ b/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| @@ -962,7 +962,7 @@ u32 crypto4xx_build_pd(struct crypto_asy | @@ -964,7 +964,7 @@ u32 crypto4xx_build_pd(struct crypto_asy | ||||||
|   |   | ||||||
|  	sa->sa_command_1.bf.hash_crypto_offset = 0; |  	sa->sa_command_1.bf.hash_crypto_offset = 0; | ||||||
|  	pd->pd_ctl.w = ctx->pd_ctl; |  	pd->pd_ctl.w = ctx->pd_ctl; | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  |  | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c | --- a/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c | +++ b/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| @@ -1114,7 +1114,9 @@ struct crypto4xx_alg_common crypto4xx_al | @@ -1116,7 +1116,9 @@ struct crypto4xx_alg_common crypto4xx_al | ||||||
|  		.cra_name 	= "cbc(aes)", |  		.cra_name 	= "cbc(aes)", | ||||||
|  		.cra_driver_name = "cbc-aes-ppc4xx", |  		.cra_driver_name = "cbc-aes-ppc4xx", | ||||||
|  		.cra_priority 	= CRYPTO4XX_CRYPTO_PRIORITY, |  		.cra_priority 	= CRYPTO4XX_CRYPTO_PRIORITY, | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  |  | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c | --- a/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c | +++ b/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| @@ -1079,7 +1079,6 @@ static void crypto4xx_bh_tasklet_cb(unsi | @@ -1081,7 +1081,6 @@ static void crypto4xx_bh_tasklet_cb(unsi | ||||||
|  			pd->pd_ctl.bf.pe_done = 0; |  			pd->pd_ctl.bf.pe_done = 0; | ||||||
|  			crypto4xx_pd_done(core_dev->dev, tail); |  			crypto4xx_pd_done(core_dev->dev, tail); | ||||||
|  			crypto4xx_put_pd_to_pdr(core_dev->dev, tail); |  			crypto4xx_put_pd_to_pdr(core_dev->dev, tail); | ||||||
|   | |||||||
| @@ -109,7 +109,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  #include <crypto/sha.h> |  #include <crypto/sha.h> | ||||||
|  #include "crypto4xx_reg_def.h" |  #include "crypto4xx_reg_def.h" | ||||||
|  #include "crypto4xx_core.h" |  #include "crypto4xx_core.h" | ||||||
| @@ -1133,6 +1134,103 @@ struct crypto4xx_alg_common crypto4xx_al | @@ -1135,6 +1136,103 @@ struct crypto4xx_alg_common crypto4xx_al | ||||||
|  			} |  			} | ||||||
|  		} |  		} | ||||||
|  	}}, |  	}}, | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  #include "crypto4xx_reg_def.h" |  #include "crypto4xx_reg_def.h" | ||||||
|  #include "crypto4xx_core.h" |  #include "crypto4xx_core.h" | ||||||
|  #include "crypto4xx_sa.h" |  #include "crypto4xx_sa.h" | ||||||
| @@ -481,111 +482,44 @@ static inline struct ce_sd *crypto4xx_ge | @@ -483,111 +484,44 @@ static inline struct ce_sd *crypto4xx_ge | ||||||
|  	return  (struct ce_sd *)(dev->sdr + sizeof(struct ce_sd) * idx); |  	return  (struct ce_sd *)(dev->sdr + sizeof(struct ce_sd) * idx); | ||||||
|  } |  } | ||||||
|   |   | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  |  | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c | --- a/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c | +++ b/drivers/crypto/amcc/crypto4xx_core.c | ||||||
| @@ -394,10 +394,9 @@ static u32 crypto4xx_build_sdr(struct cr | @@ -396,10 +396,9 @@ static u32 crypto4xx_build_sdr(struct cr | ||||||
|  	if (!dev->sdr) |  	if (!dev->sdr) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
|   |   | ||||||
| @@ -29,7 +29,7 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  			&dev->scatter_buffer_pa, GFP_ATOMIC); |  			&dev->scatter_buffer_pa, GFP_ATOMIC); | ||||||
|  	if (!dev->scatter_buffer_va) { |  	if (!dev->scatter_buffer_va) { | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  		dma_free_coherent(dev->core_dev->device, | ||||||
| @@ -410,7 +409,7 @@ static u32 crypto4xx_build_sdr(struct cr | @@ -412,7 +411,7 @@ static u32 crypto4xx_build_sdr(struct cr | ||||||
|   |   | ||||||
|  	for (i = 0; i < PPC4XX_NUM_SD; i++) { |  	for (i = 0; i < PPC4XX_NUM_SD; i++) { | ||||||
|  		sd_array[i].ptr = dev->scatter_buffer_pa + |  		sd_array[i].ptr = dev->scatter_buffer_pa + | ||||||
| @@ -38,9 +38,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
| @@ -425,7 +424,7 @@ static void crypto4xx_destroy_sdr(struct | @@ -427,7 +426,7 @@ static void crypto4xx_destroy_sdr(struct | ||||||
|   |   | ||||||
|  	if (dev->scatter_buffer_va != NULL) |  	if (dev->scatter_buffer_va) | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  		dma_free_coherent(dev->core_dev->device, | ||||||
| -				  dev->scatter_buffer_size * PPC4XX_NUM_SD, | -				  dev->scatter_buffer_size * PPC4XX_NUM_SD, | ||||||
| +				  PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, | +				  PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, | ||||||
|   | |||||||
| @@ -1,84 +0,0 @@ | |||||||
| From 5d59ad6eea82ef8df92b4109615a0dde9d8093e9 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Christian Lamparter <chunkeey@googlemail.com> |  | ||||||
| Date: Fri, 25 Aug 2017 15:47:24 +0200 |  | ||||||
| Subject: [PATCH 11/25] crypto: crypto4xx - fix crypto4xx_build_pdr, |  | ||||||
|  crypto4xx_build_sdr leak |  | ||||||
|  |  | ||||||
| If one of the later memory allocations in rypto4xx_build_pdr() |  | ||||||
| fails: dev->pdr (and/or) dev->pdr_uinfo wouldn't be freed. |  | ||||||
|  |  | ||||||
| crypto4xx_build_sdr() has the same issue with dev->sdr. |  | ||||||
|  |  | ||||||
| Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> |  | ||||||
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |  | ||||||
| --- |  | ||||||
|  drivers/crypto/amcc/crypto4xx_core.c | 17 +++++++++-------- |  | ||||||
|  1 file changed, 9 insertions(+), 8 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/crypto/amcc/crypto4xx_core.c |  | ||||||
| +++ b/drivers/crypto/amcc/crypto4xx_core.c |  | ||||||
| @@ -209,7 +209,7 @@ static u32 crypto4xx_build_pdr(struct cr |  | ||||||
|  				  dev->pdr_pa); |  | ||||||
|  		return -ENOMEM; |  | ||||||
|  	} |  | ||||||
| -	memset(dev->pdr, 0,  sizeof(struct ce_pd) * PPC4XX_NUM_PD); |  | ||||||
| +	memset(dev->pdr, 0, sizeof(struct ce_pd) * PPC4XX_NUM_PD); |  | ||||||
|  	dev->shadow_sa_pool = dma_alloc_coherent(dev->core_dev->device, |  | ||||||
|  				   256 * PPC4XX_NUM_PD, |  | ||||||
|  				   &dev->shadow_sa_pool_pa, |  | ||||||
| @@ -242,13 +242,15 @@ static u32 crypto4xx_build_pdr(struct cr |  | ||||||
|   |  | ||||||
|  static void crypto4xx_destroy_pdr(struct crypto4xx_device *dev) |  | ||||||
|  { |  | ||||||
| -	if (dev->pdr != NULL) |  | ||||||
| +	if (dev->pdr) |  | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  | ||||||
|  				  sizeof(struct ce_pd) * PPC4XX_NUM_PD, |  | ||||||
|  				  dev->pdr, dev->pdr_pa); |  | ||||||
| + |  | ||||||
|  	if (dev->shadow_sa_pool) |  | ||||||
|  		dma_free_coherent(dev->core_dev->device, 256 * PPC4XX_NUM_PD, |  | ||||||
|  				  dev->shadow_sa_pool, dev->shadow_sa_pool_pa); |  | ||||||
| + |  | ||||||
|  	if (dev->shadow_sr_pool) |  | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  | ||||||
|  			sizeof(struct sa_state_record) * PPC4XX_NUM_PD, |  | ||||||
| @@ -417,12 +419,12 @@ static u32 crypto4xx_build_sdr(struct cr |  | ||||||
|   |  | ||||||
|  static void crypto4xx_destroy_sdr(struct crypto4xx_device *dev) |  | ||||||
|  { |  | ||||||
| -	if (dev->sdr != NULL) |  | ||||||
| +	if (dev->sdr) |  | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  | ||||||
|  				  sizeof(struct ce_sd) * PPC4XX_NUM_SD, |  | ||||||
|  				  dev->sdr, dev->sdr_pa); |  | ||||||
|   |  | ||||||
| -	if (dev->scatter_buffer_va != NULL) |  | ||||||
| +	if (dev->scatter_buffer_va) |  | ||||||
|  		dma_free_coherent(dev->core_dev->device, |  | ||||||
|  				  PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, |  | ||||||
|  				  dev->scatter_buffer_va, |  | ||||||
| @@ -1223,7 +1225,7 @@ static int crypto4xx_probe(struct platfo |  | ||||||
|   |  | ||||||
|  	rc = crypto4xx_build_gdr(core_dev->dev); |  | ||||||
|  	if (rc) |  | ||||||
| -		goto err_build_gdr; |  | ||||||
| +		goto err_build_pdr; |  | ||||||
|   |  | ||||||
|  	rc = crypto4xx_build_sdr(core_dev->dev); |  | ||||||
|  	if (rc) |  | ||||||
| @@ -1266,12 +1268,11 @@ err_iomap: |  | ||||||
|  err_request_irq: |  | ||||||
|  	irq_dispose_mapping(core_dev->irq); |  | ||||||
|  	tasklet_kill(&core_dev->tasklet); |  | ||||||
| -	crypto4xx_destroy_sdr(core_dev->dev); |  | ||||||
|  err_build_sdr: |  | ||||||
| +	crypto4xx_destroy_sdr(core_dev->dev); |  | ||||||
|  	crypto4xx_destroy_gdr(core_dev->dev); |  | ||||||
| -err_build_gdr: |  | ||||||
| -	crypto4xx_destroy_pdr(core_dev->dev); |  | ||||||
|  err_build_pdr: |  | ||||||
| +	crypto4xx_destroy_pdr(core_dev->dev); |  | ||||||
|  	kfree(core_dev->dev); |  | ||||||
|  err_alloc_dev: |  | ||||||
|  	kfree(core_dev); |  | ||||||
| @@ -44,7 +44,7 @@ produce a noisy warning. | |||||||
|  		hcd->msi_enabled = 1; |  		hcd->msi_enabled = 1; | ||||||
| --- a/drivers/usb/host/xhci.h | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1850,6 +1850,7 @@ struct xhci_hcd { | @@ -1854,6 +1854,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 */ | ||||||
|   | |||||||
| @@ -1,27 +0,0 @@ | |||||||
| From 54204ef3edbb1aa2390cabba61fe185a12cc39f0 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Felix Fietkau <nbd@nbd.name> |  | ||||||
| Date: Tue, 6 Mar 2018 08:35:44 +0100 |  | ||||||
| Subject: [PATCH 11/27] MIPS: ath79: fix register address in |  | ||||||
|  ath79_ddr_wb_flush() |  | ||||||
|  |  | ||||||
| ath79_ddr_wb_flush_base has the type void __iomem *, so register offsets |  | ||||||
| need to be a multiple of 4. |  | ||||||
|  |  | ||||||
| Cc: Alban Bedel <albeu@free.fr> |  | ||||||
| Fixes: 24b0e3e84fbf ("MIPS: ath79: Improve the DDR controller interface") |  | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |  | ||||||
| --- |  | ||||||
|  arch/mips/ath79/common.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| --- a/arch/mips/ath79/common.c |  | ||||||
| +++ b/arch/mips/ath79/common.c |  | ||||||
| @@ -58,7 +58,7 @@ EXPORT_SYMBOL_GPL(ath79_ddr_ctrl_init); |  | ||||||
|   |  | ||||||
|  void ath79_ddr_wb_flush(u32 reg) |  | ||||||
|  { |  | ||||||
| -	void __iomem *flush_reg = ath79_ddr_wb_flush_base + reg; |  | ||||||
| +	void __iomem *flush_reg = ath79_ddr_wb_flush_base + (reg * 4); |  | ||||||
|   |  | ||||||
|  	/* Flush the DDR write buffer. */ |  | ||||||
|  	__raw_writel(0x1, flush_reg); |  | ||||||
| @@ -250,7 +250,7 @@ | |||||||
|  					       &sin->sin6_addr); |  					       &sin->sin6_addr); | ||||||
|  			sin->sin6_scope_id = 0; |  			sin->sin6_scope_id = 0; | ||||||
|  		} |  		} | ||||||
| @@ -833,12 +833,12 @@ int ip6_datagram_send_ctl(struct net *ne | @@ -836,12 +836,12 @@ int ip6_datagram_send_ctl(struct net *ne | ||||||
|  			} |  			} | ||||||
|   |   | ||||||
|  			if (fl6->flowlabel&IPV6_FLOWINFO_MASK) { |  			if (fl6->flowlabel&IPV6_FLOWINFO_MASK) { | ||||||
| @@ -327,7 +327,7 @@ | |||||||
|  	return neigh_create(&arp_tbl, pkey, dev); |  	return neigh_create(&arp_tbl, pkey, dev); | ||||||
| --- a/net/ipv4/tcp_output.c | --- a/net/ipv4/tcp_output.c | ||||||
| +++ b/net/ipv4/tcp_output.c | +++ b/net/ipv4/tcp_output.c | ||||||
| @@ -449,48 +449,53 @@ static void tcp_options_write(__be32 *pt | @@ -454,48 +454,53 @@ static void tcp_options_write(__be32 *pt | ||||||
|  	u16 options = opts->options;	/* mungable copy */ |  	u16 options = opts->options;	/* mungable copy */ | ||||||
|   |   | ||||||
|  	if (unlikely(OPTION_MD5 & options)) { |  	if (unlikely(OPTION_MD5 & options)) { | ||||||
| @@ -404,7 +404,7 @@ | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	if (unlikely(opts->num_sack_blocks)) { |  	if (unlikely(opts->num_sack_blocks)) { | ||||||
| @@ -498,16 +503,17 @@ static void tcp_options_write(__be32 *pt | @@ -503,16 +508,17 @@ static void tcp_options_write(__be32 *pt | ||||||
|  			tp->duplicate_sack : tp->selective_acks; |  			tp->duplicate_sack : tp->selective_acks; | ||||||
|  		int this_sack; |  		int this_sack; | ||||||
|   |   | ||||||
| @@ -428,7 +428,7 @@ | |||||||
|  		} |  		} | ||||||
|   |   | ||||||
|  		tp->rx_opt.dsack = 0; |  		tp->rx_opt.dsack = 0; | ||||||
| @@ -520,13 +526,14 @@ static void tcp_options_write(__be32 *pt | @@ -525,13 +531,14 @@ static void tcp_options_write(__be32 *pt | ||||||
|   |   | ||||||
|  		if (foc->exp) { |  		if (foc->exp) { | ||||||
|  			len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len; |  			len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len; | ||||||
| @@ -737,7 +737,7 @@ | |||||||
|  EXPORT_SYMBOL(xfrm_parse_spi); |  EXPORT_SYMBOL(xfrm_parse_spi); | ||||||
| --- a/net/ipv4/tcp_input.c | --- a/net/ipv4/tcp_input.c | ||||||
| +++ b/net/ipv4/tcp_input.c | +++ b/net/ipv4/tcp_input.c | ||||||
| @@ -3844,14 +3844,16 @@ static bool tcp_parse_aligned_timestamp( | @@ -3854,14 +3854,16 @@ static bool tcp_parse_aligned_timestamp( | ||||||
|  { |  { | ||||||
|  	const __be32 *ptr = (const __be32 *)(th + 1); |  	const __be32 *ptr = (const __be32 *)(th + 1); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ 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 | ||||||
| @@ -1831,6 +1831,7 @@ struct xhci_hcd { | @@ -1835,6 +1835,7 @@ struct xhci_hcd { | ||||||
|  #define XHCI_LIMIT_ENDPOINT_INTERVAL_7	(1 << 26) |  #define XHCI_LIMIT_ENDPOINT_INTERVAL_7	(1 << 26) | ||||||
|  #define XHCI_U2_DISABLE_WAKE	(1 << 27) |  #define XHCI_U2_DISABLE_WAKE	(1 << 27) | ||||||
|  #define XHCI_ASMEDIA_MODIFY_FLOWCONTROL	(1 << 28) |  #define XHCI_ASMEDIA_MODIFY_FLOWCONTROL	(1 << 28) | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
|  #include <asm/bootinfo.h> |  #include <asm/bootinfo.h> | ||||||
|  #include <asm/idle.h> |  #include <asm/idle.h> | ||||||
|  #include <asm/prom.h> |  #include <asm/prom.h> | ||||||
| @@ -231,6 +232,33 @@ static struct fixed_phy_status bcm47xx_f | @@ -225,6 +226,33 @@ static struct fixed_phy_status bcm47xx_f | ||||||
|  	.duplex	= DUPLEX_FULL, |  	.duplex	= DUPLEX_FULL, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -42,7 +42,7 @@ | |||||||
|  static int __init bcm47xx_register_bus_complete(void) |  static int __init bcm47xx_register_bus_complete(void) | ||||||
|  { |  { | ||||||
|  	switch (bcm47xx_bus_type) { |  	switch (bcm47xx_bus_type) { | ||||||
| @@ -250,6 +278,7 @@ static int __init bcm47xx_register_bus_c | @@ -244,6 +272,7 @@ static int __init bcm47xx_register_bus_c | ||||||
|  	bcm47xx_workarounds(); |  	bcm47xx_workarounds(); | ||||||
|   |   | ||||||
|  	fixed_phy_add(PHY_POLL, 0, &bcm47xx_fixed_phy_status, -1); |  	fixed_phy_add(PHY_POLL, 0, &bcm47xx_fixed_phy_status, -1); | ||||||
|   | |||||||
| @@ -1,101 +0,0 @@ | |||||||
| From d0423d3e4fa7ae305729cb50369427f075ccb279 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Jonas Gorski <jonas.gorski@gmail.com> |  | ||||||
| Date: Sat, 25 Feb 2017 12:41:28 +0100 |  | ||||||
| Subject: [PATCH 1/6] bcm63xx_enet: correct clock usage |  | ||||||
|  |  | ||||||
| Check the return code of prepare_enable and change one last instance of |  | ||||||
| enable only to prepare_enable. Also properly disable and release the |  | ||||||
| clock in error paths and on remove for enetsw. |  | ||||||
|  |  | ||||||
| Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> |  | ||||||
| --- |  | ||||||
|  drivers/net/ethernet/broadcom/bcm63xx_enet.c | 31 +++++++++++++++++++++------- |  | ||||||
|  1 file changed, 23 insertions(+), 8 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c |  | ||||||
| +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c |  | ||||||
| @@ -1773,7 +1773,9 @@ static int bcm_enet_probe(struct platfor |  | ||||||
|  		ret = PTR_ERR(priv->mac_clk); |  | ||||||
|  		goto out; |  | ||||||
|  	} |  | ||||||
| -	clk_prepare_enable(priv->mac_clk); |  | ||||||
| +	ret = clk_prepare_enable(priv->mac_clk); |  | ||||||
| +	if (ret) |  | ||||||
| +		goto out_put_clk_mac; |  | ||||||
|   |  | ||||||
|  	/* initialize default and fetch platform data */ |  | ||||||
|  	priv->rx_ring_size = BCMENET_DEF_RX_DESC; |  | ||||||
| @@ -1805,9 +1807,11 @@ static int bcm_enet_probe(struct platfor |  | ||||||
|  		if (IS_ERR(priv->phy_clk)) { |  | ||||||
|  			ret = PTR_ERR(priv->phy_clk); |  | ||||||
|  			priv->phy_clk = NULL; |  | ||||||
| -			goto out_put_clk_mac; |  | ||||||
| +			goto out_disable_clk_mac; |  | ||||||
|  		} |  | ||||||
| -		clk_prepare_enable(priv->phy_clk); |  | ||||||
| +		ret = clk_prepare_enable(priv->phy_clk); |  | ||||||
| +		if (ret) |  | ||||||
| +			goto out_put_clk_phy; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	/* do minimal hardware init to be able to probe mii bus */ |  | ||||||
| @@ -1901,13 +1905,16 @@ out_free_mdio: |  | ||||||
|  out_uninit_hw: |  | ||||||
|  	/* turn off mdc clock */ |  | ||||||
|  	enet_writel(priv, 0, ENET_MIISC_REG); |  | ||||||
| -	if (priv->phy_clk) { |  | ||||||
| +	if (priv->phy_clk) |  | ||||||
|  		clk_disable_unprepare(priv->phy_clk); |  | ||||||
| + |  | ||||||
| +out_put_clk_phy: |  | ||||||
| +	if (priv->phy_clk) |  | ||||||
|  		clk_put(priv->phy_clk); |  | ||||||
| -	} |  | ||||||
|   |  | ||||||
| -out_put_clk_mac: |  | ||||||
| +out_disable_clk_mac: |  | ||||||
|  	clk_disable_unprepare(priv->mac_clk); |  | ||||||
| +out_put_clk_mac: |  | ||||||
|  	clk_put(priv->mac_clk); |  | ||||||
|  out: |  | ||||||
|  	free_netdev(dev); |  | ||||||
| @@ -2752,7 +2759,9 @@ static int bcm_enetsw_probe(struct platf |  | ||||||
|  		ret = PTR_ERR(priv->mac_clk); |  | ||||||
|  		goto out_unmap; |  | ||||||
|  	} |  | ||||||
| -	clk_enable(priv->mac_clk); |  | ||||||
| +	ret = clk_prepare_enable(priv->mac_clk); |  | ||||||
| +	if (ret) |  | ||||||
| +		goto out_put_clk; |  | ||||||
|   |  | ||||||
|  	priv->rx_chan = 0; |  | ||||||
|  	priv->tx_chan = 1; |  | ||||||
| @@ -2773,7 +2782,7 @@ static int bcm_enetsw_probe(struct platf |  | ||||||
|   |  | ||||||
|  	ret = register_netdev(dev); |  | ||||||
|  	if (ret) |  | ||||||
| -		goto out_put_clk; |  | ||||||
| +		goto out_disable_clk; |  | ||||||
|   |  | ||||||
|  	netif_carrier_off(dev); |  | ||||||
|  	platform_set_drvdata(pdev, dev); |  | ||||||
| @@ -2782,6 +2791,9 @@ static int bcm_enetsw_probe(struct platf |  | ||||||
|   |  | ||||||
|  	return 0; |  | ||||||
|   |  | ||||||
| +out_disable_clk: |  | ||||||
| +	clk_disable_unprepare(priv->mac_clk); |  | ||||||
| + |  | ||||||
|  out_put_clk: |  | ||||||
|  	clk_put(priv->mac_clk); |  | ||||||
|   |  | ||||||
| @@ -2813,6 +2825,9 @@ static int bcm_enetsw_remove(struct plat |  | ||||||
|  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |  | ||||||
|  	release_mem_region(res->start, resource_size(res)); |  | ||||||
|   |  | ||||||
| +	clk_disable_unprepare(priv->mac_clk); |  | ||||||
| +	clk_put(priv->mac_clk); |  | ||||||
| + |  | ||||||
|  	free_netdev(dev); |  | ||||||
|  	return 0; |  | ||||||
|  } |  | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| From 23d94cb855b6f4f0ee1c01679224472104ac6440 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Jonas Gorski <jonas.gorski@gmail.com> |  | ||||||
| Date: Sat, 30 Sep 2017 14:10:18 +0200 |  | ||||||
| Subject: [PATCH 2/6] bcm63xx_enet: do not write to random DMA channel on |  | ||||||
|  BCM6345 |  | ||||||
|  |  | ||||||
| The DMA controller regs actually point to DMA channel 0, so the write to |  | ||||||
| ENETDMA_CFG_REG will actually modify a random DMA channel. |  | ||||||
|  |  | ||||||
| Since DMA controller registers do not exist on BCM6345, guard the write |  | ||||||
| with the usual check for dma_has_sram. |  | ||||||
|  |  | ||||||
| Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> |  | ||||||
| --- |  | ||||||
|  drivers/net/ethernet/broadcom/bcm63xx_enet.c | 3 ++- |  | ||||||
|  1 file changed, 2 insertions(+), 1 deletion(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c |  | ||||||
| +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c |  | ||||||
| @@ -1062,7 +1062,8 @@ static int bcm_enet_open(struct net_devi |  | ||||||
|  	val = enet_readl(priv, ENET_CTL_REG); |  | ||||||
|  	val |= ENET_CTL_ENABLE_MASK; |  | ||||||
|  	enet_writel(priv, val, ENET_CTL_REG); |  | ||||||
| -	enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG); |  | ||||||
| +	if (priv->dma_has_sram) |  | ||||||
| +		enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG); |  | ||||||
|  	enet_dmac_writel(priv, priv->dma_chan_en_mask, |  | ||||||
|  			 ENETDMAC_CHANCFG, priv->rx_chan); |  | ||||||
|   |  | ||||||
| @@ -84,7 +84,7 @@ Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> | |||||||
|  |  | ||||||
| --- a/include/linux/compiler-gcc.h | --- a/include/linux/compiler-gcc.h | ||||||
| +++ b/include/linux/compiler-gcc.h | +++ b/include/linux/compiler-gcc.h | ||||||
| @@ -343,3 +343,28 @@ | @@ -358,3 +358,28 @@ | ||||||
|   * code |   * code | ||||||
|   */ |   */ | ||||||
|  #define uninitialized_var(x) x = x |  #define uninitialized_var(x) x = x | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ Cc: Kir Kolyshkin <kir@openvz.org> | |||||||
|  	 * Before updating sk_refcnt, we must commit prior changes to memory |  	 * Before updating sk_refcnt, we must commit prior changes to memory | ||||||
| --- a/net/ipv4/tcp_output.c | --- a/net/ipv4/tcp_output.c | ||||||
| +++ b/net/ipv4/tcp_output.c | +++ b/net/ipv4/tcp_output.c | ||||||
| @@ -1671,7 +1671,7 @@ u32 tcp_tso_autosize(const struct sock * | @@ -1683,7 +1683,7 @@ u32 tcp_tso_autosize(const struct sock * | ||||||
|  { |  { | ||||||
|  	u32 bytes, segs; |  	u32 bytes, segs; | ||||||
|   |   | ||||||
| @@ -74,7 +74,7 @@ Cc: Kir Kolyshkin <kir@openvz.org> | |||||||
|  		    sk->sk_gso_max_size - 1 - MAX_TCP_HEADER); |  		    sk->sk_gso_max_size - 1 - MAX_TCP_HEADER); | ||||||
|   |   | ||||||
|  	/* Goal is to send at least one packet per ms, |  	/* Goal is to send at least one packet per ms, | ||||||
| @@ -2172,7 +2172,7 @@ static bool tcp_small_queue_check(struct | @@ -2184,7 +2184,7 @@ static bool tcp_small_queue_check(struct | ||||||
|  { |  { | ||||||
|  	unsigned int limit; |  	unsigned int limit; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|  /** |  /** | ||||||
|   * dwc2_enable_host_interrupts() - Enables the Host mode interrupts |   * dwc2_enable_host_interrupts() - Enables the Host mode interrupts | ||||||
|   * |   * | ||||||
| @@ -3276,6 +3293,7 @@ static void dwc2_conn_id_status_change(s | @@ -3278,6 +3295,7 @@ static void dwc2_conn_id_status_change(s | ||||||
|   |   | ||||||
|  	/* B-Device connector (Device Mode) */ |  	/* B-Device connector (Device Mode) */ | ||||||
|  	if (gotgctl & GOTGCTL_CONID_B) { |  	if (gotgctl & GOTGCTL_CONID_B) { | ||||||
| @@ -71,7 +71,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|  		/* Wait for switch to device mode */ |  		/* Wait for switch to device mode */ | ||||||
|  		dev_dbg(hsotg->dev, "connId B\n"); |  		dev_dbg(hsotg->dev, "connId B\n"); | ||||||
|  		if (hsotg->bus_suspended) { |  		if (hsotg->bus_suspended) { | ||||||
| @@ -4382,6 +4400,9 @@ static int _dwc2_hcd_start(struct usb_hc | @@ -4384,6 +4402,9 @@ static int _dwc2_hcd_start(struct usb_hc | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	spin_unlock_irqrestore(&hsotg->lock, flags); |  	spin_unlock_irqrestore(&hsotg->lock, flags); | ||||||
| @@ -81,7 +81,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -4409,6 +4430,8 @@ static void _dwc2_hcd_stop(struct usb_hc | @@ -4411,6 +4432,8 @@ static void _dwc2_hcd_stop(struct usb_hc | ||||||
|  	clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); |  	clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); | ||||||
|  	spin_unlock_irqrestore(&hsotg->lock, flags); |  	spin_unlock_irqrestore(&hsotg->lock, flags); | ||||||
|   |   | ||||||
| @@ -90,7 +90,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|  	usleep_range(1000, 3000); |  	usleep_range(1000, 3000); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -4445,6 +4468,7 @@ static int _dwc2_hcd_suspend(struct usb_ | @@ -4447,6 +4470,7 @@ static int _dwc2_hcd_suspend(struct usb_ | ||||||
|  		hprt0 |= HPRT0_SUSP; |  		hprt0 |= HPRT0_SUSP; | ||||||
|  		hprt0 &= ~HPRT0_PWR; |  		hprt0 &= ~HPRT0_PWR; | ||||||
|  		dwc2_writel(hprt0, hsotg->regs + HPRT0); |  		dwc2_writel(hprt0, hsotg->regs + HPRT0); | ||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	/* Enter hibernation */ |  	/* Enter hibernation */ | ||||||
| @@ -4525,6 +4549,8 @@ static int _dwc2_hcd_resume(struct usb_h | @@ -4527,6 +4551,8 @@ static int _dwc2_hcd_resume(struct usb_h | ||||||
|  		spin_unlock_irqrestore(&hsotg->lock, flags); |  		spin_unlock_irqrestore(&hsotg->lock, flags); | ||||||
|  		dwc2_port_resume(hsotg); |  		dwc2_port_resume(hsotg); | ||||||
|  	} else { |  	} else { | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> | |||||||
|   |   | ||||||
|  	return regulator_enable(hsotg->vbus_supply); |  	return regulator_enable(hsotg->vbus_supply); | ||||||
|  } |  } | ||||||
| @@ -4401,9 +4406,7 @@ static int _dwc2_hcd_start(struct usb_hc | @@ -4403,9 +4408,7 @@ static int _dwc2_hcd_start(struct usb_hc | ||||||
|   |   | ||||||
|  	spin_unlock_irqrestore(&hsotg->lock, flags); |  	spin_unlock_irqrestore(&hsotg->lock, flags); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,172 +0,0 @@ | |||||||
| From 9bbe60a67be5a1c6f79b3c9be5003481a50529ff Mon Sep 17 00:00:00 2001 |  | ||||||
| From: David Woodhouse <dwmw2@infradead.org> |  | ||||||
| Date: Sat, 16 Jun 2018 11:55:44 +0100 |  | ||||||
| Subject: atm: Preserve value of skb->truesize when accounting to vcc |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| ATM accounts for in-flight TX packets in sk_wmem_alloc of the VCC on |  | ||||||
| which they are to be sent. But it doesn't take ownership of those |  | ||||||
| packets from the sock (if any) which originally owned them. They should |  | ||||||
| remain owned by their actual sender until they've left the box. |  | ||||||
|  |  | ||||||
| There's a hack in pskb_expand_head() to avoid adjusting skb->truesize |  | ||||||
| for certain skbs, precisely to avoid messing up sk_wmem_alloc |  | ||||||
| accounting. Ideally that hack would cover the ATM use case too, but it |  | ||||||
| doesn't — skbs which aren't owned by any sock, for example PPP control |  | ||||||
| frames, still get their truesize adjusted when the low-level ATM driver |  | ||||||
| adds headroom. |  | ||||||
|  |  | ||||||
| This has always been an issue, it seems. The truesize of a packet |  | ||||||
| increases, and sk_wmem_alloc on the VCC goes negative. But this wasn't |  | ||||||
| for normal traffic, only for control frames. So I think we just got away |  | ||||||
| with it, and we probably needed to send 2GiB of LCP echo frames before |  | ||||||
| the misaccounting would ever have caused a problem and caused |  | ||||||
| atm_may_send() to start refusing packets. |  | ||||||
|  |  | ||||||
| Commit 14afee4b609 ("net: convert sock.sk_wmem_alloc from atomic_t to |  | ||||||
| refcount_t") did exactly what it was intended to do, and turned this |  | ||||||
| mostly-theoretical problem into a real one, causing PPPoATM to fail |  | ||||||
| immediately as sk_wmem_alloc underflows and atm_may_send() *immediately* |  | ||||||
| starts refusing to allow new packets. |  | ||||||
|  |  | ||||||
| The least intrusive solution to this problem is to stash the value of |  | ||||||
| skb->truesize that was accounted to the VCC, in a new member of the |  | ||||||
| ATM_SKB(skb) structure. Then in atm_pop_raw() subtract precisely that |  | ||||||
| value instead of the then-current value of skb->truesize. |  | ||||||
|  |  | ||||||
| Fixes: 158f323b9868 ("net: adjust skb->truesize in pskb_expand_head()") |  | ||||||
| Signed-off-by: David Woodhouse <dwmw2@infradead.org> |  | ||||||
| Tested-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> |  | ||||||
| Signed-off-by: David S. Miller <davem@davemloft.net> |  | ||||||
| --- |  | ||||||
|  include/linux/atmdev.h | 15 +++++++++++++++ |  | ||||||
|  net/atm/br2684.c       |  3 +-- |  | ||||||
|  net/atm/clip.c         |  3 +-- |  | ||||||
|  net/atm/common.c       |  3 +-- |  | ||||||
|  net/atm/lec.c          |  3 +-- |  | ||||||
|  net/atm/mpc.c          |  3 +-- |  | ||||||
|  net/atm/pppoatm.c      |  3 +-- |  | ||||||
|  net/atm/raw.c          |  4 ++-- |  | ||||||
|  8 files changed, 23 insertions(+), 14 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/include/linux/atmdev.h |  | ||||||
| +++ b/include/linux/atmdev.h |  | ||||||
| @@ -214,6 +214,7 @@ struct atmphy_ops { |  | ||||||
|  struct atm_skb_data { |  | ||||||
|  	struct atm_vcc	*vcc;		/* ATM VCC */ |  | ||||||
|  	unsigned long	atm_options;	/* ATM layer options */ |  | ||||||
| +	unsigned int	acct_truesize;  /* truesize accounted to vcc */ |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  #define VCC_HTABLE_SIZE 32 |  | ||||||
| @@ -241,6 +242,20 @@ void vcc_insert_socket(struct sock *sk); |  | ||||||
|   |  | ||||||
|  void atm_dev_release_vccs(struct atm_dev *dev); |  | ||||||
|   |  | ||||||
| +static inline void atm_account_tx(struct atm_vcc *vcc, struct sk_buff *skb) |  | ||||||
| +{ |  | ||||||
| +	/* |  | ||||||
| +	 * Because ATM skbs may not belong to a sock (and we don't |  | ||||||
| +	 * necessarily want to), skb->truesize may be adjusted, |  | ||||||
| +	 * escaping the hack in pskb_expand_head() which avoids |  | ||||||
| +	 * doing so for some cases. So stash the value of truesize |  | ||||||
| +	 * at the time we accounted it, and atm_pop_raw() can use |  | ||||||
| +	 * that value later, in case it changes. |  | ||||||
| +	 */ |  | ||||||
| +	refcount_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); |  | ||||||
| +	ATM_SKB(skb)->acct_truesize = skb->truesize; |  | ||||||
| +	ATM_SKB(skb)->atm_options = vcc->atm_options; |  | ||||||
| +} |  | ||||||
|   |  | ||||||
|  static inline void atm_force_charge(struct atm_vcc *vcc,int truesize) |  | ||||||
|  { |  | ||||||
| --- a/net/atm/br2684.c |  | ||||||
| +++ b/net/atm/br2684.c |  | ||||||
| @@ -252,8 +252,7 @@ static int br2684_xmit_vcc(struct sk_buf |  | ||||||
|   |  | ||||||
|  	ATM_SKB(skb)->vcc = atmvcc = brvcc->atmvcc; |  | ||||||
|  	pr_debug("atm_skb(%p)->vcc(%p)->dev(%p)\n", skb, atmvcc, atmvcc->dev); |  | ||||||
| -	refcount_add(skb->truesize, &sk_atm(atmvcc)->sk_wmem_alloc); |  | ||||||
| -	ATM_SKB(skb)->atm_options = atmvcc->atm_options; |  | ||||||
| +	atm_account_tx(atmvcc, skb); |  | ||||||
|  	dev->stats.tx_packets++; |  | ||||||
|  	dev->stats.tx_bytes += skb->len; |  | ||||||
|   |  | ||||||
| --- a/net/atm/clip.c |  | ||||||
| +++ b/net/atm/clip.c |  | ||||||
| @@ -381,8 +381,7 @@ static netdev_tx_t clip_start_xmit(struc |  | ||||||
|  		memcpy(here, llc_oui, sizeof(llc_oui)); |  | ||||||
|  		((__be16 *) here)[3] = skb->protocol; |  | ||||||
|  	} |  | ||||||
| -	refcount_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); |  | ||||||
| -	ATM_SKB(skb)->atm_options = vcc->atm_options; |  | ||||||
| +	atm_account_tx(vcc, skb); |  | ||||||
|  	entry->vccs->last_use = jiffies; |  | ||||||
|  	pr_debug("atm_skb(%p)->vcc(%p)->dev(%p)\n", skb, vcc, vcc->dev); |  | ||||||
|  	old = xchg(&entry->vccs->xoff, 1);	/* assume XOFF ... */ |  | ||||||
| --- a/net/atm/common.c |  | ||||||
| +++ b/net/atm/common.c |  | ||||||
| @@ -630,10 +630,9 @@ int vcc_sendmsg(struct socket *sock, str |  | ||||||
|  		goto out; |  | ||||||
|  	} |  | ||||||
|  	pr_debug("%d += %d\n", sk_wmem_alloc_get(sk), skb->truesize); |  | ||||||
| -	refcount_add(skb->truesize, &sk->sk_wmem_alloc); |  | ||||||
| +	atm_account_tx(vcc, skb); |  | ||||||
|   |  | ||||||
|  	skb->dev = NULL; /* for paths shared with net_device interfaces */ |  | ||||||
| -	ATM_SKB(skb)->atm_options = vcc->atm_options; |  | ||||||
|  	if (!copy_from_iter_full(skb_put(skb, size), size, &m->msg_iter)) { |  | ||||||
|  		kfree_skb(skb); |  | ||||||
|  		error = -EFAULT; |  | ||||||
| --- a/net/atm/lec.c |  | ||||||
| +++ b/net/atm/lec.c |  | ||||||
| @@ -182,9 +182,8 @@ lec_send(struct atm_vcc *vcc, struct sk_ |  | ||||||
|  	struct net_device *dev = skb->dev; |  | ||||||
|   |  | ||||||
|  	ATM_SKB(skb)->vcc = vcc; |  | ||||||
| -	ATM_SKB(skb)->atm_options = vcc->atm_options; |  | ||||||
| +	atm_account_tx(vcc, skb); |  | ||||||
|   |  | ||||||
| -	refcount_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); |  | ||||||
|  	if (vcc->send(vcc, skb) < 0) { |  | ||||||
|  		dev->stats.tx_dropped++; |  | ||||||
|  		return; |  | ||||||
| --- a/net/atm/mpc.c |  | ||||||
| +++ b/net/atm/mpc.c |  | ||||||
| @@ -555,8 +555,7 @@ static int send_via_shortcut(struct sk_b |  | ||||||
|  					sizeof(struct llc_snap_hdr)); |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	refcount_add(skb->truesize, &sk_atm(entry->shortcut)->sk_wmem_alloc); |  | ||||||
| -	ATM_SKB(skb)->atm_options = entry->shortcut->atm_options; |  | ||||||
| +	atm_account_tx(entry->shortcut, skb); |  | ||||||
|  	entry->shortcut->send(entry->shortcut, skb); |  | ||||||
|  	entry->packets_fwded++; |  | ||||||
|  	mpc->in_ops->put(entry); |  | ||||||
| --- a/net/atm/pppoatm.c |  | ||||||
| +++ b/net/atm/pppoatm.c |  | ||||||
| @@ -350,8 +350,7 @@ static int pppoatm_send(struct ppp_chann |  | ||||||
|  		return 1; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| -	refcount_add(skb->truesize, &sk_atm(ATM_SKB(skb)->vcc)->sk_wmem_alloc); |  | ||||||
| -	ATM_SKB(skb)->atm_options = ATM_SKB(skb)->vcc->atm_options; |  | ||||||
| +	atm_account_tx(vcc, skb); |  | ||||||
|  	pr_debug("atm_skb(%p)->vcc(%p)->dev(%p)\n", |  | ||||||
|  		 skb, ATM_SKB(skb)->vcc, ATM_SKB(skb)->vcc->dev); |  | ||||||
|  	ret = ATM_SKB(skb)->vcc->send(ATM_SKB(skb)->vcc, skb) |  | ||||||
| --- a/net/atm/raw.c |  | ||||||
| +++ b/net/atm/raw.c |  | ||||||
| @@ -35,8 +35,8 @@ static void atm_pop_raw(struct atm_vcc * |  | ||||||
|  	struct sock *sk = sk_atm(vcc); |  | ||||||
|   |  | ||||||
|  	pr_debug("(%d) %d -= %d\n", |  | ||||||
| -		 vcc->vci, sk_wmem_alloc_get(sk), skb->truesize); |  | ||||||
| -	WARN_ON(refcount_sub_and_test(skb->truesize, &sk->sk_wmem_alloc)); |  | ||||||
| +		 vcc->vci, sk_wmem_alloc_get(sk), ATM_SKB(skb)->acct_truesize); |  | ||||||
| +	WARN_ON(refcount_sub_and_test(ATM_SKB(skb)->acct_truesize, &sk->sk_wmem_alloc)); |  | ||||||
|  	dev_kfree_skb_any(skb); |  | ||||||
|  	sk->sk_write_space(sk); |  | ||||||
|  } |  | ||||||
| @@ -62,7 +62,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  static struct pernet_operations nfnl_log_net_ops = { |  static struct pernet_operations nfnl_log_net_ops = { | ||||||
| --- a/net/netfilter/nfnetlink_queue.c | --- a/net/netfilter/nfnetlink_queue.c | ||||||
| +++ b/net/netfilter/nfnetlink_queue.c | +++ b/net/netfilter/nfnetlink_queue.c | ||||||
| @@ -1512,10 +1512,15 @@ static int __net_init nfnl_queue_net_ini | @@ -1515,10 +1515,15 @@ static int __net_init nfnl_queue_net_ini | ||||||
|   |   | ||||||
|  static void __net_exit nfnl_queue_net_exit(struct net *net) |  static void __net_exit nfnl_queue_net_exit(struct net *net) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -0,0 +1,65 @@ | |||||||
|  | From 5012284700775a4e6e3fbe7eac4c543c4874b559 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Theodore Ts'o <tytso@mit.edu> | ||||||
|  | Date: Sat, 28 Jul 2018 08:12:04 -0400 | ||||||
|  | Subject: [PATCH] ext4: fix check to prevent initializing reserved inodes | ||||||
|  |  | ||||||
|  | Commit 8844618d8aa7: "ext4: only look at the bg_flags field if it is | ||||||
|  | valid" will complain if block group zero does not have the | ||||||
|  | EXT4_BG_INODE_ZEROED flag set.  Unfortunately, this is not correct, | ||||||
|  | since a freshly created file system has this flag cleared.  It gets | ||||||
|  | almost immediately after the file system is mounted read-write --- but | ||||||
|  | the following somewhat unlikely sequence will end up triggering a | ||||||
|  | false positive report of a corrupted file system: | ||||||
|  |  | ||||||
|  |    mkfs.ext4 /dev/vdc | ||||||
|  |    mount -o ro /dev/vdc /vdc | ||||||
|  |    mount -o remount,rw /dev/vdc | ||||||
|  |  | ||||||
|  | Instead, when initializing the inode table for block group zero, test | ||||||
|  | to make sure that itable_unused count is not too large, since that is | ||||||
|  | the case that will result in some or all of the reserved inodes | ||||||
|  | getting cleared. | ||||||
|  |  | ||||||
|  | This fixes the failures reported by Eric Whiteney when running | ||||||
|  | generic/230 and generic/231 in the the nojournal test case. | ||||||
|  |  | ||||||
|  | Fixes: 8844618d8aa7 ("ext4: only look at the bg_flags field if it is valid") | ||||||
|  | Reported-by: Eric Whitney <enwlinux@gmail.com> | ||||||
|  | Signed-off-by: Theodore Ts'o <tytso@mit.edu> | ||||||
|  | --- | ||||||
|  |  fs/ext4/ialloc.c | 5 ++++- | ||||||
|  |  fs/ext4/super.c  | 8 +------- | ||||||
|  |  2 files changed, 5 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/fs/ext4/ialloc.c | ||||||
|  | +++ b/fs/ext4/ialloc.c | ||||||
|  | @@ -1394,7 +1394,10 @@ int ext4_init_inode_table(struct super_b | ||||||
|  |  			    ext4_itable_unused_count(sb, gdp)), | ||||||
|  |  			    sbi->s_inodes_per_block); | ||||||
|  |   | ||||||
|  | -	if ((used_blks < 0) || (used_blks > sbi->s_itb_per_group)) { | ||||||
|  | +	if ((used_blks < 0) || (used_blks > sbi->s_itb_per_group) || | ||||||
|  | +	    ((group == 0) && ((EXT4_INODES_PER_GROUP(sb) - | ||||||
|  | +			       ext4_itable_unused_count(sb, gdp)) < | ||||||
|  | +			      EXT4_FIRST_INO(sb)))) { | ||||||
|  |  		ext4_error(sb, "Something is wrong with group %u: " | ||||||
|  |  			   "used itable blocks: %d; " | ||||||
|  |  			   "itable unused count: %u", | ||||||
|  | --- a/fs/ext4/super.c | ||||||
|  | +++ b/fs/ext4/super.c | ||||||
|  | @@ -3103,14 +3103,8 @@ static ext4_group_t ext4_has_uninit_itab | ||||||
|  |  		if (!gdp) | ||||||
|  |  			continue; | ||||||
|  |   | ||||||
|  | -		if (gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)) | ||||||
|  | -			continue; | ||||||
|  | -		if (group != 0) | ||||||
|  | +		if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) | ||||||
|  |  			break; | ||||||
|  | -		ext4_error(sb, "Inode table for bg 0 marked as " | ||||||
|  | -			   "needing zeroing"); | ||||||
|  | -		if (sb_rdonly(sb)) | ||||||
|  | -			return ngroups; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	return group; | ||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/Makefile | --- a/Makefile | ||||||
| +++ b/Makefile | +++ b/Makefile | ||||||
| @@ -1227,7 +1227,6 @@ all: modules | @@ -1228,7 +1228,6 @@ all: modules | ||||||
|   |   | ||||||
|  PHONY += modules |  PHONY += modules | ||||||
|  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin |  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin | ||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	@$(kecho) '  Building modules, stage 2.'; |  	@$(kecho) '  Building modules, stage 2.'; | ||||||
|  	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost |  	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | ||||||
|   |   | ||||||
| @@ -1256,7 +1255,6 @@ _modinst_: | @@ -1257,7 +1256,6 @@ _modinst_: | ||||||
|  		rm -f $(MODLIB)/build ; \ |  		rm -f $(MODLIB)/build ; \ | ||||||
|  		ln -s $(CURDIR) $(MODLIB)/build ; \ |  		ln -s $(CURDIR) $(MODLIB)/build ; \ | ||||||
|  	fi |  	fi | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/tools/build/Build.include | --- a/tools/build/Build.include | ||||||
| +++ b/tools/build/Build.include | +++ b/tools/build/Build.include | ||||||
| @@ -97,4 +97,4 @@ cxx_flags = -Wp,-MD,$(depfile) -Wp,-MT,$ | @@ -98,4 +98,4 @@ cxx_flags = -Wp,-MD,$(depfile) -Wp,-MT,$ | ||||||
|  ### |  ### | ||||||
|  ## HOSTCC C flags |  ## HOSTCC C flags | ||||||
|   |   | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  # Read KERNELRELEASE from include/config/kernel.release (if it exists) |  # Read KERNELRELEASE from include/config/kernel.release (if it exists) | ||||||
|  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) |  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) | ||||||
|  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) |  KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) | ||||||
| @@ -781,11 +786,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH | @@ -782,11 +787,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH | ||||||
|  KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) |  KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) | ||||||
|  endif |  endif | ||||||
|   |   | ||||||
|   | |||||||
| @@ -243,7 +243,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  } |  } | ||||||
| --- a/mm/vmstat.c | --- a/mm/vmstat.c | ||||||
| +++ b/mm/vmstat.c | +++ b/mm/vmstat.c | ||||||
| @@ -1946,10 +1946,12 @@ void __init init_mm_internals(void) | @@ -1944,10 +1944,12 @@ void __init init_mm_internals(void) | ||||||
|  	start_shepherd_timer(); |  	start_shepherd_timer(); | ||||||
|  #endif |  #endif | ||||||
|  #ifdef CONFIG_PROC_FS |  #ifdef CONFIG_PROC_FS | ||||||
|   | |||||||
| @@ -13,11 +13,9 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com> | |||||||
|  drivers/w1/masters/w1-gpio.c | 7 +++---- |  drivers/w1/masters/w1-gpio.c | 7 +++---- | ||||||
|  1 file changed, 3 insertions(+), 4 deletions(-) |  1 file changed, 3 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c |  | ||||||
| index a90728ceec5a..7b80762941af 100644 |  | ||||||
| --- a/drivers/w1/masters/w1-gpio.c | --- a/drivers/w1/masters/w1-gpio.c | ||||||
| +++ b/drivers/w1/masters/w1-gpio.c | +++ b/drivers/w1/masters/w1-gpio.c | ||||||
| @@ -112,17 +112,16 @@ static int w1_gpio_probe_dt(struct platform_device *pdev) | @@ -112,17 +112,16 @@ static int w1_gpio_probe_dt(struct platf | ||||||
|  static int w1_gpio_probe(struct platform_device *pdev) |  static int w1_gpio_probe(struct platform_device *pdev) | ||||||
|  { |  { | ||||||
|  	struct w1_bus_master *master; |  	struct w1_bus_master *master; | ||||||
| @@ -38,6 +36,3 @@ index a90728ceec5a..7b80762941af 100644 | |||||||
|  	if (!pdata) { |  	if (!pdata) { | ||||||
|  		dev_err(&pdev->dev, "No configuration data\n"); |  		dev_err(&pdev->dev, "No configuration data\n"); | ||||||
|  		return -ENXIO; |  		return -ENXIO; | ||||||
| --  |  | ||||||
| 2.14.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/arch/mips/kernel/process.c | --- a/arch/mips/kernel/process.c | ||||||
| +++ b/arch/mips/kernel/process.c | +++ b/arch/mips/kernel/process.c | ||||||
| @@ -357,6 +357,8 @@ static inline int is_sp_move_ins(union m | @@ -358,6 +358,8 @@ static inline int is_sp_move_ins(union m | ||||||
|   |   | ||||||
|  	if (ip->i_format.opcode == addiu_op || |  	if (ip->i_format.opcode == addiu_op || | ||||||
|  	    ip->i_format.opcode == daddiu_op) { |  	    ip->i_format.opcode == daddiu_op) { | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/bridge/br_input.c | --- a/net/bridge/br_input.c | ||||||
| +++ b/net/bridge/br_input.c | +++ b/net/bridge/br_input.c | ||||||
| @@ -238,7 +238,8 @@ static int br_handle_local_finish(struct | @@ -239,7 +239,8 @@ static int br_handle_local_finish(struct | ||||||
|  { |  { | ||||||
|  	struct net_bridge_port *p = br_port_get_rcu(skb->dev); |  	struct net_bridge_port *p = br_port_get_rcu(skb->dev); | ||||||
|   |   | ||||||
| @@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	BR_INPUT_SKB_CB(skb)->brdev = p->br->dev; |  	BR_INPUT_SKB_CB(skb)->brdev = p->br->dev; | ||||||
|  	br_pass_frame_up(skb); |  	br_pass_frame_up(skb); | ||||||
| @@ -326,6 +327,15 @@ rx_handler_result_t br_handle_frame(stru | @@ -327,6 +328,15 @@ rx_handler_result_t br_handle_frame(stru | ||||||
|   |   | ||||||
|  forward: |  forward: | ||||||
|  	switch (p->state) { |  	switch (p->state) { | ||||||
|   | |||||||
| @@ -1,126 +0,0 @@ | |||||||
| From 028c9191bdf88f120f65626920a6a679170fcc3e Mon Sep 17 00:00:00 2001 |  | ||||||
| From: =?UTF-8?q?Antti=20Sepp=C3=A4l=C3=A4?= <a.seppala@gmail.com> |  | ||||||
| Date: Thu, 5 Jul 2018 11:37:03 +0300 |  | ||||||
| Subject: [PATCH 1/2] usb: dwc2: Fix DMA alignment to start at allocated |  | ||||||
|  boundary |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| The commit 3bc04e28a030 ("usb: dwc2: host: Get aligned DMA in a more |  | ||||||
| supported way") introduced a common way to align DMA allocations. |  | ||||||
| The code in the commit aligns the struct dma_aligned_buffer but the |  | ||||||
| actual DMA address pointed by data[0] gets aligned to an offset from |  | ||||||
| the allocated boundary by the kmalloc_ptr and the old_xfer_buffer |  | ||||||
| pointers. |  | ||||||
|  |  | ||||||
| This is against the recommendation in Documentation/DMA-API.txt which |  | ||||||
| states: |  | ||||||
|  |  | ||||||
|   Therefore, it is recommended that driver writers who don't take |  | ||||||
|   special care to determine the cache line size at run time only map |  | ||||||
|   virtual regions that begin and end on page boundaries (which are |  | ||||||
|   guaranteed also to be cache line boundaries). |  | ||||||
|  |  | ||||||
| The effect of this is that architectures with non-coherent DMA caches |  | ||||||
| may run into memory corruption or kernel crashes with Unhandled |  | ||||||
| kernel unaligned accesses exceptions. |  | ||||||
|  |  | ||||||
| Fix the alignment by positioning the DMA area in front of the allocation |  | ||||||
| and use memory at the end of the area for storing the orginal |  | ||||||
| transfer_buffer pointer. This may have the added benefit of increased |  | ||||||
| performance as the DMA area is now fully aligned on all architectures. |  | ||||||
|  |  | ||||||
| Tested with Lantiq xRX200 (MIPS) and RPi Model B Rev 2 (ARM). |  | ||||||
|  |  | ||||||
| Fixes: 3bc04e28a030 ("usb: dwc2: host: Get aligned DMA in a more |  | ||||||
| supported way") |  | ||||||
|  |  | ||||||
| Signed-off-by: Antti Seppälä <a.seppala@gmail.com> |  | ||||||
| --- |  | ||||||
|  drivers/usb/dwc2/hcd.c | 44 +++++++++++++++++++++++--------------------- |  | ||||||
|  1 file changed, 23 insertions(+), 21 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/usb/dwc2/hcd.c |  | ||||||
| +++ b/drivers/usb/dwc2/hcd.c |  | ||||||
| @@ -2628,34 +2628,29 @@ static void dwc2_hc_init_xfer(struct dwc |  | ||||||
|   |  | ||||||
|  #define DWC2_USB_DMA_ALIGN 4 |  | ||||||
|   |  | ||||||
| -struct dma_aligned_buffer { |  | ||||||
| -	void *kmalloc_ptr; |  | ||||||
| -	void *old_xfer_buffer; |  | ||||||
| -	u8 data[0]; |  | ||||||
| -}; |  | ||||||
| - |  | ||||||
|  static void dwc2_free_dma_aligned_buffer(struct urb *urb) |  | ||||||
|  { |  | ||||||
| -	struct dma_aligned_buffer *temp; |  | ||||||
| +	void *stored_xfer_buffer; |  | ||||||
|   |  | ||||||
|  	if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER)) |  | ||||||
|  		return; |  | ||||||
|   |  | ||||||
| -	temp = container_of(urb->transfer_buffer, |  | ||||||
| -			    struct dma_aligned_buffer, data); |  | ||||||
| +	/* Restore urb->transfer_buffer from the end of the allocated area */ |  | ||||||
| +	memcpy(&stored_xfer_buffer, urb->transfer_buffer + |  | ||||||
| +	       urb->transfer_buffer_length, sizeof(urb->transfer_buffer)); |  | ||||||
|   |  | ||||||
|  	if (usb_urb_dir_in(urb)) |  | ||||||
| -		memcpy(temp->old_xfer_buffer, temp->data, |  | ||||||
| +		memcpy(stored_xfer_buffer, urb->transfer_buffer, |  | ||||||
|  		       urb->transfer_buffer_length); |  | ||||||
| -	urb->transfer_buffer = temp->old_xfer_buffer; |  | ||||||
| -	kfree(temp->kmalloc_ptr); |  | ||||||
| +	kfree(urb->transfer_buffer); |  | ||||||
| +	urb->transfer_buffer = stored_xfer_buffer; |  | ||||||
|   |  | ||||||
|  	urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags) |  | ||||||
|  { |  | ||||||
| -	struct dma_aligned_buffer *temp, *kmalloc_ptr; |  | ||||||
| +	void *kmalloc_ptr; |  | ||||||
|  	size_t kmalloc_size; |  | ||||||
|   |  | ||||||
|  	if (urb->num_sgs || urb->sg || |  | ||||||
| @@ -2663,22 +2658,29 @@ static int dwc2_alloc_dma_aligned_buffer |  | ||||||
|  	    !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - 1))) |  | ||||||
|  		return 0; |  | ||||||
|   |  | ||||||
| -	/* Allocate a buffer with enough padding for alignment */ |  | ||||||
| +	/* |  | ||||||
| +	 * Allocate a buffer with enough padding for original transfer_buffer |  | ||||||
| +	 * pointer. This allocation is guaranteed to be aligned properly for |  | ||||||
| +	 * DMA |  | ||||||
| +	 */ |  | ||||||
|  	kmalloc_size = urb->transfer_buffer_length + |  | ||||||
| -		sizeof(struct dma_aligned_buffer) + DWC2_USB_DMA_ALIGN - 1; |  | ||||||
| +		sizeof(urb->transfer_buffer); |  | ||||||
|   |  | ||||||
|  	kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); |  | ||||||
|  	if (!kmalloc_ptr) |  | ||||||
|  		return -ENOMEM; |  | ||||||
|   |  | ||||||
| -	/* Position our struct dma_aligned_buffer such that data is aligned */ |  | ||||||
| -	temp = PTR_ALIGN(kmalloc_ptr + 1, DWC2_USB_DMA_ALIGN) - 1; |  | ||||||
| -	temp->kmalloc_ptr = kmalloc_ptr; |  | ||||||
| -	temp->old_xfer_buffer = urb->transfer_buffer; |  | ||||||
| +	/* |  | ||||||
| +	 * Position value of original urb->transfer_buffer pointer to the end |  | ||||||
| +	 * of allocation for later referencing |  | ||||||
| +	 */ |  | ||||||
| +	memcpy(kmalloc_ptr + urb->transfer_buffer_length, |  | ||||||
| +	       &urb->transfer_buffer, sizeof(urb->transfer_buffer)); |  | ||||||
| + |  | ||||||
|  	if (usb_urb_dir_out(urb)) |  | ||||||
| -		memcpy(temp->data, urb->transfer_buffer, |  | ||||||
| +		memcpy(kmalloc_ptr, urb->transfer_buffer, |  | ||||||
|  		       urb->transfer_buffer_length); |  | ||||||
| -	urb->transfer_buffer = temp->data; |  | ||||||
| +	urb->transfer_buffer = kmalloc_ptr; |  | ||||||
|   |  | ||||||
|  	urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER; |  | ||||||
|   |  | ||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/Makefile | --- a/Makefile | ||||||
| +++ b/Makefile | +++ b/Makefile | ||||||
| @@ -645,12 +645,12 @@ KBUILD_CFLAGS	+= $(call cc-disable-warni | @@ -646,12 +646,12 @@ KBUILD_CFLAGS	+= $(call cc-disable-warni | ||||||
|   |   | ||||||
|  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE |  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE | ||||||
|  KBUILD_CFLAGS	+= $(call cc-option,-Oz,-Os) |  KBUILD_CFLAGS	+= $(call cc-option,-Oz,-Os) | ||||||
|   | |||||||
| @@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (!xt_percpu_counter_alloc(alloc_state, &e->counters)) |  	if (!xt_percpu_counter_alloc(alloc_state, &e->counters)) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
|   |   | ||||||
| @@ -817,6 +845,7 @@ copy_entries_to_user(unsigned int total_ | @@ -818,6 +846,7 @@ copy_entries_to_user(unsigned int total_ | ||||||
|  	const struct xt_table_info *private = table->private; |  	const struct xt_table_info *private = table->private; | ||||||
|  	int ret = 0; |  	int ret = 0; | ||||||
|  	const void *loc_cpu_entry; |  	const void *loc_cpu_entry; | ||||||
| @@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	counters = alloc_counters(table); |  	counters = alloc_counters(table); | ||||||
|  	if (IS_ERR(counters)) |  	if (IS_ERR(counters)) | ||||||
| @@ -844,6 +873,14 @@ copy_entries_to_user(unsigned int total_ | @@ -845,6 +874,14 @@ copy_entries_to_user(unsigned int total_ | ||||||
|  			goto free_counters; |  			goto free_counters; | ||||||
|  		} |  		} | ||||||
|   |   | ||||||
| @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		for (i = sizeof(struct ipt_entry); |  		for (i = sizeof(struct ipt_entry); | ||||||
|  		     i < e->target_offset; |  		     i < e->target_offset; | ||||||
|  		     i += m->u.match_size) { |  		     i += m->u.match_size) { | ||||||
| @@ -1226,12 +1263,15 @@ compat_copy_entry_to_user(struct ipt_ent | @@ -1227,12 +1264,15 @@ compat_copy_entry_to_user(struct ipt_ent | ||||||
|  	compat_uint_t origsize; |  	compat_uint_t origsize; | ||||||
|  	const struct xt_entry_match *ematch; |  	const struct xt_entry_match *ematch; | ||||||
|  	int ret = 0; |  	int ret = 0; | ||||||
|   | |||||||
| @@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (!net_eq(dev_net(dev), sock_net(sk))) |  	if (!net_eq(dev_net(dev), sock_net(sk))) | ||||||
|  		goto drop; |  		goto drop; | ||||||
|   |   | ||||||
| @@ -3262,6 +3264,7 @@ static int packet_create(struct net *net | @@ -3260,6 +3262,7 @@ static int packet_create(struct net *net | ||||||
|  	mutex_init(&po->pg_vec_lock); |  	mutex_init(&po->pg_vec_lock); | ||||||
|  	po->rollover = NULL; |  	po->rollover = NULL; | ||||||
|  	po->prot_hook.func = packet_rcv; |  	po->prot_hook.func = packet_rcv; | ||||||
| @@ -95,7 +95,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; | ||||||
| @@ -3875,6 +3878,16 @@ packet_setsockopt(struct socket *sock, i | @@ -3873,6 +3876,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; | ||||||
|  	} |  	} | ||||||
| @@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	default: |  	default: | ||||||
|  		return -ENOPROTOOPT; |  		return -ENOPROTOOPT; | ||||||
|  	} |  	} | ||||||
| @@ -3927,6 +3940,13 @@ static int packet_getsockopt(struct sock | @@ -3925,6 +3938,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; | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  /** |  /** | ||||||
|   *	ata_build_rw_tf - Build ATA taskfile for given read/write request |   *	ata_build_rw_tf - Build ATA taskfile for given read/write request | ||||||
|   *	@tf: Target ATA taskfile |   *	@tf: Target ATA taskfile | ||||||
| @@ -5117,6 +5130,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | @@ -5120,6 +5133,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | ||||||
|  		if (tag < 0) |  		if (tag < 0) | ||||||
|  			return NULL; |  			return NULL; | ||||||
|  	} |  	} | ||||||
| @@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|   |   | ||||||
|  	qc = __ata_qc_from_tag(ap, tag); |  	qc = __ata_qc_from_tag(ap, tag); | ||||||
|  	qc->tag = tag; |  	qc->tag = tag; | ||||||
| @@ -6018,6 +6034,9 @@ struct ata_port *ata_port_alloc(struct a | @@ -6021,6 +6037,9 @@ struct ata_port *ata_port_alloc(struct a | ||||||
|  	ap->stats.unhandled_irq = 1; |  	ap->stats.unhandled_irq = 1; | ||||||
|  	ap->stats.idle_irq = 1; |  	ap->stats.idle_irq = 1; | ||||||
|  #endif |  #endif | ||||||
| @@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  	ata_sff_port_init(ap); |  	ata_sff_port_init(ap); | ||||||
|   |   | ||||||
|  	return ap; |  	return ap; | ||||||
| @@ -6039,6 +6058,12 @@ static void ata_host_release(struct devi | @@ -6042,6 +6061,12 @@ static void ata_host_release(struct devi | ||||||
|   |   | ||||||
|  		kfree(ap->pmp_link); |  		kfree(ap->pmp_link); | ||||||
|  		kfree(ap->slave_link); |  		kfree(ap->slave_link); | ||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  		kfree(ap); |  		kfree(ap); | ||||||
|  		host->ports[i] = NULL; |  		host->ports[i] = NULL; | ||||||
|  	} |  	} | ||||||
| @@ -6485,7 +6510,23 @@ int ata_host_register(struct ata_host *h | @@ -6488,7 +6513,23 @@ int ata_host_register(struct ata_host *h | ||||||
|  		host->ports[i]->print_id = atomic_inc_return(&ata_print_id); |  		host->ports[i]->print_id = atomic_inc_return(&ata_print_id); | ||||||
|  		host->ports[i]->local_port_no = i + 1; |  		host->ports[i]->local_port_no = i + 1; | ||||||
|  	} |  	} | ||||||
| @@ -134,7 +134,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|   |   | ||||||
|  /* |  /* | ||||||
|   * Define if arch has non-standard setup.  This is a _PCI_ standard |   * Define if arch has non-standard setup.  This is a _PCI_ standard | ||||||
| @@ -889,6 +892,12 @@ struct ata_port { | @@ -890,6 +893,12 @@ struct ata_port { | ||||||
|  #ifdef CONFIG_ATA_ACPI |  #ifdef CONFIG_ATA_ACPI | ||||||
|  	struct ata_acpi_gtm	__acpi_init_gtm; /* use ata_acpi_init_gtm() */ |  	struct ata_acpi_gtm	__acpi_init_gtm; /* use ata_acpi_init_gtm() */ | ||||||
|  #endif |  #endif | ||||||
|   | |||||||
| @@ -1,49 +0,0 @@ | |||||||
| The gen_stats facility will add a header for the toplevel nlattr of type |  | ||||||
| TCA_STATS2 that contains all stats added by qdisc callbacks. A reference |  | ||||||
| to this header is stored in the gnet_dump struct, and when all the |  | ||||||
| per-qdisc callbacks have finished adding their stats, the length of the |  | ||||||
| containing header will be adjusted to the right value. |  | ||||||
|  |  | ||||||
| However, on architectures that need padding (i.e., that don't set |  | ||||||
| CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS), the padding nlattr is added |  | ||||||
| before the stats, which means that the stored pointer will point to the |  | ||||||
| padding, and so when the header is fixed up, the result is just a very |  | ||||||
| big padding nlattr. Because most qdiscs also supply the legacy TCA_STATS |  | ||||||
| struct, this problem has been mostly invisible, but we exposed it with |  | ||||||
| the netlink attribute-based statistics in CAKE. |  | ||||||
|  |  | ||||||
| Fix the issue by fixing up the stored pointer if it points to a padding |  | ||||||
| nlattr. |  | ||||||
|  |  | ||||||
| Tested-by: Pete Heist <pete@heistp.net> |  | ||||||
| Tested-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> |  | ||||||
| Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk> |  | ||||||
| --- |  | ||||||
|  net/core/gen_stats.c |   16 ++++++++++++++-- |  | ||||||
|  1 file changed, 14 insertions(+), 2 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/net/core/gen_stats.c |  | ||||||
| +++ b/net/core/gen_stats.c |  | ||||||
| @@ -77,8 +77,20 @@ gnet_stats_start_copy_compat(struct sk_b |  | ||||||
|  		d->lock = lock; |  | ||||||
|  		spin_lock_bh(lock); |  | ||||||
|  	} |  | ||||||
| -	if (d->tail) |  | ||||||
| -		return gnet_stats_copy(d, type, NULL, 0, padattr); |  | ||||||
| +	if (d->tail) { |  | ||||||
| +		int ret = gnet_stats_copy(d, type, NULL, 0, padattr); |  | ||||||
| + |  | ||||||
| +		/* The initial attribute added in gnet_stats_copy() may be |  | ||||||
| +		 * preceded by a padding attribute, in which case d->tail will |  | ||||||
| +		 * end up pointing at the padding instead of the real attribute. |  | ||||||
| +		 * Fix this so gnet_stats_finish_copy() adjusts the length of |  | ||||||
| +		 * the right attribute. |  | ||||||
| +		 */ |  | ||||||
| +		if (ret == 0 && d->tail->nla_type == padattr) |  | ||||||
| +			d->tail = (struct nlattr *)((char *)d->tail + |  | ||||||
| +						    NLA_ALIGN(d->tail->nla_len)); |  | ||||||
| +		return ret; |  | ||||||
| +	} |  | ||||||
|   |  | ||||||
|  	return 0; |  | ||||||
|  } |  | ||||||
| @@ -12,11 +12,9 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  drivers/soc/qcom/spm.c | 3 +++ |  drivers/soc/qcom/spm.c | 3 +++ | ||||||
|  1 file changed, 3 insertions(+) |  1 file changed, 3 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/drivers/soc/qcom/spm.c b/drivers/soc/qcom/spm.c |  | ||||||
| index f9d7a85b2822..53807e839664 100644 |  | ||||||
| --- a/drivers/soc/qcom/spm.c | --- a/drivers/soc/qcom/spm.c | ||||||
| +++ b/drivers/soc/qcom/spm.c | +++ b/drivers/soc/qcom/spm.c | ||||||
| @@ -219,6 +219,9 @@ static int __init qcom_cpuidle_init(struct device_node *cpu_node, int cpu) | @@ -219,6 +219,9 @@ static int __init qcom_cpuidle_init(stru | ||||||
|  	cpumask_t mask; |  	cpumask_t mask; | ||||||
|  	bool use_scm_power_down = false; |  	bool use_scm_power_down = false; | ||||||
|   |   | ||||||
| @@ -26,6 +24,3 @@ index f9d7a85b2822..53807e839664 100644 | |||||||
|  	for (i = 0; ; i++) { |  	for (i = 0; ; i++) { | ||||||
|  		state_node = of_parse_phandle(cpu_node, "cpu-idle-states", i); |  		state_node = of_parse_phandle(cpu_node, "cpu-idle-states", i); | ||||||
|  		if (!state_node) |  		if (!state_node) | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,11 +20,9 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  arch/arm/boot/dts/qcom-ipq4019.dtsi | 2 +- |  arch/arm/boot/dts/qcom-ipq4019.dtsi | 2 +- | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi |  | ||||||
| index 98b9850ed2a0..3289b3a6c10e 100644 |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -316,7 +316,7 @@ | @@ -262,7 +262,7 @@ | ||||||
|   |   | ||||||
|                  saw0: regulator@b089000 { |                  saw0: regulator@b089000 { | ||||||
|                          compatible = "qcom,saw2"; |                          compatible = "qcom,saw2"; | ||||||
| @@ -33,6 +31,3 @@ index 98b9850ed2a0..3289b3a6c10e 100644 | |||||||
|                          regulator; |                          regulator; | ||||||
|                  }; |                  }; | ||||||
|   |   | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,10 +12,8 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  arch/arm/mach-qcom/Kconfig | 5 +++++ |  arch/arm/mach-qcom/Kconfig | 5 +++++ | ||||||
|  2 files changed, 6 insertions(+) |  2 files changed, 6 insertions(+) | ||||||
|  |  | ||||||
| Index: linux-4.14.54/arch/arm/Makefile | --- a/arch/arm/Makefile | ||||||
| =================================================================== | +++ b/arch/arm/Makefile | ||||||
| --- linux-4.14.54.orig/arch/arm/Makefile |  | ||||||
| +++ linux-4.14.54/arch/arm/Makefile |  | ||||||
| @@ -150,6 +150,7 @@ endif | @@ -150,6 +150,7 @@ endif | ||||||
|  textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000 |  textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000 | ||||||
|  textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 |  textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 | ||||||
| @@ -24,10 +22,8 @@ Index: linux-4.14.54/arch/arm/Makefile | |||||||
|   |   | ||||||
|  # Machine directory name.  This list is sorted alphanumerically |  # Machine directory name.  This list is sorted alphanumerically | ||||||
|  # by CONFIG_* macro name. |  # by CONFIG_* macro name. | ||||||
| Index: linux-4.14.54/arch/arm/mach-qcom/Kconfig | --- a/arch/arm/mach-qcom/Kconfig | ||||||
| =================================================================== | +++ b/arch/arm/mach-qcom/Kconfig | ||||||
| --- linux-4.14.54.orig/arch/arm/mach-qcom/Kconfig |  | ||||||
| +++ linux-4.14.54/arch/arm/mach-qcom/Kconfig |  | ||||||
| @@ -27,4 +27,9 @@ config ARCH_MDM9615 | @@ -27,4 +27,9 @@ config ARCH_MDM9615 | ||||||
|  	bool "Enable support for MDM9615" |  	bool "Enable support for MDM9615" | ||||||
|  	select CLKSRC_QCOM |  	select CLKSRC_QCOM | ||||||
|   | |||||||
| @@ -12,9 +12,6 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  1 file changed, 21 insertions(+) |  1 file changed, 21 insertions(+) | ||||||
|  create mode 100644 Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt |  create mode 100644 Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt | ||||||
|  |  | ||||||
| diff --git a/Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt b/Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt |  | ||||||
| new file mode 100644 |  | ||||||
| index 000000000000..362877fcafed |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt | +++ b/Documentation/devicetree/bindings/phy/phy-qcom-ipq4019-usb.txt | ||||||
| @@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||||||
| @@ -39,6 +36,3 @@ index 000000000000..362877fcafed | |||||||
| +		 <&gcc USB2_HSPHY_S_ARES>; | +		 <&gcc USB2_HSPHY_S_ARES>; | ||||||
| +	reset-names = "por_rst", "srif_rst"; | +	reset-names = "por_rst", "srif_rst"; | ||||||
| +}; | +}; | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,10 +15,8 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  3 files changed, 196 insertions(+) |  3 files changed, 196 insertions(+) | ||||||
|  create mode 100644 drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c |  create mode 100644 drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c | ||||||
|  |  | ||||||
| Index: linux-4.14.54/drivers/phy/qualcomm/Kconfig | --- a/drivers/phy/qualcomm/Kconfig | ||||||
| =================================================================== | +++ b/drivers/phy/qualcomm/Kconfig | ||||||
| --- linux-4.14.54.orig/drivers/phy/qualcomm/Kconfig |  | ||||||
| +++ linux-4.14.54/drivers/phy/qualcomm/Kconfig |  | ||||||
| @@ -8,6 +8,13 @@ config PHY_QCOM_APQ8064_SATA | @@ -8,6 +8,13 @@ config PHY_QCOM_APQ8064_SATA | ||||||
|  	depends on OF |  	depends on OF | ||||||
|  	select GENERIC_PHY |  	select GENERIC_PHY | ||||||
| @@ -33,10 +31,8 @@ Index: linux-4.14.54/drivers/phy/qualcomm/Kconfig | |||||||
|  config PHY_QCOM_IPQ806X_SATA |  config PHY_QCOM_IPQ806X_SATA | ||||||
|  	tristate "Qualcomm IPQ806x SATA SerDes/PHY driver" |  	tristate "Qualcomm IPQ806x SATA SerDes/PHY driver" | ||||||
|  	depends on ARCH_QCOM |  	depends on ARCH_QCOM | ||||||
| Index: linux-4.14.54/drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c |  | ||||||
| =================================================================== |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ linux-4.14.54/drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c | +++ b/drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c | ||||||
| @@ -0,0 +1,188 @@ | @@ -0,0 +1,188 @@ | ||||||
| +/* | +/* | ||||||
| + * Copyright (C) 2018 John Crispin <john@phrozen.org> | + * Copyright (C) 2018 John Crispin <john@phrozen.org> | ||||||
| @@ -226,10 +222,8 @@ Index: linux-4.14.54/drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c | |||||||
| +MODULE_DESCRIPTION("QCOM/IPQ4019 USB phy driver"); | +MODULE_DESCRIPTION("QCOM/IPQ4019 USB phy driver"); | ||||||
| +MODULE_AUTHOR("John Crispin <john@phrozen.org>"); | +MODULE_AUTHOR("John Crispin <john@phrozen.org>"); | ||||||
| +MODULE_LICENSE("GPL v2"); | +MODULE_LICENSE("GPL v2"); | ||||||
| Index: linux-4.14.54/drivers/phy/qualcomm/Makefile | --- a/drivers/phy/qualcomm/Makefile | ||||||
| =================================================================== | +++ b/drivers/phy/qualcomm/Makefile | ||||||
| --- linux-4.14.54.orig/drivers/phy/qualcomm/Makefile |  | ||||||
| +++ linux-4.14.54/drivers/phy/qualcomm/Makefile |  | ||||||
| @@ -1,5 +1,6 @@ | @@ -1,5 +1,6 @@ | ||||||
|  # SPDX-License-Identifier: GPL-2.0 |  # SPDX-License-Identifier: GPL-2.0 | ||||||
|  obj-$(CONFIG_PHY_QCOM_APQ8064_SATA)	+= phy-qcom-apq8064-sata.o |  obj-$(CONFIG_PHY_QCOM_APQ8064_SATA)	+= phy-qcom-apq8064-sata.o | ||||||
|   | |||||||
| @@ -11,11 +11,9 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  arch/arm/boot/dts/qcom-ipq4019.dtsi           | 74 +++++++++++++++++++++++++++ |  arch/arm/boot/dts/qcom-ipq4019.dtsi           | 74 +++++++++++++++++++++++++++ | ||||||
|  2 files changed, 94 insertions(+) |  2 files changed, 94 insertions(+) | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi |  | ||||||
| index 418f9a022336..2ee5f05d5a43 100644 |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| @@ -109,5 +109,25 @@ | @@ -101,5 +101,25 @@ | ||||||
|  		wifi@a800000 { |  		wifi@a800000 { | ||||||
|  			status = "ok"; |  			status = "ok"; | ||||||
|  		}; |  		}; | ||||||
| @@ -41,11 +39,9 @@ index 418f9a022336..2ee5f05d5a43 100644 | |||||||
| +		}; | +		}; | ||||||
|  	}; |  	}; | ||||||
|  }; |  }; | ||||||
| diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi |  | ||||||
| index e5e52adbd5a3..e6b12129f0e4 100644 |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -553,5 +553,79 @@ | @@ -410,5 +410,79 @@ | ||||||
|  					  "legacy"; |  					  "legacy"; | ||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  		}; |  		}; | ||||||
| @@ -125,6 +121,3 @@ index e5e52adbd5a3..e6b12129f0e4 100644 | |||||||
| +		}; | +		}; | ||||||
|  	}; |  	}; | ||||||
|  }; |  }; | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,11 +15,9 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org> | |||||||
|  arch/arm/boot/dts/qcom-ipq4019.dtsi           | 156 ++++++++++++++++++++++++-- |  arch/arm/boot/dts/qcom-ipq4019.dtsi           | 156 ++++++++++++++++++++++++-- | ||||||
|  2 files changed, 146 insertions(+), 12 deletions(-) |  2 files changed, 146 insertions(+), 12 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi |  | ||||||
| index ef8d8c88ed7b..418f9a022336 100644 |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| @@ -69,7 +69,7 @@ | @@ -61,7 +61,7 @@ | ||||||
|  			status = "ok"; |  			status = "ok"; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| @@ -28,12 +26,10 @@ index ef8d8c88ed7b..418f9a022336 100644 | |||||||
|  			pinctrl-0 = <&spi_0_pins>; |  			pinctrl-0 = <&spi_0_pins>; | ||||||
|  			pinctrl-names = "default"; |  			pinctrl-names = "default"; | ||||||
|  			status = "ok"; |  			status = "ok"; | ||||||
| diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi |  | ||||||
| index 2efc8a2d41a7..737097e9fb4f 100644 |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -40,8 +40,10 @@ | @@ -24,8 +24,10 @@ | ||||||
|  	}; |  	interrupt-parent = <&intc>; | ||||||
|   |   | ||||||
|  	aliases { |  	aliases { | ||||||
| -		spi0 = &spi_0; | -		spi0 = &spi_0; | ||||||
| @@ -45,7 +41,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  	}; |  	}; | ||||||
|   |   | ||||||
|  	cpus { |  	cpus { | ||||||
| @@ -120,6 +122,12 @@ | @@ -132,6 +134,12 @@ | ||||||
|  		}; |  		}; | ||||||
|  	}; |  	}; | ||||||
|   |   | ||||||
| @@ -58,7 +54,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  	timer { |  	timer { | ||||||
|  		compatible = "arm,armv7-timer"; |  		compatible = "arm,armv7-timer"; | ||||||
|  		interrupts = <1 2 0xf08>, |  		interrupts = <1 2 0xf08>, | ||||||
| @@ -165,13 +173,13 @@ | @@ -177,13 +185,13 @@ | ||||||
|  			#gpio-cells = <2>; |  			#gpio-cells = <2>; | ||||||
|  			interrupt-controller; |  			interrupt-controller; | ||||||
|  			#interrupt-cells = <2>; |  			#interrupt-cells = <2>; | ||||||
| @@ -74,7 +70,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			clocks = <&gcc GCC_BLSP1_AHB_CLK>; |  			clocks = <&gcc GCC_BLSP1_AHB_CLK>; | ||||||
|  			clock-names = "bam_clk"; |  			clock-names = "bam_clk"; | ||||||
|  			#dma-cells = <1>; |  			#dma-cells = <1>; | ||||||
| @@ -179,7 +187,7 @@ | @@ -191,7 +199,7 @@ | ||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| @@ -83,7 +79,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			compatible = "qcom,spi-qup-v2.2.1"; |  			compatible = "qcom,spi-qup-v2.2.1"; | ||||||
|  			reg = <0x78b5000 0x600>; |  			reg = <0x78b5000 0x600>; | ||||||
|  			interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>; |  			interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>; | ||||||
| @@ -188,10 +196,26 @@ | @@ -200,10 +208,26 @@ | ||||||
|  			clock-names = "core", "iface"; |  			clock-names = "core", "iface"; | ||||||
|  			#address-cells = <1>; |  			#address-cells = <1>; | ||||||
|  			#size-cells = <0>; |  			#size-cells = <0>; | ||||||
| @@ -111,7 +107,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			compatible = "qcom,i2c-qup-v2.2.1"; |  			compatible = "qcom,i2c-qup-v2.2.1"; | ||||||
|  			reg = <0x78b7000 0x600>; |  			reg = <0x78b7000 0x600>; | ||||||
|  			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; |  			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; | ||||||
| @@ -200,14 +224,29 @@ | @@ -212,14 +236,29 @@ | ||||||
|  			clock-names = "iface", "core"; |  			clock-names = "iface", "core"; | ||||||
|  			#address-cells = <1>; |  			#address-cells = <1>; | ||||||
|  			#size-cells = <0>; |  			#size-cells = <0>; | ||||||
| @@ -142,8 +138,8 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			clocks = <&gcc GCC_CRYPTO_AHB_CLK>; |  			clocks = <&gcc GCC_CRYPTO_AHB_CLK>; | ||||||
|  			clock-names = "bam_clk"; |  			clock-names = "bam_clk"; | ||||||
|  			#dma-cells = <1>; |  			#dma-cells = <1>; | ||||||
| @@ -275,7 +314,7 @@ | @@ -293,7 +332,7 @@ | ||||||
|  		blsp1_uart1: serial@78af000 { |  		serial@78af000 { | ||||||
|  			compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; |  			compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; | ||||||
|  			reg = <0x78af000 0x200>; |  			reg = <0x78af000 0x200>; | ||||||
| -			interrupts = <0 107 0>; | -			interrupts = <0 107 0>; | ||||||
| @@ -151,7 +147,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  			clocks = <&gcc GCC_BLSP1_UART1_APPS_CLK>, |  			clocks = <&gcc GCC_BLSP1_UART1_APPS_CLK>, | ||||||
|  				<&gcc GCC_BLSP1_AHB_CLK>; |  				<&gcc GCC_BLSP1_AHB_CLK>; | ||||||
| @@ -287,7 +326,7 @@ | @@ -305,7 +344,7 @@ | ||||||
|  		serial@78b0000 { |  		serial@78b0000 { | ||||||
|  			compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; |  			compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; | ||||||
|  			reg = <0x78b0000 0x200>; |  			reg = <0x78b0000 0x200>; | ||||||
| @@ -160,7 +156,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  			clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, |  			clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, | ||||||
|  				<&gcc GCC_BLSP1_AHB_CLK>; |  				<&gcc GCC_BLSP1_AHB_CLK>; | ||||||
| @@ -309,6 +348,101 @@ | @@ -327,6 +366,101 @@ | ||||||
|  			reg = <0x4ab000 0x4>; |  			reg = <0x4ab000 0x4>; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| @@ -262,7 +258,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  		wifi0: wifi@a000000 { |  		wifi0: wifi@a000000 { | ||||||
|  			compatible = "qcom,ipq4019-wifi"; |  			compatible = "qcom,ipq4019-wifi"; | ||||||
|  			reg = <0xa000000 0x200000>; |  			reg = <0xa000000 0x200000>; | ||||||
| @@ -342,7 +476,7 @@ | @@ -360,7 +494,7 @@ | ||||||
|  				     <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>, | ||||||
|  				     <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>, | ||||||
|  				     <GIC_SPI 47 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 47 IRQ_TYPE_EDGE_RISING>, | ||||||
| @@ -271,7 +267,7 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			interrupt-names =  "msi0",  "msi1",  "msi2",  "msi3", |  			interrupt-names =  "msi0",  "msi1",  "msi2",  "msi3", | ||||||
|  					   "msi4",  "msi5",  "msi6",  "msi7", |  					   "msi4",  "msi5",  "msi6",  "msi7", | ||||||
|  					   "msi8",  "msi9", "msi10", "msi11", |  					   "msi8",  "msi9", "msi10", "msi11", | ||||||
| @@ -384,7 +518,7 @@ | @@ -402,7 +536,7 @@ | ||||||
|  				     <GIC_SPI 61 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 61 IRQ_TYPE_EDGE_RISING>, | ||||||
|  				     <GIC_SPI 62 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 62 IRQ_TYPE_EDGE_RISING>, | ||||||
|  				     <GIC_SPI 63 IRQ_TYPE_EDGE_RISING>, |  				     <GIC_SPI 63 IRQ_TYPE_EDGE_RISING>, | ||||||
| @@ -280,6 +276,3 @@ index 2efc8a2d41a7..737097e9fb4f 100644 | |||||||
|  			interrupt-names =  "msi0",  "msi1",  "msi2",  "msi3", |  			interrupt-names =  "msi0",  "msi1",  "msi2",  "msi3", | ||||||
|  					   "msi4",  "msi5",  "msi6",  "msi7", |  					   "msi4",  "msi5",  "msi6",  "msi7", | ||||||
|  					   "msi8",  "msi9", "msi10", "msi11", |  					   "msi8",  "msi9", "msi10", "msi11", | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,12 +12,12 @@ Signed-off-by: Mathias Kresin <dev@kresin.me> | |||||||
|  |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -359,7 +359,7 @@ | @@ -381,7 +381,7 @@ | ||||||
|  			#size-cells = <2>; |  			#size-cells = <2>; | ||||||
|   |   | ||||||
|  			ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000 |  			ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000 | ||||||
| -				  0x82000000 0 0x48000000 0x48000000 0 0x10000000>; | -				  0x82000000 0 0x48000000 0x48000000 0 0x10000000>; | ||||||
| +				  0x82000000 0 0x40300000 0x40300000 0 0x400000>; | +				  0x82000000 0 0x40300000 0x40300000 0 0x400000>; | ||||||
|   |   | ||||||
|  			interrupts = <GIC_SPI 141 IRQ_TYPE_NONE>; |  			interrupts = <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>; | ||||||
|  			interrupt-names = "msi"; |  			interrupt-names = "msi"; | ||||||
|   | |||||||
| @@ -61,7 +61,7 @@ Origin: other, https://patchwork.kernel.org/patch/10339127/ | |||||||
|  |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -166,6 +166,7 @@ | @@ -182,6 +182,7 @@ | ||||||
|  			compatible = "qcom,ipq4019-pinctrl"; |  			compatible = "qcom,ipq4019-pinctrl"; | ||||||
|  			reg = <0x01000000 0x300000>; |  			reg = <0x01000000 0x300000>; | ||||||
|  			gpio-controller; |  			gpio-controller; | ||||||
|   | |||||||
| @@ -42,11 +42,9 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  drivers/clk/qcom/gcc-ipq4019.c | 34 +++++++++++++++++++++++++++++++--- |  drivers/clk/qcom/gcc-ipq4019.c | 34 +++++++++++++++++++++++++++++++--- | ||||||
|  1 file changed, 31 insertions(+), 3 deletions(-) |  1 file changed, 31 insertions(+), 3 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/drivers/clk/qcom/gcc-ipq4019.c b/drivers/clk/qcom/gcc-ipq4019.c |  | ||||||
| index 46cb256b4aa2..4ec43f7d2e52 100644 |  | ||||||
| --- a/drivers/clk/qcom/gcc-ipq4019.c | --- a/drivers/clk/qcom/gcc-ipq4019.c | ||||||
| +++ b/drivers/clk/qcom/gcc-ipq4019.c | +++ b/drivers/clk/qcom/gcc-ipq4019.c | ||||||
| @@ -1253,6 +1253,29 @@ static const struct clk_fepll_vco gcc_fepll_vco = { | @@ -1253,6 +1253,29 @@ static const struct clk_fepll_vco gcc_fe | ||||||
|  	.reg = 0x2f020, |  	.reg = 0x2f020, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -76,7 +74,7 @@ index 46cb256b4aa2..4ec43f7d2e52 100644 | |||||||
|  /* |  /* | ||||||
|   * Round rate function for APSS CPU PLL Clock divider. |   * Round rate function for APSS CPU PLL Clock divider. | ||||||
|   * It looks up the frequency table and returns the next higher frequency |   * It looks up the frequency table and returns the next higher frequency | ||||||
| @@ -1265,7 +1288,7 @@ static long clk_cpu_div_round_rate(struct clk_hw *hw, unsigned long rate, | @@ -1265,7 +1288,7 @@ static long clk_cpu_div_round_rate(struc | ||||||
|  	struct clk_hw *p_hw; |  	struct clk_hw *p_hw; | ||||||
|  	const struct freq_tbl *f; |  	const struct freq_tbl *f; | ||||||
|   |   | ||||||
| @@ -85,7 +83,7 @@ index 46cb256b4aa2..4ec43f7d2e52 100644 | |||||||
|  	if (!f) |  	if (!f) | ||||||
|  		return -EINVAL; |  		return -EINVAL; | ||||||
|   |   | ||||||
| @@ -1288,7 +1311,7 @@ static int clk_cpu_div_set_rate(struct clk_hw *hw, unsigned long rate, | @@ -1288,7 +1311,7 @@ static int clk_cpu_div_set_rate(struct c | ||||||
|  	u32 mask; |  	u32 mask; | ||||||
|  	int ret; |  	int ret; | ||||||
|   |   | ||||||
| @@ -102,7 +100,7 @@ index 46cb256b4aa2..4ec43f7d2e52 100644 | |||||||
|  	struct clk_fepll *pll = to_clk_fepll(hw); |  	struct clk_fepll *pll = to_clk_fepll(hw); | ||||||
|  	u32 cdiv, pre_div; |  	u32 cdiv, pre_div; | ||||||
|  	u64 rate; |  	u64 rate; | ||||||
| @@ -1335,7 +1359,11 @@ clk_cpu_div_recalc_rate(struct clk_hw *hw, | @@ -1335,7 +1359,11 @@ clk_cpu_div_recalc_rate(struct clk_hw *h | ||||||
|  	rate = clk_fepll_vco_calc_rate(pll, parent_rate) * 2; |  	rate = clk_fepll_vco_calc_rate(pll, parent_rate) * 2; | ||||||
|  	do_div(rate, pre_div); |  	do_div(rate, pre_div); | ||||||
|   |   | ||||||
| @@ -115,6 +113,3 @@ index 46cb256b4aa2..4ec43f7d2e52 100644 | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  static const struct clk_ops clk_regmap_cpu_div_ops = { |  static const struct clk_ops clk_regmap_cpu_div_ops = { | ||||||
| --  |  | ||||||
| 2.11.0 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -84,5 +84,5 @@ this change qualifies for a stable@vger.kernel.org submission. | |||||||
| +	}; | +	}; | ||||||
| + | + | ||||||
|  	aliases { |  	aliases { | ||||||
|  		spi0 = &spi_0; |  		spi0 = &blsp1_spi1; | ||||||
|  		spi1 = &spi_1; |  		spi1 = &blsp1_spi2; | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/ubi/build.c | --- a/drivers/mtd/ubi/build.c | ||||||
| +++ b/drivers/mtd/ubi/build.c | +++ b/drivers/mtd/ubi/build.c | ||||||
| @@ -1184,6 +1184,9 @@ static void __init ubi_auto_attach(void) | @@ -1187,6 +1187,9 @@ static void __init ubi_auto_attach(void) | ||||||
|  	mtd = open_mtd_device("ubi"); |  	mtd = open_mtd_device("ubi"); | ||||||
|  	if (IS_ERR(mtd)) |  	if (IS_ERR(mtd)) | ||||||
|  		mtd = open_mtd_device("data"); |  		mtd = open_mtd_device("data"); | ||||||
| @@ -25,5 +25,5 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> | |||||||
| +	if (IS_ERR(mtd)) | +	if (IS_ERR(mtd)) | ||||||
| +		mtd = open_mtd_device("UBI_DEV"); | +		mtd = open_mtd_device("UBI_DEV"); | ||||||
|   |   | ||||||
|  	if (!IS_ERR(mtd)) { |  	if (IS_ERR(mtd)) | ||||||
|  		size_t len; |  		return; | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ so the info might change. | |||||||
|  |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -540,6 +540,34 @@ | @@ -562,6 +562,34 @@ | ||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| @@ -48,5 +48,5 @@ so the info might change. | |||||||
| +		}; | +		}; | ||||||
| + | + | ||||||
|  		usb3_ss_phy: ssphy@9a000 { |  		usb3_ss_phy: ssphy@9a000 { | ||||||
|  			compatible = "qca,uni-ssphy"; |  			compatible = "qcom,usb-ss-ipq4019-phy"; | ||||||
|  			reg = <0x9a000 0x800>; |  			#phy-cells = <0>; | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com> | |||||||
|  |  | ||||||
| --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| @@ -568,6 +568,29 @@ | @@ -590,6 +590,29 @@ | ||||||
|  			}; |  			}; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
| @@ -42,5 +42,5 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com> | |||||||
| +		}; | +		}; | ||||||
| + | + | ||||||
|  		usb3_ss_phy: ssphy@9a000 { |  		usb3_ss_phy: ssphy@9a000 { | ||||||
|  			compatible = "qca,uni-ssphy"; |  			compatible = "qcom,usb-ss-ipq4019-phy"; | ||||||
|  			reg = <0x9a000 0x800>; |  			#phy-cells = <0>; | ||||||
|   | |||||||
| @@ -14,10 +14,8 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com> | |||||||
|  arch/arm/boot/dts/qcom-ipq4019.dtsi | 60 +++++++++++++++++++++++++++++++++++++ |  arch/arm/boot/dts/qcom-ipq4019.dtsi | 60 +++++++++++++++++++++++++++++++++++++ | ||||||
|  1 file changed, 60 insertions(+) |  1 file changed, 60 insertions(+) | ||||||
|  |  | ||||||
| Index: linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| =================================================================== | +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi | ||||||
| --- linux-4.14.54.orig/arch/arm/boot/dts/qcom-ipq4019.dtsi |  | ||||||
| +++ linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019.dtsi |  | ||||||
| @@ -44,6 +44,8 @@ | @@ -44,6 +44,8 @@ | ||||||
|  		spi1 = &blsp1_spi2; |  		spi1 = &blsp1_spi2; | ||||||
|  		i2c0 = &blsp1_i2c3; |  		i2c0 = &blsp1_i2c3; | ||||||
| @@ -27,7 +25,7 @@ Index: linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019.dtsi | |||||||
|  	}; |  	}; | ||||||
|   |   | ||||||
|  	cpus { |  	cpus { | ||||||
| @@ -606,6 +608,64 @@ | @@ -613,6 +615,64 @@ | ||||||
|  			status = "disabled"; |  			status = "disabled"; | ||||||
|  		}; |  		}; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| Index: linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| =================================================================== | +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | ||||||
| --- linux-4.14.54.orig/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi |  | ||||||
| +++ linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi |  | ||||||
| @@ -15,12 +15,39 @@ | @@ -15,12 +15,39 @@ | ||||||
|   */ |   */ | ||||||
|   |   | ||||||
| @@ -80,10 +78,8 @@ Index: linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi | |||||||
|  		usb3_ss_phy: ssphy@9a000 { |  		usb3_ss_phy: ssphy@9a000 { | ||||||
|  			status = "ok"; |  			status = "ok"; | ||||||
|  		}; |  		}; | ||||||
| Index: linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts | --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts | ||||||
| =================================================================== | +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts | ||||||
| --- linux-4.14.54.orig/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts |  | ||||||
| +++ linux-4.14.54/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts |  | ||||||
| @@ -18,5 +18,73 @@ | @@ -18,5 +18,73 @@ | ||||||
|   |   | ||||||
|  / { |  / { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts | --- a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts | ||||||
| +++ b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts | +++ b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts | ||||||
| @@ -185,18 +185,18 @@ | @@ -186,18 +186,18 @@ | ||||||
|  	}; |  	}; | ||||||
|   |   | ||||||
|  	partition@a0000 { |  	partition@a0000 { | ||||||
| @@ -22,7 +22,7 @@ | |||||||
|  		reg = <0x400000 0x1C00000>; |  		reg = <0x400000 0x1C00000>; | ||||||
|  	}; |  	}; | ||||||
|  }; |  }; | ||||||
| @@ -210,7 +210,7 @@ | @@ -211,7 +211,7 @@ | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  ð0 { |  ð0 { | ||||||
| @@ -30,4 +30,4 @@ | |||||||
| +	status = "disabled"; | +	status = "disabled"; | ||||||
|  	ethernet0-port@0 { |  	ethernet0-port@0 { | ||||||
|  		speed = <1000>; |  		speed = <1000>; | ||||||
|  		duplex = <1>; |  		duplex = <1>; | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy_device.c | --- a/drivers/net/phy/phy_device.c | ||||||
| +++ b/drivers/net/phy/phy_device.c | +++ b/drivers/net/phy/phy_device.c | ||||||
| @@ -1929,7 +1929,7 @@ static struct phy_driver genphy_driver = | @@ -1926,7 +1926,7 @@ static struct phy_driver genphy_driver = | ||||||
|  	.config_init	= genphy_config_init, |  	.config_init	= genphy_config_init, | ||||||
|  	.features	= PHY_GBIT_FEATURES | SUPPORTED_MII | |  	.features	= PHY_GBIT_FEATURES | SUPPORTED_MII | | ||||||
|  			  SUPPORTED_AUI | SUPPORTED_FIBRE | |  			  SUPPORTED_AUI | SUPPORTED_FIBRE | | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |||||||
|  	/* Set the HCD state before we enable the irqs */ |  	/* Set the HCD state before we enable the irqs */ | ||||||
| --- a/drivers/usb/host/xhci.h | --- a/drivers/usb/host/xhci.h | ||||||
| +++ b/drivers/usb/host/xhci.h | +++ b/drivers/usb/host/xhci.h | ||||||
| @@ -1726,6 +1726,8 @@ struct xhci_hcd { | @@ -1730,6 +1730,8 @@ struct xhci_hcd { | ||||||
|  	u8		max_interrupters; |  	u8		max_interrupters; | ||||||
|  	u8		max_ports; |  	u8		max_ports; | ||||||
|  	u8		isoc_threshold; |  	u8		isoc_threshold; | ||||||
|   | |||||||
| @@ -11,8 +11,6 @@ Subject: [PATCH] arm: dts: Add Unielec U7623 DTS | |||||||
|  create mode 100644 arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts |  create mode 100644 arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts | ||||||
|  create mode 100644 arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi |  create mode 100644 arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi | ||||||
|  |  | ||||||
| diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile |  | ||||||
| index 3fec84fa0..e685ce9a4 100644 |  | ||||||
| --- a/arch/arm/boot/dts/Makefile | --- a/arch/arm/boot/dts/Makefile | ||||||
| +++ b/arch/arm/boot/dts/Makefile | +++ b/arch/arm/boot/dts/Makefile | ||||||
| @@ -1062,6 +1062,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ | @@ -1062,6 +1062,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ | ||||||
| @@ -23,9 +21,6 @@ index 3fec84fa0..e685ce9a4 100644 | |||||||
|  	mt7623n-rfb-nand.dtb \ |  	mt7623n-rfb-nand.dtb \ | ||||||
|  	mt7623n-bananapi-bpi-r2.dtb \ |  	mt7623n-bananapi-bpi-r2.dtb \ | ||||||
|  	mt8127-moose.dtb \ |  	mt8127-moose.dtb \ | ||||||
| diff --git a/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts |  | ||||||
| new file mode 100644 |  | ||||||
| index 000000000..3b14eccd3 |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts | +++ b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc-512M.dts | ||||||
| @@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||||||
| @@ -46,9 +41,6 @@ index 000000000..3b14eccd3 | |||||||
| +		reg = <0 0x80000000 0 0x20000000>; | +		reg = <0 0x80000000 0 0x20000000>; | ||||||
| +	}; | +	}; | ||||||
| +}; | +}; | ||||||
| diff --git a/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi |  | ||||||
| new file mode 100644 |  | ||||||
| index 000000000..436b02f2d |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi | +++ b/arch/arm/boot/dts/mt7623a-unielec-u7623-02-emmc.dtsi | ||||||
| @@ -0,0 +1,375 @@ | @@ -0,0 +1,375 @@ | ||||||
| @@ -427,6 +419,3 @@ index 000000000..436b02f2d | |||||||
| +	status = "okay"; | +	status = "okay"; | ||||||
| +}; | +}; | ||||||
| + | + | ||||||
| --  |  | ||||||
| 2.14.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ | |||||||
|  	/* initialize internal qc */ |  	/* initialize internal qc */ | ||||||
|   |   | ||||||
|  	/* XXX: Tag 0 is used for drivers with legacy EH as some |  	/* XXX: Tag 0 is used for drivers with legacy EH as some | ||||||
| @@ -5124,6 +5132,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | @@ -5127,6 +5135,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | ||||||
|  	if (unlikely(ap->pflags & ATA_PFLAG_FROZEN)) |  	if (unlikely(ap->pflags & ATA_PFLAG_FROZEN)) | ||||||
|  		return NULL; |  		return NULL; | ||||||
|   |   | ||||||
| @@ -25,7 +25,7 @@ | |||||||
|  	/* libsas case */ |  	/* libsas case */ | ||||||
|  	if (ap->flags & ATA_FLAG_SAS_HOST) { |  	if (ap->flags & ATA_FLAG_SAS_HOST) { | ||||||
|  		tag = ata_sas_allocate_tag(ap); |  		tag = ata_sas_allocate_tag(ap); | ||||||
| @@ -5169,6 +5180,8 @@ void ata_qc_free(struct ata_queued_cmd * | @@ -5172,6 +5183,8 @@ void ata_qc_free(struct ata_queued_cmd * | ||||||
|  		qc->tag = ATA_TAG_POISON; |  		qc->tag = ATA_TAG_POISON; | ||||||
|  		if (ap->flags & ATA_FLAG_SAS_HOST) |  		if (ap->flags & ATA_FLAG_SAS_HOST) | ||||||
|  			ata_sas_free_tag(tag, ap); |  			ata_sas_free_tag(tag, ap); | ||||||
| @@ -36,7 +36,7 @@ | |||||||
|   |   | ||||||
| --- a/include/linux/libata.h | --- a/include/linux/libata.h | ||||||
| +++ b/include/linux/libata.h | +++ b/include/linux/libata.h | ||||||
| @@ -918,6 +918,8 @@ struct ata_port_operations { | @@ -919,6 +919,8 @@ struct ata_port_operations { | ||||||
|  	void (*qc_prep)(struct ata_queued_cmd *qc); |  	void (*qc_prep)(struct ata_queued_cmd *qc); | ||||||
|  	unsigned int (*qc_issue)(struct ata_queued_cmd *qc); |  	unsigned int (*qc_issue)(struct ata_queued_cmd *qc); | ||||||
|  	bool (*qc_fill_rtf)(struct ata_queued_cmd *qc); |  	bool (*qc_fill_rtf)(struct ata_queued_cmd *qc); | ||||||
| @@ -45,7 +45,7 @@ | |||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  	 * Configuration and exception handling |  	 * Configuration and exception handling | ||||||
| @@ -1008,6 +1010,9 @@ struct ata_port_operations { | @@ -1009,6 +1011,9 @@ struct ata_port_operations { | ||||||
|  	void (*phy_reset)(struct ata_port *ap); |  	void (*phy_reset)(struct ata_port *ap); | ||||||
|  	void (*eng_timeout)(struct ata_port *ap); |  	void (*eng_timeout)(struct ata_port *ap); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,29 +0,0 @@ | |||||||
| From 8e72a3a1be8f6328bd7ef491332ba541547b6086 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: John Crispin <blogic@openwrt.org> |  | ||||||
| Date: Mon, 15 Jul 2013 00:38:51 +0200 |  | ||||||
| Subject: [PATCH 36/53] mtd: fix cfi cmdset 0002 erase status check |  | ||||||
|  |  | ||||||
| --- |  | ||||||
|  drivers/mtd/chips/cfi_cmdset_0002.c |    4 ++-- |  | ||||||
|  1 file changed, 2 insertions(+), 2 deletions(-) |  | ||||||
|  |  | ||||||
| --- a/drivers/mtd/chips/cfi_cmdset_0002.c |  | ||||||
| +++ b/drivers/mtd/chips/cfi_cmdset_0002.c |  | ||||||
| @@ -2295,7 +2295,7 @@ static int __xipram do_erase_chip(struct |  | ||||||
|  			chip->erase_suspended = 0; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		if (chip_ready(map, adr)) |  | ||||||
| +		if (chip_good(map, adr, map_word_ff(map))) |  | ||||||
|  			break; |  | ||||||
|   |  | ||||||
|  		if (time_after(jiffies, timeo)) { |  | ||||||
| @@ -2385,7 +2385,7 @@ static int __xipram do_erase_oneblock(st |  | ||||||
|  			chip->erase_suspended = 0; |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
| -		if (chip_ready(map, adr)) { |  | ||||||
| +		if (chip_good(map, adr, map_word_ff(map))) { |  | ||||||
|  			xip_enable(map, chip, adr); |  | ||||||
|  			break; |  | ||||||
|  		} |  | ||||||
| @@ -16,7 +16,7 @@ Subject: [PATCH 37/53] mtd: cfi cmdset 0002 force word write | |||||||
| -#define FORCE_WORD_WRITE 0 | -#define FORCE_WORD_WRITE 0 | ||||||
| +#define FORCE_WORD_WRITE 1 | +#define FORCE_WORD_WRITE 1 | ||||||
|   |   | ||||||
|  #define MAX_WORD_RETRIES 3 |  #define MAX_RETRIES 3 | ||||||
|   |   | ||||||
| @@ -51,7 +51,9 @@ | @@ -51,7 +51,9 @@ | ||||||
|   |   | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Stijn Tintel
					Stijn Tintel