mirror of https://github.com/hak5/openwrt.git
kernel: update kernel 4.4 to version 4.4.19
Refresh patches for all targets that support kernel 4.4. Compile-tested on all targets that use kernel 4.4 and aren't marked broken. Runtime-tested on ar71xx, octeon and x86/64. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
parent
861f566e34
commit
8072264b96
|
@ -4,11 +4,11 @@ LINUX_RELEASE?=1
|
||||||
|
|
||||||
LINUX_VERSION-3.18 = .29
|
LINUX_VERSION-3.18 = .29
|
||||||
LINUX_VERSION-4.1 = .20
|
LINUX_VERSION-4.1 = .20
|
||||||
LINUX_VERSION-4.4 = .15
|
LINUX_VERSION-4.4 = .19
|
||||||
|
|
||||||
LINUX_KERNEL_MD5SUM-3.18.29 = b25737a0bc98e80d12200de93f239c28
|
LINUX_KERNEL_MD5SUM-3.18.29 = b25737a0bc98e80d12200de93f239c28
|
||||||
LINUX_KERNEL_MD5SUM-4.1.20 = 075c38a3a23ca5bc80437b13606df00a
|
LINUX_KERNEL_MD5SUM-4.1.20 = 075c38a3a23ca5bc80437b13606df00a
|
||||||
LINUX_KERNEL_MD5SUM-4.4.15 = 7b59c25c783173969bfb62cac4f057ce
|
LINUX_KERNEL_MD5SUM-4.4.19 = 03dfcd3522015afde8d7a5c0b6e5d6b6
|
||||||
|
|
||||||
ifdef KERNEL_PATCHVER
|
ifdef KERNEL_PATCHVER
|
||||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||||
|
|
|
@ -25,8 +25,6 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||||
create mode 100644 drivers/crypto/amcc/crypto4xx_trng.c
|
create mode 100644 drivers/crypto/amcc/crypto4xx_trng.c
|
||||||
create mode 100644 drivers/crypto/amcc/crypto4xx_trng.h
|
create mode 100644 drivers/crypto/amcc/crypto4xx_trng.h
|
||||||
|
|
||||||
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
|
|
||||||
index c76a88d..ac51149 100644
|
|
||||||
--- a/drivers/char/hw_random/Kconfig
|
--- a/drivers/char/hw_random/Kconfig
|
||||||
+++ b/drivers/char/hw_random/Kconfig
|
+++ b/drivers/char/hw_random/Kconfig
|
||||||
@@ -268,19 +268,6 @@ config HW_RANDOM_NOMADIK
|
@@ -268,19 +268,6 @@ config HW_RANDOM_NOMADIK
|
||||||
|
@ -49,11 +47,9 @@ index c76a88d..ac51149 100644
|
||||||
config HW_RANDOM_PSERIES
|
config HW_RANDOM_PSERIES
|
||||||
tristate "pSeries HW Random Number Generator support"
|
tristate "pSeries HW Random Number Generator support"
|
||||||
depends on PPC64 && IBMVIO
|
depends on PPC64 && IBMVIO
|
||||||
diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile
|
|
||||||
index e09305b..63022b4 100644
|
|
||||||
--- a/drivers/char/hw_random/Makefile
|
--- a/drivers/char/hw_random/Makefile
|
||||||
+++ b/drivers/char/hw_random/Makefile
|
+++ b/drivers/char/hw_random/Makefile
|
||||||
@@ -22,7 +22,6 @@ obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o
|
@@ -22,7 +22,6 @@ obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939
|
||||||
obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o
|
obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o
|
||||||
obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o
|
obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o
|
obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o
|
||||||
|
@ -61,9 +57,6 @@ index e09305b..63022b4 100644
|
||||||
obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o
|
obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o
|
obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o
|
||||||
obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o
|
obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o
|
||||||
diff --git a/drivers/char/hw_random/ppc4xx-rng.c b/drivers/char/hw_random/ppc4xx-rng.c
|
|
||||||
deleted file mode 100644
|
|
||||||
index c0db438..0000000
|
|
||||||
--- a/drivers/char/hw_random/ppc4xx-rng.c
|
--- a/drivers/char/hw_random/ppc4xx-rng.c
|
||||||
+++ /dev/null
|
+++ /dev/null
|
||||||
@@ -1,147 +0,0 @@
|
@@ -1,147 +0,0 @@
|
||||||
|
@ -214,11 +207,9 @@ index c0db438..0000000
|
||||||
-MODULE_LICENSE("GPL");
|
-MODULE_LICENSE("GPL");
|
||||||
-MODULE_AUTHOR("Josh Boyer <jwboyer@linux.vnet.ibm.com>");
|
-MODULE_AUTHOR("Josh Boyer <jwboyer@linux.vnet.ibm.com>");
|
||||||
-MODULE_DESCRIPTION("HW RNG driver for PPC 4xx processors");
|
-MODULE_DESCRIPTION("HW RNG driver for PPC 4xx processors");
|
||||||
diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
|
|
||||||
index 0a22ac7..12fd499 100644
|
|
||||||
--- a/drivers/crypto/Kconfig
|
--- a/drivers/crypto/Kconfig
|
||||||
+++ b/drivers/crypto/Kconfig
|
+++ b/drivers/crypto/Kconfig
|
||||||
@@ -279,6 +279,14 @@ config CRYPTO_DEV_PPC4XX
|
@@ -277,6 +277,14 @@ config CRYPTO_DEV_PPC4XX
|
||||||
help
|
help
|
||||||
This option allows you to have support for AMCC crypto acceleration.
|
This option allows you to have support for AMCC crypto acceleration.
|
||||||
|
|
||||||
|
@ -233,16 +224,12 @@ index 0a22ac7..12fd499 100644
|
||||||
config CRYPTO_DEV_OMAP_SHAM
|
config CRYPTO_DEV_OMAP_SHAM
|
||||||
tristate "Support for OMAP MD5/SHA1/SHA2 hw accelerator"
|
tristate "Support for OMAP MD5/SHA1/SHA2 hw accelerator"
|
||||||
depends on ARCH_OMAP2PLUS
|
depends on ARCH_OMAP2PLUS
|
||||||
diff --git a/drivers/crypto/amcc/Makefile b/drivers/crypto/amcc/Makefile
|
|
||||||
index 5c0c62b..b955399 100644
|
|
||||||
--- a/drivers/crypto/amcc/Makefile
|
--- a/drivers/crypto/amcc/Makefile
|
||||||
+++ b/drivers/crypto/amcc/Makefile
|
+++ b/drivers/crypto/amcc/Makefile
|
||||||
@@ -1,2 +1,3 @@
|
@@ -1,2 +1,3 @@
|
||||||
obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
|
obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
|
||||||
crypto4xx-y := crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
|
crypto4xx-y := crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
|
||||||
+crypto4xx-$(CONFIG_HW_RANDOM_PPC4XX) += crypto4xx_trng.o
|
+crypto4xx-$(CONFIG_HW_RANDOM_PPC4XX) += crypto4xx_trng.o
|
||||||
diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c
|
|
||||||
index 62134c8..dae1e39 100644
|
|
||||||
--- 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
|
||||||
@@ -40,6 +40,7 @@
|
@@ -40,6 +40,7 @@
|
||||||
|
@ -253,7 +240,7 @@ index 62134c8..dae1e39 100644
|
||||||
|
|
||||||
#define PPC4XX_SEC_VERSION_STR "0.5"
|
#define PPC4XX_SEC_VERSION_STR "0.5"
|
||||||
|
|
||||||
@@ -1225,6 +1226,7 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
@@ -1221,6 +1222,7 @@ static int crypto4xx_probe(struct platfo
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_start_dev;
|
goto err_start_dev;
|
||||||
|
|
||||||
|
@ -261,7 +248,7 @@ index 62134c8..dae1e39 100644
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_start_dev:
|
err_start_dev:
|
||||||
@@ -1252,6 +1254,8 @@ static int crypto4xx_remove(struct platform_device *ofdev)
|
@@ -1248,6 +1250,8 @@ static int crypto4xx_remove(struct platf
|
||||||
struct device *dev = &ofdev->dev;
|
struct device *dev = &ofdev->dev;
|
||||||
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
@ -270,7 +257,7 @@ index 62134c8..dae1e39 100644
|
||||||
free_irq(core_dev->irq, dev);
|
free_irq(core_dev->irq, dev);
|
||||||
irq_dispose_mapping(core_dev->irq);
|
irq_dispose_mapping(core_dev->irq);
|
||||||
|
|
||||||
@@ -1272,7 +1276,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match);
|
@@ -1268,7 +1272,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
|
||||||
|
|
||||||
static struct platform_driver crypto4xx_driver = {
|
static struct platform_driver crypto4xx_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
|
@ -279,13 +266,11 @@ index 62134c8..dae1e39 100644
|
||||||
.of_match_table = crypto4xx_match,
|
.of_match_table = crypto4xx_match,
|
||||||
},
|
},
|
||||||
.probe = crypto4xx_probe,
|
.probe = crypto4xx_probe,
|
||||||
@@ -1284,4 +1288,3 @@ module_platform_driver(crypto4xx_driver);
|
@@ -1280,4 +1284,3 @@ module_platform_driver(crypto4xx_driver)
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
MODULE_AUTHOR("James Hsiao <jhsiao@amcc.com>");
|
||||||
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
MODULE_DESCRIPTION("Driver for AMCC PPC4xx crypto accelerator");
|
||||||
-
|
-
|
||||||
diff --git a/drivers/crypto/amcc/crypto4xx_core.h b/drivers/crypto/amcc/crypto4xx_core.h
|
|
||||||
index bac0bde..ecfdcfe 100644
|
|
||||||
--- a/drivers/crypto/amcc/crypto4xx_core.h
|
--- a/drivers/crypto/amcc/crypto4xx_core.h
|
||||||
+++ b/drivers/crypto/amcc/crypto4xx_core.h
|
+++ b/drivers/crypto/amcc/crypto4xx_core.h
|
||||||
@@ -24,6 +24,8 @@
|
@@ -24,6 +24,8 @@
|
||||||
|
@ -313,8 +298,6 @@ index bac0bde..ecfdcfe 100644
|
||||||
u32 int_status;
|
u32 int_status;
|
||||||
u32 irq;
|
u32 irq;
|
||||||
struct tasklet_struct tasklet;
|
struct tasklet_struct tasklet;
|
||||||
diff --git a/drivers/crypto/amcc/crypto4xx_reg_def.h b/drivers/crypto/amcc/crypto4xx_reg_def.h
|
|
||||||
index 5f5fbc0..46fe57c 100644
|
|
||||||
--- a/drivers/crypto/amcc/crypto4xx_reg_def.h
|
--- a/drivers/crypto/amcc/crypto4xx_reg_def.h
|
||||||
+++ b/drivers/crypto/amcc/crypto4xx_reg_def.h
|
+++ b/drivers/crypto/amcc/crypto4xx_reg_def.h
|
||||||
@@ -125,6 +125,7 @@
|
@@ -125,6 +125,7 @@
|
||||||
|
@ -325,9 +308,6 @@ index 5f5fbc0..46fe57c 100644
|
||||||
#define PPC4XX_INT_DESCR_CNT 4
|
#define PPC4XX_INT_DESCR_CNT 4
|
||||||
#define PPC4XX_INT_TIMEOUT_CNT 0
|
#define PPC4XX_INT_TIMEOUT_CNT 0
|
||||||
#define PPC4XX_INT_CFG 1
|
#define PPC4XX_INT_CFG 1
|
||||||
diff --git a/drivers/crypto/amcc/crypto4xx_trng.c b/drivers/crypto/amcc/crypto4xx_trng.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..677ca17
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/crypto/amcc/crypto4xx_trng.c
|
+++ b/drivers/crypto/amcc/crypto4xx_trng.c
|
||||||
@@ -0,0 +1,131 @@
|
@@ -0,0 +1,131 @@
|
||||||
|
@ -462,9 +442,6 @@ index 0000000..677ca17
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+MODULE_ALIAS("ppc4xx_rng");
|
+MODULE_ALIAS("ppc4xx_rng");
|
||||||
diff --git a/drivers/crypto/amcc/crypto4xx_trng.h b/drivers/crypto/amcc/crypto4xx_trng.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..931d225
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/crypto/amcc/crypto4xx_trng.h
|
+++ b/drivers/crypto/amcc/crypto4xx_trng.h
|
||||||
@@ -0,0 +1,34 @@
|
@@ -0,0 +1,34 @@
|
||||||
|
@ -502,6 +479,3 @@ index 0000000..931d225
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,9 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
drivers/net/ethernet/ibm/emac/phy.c | 26 ++++++++++++++++++++++++++
|
drivers/net/ethernet/ibm/emac/phy.c | 26 ++++++++++++++++++++++++++
|
||||||
1 file changed, 26 insertions(+)
|
1 file changed, 26 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/net/ethernet/ibm/emac/phy.c b/drivers/net/ethernet/ibm/emac/phy.c
|
|
||||||
index d3b9d10..5b88cc6 100644
|
|
||||||
--- a/drivers/net/ethernet/ibm/emac/phy.c
|
--- a/drivers/net/ethernet/ibm/emac/phy.c
|
||||||
+++ b/drivers/net/ethernet/ibm/emac/phy.c
|
+++ b/drivers/net/ethernet/ibm/emac/phy.c
|
||||||
@@ -470,12 +470,38 @@ static struct mii_phy_def m88e1112_phy_def = {
|
@@ -470,12 +470,38 @@ static struct mii_phy_def m88e1112_phy_d
|
||||||
.ops = &m88e1112_phy_ops,
|
.ops = &m88e1112_phy_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -57,6 +55,3 @@ index d3b9d10..5b88cc6 100644
|
||||||
&genmii_phy_def,
|
&genmii_phy_def,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,9 @@ Signed-off-by: Vinod Koul <vinod.koul@intel.com>
|
||||||
drivers/dma/dmaengine.c | 81 +++++++++++++++++++++++++------------------------
|
drivers/dma/dmaengine.c | 81 +++++++++++++++++++++++++------------------------
|
||||||
1 file changed, 42 insertions(+), 39 deletions(-)
|
1 file changed, 42 insertions(+), 39 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
|
|
||||||
index f2cbff9..81a36fc 100644
|
|
||||||
--- a/drivers/dma/dmaengine.c
|
--- a/drivers/dma/dmaengine.c
|
||||||
+++ b/drivers/dma/dmaengine.c
|
+++ b/drivers/dma/dmaengine.c
|
||||||
@@ -542,6 +542,42 @@ static struct dma_chan *private_candidate(const dma_cap_mask_t *mask,
|
@@ -542,6 +542,42 @@ static struct dma_chan *private_candidat
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +62,7 @@ index f2cbff9..81a36fc 100644
|
||||||
/**
|
/**
|
||||||
* dma_get_slave_channel - try to get specific channel exclusively
|
* dma_get_slave_channel - try to get specific channel exclusively
|
||||||
* @chan: target channel
|
* @chan: target channel
|
||||||
@@ -580,7 +616,6 @@ struct dma_chan *dma_get_any_slave_channel(struct dma_device *device)
|
@@ -580,7 +616,6 @@ struct dma_chan *dma_get_any_slave_chann
|
||||||
{
|
{
|
||||||
dma_cap_mask_t mask;
|
dma_cap_mask_t mask;
|
||||||
struct dma_chan *chan;
|
struct dma_chan *chan;
|
||||||
|
@ -72,7 +70,7 @@ index f2cbff9..81a36fc 100644
|
||||||
|
|
||||||
dma_cap_zero(mask);
|
dma_cap_zero(mask);
|
||||||
dma_cap_set(DMA_SLAVE, mask);
|
dma_cap_set(DMA_SLAVE, mask);
|
||||||
@@ -588,23 +623,11 @@ struct dma_chan *dma_get_any_slave_channel(struct dma_device *device)
|
@@ -588,23 +623,11 @@ struct dma_chan *dma_get_any_slave_chann
|
||||||
/* lock against __dma_request_channel */
|
/* lock against __dma_request_channel */
|
||||||
mutex_lock(&dma_list_mutex);
|
mutex_lock(&dma_list_mutex);
|
||||||
|
|
||||||
|
@ -98,7 +96,7 @@ index f2cbff9..81a36fc 100644
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dma_get_any_slave_channel);
|
EXPORT_SYMBOL_GPL(dma_get_any_slave_channel);
|
||||||
|
|
||||||
@@ -621,35 +644,15 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
@@ -621,35 +644,15 @@ struct dma_chan *__dma_request_channel(c
|
||||||
{
|
{
|
||||||
struct dma_device *device, *_d;
|
struct dma_device *device, *_d;
|
||||||
struct dma_chan *chan = NULL;
|
struct dma_chan *chan = NULL;
|
||||||
|
@ -138,6 +136,3 @@ index f2cbff9..81a36fc 100644
|
||||||
}
|
}
|
||||||
mutex_unlock(&dma_list_mutex);
|
mutex_unlock(&dma_list_mutex);
|
||||||
|
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -69,11 +69,9 @@ Signed-off-by: Vinod Koul <vinod.koul@intel.com>
|
||||||
include/linux/dmaengine.h | 51 +++++++++++++++++++---
|
include/linux/dmaengine.h | 51 +++++++++++++++++++---
|
||||||
3 files changed, 127 insertions(+), 36 deletions(-)
|
3 files changed, 127 insertions(+), 36 deletions(-)
|
||||||
|
|
||||||
diff --git a/Documentation/dmaengine/client.txt b/Documentation/dmaengine/client.txt
|
|
||||||
index 11fb87f..4b04d89 100644
|
|
||||||
--- a/Documentation/dmaengine/client.txt
|
--- a/Documentation/dmaengine/client.txt
|
||||||
+++ b/Documentation/dmaengine/client.txt
|
+++ b/Documentation/dmaengine/client.txt
|
||||||
@@ -22,25 +22,14 @@ The slave DMA usage consists of following steps:
|
@@ -22,25 +22,14 @@ The slave DMA usage consists of followin
|
||||||
Channel allocation is slightly different in the slave DMA context,
|
Channel allocation is slightly different in the slave DMA context,
|
||||||
client drivers typically need a channel from a particular DMA
|
client drivers typically need a channel from a particular DMA
|
||||||
controller only and even in some cases a specific channel is desired.
|
controller only and even in some cases a specific channel is desired.
|
||||||
|
@ -86,7 +84,8 @@ index 11fb87f..4b04d89 100644
|
||||||
- void *filter_param);
|
- void *filter_param);
|
||||||
- where dma_filter_fn is defined as:
|
- where dma_filter_fn is defined as:
|
||||||
- typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
- typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
||||||
-
|
+ struct dma_chan *dma_request_chan(struct device *dev, const char *name);
|
||||||
|
|
||||||
- The 'filter_fn' parameter is optional, but highly recommended for
|
- The 'filter_fn' parameter is optional, but highly recommended for
|
||||||
- slave and cyclic channels as they typically need to obtain a specific
|
- slave and cyclic channels as they typically need to obtain a specific
|
||||||
- DMA channel.
|
- DMA channel.
|
||||||
|
@ -97,16 +96,12 @@ index 11fb87f..4b04d89 100644
|
||||||
- Otherwise, the 'filter_fn' routine will be called once for each free
|
- Otherwise, the 'filter_fn' routine will be called once for each free
|
||||||
- channel which has a capability in 'mask'. 'filter_fn' is expected to
|
- channel which has a capability in 'mask'. 'filter_fn' is expected to
|
||||||
- return 'true' when the desired DMA channel is found.
|
- return 'true' when the desired DMA channel is found.
|
||||||
+ struct dma_chan *dma_request_chan(struct device *dev, const char *name);
|
|
||||||
+
|
|
||||||
+ Which will find and return the 'name' DMA channel associated with the 'dev'
|
+ Which will find and return the 'name' DMA channel associated with the 'dev'
|
||||||
+ device. The association is done via DT, ACPI or board file based
|
+ device. The association is done via DT, ACPI or board file based
|
||||||
+ dma_slave_map matching table.
|
+ dma_slave_map matching table.
|
||||||
|
|
||||||
A channel allocated via this interface is exclusive to the caller,
|
A channel allocated via this interface is exclusive to the caller,
|
||||||
until dma_release_channel() is called.
|
until dma_release_channel() is called.
|
||||||
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
|
|
||||||
index 81a36fc..a094dbb 100644
|
|
||||||
--- a/drivers/dma/dmaengine.c
|
--- a/drivers/dma/dmaengine.c
|
||||||
+++ b/drivers/dma/dmaengine.c
|
+++ b/drivers/dma/dmaengine.c
|
||||||
@@ -43,6 +43,7 @@
|
@@ -43,6 +43,7 @@
|
||||||
|
@ -117,7 +112,7 @@ index 81a36fc..a094dbb 100644
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
@@ -665,27 +666,73 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
@@ -665,27 +666,73 @@ struct dma_chan *__dma_request_channel(c
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__dma_request_channel);
|
EXPORT_SYMBOL_GPL(__dma_request_channel);
|
||||||
|
|
||||||
|
@ -199,7 +194,7 @@ index 81a36fc..a094dbb 100644
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dma_request_slave_channel - try to allocate an exclusive slave channel
|
* dma_request_slave_channel - try to allocate an exclusive slave channel
|
||||||
@@ -697,17 +744,35 @@ EXPORT_SYMBOL_GPL(dma_request_slave_channel_reason);
|
@@ -697,17 +744,35 @@ EXPORT_SYMBOL_GPL(dma_request_slave_chan
|
||||||
struct dma_chan *dma_request_slave_channel(struct device *dev,
|
struct dma_chan *dma_request_slave_channel(struct device *dev,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
|
@ -239,8 +234,6 @@ index 81a36fc..a094dbb 100644
|
||||||
void dma_release_channel(struct dma_chan *chan)
|
void dma_release_channel(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
mutex_lock(&dma_list_mutex);
|
mutex_lock(&dma_list_mutex);
|
||||||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
|
|
||||||
index c47c68e..d50a6b51 100644
|
|
||||||
--- a/include/linux/dmaengine.h
|
--- a/include/linux/dmaengine.h
|
||||||
+++ b/include/linux/dmaengine.h
|
+++ b/include/linux/dmaengine.h
|
||||||
@@ -607,11 +607,38 @@ enum dmaengine_alignment {
|
@@ -607,11 +607,38 @@ enum dmaengine_alignment {
|
||||||
|
@ -290,7 +283,7 @@ index c47c68e..d50a6b51 100644
|
||||||
dma_cap_mask_t cap_mask;
|
dma_cap_mask_t cap_mask;
|
||||||
unsigned short max_xor;
|
unsigned short max_xor;
|
||||||
unsigned short max_pq;
|
unsigned short max_pq;
|
||||||
@@ -1140,9 +1168,11 @@ enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
|
@@ -1140,9 +1168,11 @@ enum dma_status dma_wait_for_async_tx(st
|
||||||
void dma_issue_pending_all(void);
|
void dma_issue_pending_all(void);
|
||||||
struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
||||||
dma_filter_fn fn, void *fn_param);
|
dma_filter_fn fn, void *fn_param);
|
||||||
|
@ -304,7 +297,7 @@ index c47c68e..d50a6b51 100644
|
||||||
void dma_release_channel(struct dma_chan *chan);
|
void dma_release_channel(struct dma_chan *chan);
|
||||||
int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps);
|
int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps);
|
||||||
#else
|
#else
|
||||||
@@ -1166,16 +1196,21 @@ static inline struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
@@ -1166,16 +1196,21 @@ static inline struct dma_chan *__dma_req
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -331,7 +324,7 @@ index c47c68e..d50a6b51 100644
|
||||||
static inline void dma_release_channel(struct dma_chan *chan)
|
static inline void dma_release_channel(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -1186,6 +1221,8 @@ static inline int dma_get_slave_caps(struct dma_chan *chan,
|
@@ -1186,6 +1221,8 @@ static inline int dma_get_slave_caps(str
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -340,6 +333,3 @@ index c47c68e..d50a6b51 100644
|
||||||
static inline int dmaengine_desc_set_reuse(struct dma_async_tx_descriptor *tx)
|
static inline int dmaengine_desc_set_reuse(struct dma_async_tx_descriptor *tx)
|
||||||
{
|
{
|
||||||
struct dma_slave_caps caps;
|
struct dma_slave_caps caps;
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -53,11 +53,9 @@ Signed-off-by: Vinod Koul <vinod.koul@intel.com>
|
||||||
include/linux/dmaengine.h | 90 ++++++++++++++++++++++++++++++++++++
|
include/linux/dmaengine.h | 90 ++++++++++++++++++++++++++++++++++++
|
||||||
4 files changed, 148 insertions(+), 5 deletions(-)
|
4 files changed, 148 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/Documentation/dmaengine/client.txt b/Documentation/dmaengine/client.txt
|
|
||||||
index 11fb87f..d9f9f46 100644
|
|
||||||
--- a/Documentation/dmaengine/client.txt
|
--- a/Documentation/dmaengine/client.txt
|
||||||
+++ b/Documentation/dmaengine/client.txt
|
+++ b/Documentation/dmaengine/client.txt
|
||||||
@@ -128,7 +128,7 @@ The slave DMA usage consists of following steps:
|
@@ -117,7 +117,7 @@ The slave DMA usage consists of followin
|
||||||
transaction.
|
transaction.
|
||||||
|
|
||||||
For cyclic DMA, a callback function may wish to terminate the
|
For cyclic DMA, a callback function may wish to terminate the
|
||||||
|
@ -66,7 +64,7 @@ index 11fb87f..d9f9f46 100644
|
||||||
|
|
||||||
Therefore, it is important that DMA engine drivers drop any
|
Therefore, it is important that DMA engine drivers drop any
|
||||||
locks before calling the callback function which may cause a
|
locks before calling the callback function which may cause a
|
||||||
@@ -166,12 +166,29 @@ The slave DMA usage consists of following steps:
|
@@ -155,12 +155,29 @@ The slave DMA usage consists of followin
|
||||||
|
|
||||||
Further APIs:
|
Further APIs:
|
||||||
|
|
||||||
|
@ -97,7 +95,7 @@ index 11fb87f..d9f9f46 100644
|
||||||
2. int dmaengine_pause(struct dma_chan *chan)
|
2. int dmaengine_pause(struct dma_chan *chan)
|
||||||
|
|
||||||
This pauses activity on the DMA channel without data loss.
|
This pauses activity on the DMA channel without data loss.
|
||||||
@@ -197,3 +214,20 @@ Further APIs:
|
@@ -186,3 +203,20 @@ Further APIs:
|
||||||
a running DMA channel. It is recommended that DMA engine users
|
a running DMA channel. It is recommended that DMA engine users
|
||||||
pause or stop (via dmaengine_terminate_all()) the channel before
|
pause or stop (via dmaengine_terminate_all()) the channel before
|
||||||
using this API.
|
using this API.
|
||||||
|
@ -118,8 +116,6 @@ index 11fb87f..d9f9f46 100644
|
||||||
+
|
+
|
||||||
+ The behavior of this function is undefined if dma_async_issue_pending() has
|
+ The behavior of this function is undefined if dma_async_issue_pending() has
|
||||||
+ been called between dmaengine_terminate_async() and this function.
|
+ been called between dmaengine_terminate_async() and this function.
|
||||||
diff --git a/Documentation/dmaengine/provider.txt b/Documentation/dmaengine/provider.txt
|
|
||||||
index 67d4ce4..122b7f4 100644
|
|
||||||
--- a/Documentation/dmaengine/provider.txt
|
--- a/Documentation/dmaengine/provider.txt
|
||||||
+++ b/Documentation/dmaengine/provider.txt
|
+++ b/Documentation/dmaengine/provider.txt
|
||||||
@@ -327,8 +327,24 @@ supported.
|
@@ -327,8 +327,24 @@ supported.
|
||||||
|
@ -149,11 +145,9 @@ index 67d4ce4..122b7f4 100644
|
||||||
|
|
||||||
Misc notes (stuff that should be documented, but don't really know
|
Misc notes (stuff that should be documented, but don't really know
|
||||||
where to put them)
|
where to put them)
|
||||||
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
|
|
||||||
index 3ecec14..d6fc82e 100644
|
|
||||||
--- a/drivers/dma/dmaengine.c
|
--- a/drivers/dma/dmaengine.c
|
||||||
+++ b/drivers/dma/dmaengine.c
|
+++ b/drivers/dma/dmaengine.c
|
||||||
@@ -265,8 +265,11 @@ static void dma_chan_put(struct dma_chan *chan)
|
@@ -266,8 +266,11 @@ static void dma_chan_put(struct dma_chan
|
||||||
module_put(dma_chan_to_owner(chan));
|
module_put(dma_chan_to_owner(chan));
|
||||||
|
|
||||||
/* This channel is not in use anymore, free it */
|
/* This channel is not in use anymore, free it */
|
||||||
|
@ -166,11 +160,9 @@ index 3ecec14..d6fc82e 100644
|
||||||
|
|
||||||
/* If the channel is used via a DMA request router, free the mapping */
|
/* If the channel is used via a DMA request router, free the mapping */
|
||||||
if (chan->router && chan->router->route_free) {
|
if (chan->router && chan->router->route_free) {
|
||||||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
|
|
||||||
index c47c68e..4662d9a 100644
|
|
||||||
--- a/include/linux/dmaengine.h
|
--- a/include/linux/dmaengine.h
|
||||||
+++ b/include/linux/dmaengine.h
|
+++ b/include/linux/dmaengine.h
|
||||||
@@ -654,6 +654,8 @@ enum dmaengine_alignment {
|
@@ -681,6 +681,8 @@ struct dma_filter {
|
||||||
* paused. Returns 0 or an error code
|
* paused. Returns 0 or an error code
|
||||||
* @device_terminate_all: Aborts all transfers on a channel. Returns 0
|
* @device_terminate_all: Aborts all transfers on a channel. Returns 0
|
||||||
* or an error code
|
* or an error code
|
||||||
|
@ -179,7 +171,7 @@ index c47c68e..4662d9a 100644
|
||||||
* @device_tx_status: poll for transaction completion, the optional
|
* @device_tx_status: poll for transaction completion, the optional
|
||||||
* txstate parameter can be supplied with a pointer to get a
|
* txstate parameter can be supplied with a pointer to get a
|
||||||
* struct with auxiliary transfer status information, otherwise the call
|
* struct with auxiliary transfer status information, otherwise the call
|
||||||
@@ -737,6 +739,7 @@ struct dma_device {
|
@@ -765,6 +767,7 @@ struct dma_device {
|
||||||
int (*device_pause)(struct dma_chan *chan);
|
int (*device_pause)(struct dma_chan *chan);
|
||||||
int (*device_resume)(struct dma_chan *chan);
|
int (*device_resume)(struct dma_chan *chan);
|
||||||
int (*device_terminate_all)(struct dma_chan *chan);
|
int (*device_terminate_all)(struct dma_chan *chan);
|
||||||
|
@ -187,7 +179,7 @@ index c47c68e..4662d9a 100644
|
||||||
|
|
||||||
enum dma_status (*device_tx_status)(struct dma_chan *chan,
|
enum dma_status (*device_tx_status)(struct dma_chan *chan,
|
||||||
dma_cookie_t cookie,
|
dma_cookie_t cookie,
|
||||||
@@ -828,6 +831,13 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg(
|
@@ -856,6 +859,13 @@ static inline struct dma_async_tx_descri
|
||||||
src_sg, src_nents, flags);
|
src_sg, src_nents, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +193,7 @@ index c47c68e..4662d9a 100644
|
||||||
static inline int dmaengine_terminate_all(struct dma_chan *chan)
|
static inline int dmaengine_terminate_all(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
if (chan->device->device_terminate_all)
|
if (chan->device->device_terminate_all)
|
||||||
@@ -836,6 +846,86 @@ static inline int dmaengine_terminate_all(struct dma_chan *chan)
|
@@ -864,6 +874,86 @@ static inline int dmaengine_terminate_al
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,6 +280,3 @@ index c47c68e..4662d9a 100644
|
||||||
static inline int dmaengine_pause(struct dma_chan *chan)
|
static inline int dmaengine_pause(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
if (chan->device->device_pause)
|
if (chan->device->device_pause)
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@ Andy Shevchenko (4):
|
||||||
sound/soc/intel/common/sst-firmware.c | 2 +-
|
sound/soc/intel/common/sst-firmware.c | 2 +-
|
||||||
11 files changed, 64 insertions(+), 78 deletions(-)
|
11 files changed, 64 insertions(+), 78 deletions(-)
|
||||||
|
|
||||||
--- a/drivers/dma/dw/core.c 2016-05-21 23:13:19.964478443 +0200
|
--- a/drivers/dma/dw/core.c
|
||||||
+++ b/drivers/dma/dw/core.c 2016-05-21 22:47:08.665465180 +0200
|
+++ b/drivers/dma/dw/core.c
|
||||||
@@ -45,22 +45,19 @@
|
@@ -45,22 +45,19 @@
|
||||||
DW_DMA_MSIZE_16; \
|
DW_DMA_MSIZE_16; \
|
||||||
u8 _dmsize = _is_slave ? _sconfig->dst_maxburst : \
|
u8 _dmsize = _is_slave ? _sconfig->dst_maxburst : \
|
||||||
|
@ -1116,8 +1116,8 @@ Andy Shevchenko (4):
|
||||||
channel_writel(dwc, LLP, 0);
|
channel_writel(dwc, LLP, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
--- a/drivers/dma/dw/pci.c 2016-05-21 23:13:19.964478443 +0200
|
--- a/drivers/dma/dw/pci.c
|
||||||
+++ b/drivers/dma/dw/pci.c 2016-05-21 22:47:08.665465180 +0200
|
+++ b/drivers/dma/dw/pci.c
|
||||||
@@ -17,8 +17,8 @@
|
@@ -17,8 +17,8 @@
|
||||||
|
|
||||||
static int dw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
|
static int dw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
|
||||||
|
@ -1150,8 +1150,8 @@ Andy Shevchenko (4):
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(pci, dw_pci_id_table);
|
MODULE_DEVICE_TABLE(pci, dw_pci_id_table);
|
||||||
--- a/drivers/dma/dw/platform.c 2016-05-21 23:13:19.964478443 +0200
|
--- a/drivers/dma/dw/platform.c
|
||||||
+++ b/drivers/dma/dw/platform.c 2016-05-21 22:47:08.665465180 +0200
|
+++ b/drivers/dma/dw/platform.c
|
||||||
@@ -42,13 +42,13 @@ static struct dma_chan *dw_dma_of_xlate(
|
@@ -42,13 +42,13 @@ static struct dma_chan *dw_dma_of_xlate(
|
||||||
|
|
||||||
slave.src_id = dma_spec->args[0];
|
slave.src_id = dma_spec->args[0];
|
||||||
|
@ -1309,8 +1309,8 @@ Andy Shevchenko (4):
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(acpi, dw_dma_acpi_id_table);
|
MODULE_DEVICE_TABLE(acpi, dw_dma_acpi_id_table);
|
||||||
--- a/drivers/dma/dw/regs.h 2016-05-21 23:13:19.964478443 +0200
|
--- a/drivers/dma/dw/regs.h
|
||||||
+++ b/drivers/dma/dw/regs.h 2016-05-21 22:47:08.665465180 +0200
|
+++ b/drivers/dma/dw/regs.h
|
||||||
@@ -114,10 +114,6 @@ struct dw_dma_regs {
|
@@ -114,10 +114,6 @@ struct dw_dma_regs {
|
||||||
#define dma_writel_native writel
|
#define dma_writel_native writel
|
||||||
#endif
|
#endif
|
||||||
|
@ -1475,8 +1475,6 @@ Andy Shevchenko (4):
|
||||||
int dw_dma_remove(struct dw_dma_chip *chip);
|
int dw_dma_remove(struct dw_dma_chip *chip);
|
||||||
|
|
||||||
/* DMA API extensions */
|
/* DMA API extensions */
|
||||||
diff --git a/include/linux/platform_data/dma-dw.h b/include/linux/platform_data/dma-dw.h
|
|
||||||
index 03b6095..d15d8ba 100644
|
|
||||||
--- a/include/linux/platform_data/dma-dw.h
|
--- a/include/linux/platform_data/dma-dw.h
|
||||||
+++ b/include/linux/platform_data/dma-dw.h
|
+++ b/include/linux/platform_data/dma-dw.h
|
||||||
@@ -21,15 +21,15 @@
|
@@ -21,15 +21,15 @@
|
||||||
|
@ -1517,6 +1515,3 @@ index 03b6095..d15d8ba 100644
|
||||||
unsigned char nr_masters;
|
unsigned char nr_masters;
|
||||||
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
|
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
|
||||||
};
|
};
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -66,8 +66,6 @@ Mans Rullgard (11):
|
||||||
drivers/ata/sata_dwc_460ex.c | 552 ++++++++++++++++++++++---------------------
|
drivers/ata/sata_dwc_460ex.c | 552 ++++++++++++++++++++++---------------------
|
||||||
1 file changed, 283 insertions(+), 269 deletions(-)
|
1 file changed, 283 insertions(+), 269 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
|
|
||||||
index 9020349..00c2af1 100644
|
|
||||||
--- a/drivers/ata/sata_dwc_460ex.c
|
--- a/drivers/ata/sata_dwc_460ex.c
|
||||||
+++ b/drivers/ata/sata_dwc_460ex.c
|
+++ b/drivers/ata/sata_dwc_460ex.c
|
||||||
@@ -30,10 +30,12 @@
|
@@ -30,10 +30,12 @@
|
||||||
|
@ -197,7 +195,7 @@ index 9020349..00c2af1 100644
|
||||||
/*
|
/*
|
||||||
* Prototypes
|
* Prototypes
|
||||||
*/
|
*/
|
||||||
@@ -215,6 +192,93 @@ static void sata_dwc_dma_xfer_complete(struct ata_port *ap, u32 check_status);
|
@@ -215,6 +192,93 @@ static void sata_dwc_dma_xfer_complete(s
|
||||||
static void sata_dwc_port_stop(struct ata_port *ap);
|
static void sata_dwc_port_stop(struct ata_port *ap);
|
||||||
static void sata_dwc_clear_dmacr(struct sata_dwc_device_port *hsdevp, u8 tag);
|
static void sata_dwc_clear_dmacr(struct sata_dwc_device_port *hsdevp, u8 tag);
|
||||||
|
|
||||||
|
@ -291,7 +289,7 @@ index 9020349..00c2af1 100644
|
||||||
static const char *get_prot_descript(u8 protocol)
|
static const char *get_prot_descript(u8 protocol)
|
||||||
{
|
{
|
||||||
switch ((enum ata_tf_protocols)protocol) {
|
switch ((enum ata_tf_protocols)protocol) {
|
||||||
@@ -305,21 +369,20 @@ static struct dma_async_tx_descriptor *dma_dwc_xfer_setup(struct ata_queued_cmd
|
@@ -305,21 +369,20 @@ static struct dma_async_tx_descriptor *d
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
|
struct sata_dwc_device_port *hsdevp = HSDEVP_FROM_AP(ap);
|
||||||
struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
|
struct sata_dwc_device *hsdev = HSDEV_FROM_AP(ap);
|
||||||
|
@ -318,7 +316,7 @@ index 9020349..00c2af1 100644
|
||||||
sconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
sconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||||
sconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
sconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||||
|
|
||||||
@@ -336,8 +399,8 @@ static struct dma_async_tx_descriptor *dma_dwc_xfer_setup(struct ata_queued_cmd
|
@@ -336,8 +399,8 @@ static struct dma_async_tx_descriptor *d
|
||||||
desc->callback = dma_dwc_xfer_done;
|
desc->callback = dma_dwc_xfer_done;
|
||||||
desc->callback_param = hsdev;
|
desc->callback_param = hsdev;
|
||||||
|
|
||||||
|
@ -329,7 +327,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
@@ -350,48 +413,38 @@ static int sata_dwc_scr_read(struct ata_link *link, unsigned int scr, u32 *val)
|
@@ -350,48 +413,38 @@ static int sata_dwc_scr_read(struct ata_
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +387,7 @@ index 9020349..00c2af1 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 qcmd_tag_to_mask(u8 tag)
|
static u32 qcmd_tag_to_mask(u8 tag)
|
||||||
@@ -412,7 +465,7 @@ static void sata_dwc_error_intr(struct ata_port *ap,
|
@@ -412,7 +465,7 @@ static void sata_dwc_error_intr(struct a
|
||||||
|
|
||||||
ata_ehi_clear_desc(ehi);
|
ata_ehi_clear_desc(ehi);
|
||||||
|
|
||||||
|
@ -398,7 +396,7 @@ index 9020349..00c2af1 100644
|
||||||
status = ap->ops->sff_check_status(ap);
|
status = ap->ops->sff_check_status(ap);
|
||||||
|
|
||||||
tag = ap->link.active_tag;
|
tag = ap->link.active_tag;
|
||||||
@@ -423,7 +476,7 @@ static void sata_dwc_error_intr(struct ata_port *ap,
|
@@ -423,7 +476,7 @@ static void sata_dwc_error_intr(struct a
|
||||||
hsdevp->dma_pending[tag], hsdevp->cmd_issued[tag]);
|
hsdevp->dma_pending[tag], hsdevp->cmd_issued[tag]);
|
||||||
|
|
||||||
/* Clear error register and interrupt bit */
|
/* Clear error register and interrupt bit */
|
||||||
|
@ -407,7 +405,7 @@ index 9020349..00c2af1 100644
|
||||||
clear_interrupt_bit(hsdev, SATA_DWC_INTPR_ERR);
|
clear_interrupt_bit(hsdev, SATA_DWC_INTPR_ERR);
|
||||||
|
|
||||||
/* This is the only error happening now. TODO check for exact error */
|
/* This is the only error happening now. TODO check for exact error */
|
||||||
@@ -462,12 +515,12 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_instance)
|
@@ -462,12 +515,12 @@ static irqreturn_t sata_dwc_isr(int irq,
|
||||||
int handled, num_processed, port = 0;
|
int handled, num_processed, port = 0;
|
||||||
uint intpr, sactive, sactive2, tag_mask;
|
uint intpr, sactive, sactive2, tag_mask;
|
||||||
struct sata_dwc_device_port *hsdevp;
|
struct sata_dwc_device_port *hsdevp;
|
||||||
|
@ -422,7 +420,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
ap = host->ports[port];
|
ap = host->ports[port];
|
||||||
hsdevp = HSDEVP_FROM_AP(ap);
|
hsdevp = HSDEVP_FROM_AP(ap);
|
||||||
@@ -486,12 +539,12 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_instance)
|
@@ -486,12 +539,12 @@ static irqreturn_t sata_dwc_isr(int irq,
|
||||||
if (intpr & SATA_DWC_INTPR_NEWFP) {
|
if (intpr & SATA_DWC_INTPR_NEWFP) {
|
||||||
clear_interrupt_bit(hsdev, SATA_DWC_INTPR_NEWFP);
|
clear_interrupt_bit(hsdev, SATA_DWC_INTPR_NEWFP);
|
||||||
|
|
||||||
|
@ -437,7 +435,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
qc = ata_qc_from_tag(ap, tag);
|
qc = ata_qc_from_tag(ap, tag);
|
||||||
/*
|
/*
|
||||||
@@ -505,11 +558,11 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_instance)
|
@@ -505,11 +558,11 @@ static irqreturn_t sata_dwc_isr(int irq,
|
||||||
handled = 1;
|
handled = 1;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
@ -512,7 +510,7 @@ index 9020349..00c2af1 100644
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* This should not happen, it indicates the driver is out of
|
* This should not happen, it indicates the driver is out of
|
||||||
@@ -688,10 +737,9 @@ static void sata_dwc_clear_dmacr(struct sata_dwc_device_port *hsdevp, u8 tag)
|
@@ -688,10 +737,9 @@ static void sata_dwc_clear_dmacr(struct
|
||||||
*/
|
*/
|
||||||
dev_err(hsdev->dev,
|
dev_err(hsdev->dev,
|
||||||
"%s DMA protocol RX and TX DMA not pending tag=0x%02x pending=%d dmacr: 0x%08x\n",
|
"%s DMA protocol RX and TX DMA not pending tag=0x%02x pending=%d dmacr: 0x%08x\n",
|
||||||
|
@ -526,7 +524,7 @@ index 9020349..00c2af1 100644
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,7 +764,7 @@ static void sata_dwc_dma_xfer_complete(struct ata_port *ap, u32 check_status)
|
@@ -716,7 +764,7 @@ static void sata_dwc_dma_xfer_complete(s
|
||||||
__func__, qc->tag, qc->tf.command,
|
__func__, qc->tag, qc->tf.command,
|
||||||
get_dma_dir_descript(qc->dma_dir),
|
get_dma_dir_descript(qc->dma_dir),
|
||||||
get_prot_descript(qc->tf.protocol),
|
get_prot_descript(qc->tf.protocol),
|
||||||
|
@ -535,7 +533,7 @@ index 9020349..00c2af1 100644
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -725,7 +773,7 @@ static void sata_dwc_dma_xfer_complete(struct ata_port *ap, u32 check_status)
|
@@ -725,7 +773,7 @@ static void sata_dwc_dma_xfer_complete(s
|
||||||
dev_err(ap->dev,
|
dev_err(ap->dev,
|
||||||
"%s DMA protocol RX and TX DMA not pending dmacr: 0x%08x\n",
|
"%s DMA protocol RX and TX DMA not pending dmacr: 0x%08x\n",
|
||||||
__func__,
|
__func__,
|
||||||
|
@ -544,7 +542,7 @@ index 9020349..00c2af1 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
hsdevp->dma_pending[tag] = SATA_DWC_DMA_PENDING_NONE;
|
hsdevp->dma_pending[tag] = SATA_DWC_DMA_PENDING_NONE;
|
||||||
@@ -742,8 +790,9 @@ static int sata_dwc_qc_complete(struct ata_port *ap, struct ata_queued_cmd *qc,
|
@@ -742,8 +790,9 @@ static int sata_dwc_qc_complete(struct a
|
||||||
u8 status = 0;
|
u8 status = 0;
|
||||||
u32 mask = 0x0;
|
u32 mask = 0x0;
|
||||||
u8 tag = qc->tag;
|
u8 tag = qc->tag;
|
||||||
|
@ -555,7 +553,7 @@ index 9020349..00c2af1 100644
|
||||||
dev_dbg(ap->dev, "%s checkstatus? %x\n", __func__, check_status);
|
dev_dbg(ap->dev, "%s checkstatus? %x\n", __func__, check_status);
|
||||||
|
|
||||||
if (hsdevp->dma_pending[tag] == SATA_DWC_DMA_PENDING_TX)
|
if (hsdevp->dma_pending[tag] == SATA_DWC_DMA_PENDING_TX)
|
||||||
@@ -756,10 +805,8 @@ static int sata_dwc_qc_complete(struct ata_port *ap, struct ata_queued_cmd *qc,
|
@@ -756,10 +805,8 @@ static int sata_dwc_qc_complete(struct a
|
||||||
|
|
||||||
/* clear active bit */
|
/* clear active bit */
|
||||||
mask = (~(qcmd_tag_to_mask(tag)));
|
mask = (~(qcmd_tag_to_mask(tag)));
|
||||||
|
@ -568,7 +566,7 @@ index 9020349..00c2af1 100644
|
||||||
ata_qc_complete(qc);
|
ata_qc_complete(qc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -767,54 +814,62 @@ static int sata_dwc_qc_complete(struct ata_port *ap, struct ata_queued_cmd *qc,
|
@@ -767,54 +814,62 @@ static int sata_dwc_qc_complete(struct a
|
||||||
static void sata_dwc_enable_interrupts(struct sata_dwc_device *hsdev)
|
static void sata_dwc_enable_interrupts(struct sata_dwc_device *hsdev)
|
||||||
{
|
{
|
||||||
/* Enable selective interrupts by setting the interrupt maskregister*/
|
/* Enable selective interrupts by setting the interrupt maskregister*/
|
||||||
|
@ -621,18 +619,18 @@ index 9020349..00c2af1 100644
|
||||||
+ port->lbal_addr = base + 0x0c;
|
+ port->lbal_addr = base + 0x0c;
|
||||||
+ port->lbam_addr = base + 0x10;
|
+ port->lbam_addr = base + 0x10;
|
||||||
+ port->lbah_addr = base + 0x14;
|
+ port->lbah_addr = base + 0x14;
|
||||||
|
+
|
||||||
- port->error_addr = (void __iomem *)base + 0x04;
|
|
||||||
- port->feature_addr = (void __iomem *)base + 0x04;
|
|
||||||
+ port->device_addr = base + 0x18;
|
+ port->device_addr = base + 0x18;
|
||||||
+ port->command_addr = base + 0x1c;
|
+ port->command_addr = base + 0x1c;
|
||||||
+ port->status_addr = base + 0x1c;
|
+ port->status_addr = base + 0x1c;
|
||||||
|
|
||||||
- port->nsect_addr = (void __iomem *)base + 0x08;
|
- port->error_addr = (void __iomem *)base + 0x04;
|
||||||
|
- port->feature_addr = (void __iomem *)base + 0x04;
|
||||||
+ port->altstatus_addr = base + 0x20;
|
+ port->altstatus_addr = base + 0x20;
|
||||||
+ port->ctl_addr = base + 0x20;
|
+ port->ctl_addr = base + 0x20;
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
|
- port->nsect_addr = (void __iomem *)base + 0x08;
|
||||||
+static int sata_dwc_dma_get_channel(struct sata_dwc_device_port *hsdevp)
|
+static int sata_dwc_dma_get_channel(struct sata_dwc_device_port *hsdevp)
|
||||||
+{
|
+{
|
||||||
+ struct sata_dwc_device *hsdev = hsdevp->hsdev;
|
+ struct sata_dwc_device *hsdev = hsdevp->hsdev;
|
||||||
|
@ -662,7 +660,7 @@ index 9020349..00c2af1 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -829,7 +884,6 @@ static int sata_dwc_port_start(struct ata_port *ap)
|
@@ -829,7 +884,6 @@ static int sata_dwc_port_start(struct at
|
||||||
struct sata_dwc_device *hsdev;
|
struct sata_dwc_device *hsdev;
|
||||||
struct sata_dwc_device_port *hsdevp = NULL;
|
struct sata_dwc_device_port *hsdevp = NULL;
|
||||||
struct device *pdev;
|
struct device *pdev;
|
||||||
|
@ -670,7 +668,7 @@ index 9020349..00c2af1 100644
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
hsdev = HSDEV_FROM_AP(ap);
|
hsdev = HSDEV_FROM_AP(ap);
|
||||||
@@ -853,20 +907,13 @@ static int sata_dwc_port_start(struct ata_port *ap)
|
@@ -853,20 +907,13 @@ static int sata_dwc_port_start(struct at
|
||||||
}
|
}
|
||||||
hsdevp->hsdev = hsdev;
|
hsdevp->hsdev = hsdev;
|
||||||
|
|
||||||
|
@ -696,7 +694,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
for (i = 0; i < SATA_DWC_QCMD_MAX; i++)
|
for (i = 0; i < SATA_DWC_QCMD_MAX; i++)
|
||||||
hsdevp->cmd_issued[i] = SATA_DWC_CMD_ISSUED_NOT;
|
hsdevp->cmd_issued[i] = SATA_DWC_CMD_ISSUED_NOT;
|
||||||
@@ -877,18 +924,18 @@ static int sata_dwc_port_start(struct ata_port *ap)
|
@@ -877,18 +924,18 @@ static int sata_dwc_port_start(struct at
|
||||||
if (ap->port_no == 0) {
|
if (ap->port_no == 0) {
|
||||||
dev_dbg(ap->dev, "%s: clearing TXCHEN, RXCHEN in DMAC\n",
|
dev_dbg(ap->dev, "%s: clearing TXCHEN, RXCHEN in DMAC\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -736,7 +734,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
kfree(hsdevp);
|
kfree(hsdevp);
|
||||||
ap->private_data = NULL;
|
ap->private_data = NULL;
|
||||||
@@ -924,22 +973,20 @@ static void sata_dwc_exec_command_by_tag(struct ata_port *ap,
|
@@ -924,22 +973,20 @@ static void sata_dwc_exec_command_by_tag
|
||||||
struct ata_taskfile *tf,
|
struct ata_taskfile *tf,
|
||||||
u8 tag, u32 cmd_issued)
|
u8 tag, u32 cmd_issued)
|
||||||
{
|
{
|
||||||
|
@ -761,7 +759,7 @@ index 9020349..00c2af1 100644
|
||||||
ata_sff_exec_command(ap, tf);
|
ata_sff_exec_command(ap, tf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -992,18 +1039,18 @@ static void sata_dwc_bmdma_start_by_tag(struct ata_queued_cmd *qc, u8 tag)
|
@@ -992,18 +1039,18 @@ static void sata_dwc_bmdma_start_by_tag(
|
||||||
sata_dwc_tf_dump(ap, &qc->tf);
|
sata_dwc_tf_dump(ap, &qc->tf);
|
||||||
|
|
||||||
if (start_dma) {
|
if (start_dma) {
|
||||||
|
@ -785,7 +783,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
/* Enable AHB DMA transfer on the specified channel */
|
/* Enable AHB DMA transfer on the specified channel */
|
||||||
dmaengine_submit(desc);
|
dmaengine_submit(desc);
|
||||||
@@ -1025,36 +1072,12 @@ static void sata_dwc_bmdma_start(struct ata_queued_cmd *qc)
|
@@ -1025,36 +1072,12 @@ static void sata_dwc_bmdma_start(struct
|
||||||
sata_dwc_bmdma_start_by_tag(qc, tag);
|
sata_dwc_bmdma_start_by_tag(qc, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -823,7 +821,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
#ifdef DEBUG_NCQ
|
#ifdef DEBUG_NCQ
|
||||||
if (qc->tag > 0 || ap->link.sactive > 1)
|
if (qc->tag > 0 || ap->link.sactive > 1)
|
||||||
@@ -1068,47 +1091,33 @@ static unsigned int sata_dwc_qc_issue(struct ata_queued_cmd *qc)
|
@@ -1068,47 +1091,33 @@ static unsigned int sata_dwc_qc_issue(st
|
||||||
|
|
||||||
if (!ata_is_ncq(qc->tf.protocol))
|
if (!ata_is_ncq(qc->tf.protocol))
|
||||||
tag = 0;
|
tag = 0;
|
||||||
|
@ -883,7 +881,7 @@ index 9020349..00c2af1 100644
|
||||||
static void sata_dwc_error_handler(struct ata_port *ap)
|
static void sata_dwc_error_handler(struct ata_port *ap)
|
||||||
{
|
{
|
||||||
ata_sff_error_handler(ap);
|
ata_sff_error_handler(ap);
|
||||||
@@ -1125,17 +1134,22 @@ static int sata_dwc_hardreset(struct ata_link *link, unsigned int *class,
|
@@ -1125,17 +1134,22 @@ static int sata_dwc_hardreset(struct ata
|
||||||
sata_dwc_enable_interrupts(hsdev);
|
sata_dwc_enable_interrupts(hsdev);
|
||||||
|
|
||||||
/* Reconfigure the DMA control register */
|
/* Reconfigure the DMA control register */
|
||||||
|
@ -911,7 +909,7 @@ index 9020349..00c2af1 100644
|
||||||
/*
|
/*
|
||||||
* scsi mid-layer and libata interface structures
|
* scsi mid-layer and libata interface structures
|
||||||
*/
|
*/
|
||||||
@@ -1148,7 +1162,13 @@ static struct scsi_host_template sata_dwc_sht = {
|
@@ -1148,7 +1162,13 @@ static struct scsi_host_template sata_dw
|
||||||
*/
|
*/
|
||||||
.sg_tablesize = LIBATA_MAX_PRD,
|
.sg_tablesize = LIBATA_MAX_PRD,
|
||||||
/* .can_queue = ATA_MAX_QUEUE, */
|
/* .can_queue = ATA_MAX_QUEUE, */
|
||||||
|
@ -926,7 +924,7 @@ index 9020349..00c2af1 100644
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_operations sata_dwc_ops = {
|
static struct ata_port_operations sata_dwc_ops = {
|
||||||
@@ -1157,7 +1177,6 @@ static struct ata_port_operations sata_dwc_ops = {
|
@@ -1157,7 +1177,6 @@ static struct ata_port_operations sata_d
|
||||||
.error_handler = sata_dwc_error_handler,
|
.error_handler = sata_dwc_error_handler,
|
||||||
.hardreset = sata_dwc_hardreset,
|
.hardreset = sata_dwc_hardreset,
|
||||||
|
|
||||||
|
@ -934,7 +932,7 @@ index 9020349..00c2af1 100644
|
||||||
.qc_issue = sata_dwc_qc_issue,
|
.qc_issue = sata_dwc_qc_issue,
|
||||||
|
|
||||||
.scr_read = sata_dwc_scr_read,
|
.scr_read = sata_dwc_scr_read,
|
||||||
@@ -1166,6 +1185,8 @@ static struct ata_port_operations sata_dwc_ops = {
|
@@ -1166,6 +1185,8 @@ static struct ata_port_operations sata_d
|
||||||
.port_start = sata_dwc_port_start,
|
.port_start = sata_dwc_port_start,
|
||||||
.port_stop = sata_dwc_port_stop,
|
.port_stop = sata_dwc_port_stop,
|
||||||
|
|
||||||
|
@ -943,7 +941,7 @@ index 9020349..00c2af1 100644
|
||||||
.bmdma_setup = sata_dwc_bmdma_setup,
|
.bmdma_setup = sata_dwc_bmdma_setup,
|
||||||
.bmdma_start = sata_dwc_bmdma_start,
|
.bmdma_start = sata_dwc_bmdma_start,
|
||||||
};
|
};
|
||||||
@@ -1184,13 +1205,14 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
@@ -1184,13 +1205,14 @@ static int sata_dwc_probe(struct platfor
|
||||||
struct sata_dwc_device *hsdev;
|
struct sata_dwc_device *hsdev;
|
||||||
u32 idr, versionr;
|
u32 idr, versionr;
|
||||||
char *ver = (char *)&versionr;
|
char *ver = (char *)&versionr;
|
||||||
|
@ -959,7 +957,7 @@ index 9020349..00c2af1 100644
|
||||||
|
|
||||||
/* Allocate DWC SATA device */
|
/* Allocate DWC SATA device */
|
||||||
host = ata_host_alloc_pinfo(&ofdev->dev, ppi, SATA_DWC_MAX_PORTS);
|
host = ata_host_alloc_pinfo(&ofdev->dev, ppi, SATA_DWC_MAX_PORTS);
|
||||||
@@ -1201,57 +1223,33 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
@@ -1201,57 +1223,33 @@ static int sata_dwc_probe(struct platfor
|
||||||
host->private_data = hsdev;
|
host->private_data = hsdev;
|
||||||
|
|
||||||
/* Ioremap SATA registers */
|
/* Ioremap SATA registers */
|
||||||
|
@ -1026,7 +1024,7 @@ index 9020349..00c2af1 100644
|
||||||
/* Enable SATA Interrupts */
|
/* Enable SATA Interrupts */
|
||||||
sata_dwc_enable_interrupts(hsdev);
|
sata_dwc_enable_interrupts(hsdev);
|
||||||
|
|
||||||
@@ -1263,6 +1261,25 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
@@ -1263,6 +1261,25 @@ static int sata_dwc_probe(struct platfor
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1052,7 +1050,7 @@ index 9020349..00c2af1 100644
|
||||||
/*
|
/*
|
||||||
* Now, register with libATA core, this will also initiate the
|
* Now, register with libATA core, this will also initiate the
|
||||||
* device discovery process, invoking our port_start() handler &
|
* device discovery process, invoking our port_start() handler &
|
||||||
@@ -1276,12 +1293,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
@@ -1276,12 +1293,7 @@ static int sata_dwc_probe(struct platfor
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_out:
|
error_out:
|
||||||
|
@ -1066,7 +1064,7 @@ index 9020349..00c2af1 100644
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1293,11 +1305,13 @@ static int sata_dwc_remove(struct platform_device *ofdev)
|
@@ -1293,11 +1305,13 @@ static int sata_dwc_remove(struct platfo
|
||||||
|
|
||||||
ata_host_detach(host);
|
ata_host_detach(host);
|
||||||
|
|
||||||
|
@ -1083,6 +1081,3 @@ index 9020349..00c2af1 100644
|
||||||
dev_dbg(&ofdev->dev, "done\n");
|
dev_dbg(&ofdev->dev, "done\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
From: Arnd Bergmann <arnd@arndb.de>
|
|
||||||
Subject: [PATCH v4] usb: dwc2: fix regression on big-endian PowerPC/ARM systems
|
|
||||||
Date: Fri, 13 May 2016 15:52:27 +0200
|
|
||||||
Message-Id: <1463147559-544140-1-git-send-email-arnd@arndb.de>
|
|
||||||
|
|
||||||
A patch that went into Linux-4.4 to fix big-endian mode on a Lantiq
|
|
||||||
MIPS system unfortunately broke big-endian operation on PowerPC
|
|
||||||
APM82181 as reported by Christian Lamparter, and likely other
|
|
||||||
systems.
|
|
||||||
|
|
||||||
It actually introduced multiple issues:
|
|
||||||
|
|
||||||
- it broke big-endian ARM kernels: any machine that was working
|
|
||||||
correctly with a little-endian kernel is no longer using byteswaps
|
|
||||||
on big-endian kernels, which clearly breaks them.
|
|
||||||
- On PowerPC the same thing must be true: if it was working before,
|
|
||||||
using big-endian kernels is now broken. Unlike ARM, 32-bit PowerPC
|
|
||||||
usually uses big-endian kernels, so they are likely all broken.
|
|
||||||
- The barrier for dwc2_writel is on the wrong side of the __raw_writel(),
|
|
||||||
so the MMIO no longer synchronizes with DMA operations.
|
|
||||||
- On architectures that require specific CPU instructions for MMIO
|
|
||||||
access, using the __raw_ variant may turn this into a pointer
|
|
||||||
dereference that does not have the same effect as the readl/writel.
|
|
||||||
|
|
||||||
This patch is a simple revert for all architectures other than MIPS,
|
|
||||||
in the hope that we can more easily backport it to fix the regression
|
|
||||||
on PowerPC and ARM systems without breaking the Lantiq system again.
|
|
||||||
|
|
||||||
We should follow this up with a more elaborate change to add runtime
|
|
||||||
detection of endianness, to make sure it also works on all other
|
|
||||||
combinations of architectures and implementations of the usb-dwc2
|
|
||||||
device. That patch however will be fairly large and not appropriate
|
|
||||||
for backports to stable kernels.
|
|
||||||
|
|
||||||
Felipe suggested a different approach, using an endianness switching
|
|
||||||
register to always put the device into LE mode, but unfortunately
|
|
||||||
the dwc2 hardware does not provide a generic way to do that. Also,
|
|
||||||
I see no practical way of addressing the problem more generally by
|
|
||||||
patching architecture specific code on MIPS.
|
|
||||||
|
|
||||||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
|
||||||
Fixes: 95c8bc360944 ("usb: dwc2: Use platform endianness when accessing registers")
|
|
||||||
---
|
|
||||||
drivers/usb/dwc2/core.h | 27 +++++++++++++++++++++++++++
|
|
||||||
1 file changed, 27 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
|
|
||||||
index 3c58d633ce80..dec0b21fc626 100644
|
|
||||||
--- a/drivers/usb/dwc2/core.h
|
|
||||||
+++ b/drivers/usb/dwc2/core.h
|
|
||||||
@@ -64,6 +64,17 @@
|
|
||||||
DWC2_TRACE_SCHEDULER_VB(pr_fmt("%s: SCH: " fmt), \
|
|
||||||
dev_name(hsotg->dev), ##__VA_ARGS__)
|
|
||||||
|
|
||||||
+#ifdef CONFIG_MIPS
|
|
||||||
+/*
|
|
||||||
+ * There are some MIPS machines that can run in either big-endian
|
|
||||||
+ * or little-endian mode and that use the dwc2 register without
|
|
||||||
+ * a byteswap in both ways.
|
|
||||||
+ * Unlike other architectures, MIPS apparently does not require a
|
|
||||||
+ * barrier before the __raw_writel() to synchronize with DMA but does
|
|
||||||
+ * require the barrier after the __raw_writel() to serialize a set of
|
|
||||||
+ * writes. This set of operations was added specifically for MIPS and
|
|
||||||
+ * should only be used there.
|
|
||||||
+ */
|
|
||||||
static inline u32 dwc2_readl(const void __iomem *addr)
|
|
||||||
{
|
|
||||||
u32 value = __raw_readl(addr);
|
|
||||||
@@ -90,6 +101,22 @@ static inline void dwc2_writel(u32 value, void __iomem *addr)
|
|
||||||
pr_info("INFO:: wrote %08x to %p\n", value, addr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+/* Normal architectures just use readl/write */
|
|
||||||
+static inline u32 dwc2_readl(const void __iomem *addr)
|
|
||||||
+{
|
|
||||||
+ return readl(addr);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline void dwc2_writel(u32 value, void __iomem *addr)
|
|
||||||
+{
|
|
||||||
+ writel(value, addr);
|
|
||||||
+
|
|
||||||
+#ifdef DWC2_LOG_WRITES
|
|
||||||
+ pr_info("info:: wrote %08x to %p\n", value, addr);
|
|
||||||
+#endif
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Maximum number of Endpoints/HostChannels */
|
|
||||||
#define MAX_EPS_CHANNELS 16
|
|
||||||
--
|
|
||||||
2.7.0
|
|
||||||
|
|
||||||
|
|
|
@ -29,3 +29,4 @@
|
||||||
+ "meraki,ikarem",
|
+ "meraki,ikarem",
|
||||||
"mosaixtech,icon"
|
"mosaixtech,icon"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- a/arch/powerpc/platforms/44x/Kconfig 2016-05-21 23:02:29.933525903 +0200
|
--- a/arch/powerpc/platforms/44x/Kconfig
|
||||||
+++ b/arch/powerpc/platforms/44x/Kconfig 2016-05-21 23:06:50.843908233 +0200
|
+++ b/arch/powerpc/platforms/44x/Kconfig
|
||||||
@@ -143,6 +143,17 @@ config CANYONLANDS
|
@@ -143,6 +143,17 @@ config CANYONLANDS
|
||||||
help
|
help
|
||||||
This option enables support for the AMCC PPC460EX evaluation board.
|
This option enables support for the AMCC PPC460EX evaluation board.
|
||||||
|
@ -18,8 +18,8 @@
|
||||||
config GLACIER
|
config GLACIER
|
||||||
bool "Glacier"
|
bool "Glacier"
|
||||||
depends on 44x
|
depends on 44x
|
||||||
--- a/arch/powerpc/platforms/44x/ppc44x_simple.c 2016-05-21 23:02:29.933525903 +0200
|
--- a/arch/powerpc/platforms/44x/ppc44x_simple.c
|
||||||
+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c 2016-05-21 23:06:01.130502053 +0200
|
+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
|
||||||
@@ -50,6 +50,7 @@ machine_device_initcall(ppc44x_simple, p
|
@@ -50,6 +50,7 @@ machine_device_initcall(ppc44x_simple, p
|
||||||
* board.c file for it rather than adding it to this list.
|
* board.c file for it rather than adding it to this list.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- a/arch/powerpc/platforms/44x/Makefile 2016-05-31 19:28:28.825973250 +0200
|
--- a/arch/powerpc/platforms/44x/Makefile
|
||||||
+++ b/arch/powerpc/platforms/44x/Makefile 2016-05-31 19:28:22.135960329 +0200
|
+++ b/arch/powerpc/platforms/44x/Makefile
|
||||||
@@ -3,6 +3,7 @@ ifneq ($(CONFIG_PPC4xx_CPM),y)
|
@@ -3,6 +3,7 @@ ifneq ($(CONFIG_PPC4xx_CPM),y)
|
||||||
obj-$(CONFIG_44x) += idle.o
|
obj-$(CONFIG_44x) += idle.o
|
||||||
endif
|
endif
|
||||||
|
@ -8,8 +8,8 @@
|
||||||
obj-$(CONFIG_EBONY) += ebony.o
|
obj-$(CONFIG_EBONY) += ebony.o
|
||||||
obj-$(CONFIG_SAM440EP) += sam440ep.o
|
obj-$(CONFIG_SAM440EP) += sam440ep.o
|
||||||
obj-$(CONFIG_WARP) += warp.o
|
obj-$(CONFIG_WARP) += warp.o
|
||||||
--- a/arch/powerpc/platforms/44x/Kconfig 2016-05-31 19:33:57.049940191 +0200
|
--- a/arch/powerpc/platforms/44x/Kconfig
|
||||||
+++ b/arch/powerpc/platforms/44x/Kconfig 2016-05-31 19:30:01.699485861 +0200
|
+++ b/arch/powerpc/platforms/44x/Kconfig
|
||||||
@@ -260,6 +260,19 @@ config ICON
|
@@ -260,6 +260,19 @@ config ICON
|
||||||
help
|
help
|
||||||
This option enables support for the AMCC PPC440SPe evaluation board.
|
This option enables support for the AMCC PPC440SPe evaluation board.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- a/arch/powerpc/sysdev/ppc4xx_pci.c 2016-05-30 17:23:34.543707092 +0200
|
--- a/arch/powerpc/sysdev/ppc4xx_pci.c
|
||||||
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c 2016-05-30 17:31:02.497707885 +0200
|
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
|
||||||
@@ -1066,15 +1066,24 @@ static int __init apm821xx_pciex_init_po
|
@@ -1066,15 +1066,24 @@ static int __init apm821xx_pciex_init_po
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- a/arch/powerpc/sysdev/ppc4xx_pci.c 2016-05-30 17:57:30.125498459 +0200
|
--- a/arch/powerpc/sysdev/ppc4xx_pci.c
|
||||||
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c 2016-05-30 18:00:39.236007798 +0200
|
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
|
||||||
@@ -1913,9 +1913,9 @@ static void __init ppc4xx_configure_pcie
|
@@ -1913,9 +1913,9 @@ static void __init ppc4xx_configure_pcie
|
||||||
* if it works
|
* if it works
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
|
|
||||||
index 5d7db6c..01bed2e 100644
|
|
||||||
--- a/drivers/net/ethernet/ibm/emac/core.c
|
--- a/drivers/net/ethernet/ibm/emac/core.c
|
||||||
+++ b/drivers/net/ethernet/ibm/emac/core.c
|
+++ b/drivers/net/ethernet/ibm/emac/core.c
|
||||||
@@ -129,6 +129,7 @@ static inline void emac_report_timeout_error(struct emac_instance *dev,
|
@@ -129,6 +129,7 @@ static inline void emac_report_timeout_e
|
||||||
{
|
{
|
||||||
if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX |
|
if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX |
|
||||||
EMAC_FTR_460EX_PHY_CLK_FIX |
|
EMAC_FTR_460EX_PHY_CLK_FIX |
|
||||||
|
@ -10,7 +8,7 @@ index 5d7db6c..01bed2e 100644
|
||||||
EMAC_FTR_440EP_PHY_CLK_FIX))
|
EMAC_FTR_440EP_PHY_CLK_FIX))
|
||||||
DBG(dev, "%s" NL, error);
|
DBG(dev, "%s" NL, error);
|
||||||
else if (net_ratelimit())
|
else if (net_ratelimit())
|
||||||
@@ -146,6 +147,10 @@ static inline void emac_rx_clk_tx(struct emac_instance *dev)
|
@@ -146,6 +147,10 @@ static inline void emac_rx_clk_tx(struct
|
||||||
if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
|
if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
|
||||||
dcri_clrset(SDR0, SDR0_MFR,
|
dcri_clrset(SDR0, SDR0_MFR,
|
||||||
0, SDR0_MFR_ECS >> dev->cell_index);
|
0, SDR0_MFR_ECS >> dev->cell_index);
|
||||||
|
@ -21,7 +19,7 @@ index 5d7db6c..01bed2e 100644
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,6 +160,10 @@ static inline void emac_rx_clk_default(struct emac_instance *dev)
|
@@ -155,6 +160,10 @@ static inline void emac_rx_clk_default(s
|
||||||
if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
|
if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
|
||||||
dcri_clrset(SDR0, SDR0_MFR,
|
dcri_clrset(SDR0, SDR0_MFR,
|
||||||
SDR0_MFR_ECS >> dev->cell_index, 0);
|
SDR0_MFR_ECS >> dev->cell_index, 0);
|
||||||
|
@ -32,7 +30,7 @@ index 5d7db6c..01bed2e 100644
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2587,7 +2596,7 @@ static int emac_init_config(struct emac_instance *dev)
|
@@ -2587,7 +2596,7 @@ static int emac_init_config(struct emac_
|
||||||
if (of_device_is_compatible(np, "ibm,emac-apm821xx")) {
|
if (of_device_is_compatible(np, "ibm,emac-apm821xx")) {
|
||||||
dev->features |= (EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE |
|
dev->features |= (EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE |
|
||||||
EMAC_FTR_APM821XX_NO_HALF_DUPLEX |
|
EMAC_FTR_APM821XX_NO_HALF_DUPLEX |
|
||||||
|
@ -41,8 +39,6 @@ index 5d7db6c..01bed2e 100644
|
||||||
}
|
}
|
||||||
} else if (of_device_is_compatible(np, "ibm,emac4")) {
|
} else if (of_device_is_compatible(np, "ibm,emac4")) {
|
||||||
dev->features |= EMAC_FTR_EMAC4;
|
dev->features |= EMAC_FTR_EMAC4;
|
||||||
diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
|
|
||||||
index 93ae114..072176a 100644
|
|
||||||
--- a/drivers/net/ethernet/ibm/emac/core.h
|
--- a/drivers/net/ethernet/ibm/emac/core.h
|
||||||
+++ b/drivers/net/ethernet/ibm/emac/core.h
|
+++ b/drivers/net/ethernet/ibm/emac/core.h
|
||||||
@@ -333,6 +333,8 @@ struct emac_instance {
|
@@ -333,6 +333,8 @@ struct emac_instance {
|
||||||
|
|
|
@ -8,8 +8,6 @@ Subject: [PATCH] phy device tree support for emac
|
||||||
drivers/net/ethernet/ibm/emac/core.h | 4 +
|
drivers/net/ethernet/ibm/emac/core.h | 4 +
|
||||||
2 files changed, 265 insertions(+)
|
2 files changed, 265 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
|
|
||||||
index 4c9771d..5a8a26c 100644
|
|
||||||
--- a/drivers/net/ethernet/ibm/emac/core.c
|
--- a/drivers/net/ethernet/ibm/emac/core.c
|
||||||
+++ b/drivers/net/ethernet/ibm/emac/core.c
|
+++ b/drivers/net/ethernet/ibm/emac/core.c
|
||||||
@@ -42,6 +42,7 @@
|
@@ -42,6 +42,7 @@
|
||||||
|
@ -20,7 +18,7 @@ index 4c9771d..5a8a26c 100644
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
@@ -2383,6 +2384,246 @@ static int emac_read_uint_prop(struct device_node *np, const char *name,
|
@@ -2392,6 +2393,246 @@ static int emac_read_uint_prop(struct de
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +265,7 @@ index 4c9771d..5a8a26c 100644
|
||||||
static int emac_init_phy(struct emac_instance *dev)
|
static int emac_init_phy(struct emac_instance *dev)
|
||||||
{
|
{
|
||||||
struct device_node *np = dev->ofdev->dev.of_node;
|
struct device_node *np = dev->ofdev->dev.of_node;
|
||||||
@@ -2453,6 +2694,18 @@ static int emac_init_phy(struct emac_instance *dev)
|
@@ -2462,6 +2703,18 @@ static int emac_init_phy(struct emac_ins
|
||||||
|
|
||||||
emac_configure(dev);
|
emac_configure(dev);
|
||||||
|
|
||||||
|
@ -286,7 +284,7 @@ index 4c9771d..5a8a26c 100644
|
||||||
if (dev->phy_address != 0xffffffff)
|
if (dev->phy_address != 0xffffffff)
|
||||||
phy_map = ~(1 << dev->phy_address);
|
phy_map = ~(1 << dev->phy_address);
|
||||||
|
|
||||||
@@ -2480,6 +2733,7 @@ static int emac_init_phy(struct emac_instance *dev)
|
@@ -2489,6 +2742,7 @@ static int emac_init_phy(struct emac_ins
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +292,7 @@ index 4c9771d..5a8a26c 100644
|
||||||
/* Init PHY */
|
/* Init PHY */
|
||||||
if (dev->phy.def->ops->init)
|
if (dev->phy.def->ops->init)
|
||||||
dev->phy.def->ops->init(&dev->phy);
|
dev->phy.def->ops->init(&dev->phy);
|
||||||
@@ -2898,6 +3152,8 @@ static int emac_probe(struct platform_device *ofdev)
|
@@ -2907,6 +3161,8 @@ static int emac_probe(struct platform_de
|
||||||
/* I have a bad feeling about this ... */
|
/* I have a bad feeling about this ... */
|
||||||
|
|
||||||
err_detach_tah:
|
err_detach_tah:
|
||||||
|
@ -303,7 +301,7 @@ index 4c9771d..5a8a26c 100644
|
||||||
if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
|
if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
|
||||||
tah_detach(dev->tah_dev, dev->tah_port);
|
tah_detach(dev->tah_dev, dev->tah_port);
|
||||||
err_detach_rgmii:
|
err_detach_rgmii:
|
||||||
@@ -2948,6 +3204,11 @@ static int emac_remove(struct platform_device *ofdev)
|
@@ -2957,6 +3213,11 @@ static int emac_remove(struct platform_d
|
||||||
if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
|
if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
|
||||||
zmii_detach(dev->zmii_dev, dev->zmii_port);
|
zmii_detach(dev->zmii_dev, dev->zmii_port);
|
||||||
|
|
||||||
|
@ -315,8 +313,6 @@ index 4c9771d..5a8a26c 100644
|
||||||
busy_phy_map &= ~(1 << dev->phy.address);
|
busy_phy_map &= ~(1 << dev->phy.address);
|
||||||
DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
|
DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
|
||||||
|
|
||||||
diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
|
|
||||||
index 93ae114..0710a66 100644
|
|
||||||
--- a/drivers/net/ethernet/ibm/emac/core.h
|
--- a/drivers/net/ethernet/ibm/emac/core.h
|
||||||
+++ b/drivers/net/ethernet/ibm/emac/core.h
|
+++ b/drivers/net/ethernet/ibm/emac/core.h
|
||||||
@@ -199,6 +199,10 @@ struct emac_instance {
|
@@ -199,6 +199,10 @@ struct emac_instance {
|
||||||
|
@ -330,6 +326,3 @@ index 93ae114..0710a66 100644
|
||||||
/* ZMII infos if any */
|
/* ZMII infos if any */
|
||||||
u32 zmii_ph;
|
u32 zmii_ph;
|
||||||
u32 zmii_port;
|
u32 zmii_port;
|
||||||
--
|
|
||||||
2.1.4
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- a/drivers/usb/dwc2/platform.c 2016-05-26 21:39:41.347838639 +0200
|
--- a/drivers/usb/dwc2/platform.c
|
||||||
+++ b/drivers/usb/dwc2/platform.c 2016-05-26 21:44:01.554907417 +0200
|
+++ b/drivers/usb/dwc2/platform.c
|
||||||
@@ -115,6 +115,37 @@ static const struct dwc2_core_params par
|
@@ -115,6 +115,37 @@ static const struct dwc2_core_params par
|
||||||
.hibernation = -1,
|
.hibernation = -1,
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,8 +33,6 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
drivers/usb/host/xhci-pci.c | 492 ++++++++++++++++++++++++++++++++++++++++++++
|
drivers/usb/host/xhci-pci.c | 492 ++++++++++++++++++++++++++++++++++++++++++++
|
||||||
1 file changed, 492 insertions(+)
|
1 file changed, 492 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
|
|
||||||
index 48672fa..328c891 100644
|
|
||||||
--- a/drivers/usb/host/xhci-pci.c
|
--- a/drivers/usb/host/xhci-pci.c
|
||||||
+++ b/drivers/usb/host/xhci-pci.c
|
+++ b/drivers/usb/host/xhci-pci.c
|
||||||
@@ -24,6 +24,8 @@
|
@@ -24,6 +24,8 @@
|
||||||
|
@ -46,7 +44,7 @@ index 48672fa..328c891 100644
|
||||||
|
|
||||||
#include "xhci.h"
|
#include "xhci.h"
|
||||||
#include "xhci-trace.h"
|
#include "xhci-trace.h"
|
||||||
@@ -207,6 +209,458 @@ static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev)
|
@@ -209,6 +211,458 @@ static void xhci_pme_acpi_rtd3_enable(st
|
||||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||||
#endif /* CONFIG_ACPI */
|
#endif /* CONFIG_ACPI */
|
||||||
|
|
||||||
|
@ -505,7 +503,7 @@ index 48672fa..328c891 100644
|
||||||
/* called during probe() after chip reset completes */
|
/* called during probe() after chip reset completes */
|
||||||
static int xhci_pci_setup(struct usb_hcd *hcd)
|
static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||||
{
|
{
|
||||||
@@ -246,6 +700,22 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
@@ -248,6 +702,22 @@ static int xhci_pci_probe(struct pci_dev
|
||||||
struct hc_driver *driver;
|
struct hc_driver *driver;
|
||||||
struct usb_hcd *hcd;
|
struct usb_hcd *hcd;
|
||||||
|
|
||||||
|
@ -528,7 +526,7 @@ index 48672fa..328c891 100644
|
||||||
driver = (struct hc_driver *)id->driver_data;
|
driver = (struct hc_driver *)id->driver_data;
|
||||||
|
|
||||||
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
||||||
@@ -303,6 +773,16 @@ static void xhci_pci_remove(struct pci_dev *dev)
|
@@ -305,6 +775,16 @@ static void xhci_pci_remove(struct pci_d
|
||||||
{
|
{
|
||||||
struct xhci_hcd *xhci;
|
struct xhci_hcd *xhci;
|
||||||
|
|
||||||
|
@ -545,6 +543,3 @@ index 48672fa..328c891 100644
|
||||||
xhci = hcd_to_xhci(pci_get_drvdata(dev));
|
xhci = hcd_to_xhci(pci_get_drvdata(dev));
|
||||||
xhci->xhc_state |= XHCI_STATE_REMOVING;
|
xhci->xhc_state |= XHCI_STATE_REMOVING;
|
||||||
if (xhci->shared_hcd) {
|
if (xhci->shared_hcd) {
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,9 @@ produce a noisy warning.
|
||||||
drivers/usb/host/pci-quirks.c | 362 ++++++++++++++++++++++++++++++++++++++++++
|
drivers/usb/host/pci-quirks.c | 362 ++++++++++++++++++++++++++++++++++++++++++
|
||||||
1 file changed, 362 insertions(+)
|
1 file changed, 362 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
|
|
||||||
index 1c4d89e..555bd3f 100644
|
|
||||||
--- a/drivers/usb/host/xhci-pci.c
|
--- a/drivers/usb/host/xhci-pci.c
|
||||||
+++ b/drivers/usb/host/xhci-pci.c
|
+++ b/drivers/usb/host/xhci-pci.c
|
||||||
@@ -172,7 +172,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
@@ -176,7 +176,7 @@ static void xhci_pci_quirks(struct devic
|
||||||
}
|
}
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
|
if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
|
||||||
pdev->device == 0x0015)
|
pdev->device == 0x0015)
|
||||||
|
@ -24,11 +22,9 @@ index 1c4d89e..555bd3f 100644
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_VIA)
|
if (pdev->vendor == PCI_VENDOR_ID_VIA)
|
||||||
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
||||||
|
|
||||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
|
||||||
index 9e71c96..27cfcb9 100644
|
|
||||||
--- a/drivers/usb/host/xhci.c
|
--- a/drivers/usb/host/xhci.c
|
||||||
+++ b/drivers/usb/host/xhci.c
|
+++ b/drivers/usb/host/xhci.c
|
||||||
@@ -389,10 +389,14 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd)
|
@@ -388,10 +388,14 @@ static int xhci_try_enable_msi(struct us
|
||||||
free_irq(hcd->irq, hcd);
|
free_irq(hcd->irq, hcd);
|
||||||
hcd->irq = 0;
|
hcd->irq = 0;
|
||||||
|
|
||||||
|
@ -46,12 +42,13 @@ index 9e71c96..27cfcb9 100644
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
/* hcd->irq is 0, we have MSI */
|
/* hcd->irq is 0, we have MSI */
|
||||||
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
|
|
||||||
index 6b085aa..514dc3f 100644
|
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1649,3 +1649,4 @@ struct xhci_hcd {
|
@@ -1648,6 +1648,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_BROKEN_STREAMS (1 << 19)
|
/* support xHCI 0.96 spec USB2 software LPM */
|
||||||
#define XHCI_PME_STUCK_QUIRK (1 << 20)
|
unsigned sw_lpm_support:1;
|
||||||
|
/* support xHCI 1.0 spec USB2 hardware LPM */
|
||||||
+#define XHCI_FORCE_MSI (1 << 24)
|
+#define XHCI_FORCE_MSI (1 << 24)
|
||||||
unsigned int num_active_eps;
|
unsigned hw_lpm_support:1;
|
||||||
|
/* cached usb2 extened protocol capabilites */
|
||||||
|
u32 *ext_caps;
|
||||||
|
|
|
@ -24,11 +24,9 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||||
3 files changed, 980 insertions(+)
|
3 files changed, 980 insertions(+)
|
||||||
create mode 100644 drivers/hwmon/tc654.c
|
create mode 100644 drivers/hwmon/tc654.c
|
||||||
|
|
||||||
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
|
|
||||||
index ff94007..941fe4951 100644
|
|
||||||
--- a/drivers/hwmon/Kconfig
|
--- a/drivers/hwmon/Kconfig
|
||||||
+++ b/drivers/hwmon/Kconfig
|
+++ b/drivers/hwmon/Kconfig
|
||||||
@@ -1514,6 +1514,16 @@ config SENSORS_INA2XX
|
@@ -1493,6 +1493,16 @@ config SENSORS_INA2XX
|
||||||
This driver can also be built as a module. If so, the module
|
This driver can also be built as a module. If so, the module
|
||||||
will be called ina2xx.
|
will be called ina2xx.
|
||||||
|
|
||||||
|
@ -45,11 +43,9 @@ index ff94007..941fe4951 100644
|
||||||
config SENSORS_TC74
|
config SENSORS_TC74
|
||||||
tristate "Microchip TC74"
|
tristate "Microchip TC74"
|
||||||
depends on I2C
|
depends on I2C
|
||||||
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
|
|
||||||
index 2ef5b7c..04270c7 100644
|
|
||||||
--- a/drivers/hwmon/Makefile
|
--- a/drivers/hwmon/Makefile
|
||||||
+++ b/drivers/hwmon/Makefile
|
+++ b/drivers/hwmon/Makefile
|
||||||
@@ -145,6 +145,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
|
@@ -143,6 +143,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc4
|
||||||
obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
|
obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
|
||||||
obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
|
obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
|
||||||
obj-$(CONFIG_SENSORS_AMC6821) += amc6821.o
|
obj-$(CONFIG_SENSORS_AMC6821) += amc6821.o
|
||||||
|
@ -57,9 +53,6 @@ index 2ef5b7c..04270c7 100644
|
||||||
obj-$(CONFIG_SENSORS_TC74) += tc74.o
|
obj-$(CONFIG_SENSORS_TC74) += tc74.o
|
||||||
obj-$(CONFIG_SENSORS_THMC50) += thmc50.o
|
obj-$(CONFIG_SENSORS_THMC50) += thmc50.o
|
||||||
obj-$(CONFIG_SENSORS_TMP102) += tmp102.o
|
obj-$(CONFIG_SENSORS_TMP102) += tmp102.o
|
||||||
diff --git a/drivers/hwmon/tc654.c b/drivers/hwmon/tc654.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..d584baf
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/hwmon/tc654.c
|
+++ b/drivers/hwmon/tc654.c
|
||||||
@@ -0,0 +1,969 @@
|
@@ -0,0 +1,969 @@
|
||||||
|
@ -1032,6 +1025,3 @@ index 0000000..d584baf
|
||||||
+MODULE_AUTHOR("Christian Lamparter <chunkeey@gmail.com>");
|
+MODULE_AUTHOR("Christian Lamparter <chunkeey@gmail.com>");
|
||||||
+MODULE_DESCRIPTION("Microchip TC654/TC655 hwmon driver");
|
+MODULE_DESCRIPTION("Microchip TC654/TC655 hwmon driver");
|
||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
--
|
|
||||||
2.8.1
|
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,9 @@ Reviewed-on: https://chromium-review.googlesource.com/212413
|
||||||
Reviewed-by: Olof Johansson <olofj@chromium.org>
|
Reviewed-by: Olof Johansson <olofj@chromium.org>
|
||||||
Commit-Queue: Olof Johansson <olofj@chromium.org>
|
Commit-Queue: Olof Johansson <olofj@chromium.org>
|
||||||
---
|
---
|
||||||
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
|
|
||||||
index c9ff08d..fb9e224 100644
|
|
||||||
--- a/drivers/hwmon/lm90.c
|
--- a/drivers/hwmon/lm90.c
|
||||||
+++ b/drivers/hwmon/lm90.c
|
+++ b/drivers/hwmon/lm90.c
|
||||||
@@ -473,20 +473,29 @@
|
@@ -473,20 +473,29 @@ static int lm90_read16(struct i2c_client
|
||||||
* various registers have different meanings as a result of selecting a
|
* various registers have different meanings as a result of selecting a
|
||||||
* non-default remote channel.
|
* non-default remote channel.
|
||||||
*/
|
*/
|
||||||
|
@ -65,7 +63,7 @@ index c9ff08d..fb9e224 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -759,29 +768,34 @@
|
@@ -759,29 +768,34 @@ static u16 temp_to_u16_adt7461(struct lm
|
||||||
* Sysfs stuff
|
* Sysfs stuff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -110,7 +108,7 @@ index c9ff08d..fb9e224 100644
|
||||||
{
|
{
|
||||||
static const u8 reg[TEMP8_REG_NUM] = {
|
static const u8 reg[TEMP8_REG_NUM] = {
|
||||||
LM90_REG_W_LOCAL_LOW,
|
LM90_REG_W_LOCAL_LOW,
|
||||||
@@ -794,10 +808,37 @@
|
@@ -794,60 +808,79 @@ static ssize_t set_temp8(struct device *
|
||||||
MAX6659_REG_W_REMOTE_EMERG,
|
MAX6659_REG_W_REMOTE_EMERG,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,26 +116,39 @@ index c9ff08d..fb9e224 100644
|
||||||
struct lm90_data *data = dev_get_drvdata(dev);
|
struct lm90_data *data = dev_get_drvdata(dev);
|
||||||
struct i2c_client *client = data->client;
|
struct i2c_client *client = data->client;
|
||||||
- int nr = attr->index;
|
- int nr = attr->index;
|
||||||
+ int err;
|
- long val;
|
||||||
+
|
int err;
|
||||||
+ /* +16 degrees offset for temp2 for the LM99 */
|
|
||||||
|
- err = kstrtol(buf, 10, &val);
|
||||||
|
- if (err < 0)
|
||||||
|
- return err;
|
||||||
|
-
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
|
- if (data->kind == lm99 && attr->index == 3)
|
||||||
+ if (data->kind == lm99 && index == 3)
|
+ if (data->kind == lm99 && index == 3)
|
||||||
+ val -= 16000;
|
val -= 16000;
|
||||||
+
|
|
||||||
+ mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
+ if (data->kind == adt7461 || data->kind == tmp451)
|
if (data->kind == adt7461 || data->kind == tmp451)
|
||||||
|
- data->temp8[nr] = temp_to_u8_adt7461(data, val);
|
||||||
+ data->temp8[index] = temp_to_u8_adt7461(data, val);
|
+ data->temp8[index] = temp_to_u8_adt7461(data, val);
|
||||||
+ else if (data->kind == max6646)
|
else if (data->kind == max6646)
|
||||||
|
- data->temp8[nr] = temp_to_u8(val);
|
||||||
+ data->temp8[index] = temp_to_u8(val);
|
+ data->temp8[index] = temp_to_u8(val);
|
||||||
+ else
|
else
|
||||||
|
- data->temp8[nr] = temp_to_s8(val);
|
||||||
|
-
|
||||||
|
- lm90_select_remote_channel(client, data, nr >= 6);
|
||||||
|
- i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
|
||||||
|
- lm90_select_remote_channel(client, data, 0);
|
||||||
+ data->temp8[index] = temp_to_s8(val);
|
+ data->temp8[index] = temp_to_s8(val);
|
||||||
+
|
|
||||||
+ if ((err = lm90_select_remote_channel(client, data, index >= 6)) ||
|
+ if ((err = lm90_select_remote_channel(client, data, index >= 6)) ||
|
||||||
+ (err = i2c_smbus_write_byte_data(client, reg[index],
|
+ (err = i2c_smbus_write_byte_data(client, reg[index],
|
||||||
+ data->temp8[index])) ||
|
+ data->temp8[index])) ||
|
||||||
+ (err = lm90_select_remote_channel(client, data, 0)))
|
+ (err = lm90_select_remote_channel(client, data, 0)))
|
||||||
+ dev_err(dev, "write_temp8 failed, err %d\n", err);
|
+ dev_err(dev, "write_temp8 failed, err %d\n", err);
|
||||||
+ mutex_unlock(&data->update_lock);
|
mutex_unlock(&data->update_lock);
|
||||||
+
|
+
|
||||||
+ return err;
|
+ return err;
|
||||||
+}
|
+}
|
||||||
|
@ -147,84 +158,62 @@ index c9ff08d..fb9e224 100644
|
||||||
+{
|
+{
|
||||||
+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||||
+ int index = attr->index;
|
+ int index = attr->index;
|
||||||
long val;
|
+ long val;
|
||||||
int err;
|
+ int err;
|
||||||
|
+
|
||||||
@@ -805,49 +846,41 @@
|
+ err = kstrtol(buf, 10, &val);
|
||||||
if (err < 0)
|
+ if (err < 0)
|
||||||
return err;
|
+ return err;
|
||||||
|
+
|
||||||
- /* +16 degrees offset for temp2 for the LM99 */
|
|
||||||
- if (data->kind == lm99 && attr->index == 3)
|
|
||||||
- val -= 16000;
|
|
||||||
+ err = write_temp8(dev, index, val);
|
+ err = write_temp8(dev, index, val);
|
||||||
+ if (err < 0)
|
+ if (err < 0)
|
||||||
+ return err;
|
+ return err;
|
||||||
|
+
|
||||||
- mutex_lock(&data->update_lock);
|
|
||||||
- if (data->kind == adt7461 || data->kind == tmp451)
|
|
||||||
- data->temp8[nr] = temp_to_u8_adt7461(data, val);
|
|
||||||
- else if (data->kind == max6646)
|
|
||||||
- data->temp8[nr] = temp_to_u8(val);
|
|
||||||
- else
|
|
||||||
- data->temp8[nr] = temp_to_s8(val);
|
|
||||||
-
|
|
||||||
- lm90_select_remote_channel(client, data, nr >= 6);
|
|
||||||
- i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
|
|
||||||
- lm90_select_remote_channel(client, data, 0);
|
|
||||||
-
|
|
||||||
- mutex_unlock(&data->update_lock);
|
|
||||||
return count;
|
return count;
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int read_temp11(struct device *dev, int index)
|
|
||||||
+{
|
|
||||||
+ struct lm90_data *data = lm90_update_device(dev);
|
|
||||||
+ int temp;
|
|
||||||
+
|
|
||||||
+ if (data->kind == adt7461 || data->kind == tmp451)
|
|
||||||
+ temp = temp_from_u16_adt7461(data, data->temp11[index]);
|
|
||||||
+ else if (data->kind == max6646)
|
|
||||||
+ temp = temp_from_u16(data->temp11[index]);
|
|
||||||
+ else
|
|
||||||
+ temp = temp_from_s16(data->temp11[index]);
|
|
||||||
+
|
|
||||||
+ /* +16 degrees offset for temp2 for the LM99 */
|
|
||||||
+ if (data->kind == lm99 && index <= 2)
|
|
||||||
+ temp += 16000;
|
|
||||||
+
|
|
||||||
+ return temp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
|
-static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
|
||||||
char *buf)
|
- char *buf)
|
||||||
|
+static int read_temp11(struct device *dev, int index)
|
||||||
{
|
{
|
||||||
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
|
- struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
|
||||||
- struct lm90_data *data = lm90_update_device(dev);
|
struct lm90_data *data = lm90_update_device(dev);
|
||||||
- int temp;
|
int temp;
|
||||||
|
|
||||||
- if (data->kind == adt7461 || data->kind == tmp451)
|
if (data->kind == adt7461 || data->kind == tmp451)
|
||||||
- temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
|
- temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
|
||||||
- else if (data->kind == max6646)
|
+ temp = temp_from_u16_adt7461(data, data->temp11[index]);
|
||||||
|
else if (data->kind == max6646)
|
||||||
- temp = temp_from_u16(data->temp11[attr->index]);
|
- temp = temp_from_u16(data->temp11[attr->index]);
|
||||||
- else
|
+ temp = temp_from_u16(data->temp11[index]);
|
||||||
|
else
|
||||||
- temp = temp_from_s16(data->temp11[attr->index]);
|
- temp = temp_from_s16(data->temp11[attr->index]);
|
||||||
-
|
+ temp = temp_from_s16(data->temp11[index]);
|
||||||
- /* +16 degrees offset for temp2 for the LM99 */
|
|
||||||
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
- if (data->kind == lm99 && attr->index <= 2)
|
- if (data->kind == lm99 && attr->index <= 2)
|
||||||
- temp += 16000;
|
+ if (data->kind == lm99 && index <= 2)
|
||||||
-
|
temp += 16000;
|
||||||
|
|
||||||
- return sprintf(buf, "%d\n", temp);
|
- return sprintf(buf, "%d\n", temp);
|
||||||
+ return sprintf(buf, "%d\n", read_temp11(dev, attr->index));
|
+ return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
-static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
|
-static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
|
||||||
- const char *buf, size_t count)
|
- const char *buf, size_t count)
|
||||||
|
+static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
|
||||||
|
+ char *buf)
|
||||||
|
+{
|
||||||
|
+ struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
|
||||||
|
+
|
||||||
|
+ return sprintf(buf, "%d\n", read_temp11(dev, attr->index));
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static int write_temp11(struct device *dev, int nr, int index, long val)
|
+static int write_temp11(struct device *dev, int nr, int index, long val)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
u8 high;
|
u8 high;
|
||||||
@@ -861,17 +894,9 @@
|
@@ -861,18 +894,10 @@ static ssize_t set_temp11(struct device
|
||||||
{ LM90_REG_W_REMOTE_HIGHH, LM90_REG_W_REMOTE_HIGHL, 1 }
|
{ LM90_REG_W_REMOTE_HIGHH, LM90_REG_W_REMOTE_HIGHL, 1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -235,14 +224,15 @@ index c9ff08d..fb9e224 100644
|
||||||
- int index = attr->index;
|
- int index = attr->index;
|
||||||
- long val;
|
- long val;
|
||||||
int err;
|
int err;
|
||||||
-
|
|
||||||
- err = kstrtol(buf, 10, &val);
|
- err = kstrtol(buf, 10, &val);
|
||||||
- if (err < 0)
|
- if (err < 0)
|
||||||
- return err;
|
- return err;
|
||||||
|
-
|
||||||
/* +16 degrees offset for temp2 for the LM99 */
|
/* +16 degrees offset for temp2 for the LM99 */
|
||||||
if (data->kind == lm99 && index <= 2)
|
if (data->kind == lm99 && index <= 2)
|
||||||
@@ -887,15 +912,50 @@
|
val -= 16000;
|
||||||
|
@@ -887,15 +912,50 @@ static ssize_t set_temp11(struct device
|
||||||
else
|
else
|
||||||
data->temp11[index] = temp_to_s8(val) << 8;
|
data->temp11[index] = temp_to_s8(val) << 8;
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ Tested-by: Wei Ni <wni.nvidia@gmail.com>
|
||||||
Reviewed-by: Olof Johansson <olofj@chromium.org>
|
Reviewed-by: Olof Johansson <olofj@chromium.org>
|
||||||
Commit-Queue: Olof Johansson <olofj@chromium.org>
|
Commit-Queue: Olof Johansson <olofj@chromium.org>
|
||||||
---
|
---
|
||||||
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
|
|
||||||
index fb9e224..c54d3c8 100644
|
|
||||||
--- a/drivers/hwmon/lm90.c
|
--- a/drivers/hwmon/lm90.c
|
||||||
+++ b/drivers/hwmon/lm90.c
|
+++ b/drivers/hwmon/lm90.c
|
||||||
@@ -96,6 +96,8 @@
|
@@ -96,6 +96,8 @@
|
||||||
|
@ -40,21 +38,21 @@ index fb9e224..c54d3c8 100644
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Addresses to scan
|
* Addresses to scan
|
||||||
@@ -118,6 +120,13 @@
|
@@ -119,6 +121,13 @@ static const unsigned short normal_i2c[]
|
||||||
|
|
||||||
enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
|
enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
|
||||||
max6646, w83l771, max6696, sa56004, g781, tmp451 };
|
max6646, w83l771, max6696, sa56004, g781, tmp451 };
|
||||||
+
|
|
||||||
+enum sensor_id {
|
+enum sensor_id {
|
||||||
+ LOCAL = 0,
|
+ LOCAL = 0,
|
||||||
+ REMOTE,
|
+ REMOTE,
|
||||||
+ REMOTE2,
|
+ REMOTE2,
|
||||||
+ SENSOR_ID_END,
|
+ SENSOR_ID_END,
|
||||||
+};
|
+};
|
||||||
|
+
|
||||||
/*
|
/*
|
||||||
* The LM90 registers
|
* The LM90 registers
|
||||||
@@ -368,6 +377,7 @@
|
*/
|
||||||
|
@@ -368,6 +377,7 @@ struct lm90_data {
|
||||||
struct i2c_client *client;
|
struct i2c_client *client;
|
||||||
struct device *hwmon_dev;
|
struct device *hwmon_dev;
|
||||||
const struct attribute_group *groups[6];
|
const struct attribute_group *groups[6];
|
||||||
|
@ -62,12 +60,10 @@ index fb9e224..c54d3c8 100644
|
||||||
struct mutex update_lock;
|
struct mutex update_lock;
|
||||||
struct regulator *regulator;
|
struct regulator *regulator;
|
||||||
char valid; /* zero until following fields are valid */
|
char valid; /* zero until following fields are valid */
|
||||||
@@ -878,6 +888,24 @@
|
@@ -880,6 +890,24 @@ static ssize_t show_temp11(struct device
|
||||||
struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
|
|
||||||
|
|
||||||
return sprintf(buf, "%d\n", read_temp11(dev, attr->index));
|
return sprintf(buf, "%d\n", read_temp11(dev, attr->index));
|
||||||
+}
|
}
|
||||||
+
|
|
||||||
+static int lm90_read_local_temp(void *dev, int *temp)
|
+static int lm90_read_local_temp(void *dev, int *temp)
|
||||||
+{
|
+{
|
||||||
+ *temp = read_temp11(dev, 4);
|
+ *temp = read_temp11(dev, 4);
|
||||||
|
@ -84,10 +80,12 @@ index fb9e224..c54d3c8 100644
|
||||||
+{
|
+{
|
||||||
+ *temp = read_temp11(dev, 5);
|
+ *temp = read_temp11(dev, 5);
|
||||||
+ return 0;
|
+ return 0;
|
||||||
}
|
+}
|
||||||
|
+
|
||||||
static int write_temp11(struct device *dev, int nr, int index, long val)
|
static int write_temp11(struct device *dev, int nr, int index, long val)
|
||||||
@@ -1150,6 +1238,18 @@
|
{
|
||||||
|
struct {
|
||||||
|
@@ -1210,6 +1238,18 @@ static const struct attribute_group lm90
|
||||||
.attrs = lm90_temp3_attributes,
|
.attrs = lm90_temp3_attributes,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -106,7 +104,7 @@ index fb9e224..c54d3c8 100644
|
||||||
/* pec used for ADM1032 only */
|
/* pec used for ADM1032 only */
|
||||||
static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
|
static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
|
||||||
char *buf)
|
char *buf)
|
||||||
@@ -1599,6 +1699,30 @@
|
@@ -1659,6 +1699,30 @@ static int lm90_probe(struct i2c_client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +135,7 @@ index fb9e224..c54d3c8 100644
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
exit_unregister:
|
exit_unregister:
|
||||||
@@ -1674,8 +1726,11 @@
|
@@ -1674,8 +1738,11 @@ exit_restore:
|
||||||
|
|
||||||
static int lm90_remove(struct i2c_client *client)
|
static int lm90_remove(struct i2c_client *client)
|
||||||
{
|
{
|
||||||
|
|
|
@ -370,7 +370,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
|
||||||
@@ -450,48 +450,53 @@ static void tcp_options_write(__be32 *pt
|
@@ -451,48 +451,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)) {
|
||||||
|
@ -447,7 +447,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(opts->num_sack_blocks)) {
|
if (unlikely(opts->num_sack_blocks)) {
|
||||||
@@ -499,16 +504,17 @@ static void tcp_options_write(__be32 *pt
|
@@ -500,16 +505,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;
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
tp->rx_opt.dsack = 0;
|
tp->rx_opt.dsack = 0;
|
||||||
@@ -521,13 +527,14 @@ static void tcp_options_write(__be32 *pt
|
@@ -522,13 +528,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;
|
||||||
|
@ -838,7 +838,7 @@
|
||||||
|
|
||||||
--- a/net/ipv4/tcp_input.c
|
--- a/net/ipv4/tcp_input.c
|
||||||
+++ b/net/ipv4/tcp_input.c
|
+++ b/net/ipv4/tcp_input.c
|
||||||
@@ -3809,14 +3809,16 @@ static bool tcp_parse_aligned_timestamp(
|
@@ -3819,14 +3819,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||||
{
|
{
|
||||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Subject: [PATCH 061/423] config: Enable CONFIG_MEMCG, but leave it disabled
|
||||||
|
|
||||||
--- a/kernel/cgroup.c
|
--- a/kernel/cgroup.c
|
||||||
+++ b/kernel/cgroup.c
|
+++ b/kernel/cgroup.c
|
||||||
@@ -5306,7 +5306,7 @@ int __init cgroup_init_early(void)
|
@@ -5307,7 +5307,7 @@ int __init cgroup_init_early(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Subject: [PATCH 061/423] config: Enable CONFIG_MEMCG, but leave it disabled
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cgroup_init - cgroup initialization
|
* cgroup_init - cgroup initialization
|
||||||
@@ -5802,6 +5802,27 @@ static int __init cgroup_disable(char *s
|
@@ -5803,6 +5803,27 @@ static int __init cgroup_disable(char *s
|
||||||
}
|
}
|
||||||
__setup("cgroup_disable=", cgroup_disable);
|
__setup("cgroup_disable=", cgroup_disable);
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ See: https://github.com/raspberrypi/linux/issues/1064
|
||||||
else
|
else
|
||||||
--- a/drivers/leds/trigger/Kconfig
|
--- a/drivers/leds/trigger/Kconfig
|
||||||
+++ b/drivers/leds/trigger/Kconfig
|
+++ b/drivers/leds/trigger/Kconfig
|
||||||
@@ -126,4 +126,11 @@ config LEDS_TRIGGER_USBDEV
|
@@ -122,4 +122,11 @@ config LEDS_TRIGGER_USBDEV
|
||||||
This allows LEDs to be controlled by the presence/activity of
|
This allows LEDs to be controlled by the presence/activity of
|
||||||
an USB device. If unsure, say N.
|
an USB device. If unsure, say N.
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||||
|
|
||||||
--- a/mm/page_alloc.c
|
--- a/mm/page_alloc.c
|
||||||
+++ b/mm/page_alloc.c
|
+++ b/mm/page_alloc.c
|
||||||
@@ -6780,8 +6780,6 @@ int alloc_contig_range(unsigned long sta
|
@@ -6782,8 +6782,6 @@ int alloc_contig_range(unsigned long sta
|
||||||
|
|
||||||
/* Make sure the range is really isolated. */
|
/* Make sure the range is really isolated. */
|
||||||
if (test_pages_isolated(outer_start, end, false)) {
|
if (test_pages_isolated(outer_start, end, false)) {
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
From b9e91e565c8c05abec932a3d1bcb9bab81570ad6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sakari Ailus <sakari.ailus@linux.intel.com>
|
|
||||||
Date: Sun, 3 Apr 2016 16:31:03 -0300
|
|
||||||
Subject: [PATCH 317/423] videobuf2-v4l2: Verify planes array in buffer
|
|
||||||
dequeueing
|
|
||||||
|
|
||||||
commit 2c1f6951a8a82e6de0d82b1158b5e493fc6c54ab upstream.
|
|
||||||
|
|
||||||
When a buffer is being dequeued using VIDIOC_DQBUF IOCTL, the exact buffer
|
|
||||||
which will be dequeued is not known until the buffer has been removed from
|
|
||||||
the queue. The number of planes is specific to a buffer, not to the queue.
|
|
||||||
|
|
||||||
This does lead to the situation where multi-plane buffers may be requested
|
|
||||||
and queued with n planes, but VIDIOC_DQBUF IOCTL may be passed an argument
|
|
||||||
struct with fewer planes.
|
|
||||||
|
|
||||||
__fill_v4l2_buffer() however uses the number of planes from the dequeued
|
|
||||||
videobuf2 buffer, overwriting kernel memory (the m.planes array allocated
|
|
||||||
in video_usercopy() in v4l2-ioctl.c) if the user provided fewer
|
|
||||||
planes than the dequeued buffer had. Oops!
|
|
||||||
|
|
||||||
Fixes: b0e0e1f83de3 ("[media] media: videobuf2: Prepare to divide videobuf2")
|
|
||||||
|
|
||||||
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
|
|
||||||
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
|
|
||||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
||||||
---
|
|
||||||
drivers/media/v4l2-core/videobuf2-v4l2.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/media/v4l2-core/videobuf2-v4l2.c
|
|
||||||
+++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
|
|
||||||
@@ -67,6 +67,11 @@ static int __verify_planes_array(struct
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
|
|
||||||
+{
|
|
||||||
+ return __verify_planes_array(vb, pb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* __verify_length() - Verify that the bytesused value for each plane fits in
|
|
||||||
* the plane length and that the data offset doesn't exceed the bytesused value.
|
|
||||||
@@ -432,6 +437,7 @@ static int __fill_vb2_buffer(struct vb2_
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct vb2_buf_ops v4l2_buf_ops = {
|
|
||||||
+ .verify_planes_array = __verify_planes_array_core,
|
|
||||||
.fill_user_buffer = __fill_v4l2_buffer,
|
|
||||||
.fill_vb2_buffer = __fill_vb2_buffer,
|
|
||||||
.set_timestamp = __set_timestamp,
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||||
|
|
||||||
--- a/drivers/bcma/Kconfig
|
--- a/drivers/bcma/Kconfig
|
||||||
+++ b/drivers/bcma/Kconfig
|
+++ b/drivers/bcma/Kconfig
|
||||||
@@ -99,7 +99,7 @@ config BCMA_DRIVER_GMAC_CMN
|
@@ -106,7 +106,7 @@ config BCMA_DRIVER_GMAC_CMN
|
||||||
config BCMA_DRIVER_GPIO
|
config BCMA_DRIVER_GPIO
|
||||||
bool "BCMA GPIO driver"
|
bool "BCMA GPIO driver"
|
||||||
depends on BCMA && GPIOLIB
|
depends on BCMA && GPIOLIB
|
||||||
|
@ -223,7 +223,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||||
}
|
}
|
||||||
--- a/include/linux/bcma/bcma_driver_chipcommon.h
|
--- a/include/linux/bcma/bcma_driver_chipcommon.h
|
||||||
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
|
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
|
||||||
@@ -646,6 +646,7 @@ struct bcma_drv_cc {
|
@@ -649,6 +649,7 @@ struct bcma_drv_cc {
|
||||||
spinlock_t gpio_lock;
|
spinlock_t gpio_lock;
|
||||||
#ifdef CONFIG_BCMA_DRIVER_GPIO
|
#ifdef CONFIG_BCMA_DRIVER_GPIO
|
||||||
struct gpio_chip gpio;
|
struct gpio_chip gpio;
|
||||||
|
|
|
@ -359,7 +359,7 @@
|
||||||
#define BCMA_CORE_ARM_CA7 0x847
|
#define BCMA_CORE_ARM_CA7 0x847
|
||||||
#define BCMA_CORE_SYS_MEM 0x849
|
#define BCMA_CORE_SYS_MEM 0x849
|
||||||
#define BCMA_CORE_DEFAULT 0xFFF
|
#define BCMA_CORE_DEFAULT 0xFFF
|
||||||
@@ -199,6 +201,7 @@ struct bcma_host_ops {
|
@@ -200,6 +202,7 @@ struct bcma_host_ops {
|
||||||
#define BCMA_PKG_ID_BCM4707 1
|
#define BCMA_PKG_ID_BCM4707 1
|
||||||
#define BCMA_PKG_ID_BCM4708 2
|
#define BCMA_PKG_ID_BCM4708 2
|
||||||
#define BCMA_PKG_ID_BCM4709 0
|
#define BCMA_PKG_ID_BCM4709 0
|
||||||
|
@ -470,7 +470,7 @@
|
||||||
extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc);
|
extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc);
|
||||||
--- a/drivers/bcma/bcma_private.h
|
--- a/drivers/bcma/bcma_private.h
|
||||||
+++ b/drivers/bcma/bcma_private.h
|
+++ b/drivers/bcma/bcma_private.h
|
||||||
@@ -47,10 +47,6 @@ int bcma_sprom_get(struct bcma_bus *bus)
|
@@ -45,10 +45,6 @@ int bcma_sprom_get(struct bcma_bus *bus)
|
||||||
void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
|
void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
|
||||||
void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
|
void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
|
||||||
void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
|
void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
|
|
||||||
/* driver_chipcommon_b.c */
|
/* driver_chipcommon_b.c */
|
||||||
int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb);
|
int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb);
|
||||||
@@ -62,6 +58,21 @@ void bcma_pmu_init(struct bcma_drv_cc *c
|
@@ -60,6 +56,21 @@ void bcma_pmu_init(struct bcma_drv_cc *c
|
||||||
u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc);
|
u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc);
|
||||||
u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc);
|
u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||||
|
|
||||||
--- a/fs/ubifs/super.c
|
--- a/fs/ubifs/super.c
|
||||||
+++ b/fs/ubifs/super.c
|
+++ b/fs/ubifs/super.c
|
||||||
@@ -2108,8 +2108,9 @@ static struct dentry *ubifs_mount(struct file_system_type *fs_type, int flags,
|
@@ -2107,8 +2107,9 @@ static struct dentry *ubifs_mount(struct
|
||||||
*/
|
*/
|
||||||
ubi = open_ubi(name, UBI_READONLY);
|
ubi = open_ubi(name, UBI_READONLY);
|
||||||
if (IS_ERR(ubi)) {
|
if (IS_ERR(ubi)) {
|
||||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||||
|
|
||||||
--- a/fs/ubifs/super.c
|
--- a/fs/ubifs/super.c
|
||||||
+++ b/fs/ubifs/super.c
|
+++ b/fs/ubifs/super.c
|
||||||
@@ -520,19 +520,19 @@ static int init_constants_early(struct ubifs_info *c)
|
@@ -520,19 +520,19 @@ static int init_constants_early(struct u
|
||||||
c->max_write_shift = fls(c->max_write_size) - 1;
|
c->max_write_shift = fls(c->max_write_size) - 1;
|
||||||
|
|
||||||
if (c->leb_size < UBIFS_MIN_LEB_SZ) {
|
if (c->leb_size < UBIFS_MIN_LEB_SZ) {
|
||||||
|
@ -41,7 +41,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at>
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,8 +543,8 @@ static int init_constants_early(struct ubifs_info *c)
|
@@ -543,8 +543,8 @@ static int init_constants_early(struct u
|
||||||
if (c->max_write_size < c->min_io_size ||
|
if (c->max_write_size < c->min_io_size ||
|
||||||
c->max_write_size % c->min_io_size ||
|
c->max_write_size % c->min_io_size ||
|
||||||
!is_power_of_2(c->max_write_size)) {
|
!is_power_of_2(c->max_write_size)) {
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
From e86663c475d384ab5f46cb5637e9b7ad08c5c505 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
Date: Fri, 15 Jul 2016 15:42:52 -0700
|
|
||||||
Subject: [PATCH] net: bgmac: Fix infinite loop in bgmac_dma_tx_add()
|
|
||||||
|
|
||||||
Nothing is decrementing the index "i" while we are cleaning up the
|
|
||||||
fragments we could not successful transmit.
|
|
||||||
|
|
||||||
Fixes: 9cde94506eacf ("bgmac: implement scatter/gather support")
|
|
||||||
Reported-by: coverity (CID 1352048)
|
|
||||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
---
|
|
||||||
drivers/net/ethernet/broadcom/bgmac.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
@@ -207,7 +207,7 @@ err_dma:
|
|
||||||
dma_unmap_single(dma_dev, slot->dma_addr, skb_headlen(skb),
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
|
|
||||||
- while (i > 0) {
|
|
||||||
+ while (i-- > 0) {
|
|
||||||
int index = (ring->end + i) % BGMAC_TX_RING_SLOTS;
|
|
||||||
struct bgmac_slot_info *slot = &ring->slots[index];
|
|
||||||
u32 ctl1 = le32_to_cpu(ring->cpu_base[index].ctl1);
|
|
|
@ -1,41 +0,0 @@
|
||||||
From 23cd0de28cc7978130b770dd59b18ac143253351 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vineet Gupta <vgupta@synopsys.com>
|
|
||||||
Date: Tue, 28 Jun 2016 09:42:25 +0530
|
|
||||||
Subject: [PATCH] ARC: unwind: ensure that .debug_frame is generated (vs.
|
|
||||||
.eh_frame)
|
|
||||||
|
|
||||||
With recent binutils update to support dwarf CFI pseudo-ops in gas, we
|
|
||||||
now get .eh_frame vs. .debug_frame. Although the call frame info is
|
|
||||||
exactly the same in both, the CIE differs, which the current kernel
|
|
||||||
unwinder can't cope with.
|
|
||||||
|
|
||||||
This broke both the kernel unwinder as well as loadable modules (latter
|
|
||||||
because of a new unhandled relo R_ARC_32_PCREL from .rela.eh_frame in
|
|
||||||
the module loader)
|
|
||||||
|
|
||||||
The ideal solution would be to switch unwinder to .eh_frame.
|
|
||||||
For now however we can make do by just ensureing .debug_frame is
|
|
||||||
generated by removing -fasynchronous-unwind-tables
|
|
||||||
|
|
||||||
.eh_frame generated with -gdwarf-2 -fasynchronous-unwind-tables
|
|
||||||
.debug_frame generated with -gdwarf-2
|
|
||||||
|
|
||||||
Fixes STAR 9001058196
|
|
||||||
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
|
|
||||||
---
|
|
||||||
arch/arc/Makefile | 2 --
|
|
||||||
1 file changed, 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/arc/Makefile
|
|
||||||
+++ b/arch/arc/Makefile
|
|
||||||
@@ -48,8 +48,6 @@ endif
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
-cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables
|
|
||||||
-
|
|
||||||
# By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok
|
|
||||||
ifeq ($(atleast_gcc48),y)
|
|
||||||
cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2
|
|
|
@ -31,8 +31,6 @@ Cc: Christian Ruppert <christian.ruppert@alitech.com>
|
||||||
arch/arc/boot/dts/vdk_hs38_smp.dts | 1 +
|
arch/arc/boot/dts/vdk_hs38_smp.dts | 1 +
|
||||||
13 files changed, 13 insertions(+)
|
13 files changed, 13 insertions(+)
|
||||||
|
|
||||||
diff --git a/arch/arc/boot/dts/abilis_tb100_dvk.dts b/arch/arc/boot/dts/abilis_tb100_dvk.dts
|
|
||||||
index 3dd6ed9..3acf04d 100644
|
|
||||||
--- a/arch/arc/boot/dts/abilis_tb100_dvk.dts
|
--- a/arch/arc/boot/dts/abilis_tb100_dvk.dts
|
||||||
+++ b/arch/arc/boot/dts/abilis_tb100_dvk.dts
|
+++ b/arch/arc/boot/dts/abilis_tb100_dvk.dts
|
||||||
@@ -24,6 +24,7 @@
|
@@ -24,6 +24,7 @@
|
||||||
|
@ -43,8 +41,6 @@ index 3dd6ed9..3acf04d 100644
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "earlycon=uart8250,mmio32,0xff100000,9600n8 console=ttyS0,9600n8";
|
bootargs = "earlycon=uart8250,mmio32,0xff100000,9600n8 console=ttyS0,9600n8";
|
||||||
};
|
};
|
||||||
diff --git a/arch/arc/boot/dts/abilis_tb101_dvk.dts b/arch/arc/boot/dts/abilis_tb101_dvk.dts
|
|
||||||
index 1cf51c2..37d88c5 100644
|
|
||||||
--- a/arch/arc/boot/dts/abilis_tb101_dvk.dts
|
--- a/arch/arc/boot/dts/abilis_tb101_dvk.dts
|
||||||
+++ b/arch/arc/boot/dts/abilis_tb101_dvk.dts
|
+++ b/arch/arc/boot/dts/abilis_tb101_dvk.dts
|
||||||
@@ -24,6 +24,7 @@
|
@@ -24,6 +24,7 @@
|
||||||
|
@ -55,8 +51,6 @@ index 1cf51c2..37d88c5 100644
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "earlycon=uart8250,mmio32,0xff100000,9600n8 console=ttyS0,9600n8";
|
bootargs = "earlycon=uart8250,mmio32,0xff100000,9600n8 console=ttyS0,9600n8";
|
||||||
};
|
};
|
||||||
diff --git a/arch/arc/boot/dts/axs101.dts b/arch/arc/boot/dts/axs101.dts
|
|
||||||
index 3f9b058..d9b9b9d 100644
|
|
||||||
--- a/arch/arc/boot/dts/axs101.dts
|
--- a/arch/arc/boot/dts/axs101.dts
|
||||||
+++ b/arch/arc/boot/dts/axs101.dts
|
+++ b/arch/arc/boot/dts/axs101.dts
|
||||||
@@ -13,6 +13,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
|
@ -67,8 +61,6 @@ index 3f9b058..d9b9b9d 100644
|
||||||
compatible = "snps,axs101", "snps,arc-sdp";
|
compatible = "snps,axs101", "snps,arc-sdp";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
diff --git a/arch/arc/boot/dts/axs103.dts b/arch/arc/boot/dts/axs103.dts
|
|
||||||
index e6d0e31..ec7fb27 100644
|
|
||||||
--- a/arch/arc/boot/dts/axs103.dts
|
--- a/arch/arc/boot/dts/axs103.dts
|
||||||
+++ b/arch/arc/boot/dts/axs103.dts
|
+++ b/arch/arc/boot/dts/axs103.dts
|
||||||
@@ -16,6 +16,7 @@
|
@@ -16,6 +16,7 @@
|
||||||
|
@ -79,8 +71,6 @@ index e6d0e31..ec7fb27 100644
|
||||||
compatible = "snps,axs103", "snps,arc-sdp";
|
compatible = "snps,axs103", "snps,arc-sdp";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
diff --git a/arch/arc/boot/dts/axs103_idu.dts b/arch/arc/boot/dts/axs103_idu.dts
|
|
||||||
index f999fef..070c297 100644
|
|
||||||
--- a/arch/arc/boot/dts/axs103_idu.dts
|
--- a/arch/arc/boot/dts/axs103_idu.dts
|
||||||
+++ b/arch/arc/boot/dts/axs103_idu.dts
|
+++ b/arch/arc/boot/dts/axs103_idu.dts
|
||||||
@@ -16,6 +16,7 @@
|
@@ -16,6 +16,7 @@
|
||||||
|
@ -91,8 +81,6 @@ index f999fef..070c297 100644
|
||||||
compatible = "snps,axs103", "snps,arc-sdp";
|
compatible = "snps,axs103", "snps,arc-sdp";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
diff --git a/arch/arc/boot/dts/nsim_700.dts b/arch/arc/boot/dts/nsim_700.dts
|
|
||||||
index 105a001..97a9a91 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsim_700.dts
|
--- a/arch/arc/boot/dts/nsim_700.dts
|
||||||
+++ b/arch/arc/boot/dts/nsim_700.dts
|
+++ b/arch/arc/boot/dts/nsim_700.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -103,8 +91,6 @@ index 105a001..97a9a91 100644
|
||||||
compatible = "snps,nsim";
|
compatible = "snps,nsim";
|
||||||
clock-frequency = <80000000>; /* 80 MHZ */
|
clock-frequency = <80000000>; /* 80 MHZ */
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
diff --git a/arch/arc/boot/dts/nsim_hs.dts b/arch/arc/boot/dts/nsim_hs.dts
|
|
||||||
index fc81879..1d47b14 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsim_hs.dts
|
--- a/arch/arc/boot/dts/nsim_hs.dts
|
||||||
+++ b/arch/arc/boot/dts/nsim_hs.dts
|
+++ b/arch/arc/boot/dts/nsim_hs.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -115,8 +101,6 @@ index fc81879..1d47b14 100644
|
||||||
compatible = "snps,nsim_hs";
|
compatible = "snps,nsim_hs";
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
diff --git a/arch/arc/boot/dts/nsim_hs_idu.dts b/arch/arc/boot/dts/nsim_hs_idu.dts
|
|
||||||
index 46ab319..b3a69a8 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsim_hs_idu.dts
|
--- a/arch/arc/boot/dts/nsim_hs_idu.dts
|
||||||
+++ b/arch/arc/boot/dts/nsim_hs_idu.dts
|
+++ b/arch/arc/boot/dts/nsim_hs_idu.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -127,8 +111,6 @@ index 46ab319..b3a69a8 100644
|
||||||
compatible = "snps,nsim_hs";
|
compatible = "snps,nsim_hs";
|
||||||
interrupt-parent = <&core_intc>;
|
interrupt-parent = <&core_intc>;
|
||||||
|
|
||||||
diff --git a/arch/arc/boot/dts/nsimosci.dts b/arch/arc/boot/dts/nsimosci.dts
|
|
||||||
index 1c169dc..80f3c33 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsimosci.dts
|
--- a/arch/arc/boot/dts/nsimosci.dts
|
||||||
+++ b/arch/arc/boot/dts/nsimosci.dts
|
+++ b/arch/arc/boot/dts/nsimosci.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -139,8 +121,6 @@ index 1c169dc..80f3c33 100644
|
||||||
compatible = "snps,nsimosci";
|
compatible = "snps,nsimosci";
|
||||||
clock-frequency = <20000000>; /* 20 MHZ */
|
clock-frequency = <20000000>; /* 20 MHZ */
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
diff --git a/arch/arc/boot/dts/nsimosci_hs.dts b/arch/arc/boot/dts/nsimosci_hs.dts
|
|
||||||
index d64a96f..f680f1e 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsimosci_hs.dts
|
--- a/arch/arc/boot/dts/nsimosci_hs.dts
|
||||||
+++ b/arch/arc/boot/dts/nsimosci_hs.dts
|
+++ b/arch/arc/boot/dts/nsimosci_hs.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -151,8 +131,6 @@ index d64a96f..f680f1e 100644
|
||||||
compatible = "snps,nsimosci_hs";
|
compatible = "snps,nsimosci_hs";
|
||||||
clock-frequency = <20000000>; /* 20 MHZ */
|
clock-frequency = <20000000>; /* 20 MHZ */
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
diff --git a/arch/arc/boot/dts/nsimosci_hs_idu.dts b/arch/arc/boot/dts/nsimosci_hs_idu.dts
|
|
||||||
index f6bf0ca..6e46b11 100644
|
|
||||||
--- a/arch/arc/boot/dts/nsimosci_hs_idu.dts
|
--- a/arch/arc/boot/dts/nsimosci_hs_idu.dts
|
||||||
+++ b/arch/arc/boot/dts/nsimosci_hs_idu.dts
|
+++ b/arch/arc/boot/dts/nsimosci_hs_idu.dts
|
||||||
@@ -10,6 +10,7 @@
|
@@ -10,6 +10,7 @@
|
||||||
|
@ -163,8 +141,6 @@ index f6bf0ca..6e46b11 100644
|
||||||
compatible = "snps,nsimosci_hs";
|
compatible = "snps,nsimosci_hs";
|
||||||
clock-frequency = <5000000>; /* 5 MHZ */
|
clock-frequency = <5000000>; /* 5 MHZ */
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
diff --git a/arch/arc/boot/dts/vdk_hs38.dts b/arch/arc/boot/dts/vdk_hs38.dts
|
|
||||||
index 5d803dd..3c51103 100644
|
|
||||||
--- a/arch/arc/boot/dts/vdk_hs38.dts
|
--- a/arch/arc/boot/dts/vdk_hs38.dts
|
||||||
+++ b/arch/arc/boot/dts/vdk_hs38.dts
|
+++ b/arch/arc/boot/dts/vdk_hs38.dts
|
||||||
@@ -13,6 +13,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
|
@ -175,8 +151,6 @@ index 5d803dd..3c51103 100644
|
||||||
compatible = "snps,axs103";
|
compatible = "snps,axs103";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
diff --git a/arch/arc/boot/dts/vdk_hs38_smp.dts b/arch/arc/boot/dts/vdk_hs38_smp.dts
|
|
||||||
index 031a5bc..0054684 100644
|
|
||||||
--- a/arch/arc/boot/dts/vdk_hs38_smp.dts
|
--- a/arch/arc/boot/dts/vdk_hs38_smp.dts
|
||||||
+++ b/arch/arc/boot/dts/vdk_hs38_smp.dts
|
+++ b/arch/arc/boot/dts/vdk_hs38_smp.dts
|
||||||
@@ -13,6 +13,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
|
@ -187,6 +161,3 @@ index 031a5bc..0054684 100644
|
||||||
compatible = "snps,axs103";
|
compatible = "snps,axs103";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
|
|
|
@ -1,76 +0,0 @@
|
||||||
From 75ff39ccc1bd5d3c455b6822ab09e533c551f758 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Eric Dumazet <edumazet@google.com>
|
|
||||||
Date: Sun, 10 Jul 2016 10:04:02 +0200
|
|
||||||
Subject: [PATCH] tcp: make challenge acks less predictable
|
|
||||||
|
|
||||||
Yue Cao claims that current host rate limiting of challenge ACKS
|
|
||||||
(RFC 5961) could leak enough information to allow a patient attacker
|
|
||||||
to hijack TCP sessions. He will soon provide details in an academic
|
|
||||||
paper.
|
|
||||||
|
|
||||||
This patch increases the default limit from 100 to 1000, and adds
|
|
||||||
some randomization so that the attacker can no longer hijack
|
|
||||||
sessions without spending a considerable amount of probes.
|
|
||||||
|
|
||||||
Based on initial analysis and patch from Linus.
|
|
||||||
|
|
||||||
Note that we also have per socket rate limiting, so it is tempting
|
|
||||||
to remove the host limit in the future.
|
|
||||||
|
|
||||||
v2: randomize the count of challenge acks per second, not the period.
|
|
||||||
|
|
||||||
Fixes: 282f23c6ee34 ("tcp: implement RFC 5961 3.2")
|
|
||||||
Reported-by: Yue Cao <ycao009@ucr.edu>
|
|
||||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
|
||||||
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
||||||
Cc: Yuchung Cheng <ycheng@google.com>
|
|
||||||
Cc: Neal Cardwell <ncardwell@google.com>
|
|
||||||
Acked-by: Neal Cardwell <ncardwell@google.com>
|
|
||||||
Acked-by: Yuchung Cheng <ycheng@google.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
---
|
|
||||||
net/ipv4/tcp_input.c | 15 ++++++++++-----
|
|
||||||
1 file changed, 10 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/ipv4/tcp_input.c
|
|
||||||
+++ b/net/ipv4/tcp_input.c
|
|
||||||
@@ -89,7 +89,7 @@ int sysctl_tcp_adv_win_scale __read_most
|
|
||||||
EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);
|
|
||||||
|
|
||||||
/* rfc5961 challenge ack rate limiting */
|
|
||||||
-int sysctl_tcp_challenge_ack_limit = 100;
|
|
||||||
+int sysctl_tcp_challenge_ack_limit = 1000;
|
|
||||||
|
|
||||||
int sysctl_tcp_stdurg __read_mostly;
|
|
||||||
int sysctl_tcp_rfc1337 __read_mostly;
|
|
||||||
@@ -3427,7 +3427,7 @@ static void tcp_send_challenge_ack(struc
|
|
||||||
static u32 challenge_timestamp;
|
|
||||||
static unsigned int challenge_count;
|
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
|
||||||
- u32 now;
|
|
||||||
+ u32 count, now;
|
|
||||||
|
|
||||||
/* First check our per-socket dupack rate limit. */
|
|
||||||
if (tcp_oow_rate_limited(sock_net(sk), skb,
|
|
||||||
@@ -3435,13 +3435,18 @@ static void tcp_send_challenge_ack(struc
|
|
||||||
&tp->last_oow_ack_time))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- /* Then check the check host-wide RFC 5961 rate limit. */
|
|
||||||
+ /* Then check host-wide RFC 5961 rate limit. */
|
|
||||||
now = jiffies / HZ;
|
|
||||||
if (now != challenge_timestamp) {
|
|
||||||
+ u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1;
|
|
||||||
+
|
|
||||||
challenge_timestamp = now;
|
|
||||||
- challenge_count = 0;
|
|
||||||
+ WRITE_ONCE(challenge_count, half +
|
|
||||||
+ prandom_u32_max(sysctl_tcp_challenge_ack_limit));
|
|
||||||
}
|
|
||||||
- if (++challenge_count <= sysctl_tcp_challenge_ack_limit) {
|
|
||||||
+ count = READ_ONCE(challenge_count);
|
|
||||||
+ if (count > 0) {
|
|
||||||
+ WRITE_ONCE(challenge_count, count - 1);
|
|
||||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK);
|
|
||||||
tcp_send_ack(sk);
|
|
||||||
}
|
|
|
@ -92,7 +92,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||||
else if (ticks > maxt)
|
else if (ticks > maxt)
|
||||||
--- a/include/linux/bcma/bcma.h
|
--- a/include/linux/bcma/bcma.h
|
||||||
+++ b/include/linux/bcma/bcma.h
|
+++ b/include/linux/bcma/bcma.h
|
||||||
@@ -203,6 +203,9 @@ struct bcma_host_ops {
|
@@ -204,6 +204,9 @@ struct bcma_host_ops {
|
||||||
#define BCMA_PKG_ID_BCM4709 0
|
#define BCMA_PKG_ID_BCM4709 0
|
||||||
#define BCMA_CHIP_ID_BCM47094 53030
|
#define BCMA_CHIP_ID_BCM47094 53030
|
||||||
#define BCMA_CHIP_ID_BCM53018 53018
|
#define BCMA_CHIP_ID_BCM53018 53018
|
||||||
|
|
|
@ -109,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
config MODULES_TREE_LOOKUP
|
config MODULES_TREE_LOOKUP
|
||||||
--- a/kernel/module.c
|
--- a/kernel/module.c
|
||||||
+++ b/kernel/module.c
|
+++ b/kernel/module.c
|
||||||
@@ -2859,6 +2859,7 @@ static struct module *setup_load_info(st
|
@@ -2864,6 +2864,7 @@ static struct module *setup_load_info(st
|
||||||
|
|
||||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||||
{
|
{
|
||||||
|
@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
const char *modmagic = get_modinfo(info, "vermagic");
|
const char *modmagic = get_modinfo(info, "vermagic");
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -2884,6 +2885,7 @@ static int check_modinfo(struct module *
|
@@ -2889,6 +2890,7 @@ static int check_modinfo(struct module *
|
||||||
pr_warn("%s: module is from the staging directory, the quality "
|
pr_warn("%s: module is from the staging directory, the quality "
|
||||||
"is unknown, you have been warned.\n", mod->name);
|
"is unknown, you have been warned.\n", mod->name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
VMLINUX_SYMBOL(__ctors_end) = .;
|
VMLINUX_SYMBOL(__ctors_end) = .;
|
||||||
#else
|
#else
|
||||||
#define KERNEL_CTORS()
|
#define KERNEL_CTORS()
|
||||||
@@ -552,7 +553,7 @@
|
@@ -556,7 +557,7 @@
|
||||||
#define SBSS(sbss_align) \
|
#define SBSS(sbss_align) \
|
||||||
. = ALIGN(sbss_align); \
|
. = ALIGN(sbss_align); \
|
||||||
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \
|
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \
|
||||||
|
@ -333,7 +333,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
*(.scommon) \
|
*(.scommon) \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,7 +571,7 @@
|
@@ -574,7 +575,7 @@
|
||||||
BSS_FIRST_SECTIONS \
|
BSS_FIRST_SECTIONS \
|
||||||
*(.bss..page_aligned) \
|
*(.bss..page_aligned) \
|
||||||
*(.dynbss) \
|
*(.dynbss) \
|
||||||
|
@ -342,7 +342,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
*(COMMON) \
|
*(COMMON) \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -619,7 +620,7 @@
|
@@ -623,7 +624,7 @@
|
||||||
. = ALIGN(8); \
|
. = ALIGN(8); \
|
||||||
__bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \
|
__bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \
|
||||||
VMLINUX_SYMBOL(__start___bug_table) = .; \
|
VMLINUX_SYMBOL(__start___bug_table) = .; \
|
||||||
|
@ -351,7 +351,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
VMLINUX_SYMBOL(__stop___bug_table) = .; \
|
VMLINUX_SYMBOL(__stop___bug_table) = .; \
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -631,7 +632,7 @@
|
@@ -635,7 +636,7 @@
|
||||||
. = ALIGN(4); \
|
. = ALIGN(4); \
|
||||||
.tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \
|
.tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \
|
||||||
VMLINUX_SYMBOL(__tracedata_start) = .; \
|
VMLINUX_SYMBOL(__tracedata_start) = .; \
|
||||||
|
@ -360,7 +360,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
VMLINUX_SYMBOL(__tracedata_end) = .; \
|
VMLINUX_SYMBOL(__tracedata_end) = .; \
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -648,17 +649,17 @@
|
@@ -652,17 +653,17 @@
|
||||||
#define INIT_SETUP(initsetup_align) \
|
#define INIT_SETUP(initsetup_align) \
|
||||||
. = ALIGN(initsetup_align); \
|
. = ALIGN(initsetup_align); \
|
||||||
VMLINUX_SYMBOL(__setup_start) = .; \
|
VMLINUX_SYMBOL(__setup_start) = .; \
|
||||||
|
@ -382,7 +382,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
INIT_CALLS_LEVEL(0) \
|
INIT_CALLS_LEVEL(0) \
|
||||||
INIT_CALLS_LEVEL(1) \
|
INIT_CALLS_LEVEL(1) \
|
||||||
INIT_CALLS_LEVEL(2) \
|
INIT_CALLS_LEVEL(2) \
|
||||||
@@ -672,21 +673,21 @@
|
@@ -676,21 +677,21 @@
|
||||||
|
|
||||||
#define CON_INITCALL \
|
#define CON_INITCALL \
|
||||||
VMLINUX_SYMBOL(__con_initcall_start) = .; \
|
VMLINUX_SYMBOL(__con_initcall_start) = .; \
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
/* __*init sections */ \
|
/* __*init sections */ \
|
||||||
@@ -706,6 +716,8 @@
|
@@ -710,6 +720,8 @@
|
||||||
EXIT_TEXT \
|
EXIT_TEXT \
|
||||||
EXIT_DATA \
|
EXIT_DATA \
|
||||||
EXIT_CALL \
|
EXIT_CALL \
|
||||||
|
|
|
@ -40,7 +40,7 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
|
||||||
;----------------------------------------------------------------
|
;----------------------------------------------------------------
|
||||||
--- a/arch/arc/kernel/setup.c
|
--- a/arch/arc/kernel/setup.c
|
||||||
+++ b/arch/arc/kernel/setup.c
|
+++ b/arch/arc/kernel/setup.c
|
||||||
@@ -370,6 +370,8 @@ static inline int is_kernel(unsigned lon
|
@@ -366,6 +366,8 @@ static inline int is_kernel(unsigned lon
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ARC_UBOOT_SUPPORT
|
#ifdef CONFIG_ARC_UBOOT_SUPPORT
|
||||||
@@ -383,7 +385,7 @@ void __init setup_arch(char **cmdline_p)
|
@@ -379,7 +381,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* No, so try the embedded one */
|
/* No, so try the embedded one */
|
||||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
--- a/drivers/mtd/ubi/build.c
|
--- a/drivers/mtd/ubi/build.c
|
||||||
+++ b/drivers/mtd/ubi/build.c
|
+++ b/drivers/mtd/ubi/build.c
|
||||||
@@ -1200,6 +1200,49 @@ static struct mtd_info * __init open_mtd
|
@@ -1203,6 +1203,49 @@ static struct mtd_info * __init open_mtd
|
||||||
return mtd;
|
return mtd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
static int __init ubi_init(void)
|
static int __init ubi_init(void)
|
||||||
{
|
{
|
||||||
int err, i, k;
|
int err, i, k;
|
||||||
@@ -1283,6 +1326,12 @@ static int __init ubi_init(void)
|
@@ -1286,6 +1329,12 @@ static int __init ubi_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -2179,7 +2179,7 @@ static inline int pskb_network_may_pull(
|
@@ -2180,7 +2180,7 @@ static inline int pskb_network_may_pull(
|
||||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||||
*/
|
*/
|
||||||
#ifndef NET_SKB_PAD
|
#ifndef NET_SKB_PAD
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
*/
|
*/
|
||||||
--- a/include/linux/skbuff.h
|
--- a/include/linux/skbuff.h
|
||||||
+++ b/include/linux/skbuff.h
|
+++ b/include/linux/skbuff.h
|
||||||
@@ -2210,6 +2210,10 @@ static inline int pskb_trim(struct sk_bu
|
@@ -2211,6 +2211,10 @@ static inline int pskb_trim(struct sk_bu
|
||||||
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
/**
|
/**
|
||||||
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
||||||
* @skb: buffer to alter
|
* @skb: buffer to alter
|
||||||
@@ -2314,16 +2318,6 @@ static inline struct sk_buff *dev_alloc_
|
@@ -2315,16 +2319,6 @@ static inline struct sk_buff *dev_alloc_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,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
|
||||||
@@ -4774,6 +4787,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
@@ -4780,6 +4793,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
||||||
if (tag < 0)
|
if (tag < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,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;
|
||||||
@@ -5671,6 +5687,9 @@ struct ata_port *ata_port_alloc(struct a
|
@@ -5677,6 +5693,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
|
||||||
|
@ -89,7 +89,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
ata_sff_port_init(ap);
|
ata_sff_port_init(ap);
|
||||||
|
|
||||||
return ap;
|
return ap;
|
||||||
@@ -5692,6 +5711,12 @@ static void ata_host_release(struct devi
|
@@ -5698,6 +5717,12 @@ static void ata_host_release(struct devi
|
||||||
|
|
||||||
kfree(ap->pmp_link);
|
kfree(ap->pmp_link);
|
||||||
kfree(ap->slave_link);
|
kfree(ap->slave_link);
|
||||||
|
@ -102,7 +102,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
kfree(ap);
|
kfree(ap);
|
||||||
host->ports[i] = NULL;
|
host->ports[i] = NULL;
|
||||||
}
|
}
|
||||||
@@ -6138,7 +6163,23 @@ int ata_host_register(struct ata_host *h
|
@@ -6144,7 +6169,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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,6 @@ Signed-off-by: Nitheesh Sekar <nsekar@codeaurora.org>
|
||||||
3 files changed, 188 insertions(+)
|
3 files changed, 188 insertions(+)
|
||||||
create mode 100644 drivers/usb/dwc3/dwc3-of-simple.c
|
create mode 100644 drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
|
|
||||||
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
|
|
||||||
index 5a42c45..070e704 100644
|
|
||||||
--- a/drivers/usb/dwc3/Kconfig
|
--- a/drivers/usb/dwc3/Kconfig
|
||||||
+++ b/drivers/usb/dwc3/Kconfig
|
+++ b/drivers/usb/dwc3/Kconfig
|
||||||
@@ -87,6 +87,15 @@ config USB_DWC3_KEYSTONE
|
@@ -87,6 +87,15 @@ config USB_DWC3_KEYSTONE
|
||||||
|
@ -44,20 +42,15 @@ index 5a42c45..070e704 100644
|
||||||
config USB_DWC3_ST
|
config USB_DWC3_ST
|
||||||
tristate "STMicroelectronics Platforms"
|
tristate "STMicroelectronics Platforms"
|
||||||
depends on ARCH_STI && OF
|
depends on ARCH_STI && OF
|
||||||
diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
|
|
||||||
index acc951d..6491f9b 100644
|
|
||||||
--- a/drivers/usb/dwc3/Makefile
|
--- a/drivers/usb/dwc3/Makefile
|
||||||
+++ b/drivers/usb/dwc3/Makefile
|
+++ b/drivers/usb/dwc3/Makefile
|
||||||
@@ -37,5 +37,6 @@ obj-$(CONFIG_USB_DWC3_OMAP) += dwc3-omap.o
|
@@ -37,5 +37,6 @@ obj-$(CONFIG_USB_DWC3_OMAP) += dwc3-oma
|
||||||
obj-$(CONFIG_USB_DWC3_EXYNOS) += dwc3-exynos.o
|
obj-$(CONFIG_USB_DWC3_EXYNOS) += dwc3-exynos.o
|
||||||
obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o
|
obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o
|
||||||
obj-$(CONFIG_USB_DWC3_KEYSTONE) += dwc3-keystone.o
|
obj-$(CONFIG_USB_DWC3_KEYSTONE) += dwc3-keystone.o
|
||||||
+obj-$(CONFIG_USB_DWC3_OF_SIMPLE) += dwc3-of-simple.o
|
+obj-$(CONFIG_USB_DWC3_OF_SIMPLE) += dwc3-of-simple.o
|
||||||
obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
|
obj-$(CONFIG_USB_DWC3_QCOM) += dwc3-qcom.o
|
||||||
obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
|
obj-$(CONFIG_USB_DWC3_ST) += dwc3-st.o
|
||||||
diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..60c4c5a
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
@@ -0,0 +1,178 @@
|
@@ -0,0 +1,178 @@
|
||||||
|
@ -239,6 +232,3 @@ index 0000000..60c4c5a
|
||||||
+MODULE_LICENSE("GPL v2");
|
+MODULE_LICENSE("GPL v2");
|
||||||
+MODULE_DESCRIPTION("DesignWare USB3 OF Simple Glue Layer");
|
+MODULE_DESCRIPTION("DesignWare USB3 OF Simple Glue Layer");
|
||||||
+MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
|
+MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,9 @@ Signed-off-by: Nitheesh Sekar <nsekar@codeaurora.org>
|
||||||
drivers/usb/dwc3/dwc3-of-simple.c | 2 ++
|
drivers/usb/dwc3/dwc3-of-simple.c | 2 ++
|
||||||
1 file changed, 2 insertions(+)
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
|
|
||||||
index 60c4c5a..9c9f741 100644
|
|
||||||
--- a/drivers/usb/dwc3/dwc3-of-simple.c
|
--- a/drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
@@ -122,6 +122,7 @@ static int dwc3_of_simple_remove(struct platform_device *pdev)
|
@@ -122,6 +122,7 @@ static int dwc3_of_simple_remove(struct
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +26,7 @@ index 60c4c5a..9c9f741 100644
|
||||||
static int dwc3_of_simple_runtime_suspend(struct device *dev)
|
static int dwc3_of_simple_runtime_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct dwc3_of_simple *simple = dev_get_drvdata(dev);
|
struct dwc3_of_simple *simple = dev_get_drvdata(dev);
|
||||||
@@ -150,6 +151,7 @@ static int dwc3_of_simple_runtime_resume(struct device *dev)
|
@@ -150,6 +151,7 @@ static int dwc3_of_simple_runtime_resume
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +34,3 @@ index 60c4c5a..9c9f741 100644
|
||||||
|
|
||||||
static const struct dev_pm_ops dwc3_of_simple_dev_pm_ops = {
|
static const struct dev_pm_ops dwc3_of_simple_dev_pm_ops = {
|
||||||
SET_RUNTIME_PM_OPS(dwc3_of_simple_runtime_suspend,
|
SET_RUNTIME_PM_OPS(dwc3_of_simple_runtime_suspend,
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,9 @@ Signed-off-by: Nitheesh Sekar <nsekar@codeaurora.org>
|
||||||
drivers/usb/dwc3/dwc3-of-simple.c | 9 +++++----
|
drivers/usb/dwc3/dwc3-of-simple.c | 9 +++++----
|
||||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
|
|
||||||
index 9c9f741..9743353 100644
|
|
||||||
--- a/drivers/usb/dwc3/dwc3-of-simple.c
|
--- a/drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
|
||||||
@@ -42,6 +42,7 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
|
@@ -42,6 +42,7 @@ static int dwc3_of_simple_probe(struct p
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
|
|
||||||
|
@ -31,7 +29,7 @@ index 9c9f741..9743353 100644
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -49,11 +50,11 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
|
@@ -49,11 +50,11 @@ static int dwc3_of_simple_probe(struct p
|
||||||
if (!simple)
|
if (!simple)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -47,6 +45,3 @@ index 9c9f741..9743353 100644
|
||||||
|
|
||||||
simple->clks = devm_kcalloc(dev, simple->num_clocks,
|
simple->clks = devm_kcalloc(dev, simple->num_clocks,
|
||||||
sizeof(struct clk *), GFP_KERNEL);
|
sizeof(struct clk *), GFP_KERNEL);
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/phy/Kconfig
|
--- a/drivers/phy/Kconfig
|
||||||
+++ b/drivers/phy/Kconfig
|
+++ b/drivers/phy/Kconfig
|
||||||
@@ -390,4 +390,15 @@
|
@@ -390,4 +390,15 @@ config PHY_CYGNUS_PCIE
|
||||||
Enable this to support the Broadcom Cygnus PCIe PHY.
|
Enable this to support the Broadcom Cygnus PCIe PHY.
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
endmenu
|
endmenu
|
||||||
--- a/drivers/phy/Makefile
|
--- a/drivers/phy/Makefile
|
||||||
+++ b/drivers/phy/Makefile
|
+++ b/drivers/phy/Makefile
|
||||||
@@ -48,3 +48,4 @@ obj-$(CONFIG_PHY_TUSB1210) +=
|
@@ -48,3 +48,4 @@ obj-$(CONFIG_PHY_TUSB1210) += phy-tusb1
|
||||||
obj-$(CONFIG_PHY_BRCMSTB_SATA) += phy-brcmstb-sata.o
|
obj-$(CONFIG_PHY_BRCMSTB_SATA) += phy-brcmstb-sata.o
|
||||||
obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o
|
obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o
|
||||||
obj-$(CONFIG_PHY_CYGNUS_PCIE) += phy-bcm-cygnus-pcie.o
|
obj-$(CONFIG_PHY_CYGNUS_PCIE) += phy-bcm-cygnus-pcie.o
|
||||||
|
|
|
@ -14,8 +14,6 @@ Change-Id: If3cdd924355e037d77dc8201a72895fac0461aa5
|
||||||
drivers/spi/spi-qup.c | 96 +++++++++++++++++++--------------------------------
|
drivers/spi/spi-qup.c | 96 +++++++++++++++++++--------------------------------
|
||||||
1 file changed, 36 insertions(+), 60 deletions(-)
|
1 file changed, 36 insertions(+), 60 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index eb2cb8c..714fd4e 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -150,13 +150,20 @@ struct spi_qup {
|
@@ -150,13 +150,20 @@ struct spi_qup {
|
||||||
|
@ -41,7 +39,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
static inline bool spi_qup_is_valid_state(struct spi_qup *controller)
|
static inline bool spi_qup_is_valid_state(struct spi_qup *controller)
|
||||||
{
|
{
|
||||||
u32 opstate = readl_relaxed(controller->base + QUP_STATE);
|
u32 opstate = readl_relaxed(controller->base + QUP_STATE);
|
||||||
@@ -427,7 +434,7 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -427,7 +434,7 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
error = -EIO;
|
error = -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +48,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
if (opflags & QUP_OP_IN_SERVICE_FLAG)
|
if (opflags & QUP_OP_IN_SERVICE_FLAG)
|
||||||
spi_qup_fifo_read(controller, xfer);
|
spi_qup_fifo_read(controller, xfer);
|
||||||
|
|
||||||
@@ -446,43 +453,11 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -446,43 +453,11 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +93,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
int ret, n_words;
|
int ret, n_words;
|
||||||
|
|
||||||
if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) {
|
if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) {
|
||||||
@@ -503,24 +478,22 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
|
@@ -503,24 +478,22 @@ static int spi_qup_io_config(struct spi_
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +126,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
|
||||||
writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
|
||||||
|
|
||||||
@@ -541,19 +514,26 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
|
@@ -541,19 +514,26 @@ static int spi_qup_io_config(struct spi_
|
||||||
|
|
||||||
writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
|
||||||
}
|
}
|
||||||
|
@ -158,7 +156,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
|
|
||||||
writel_relaxed(iomode, controller->base + QUP_IO_M_MODES);
|
writel_relaxed(iomode, controller->base + QUP_IO_M_MODES);
|
||||||
|
|
||||||
@@ -594,7 +574,7 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
|
@@ -594,7 +574,7 @@ static int spi_qup_io_config(struct spi_
|
||||||
config |= xfer->bits_per_word - 1;
|
config |= xfer->bits_per_word - 1;
|
||||||
config |= QUP_CONFIG_SPI_MODE;
|
config |= QUP_CONFIG_SPI_MODE;
|
||||||
|
|
||||||
|
@ -167,7 +165,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
if (!xfer->tx_buf)
|
if (!xfer->tx_buf)
|
||||||
config |= QUP_CONFIG_NO_OUTPUT;
|
config |= QUP_CONFIG_NO_OUTPUT;
|
||||||
if (!xfer->rx_buf)
|
if (!xfer->rx_buf)
|
||||||
@@ -612,7 +592,7 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
|
@@ -612,7 +592,7 @@ static int spi_qup_io_config(struct spi_
|
||||||
* status change in BAM mode
|
* status change in BAM mode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -176,7 +174,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
mask = QUP_OP_IN_SERVICE_FLAG | QUP_OP_OUT_SERVICE_FLAG;
|
mask = QUP_OP_IN_SERVICE_FLAG | QUP_OP_OUT_SERVICE_FLAG;
|
||||||
|
|
||||||
writel_relaxed(mask, controller->base + QUP_OPERATIONAL_MASK);
|
writel_relaxed(mask, controller->base + QUP_OPERATIONAL_MASK);
|
||||||
@@ -646,7 +626,7 @@ static int spi_qup_transfer_one(struct spi_master *master,
|
@@ -646,7 +626,7 @@ static int spi_qup_transfer_one(struct s
|
||||||
controller->tx_bytes = 0;
|
controller->tx_bytes = 0;
|
||||||
spin_unlock_irqrestore(&controller->lock, flags);
|
spin_unlock_irqrestore(&controller->lock, flags);
|
||||||
|
|
||||||
|
@ -194,7 +192,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
spi_qup_dma_terminate(master, xfer);
|
spi_qup_dma_terminate(master, xfer);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -681,9 +661,7 @@ static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,
|
@@ -681,9 +661,7 @@ static bool spi_qup_can_dma(struct spi_m
|
||||||
{
|
{
|
||||||
struct spi_qup *qup = spi_master_get_devdata(master);
|
struct spi_qup *qup = spi_master_get_devdata(master);
|
||||||
size_t dma_align = dma_get_cache_alignment();
|
size_t dma_align = dma_get_cache_alignment();
|
||||||
|
@ -205,7 +203,7 @@ index eb2cb8c..714fd4e 100644
|
||||||
|
|
||||||
if (xfer->rx_buf && (xfer->len % qup->in_blk_sz ||
|
if (xfer->rx_buf && (xfer->len % qup->in_blk_sz ||
|
||||||
IS_ERR_OR_NULL(master->dma_rx) ||
|
IS_ERR_OR_NULL(master->dma_rx) ||
|
||||||
@@ -695,12 +673,10 @@ static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,
|
@@ -695,12 +673,10 @@ static bool spi_qup_can_dma(struct spi_m
|
||||||
!IS_ALIGNED((size_t)xfer->tx_buf, dma_align)))
|
!IS_ALIGNED((size_t)xfer->tx_buf, dma_align)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -220,6 +218,3 @@ index eb2cb8c..714fd4e 100644
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,9 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||||
drivers/spi/spi-qup.c | 3 ++-
|
drivers/spi/spi-qup.c | 3 ++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index 714fd4e..fe629f2 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -447,7 +447,8 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -447,7 +447,8 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
controller->xfer = xfer;
|
controller->xfer = xfer;
|
||||||
spin_unlock_irqrestore(&controller->lock, flags);
|
spin_unlock_irqrestore(&controller->lock, flags);
|
||||||
|
|
||||||
|
@ -30,6 +28,3 @@ index 714fd4e..fe629f2 100644
|
||||||
complete(&controller->done);
|
complete(&controller->done);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,6 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||||
drivers/spi/spi-qup.c | 95 ++++++++++++++++++++++++++++++++++-----------------
|
drivers/spi/spi-qup.c | 95 ++++++++++++++++++++++++++++++++++-----------------
|
||||||
1 file changed, 63 insertions(+), 32 deletions(-)
|
1 file changed, 63 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index fe629f2..089c5e8 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -143,6 +143,7 @@ struct spi_qup {
|
@@ -143,6 +143,7 @@ struct spi_qup {
|
||||||
|
@ -26,7 +24,7 @@ index fe629f2..089c5e8 100644
|
||||||
int error;
|
int error;
|
||||||
int w_size; /* bytes per SPI word */
|
int w_size; /* bytes per SPI word */
|
||||||
int n_words;
|
int n_words;
|
||||||
@@ -285,16 +286,16 @@ static void spi_qup_fifo_write(struct spi_qup *controller,
|
@@ -285,16 +286,16 @@ static void spi_qup_fifo_write(struct sp
|
||||||
|
|
||||||
static void spi_qup_dma_done(void *data)
|
static void spi_qup_dma_done(void *data)
|
||||||
{
|
{
|
||||||
|
@ -47,7 +45,7 @@ index fe629f2..089c5e8 100644
|
||||||
unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE;
|
unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE;
|
||||||
struct dma_async_tx_descriptor *desc;
|
struct dma_async_tx_descriptor *desc;
|
||||||
struct scatterlist *sgl;
|
struct scatterlist *sgl;
|
||||||
@@ -313,11 +314,11 @@ static int spi_qup_prep_sg(struct spi_master *master, struct spi_transfer *xfer,
|
@@ -313,11 +314,11 @@ static int spi_qup_prep_sg(struct spi_ma
|
||||||
}
|
}
|
||||||
|
|
||||||
desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);
|
desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);
|
||||||
|
@ -62,7 +60,7 @@ index fe629f2..089c5e8 100644
|
||||||
|
|
||||||
cookie = dmaengine_submit(desc);
|
cookie = dmaengine_submit(desc);
|
||||||
|
|
||||||
@@ -333,18 +334,29 @@ static void spi_qup_dma_terminate(struct spi_master *master,
|
@@ -333,18 +334,29 @@ static void spi_qup_dma_terminate(struct
|
||||||
dmaengine_terminate_all(master->dma_rx);
|
dmaengine_terminate_all(master->dma_rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +93,7 @@ index fe629f2..089c5e8 100644
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@@ -352,17 +364,26 @@ static int spi_qup_do_dma(struct spi_master *master, struct spi_transfer *xfer)
|
@@ -352,17 +364,26 @@ static int spi_qup_do_dma(struct spi_mas
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xfer->tx_buf) {
|
if (xfer->tx_buf) {
|
||||||
|
@ -125,7 +123,7 @@ index fe629f2..089c5e8 100644
|
||||||
{
|
{
|
||||||
struct spi_qup *qup = spi_master_get_devdata(master);
|
struct spi_qup *qup = spi_master_get_devdata(master);
|
||||||
int ret;
|
int ret;
|
||||||
@@ -382,6 +403,15 @@ static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer)
|
@@ -382,6 +403,15 @@ static int spi_qup_do_pio(struct spi_mas
|
||||||
if (qup->mode == QUP_IO_M_MODE_FIFO)
|
if (qup->mode == QUP_IO_M_MODE_FIFO)
|
||||||
spi_qup_fifo_write(qup, xfer);
|
spi_qup_fifo_write(qup, xfer);
|
||||||
|
|
||||||
|
@ -141,7 +139,7 @@ index fe629f2..089c5e8 100644
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,7 +460,6 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -430,7 +460,6 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
dev_warn(controller->dev, "CLK_OVER_RUN\n");
|
dev_warn(controller->dev, "CLK_OVER_RUN\n");
|
||||||
if (spi_err & SPI_ERROR_CLK_UNDER_RUN)
|
if (spi_err & SPI_ERROR_CLK_UNDER_RUN)
|
||||||
dev_warn(controller->dev, "CLK_UNDER_RUN\n");
|
dev_warn(controller->dev, "CLK_UNDER_RUN\n");
|
||||||
|
@ -149,7 +147,7 @@ index fe629f2..089c5e8 100644
|
||||||
error = -EIO;
|
error = -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -619,6 +648,7 @@ static int spi_qup_transfer_one(struct spi_master *master,
|
@@ -619,6 +648,7 @@ static int spi_qup_transfer_one(struct s
|
||||||
timeout = 100 * msecs_to_jiffies(timeout);
|
timeout = 100 * msecs_to_jiffies(timeout);
|
||||||
|
|
||||||
reinit_completion(&controller->done);
|
reinit_completion(&controller->done);
|
||||||
|
@ -157,7 +155,7 @@ index fe629f2..089c5e8 100644
|
||||||
|
|
||||||
spin_lock_irqsave(&controller->lock, flags);
|
spin_lock_irqsave(&controller->lock, flags);
|
||||||
controller->xfer = xfer;
|
controller->xfer = xfer;
|
||||||
@@ -628,21 +658,13 @@ static int spi_qup_transfer_one(struct spi_master *master,
|
@@ -628,21 +658,13 @@ static int spi_qup_transfer_one(struct s
|
||||||
spin_unlock_irqrestore(&controller->lock, flags);
|
spin_unlock_irqrestore(&controller->lock, flags);
|
||||||
|
|
||||||
if (spi_qup_is_dma_xfer(controller->mode))
|
if (spi_qup_is_dma_xfer(controller->mode))
|
||||||
|
@ -181,7 +179,7 @@ index fe629f2..089c5e8 100644
|
||||||
exit:
|
exit:
|
||||||
spi_qup_set_state(controller, QUP_STATE_RESET);
|
spi_qup_set_state(controller, QUP_STATE_RESET);
|
||||||
spin_lock_irqsave(&controller->lock, flags);
|
spin_lock_irqsave(&controller->lock, flags);
|
||||||
@@ -664,15 +686,23 @@ static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,
|
@@ -664,15 +686,23 @@ static bool spi_qup_can_dma(struct spi_m
|
||||||
size_t dma_align = dma_get_cache_alignment();
|
size_t dma_align = dma_get_cache_alignment();
|
||||||
int n_words;
|
int n_words;
|
||||||
|
|
||||||
|
@ -213,7 +211,7 @@ index fe629f2..089c5e8 100644
|
||||||
|
|
||||||
n_words = xfer->len / DIV_ROUND_UP(xfer->bits_per_word, 8);
|
n_words = xfer->len / DIV_ROUND_UP(xfer->bits_per_word, 8);
|
||||||
if (n_words <= (qup->in_fifo_sz / sizeof(u32)))
|
if (n_words <= (qup->in_fifo_sz / sizeof(u32)))
|
||||||
@@ -875,6 +905,7 @@ static int spi_qup_probe(struct platform_device *pdev)
|
@@ -875,6 +905,7 @@ static int spi_qup_probe(struct platform
|
||||||
|
|
||||||
spin_lock_init(&controller->lock);
|
spin_lock_init(&controller->lock);
|
||||||
init_completion(&controller->done);
|
init_completion(&controller->done);
|
||||||
|
@ -221,6 +219,3 @@ index fe629f2..089c5e8 100644
|
||||||
|
|
||||||
iomode = readl_relaxed(base + QUP_IO_M_MODES);
|
iomode = readl_relaxed(base + QUP_IO_M_MODES);
|
||||||
|
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,6 @@ Change-Id: I4b4f4d25be57e6e8148f6f0d24bed376eb287ecf
|
||||||
drivers/spi/spi-qup.c | 181 +++++++++++++++++++++++++++++++++++++++-----------
|
drivers/spi/spi-qup.c | 181 +++++++++++++++++++++++++++++++++++++++-----------
|
||||||
1 file changed, 141 insertions(+), 40 deletions(-)
|
1 file changed, 141 insertions(+), 40 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index 089c5e8..e487416 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -83,6 +83,8 @@
|
@@ -83,6 +83,8 @@
|
||||||
|
@ -40,7 +38,7 @@ index 089c5e8..e487416 100644
|
||||||
|
|
||||||
static inline bool spi_qup_is_dma_xfer(int mode)
|
static inline bool spi_qup_is_dma_xfer(int mode)
|
||||||
{
|
{
|
||||||
@@ -217,29 +225,26 @@ static int spi_qup_set_state(struct spi_qup *controller, u32 state)
|
@@ -217,29 +225,26 @@ static int spi_qup_set_state(struct spi_
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,11 +52,11 @@ index 089c5e8..e487416 100644
|
||||||
- int idx, shift, w_size;
|
- int idx, shift, w_size;
|
||||||
-
|
-
|
||||||
- w_size = controller->w_size;
|
- w_size = controller->w_size;
|
||||||
-
|
|
||||||
- while (controller->rx_bytes < xfer->len) {
|
|
||||||
+ int i, shift, num_bytes;
|
+ int i, shift, num_bytes;
|
||||||
+ u32 word;
|
+ u32 word;
|
||||||
|
|
||||||
|
- while (controller->rx_bytes < xfer->len) {
|
||||||
|
-
|
||||||
- state = readl_relaxed(controller->base + QUP_OPERATIONAL);
|
- state = readl_relaxed(controller->base + QUP_OPERATIONAL);
|
||||||
- if (0 == (state & QUP_OP_IN_FIFO_NOT_EMPTY))
|
- if (0 == (state & QUP_OP_IN_FIFO_NOT_EMPTY))
|
||||||
- break;
|
- break;
|
||||||
|
@ -80,7 +78,7 @@ index 089c5e8..e487416 100644
|
||||||
/*
|
/*
|
||||||
* The data format depends on bytes per SPI word:
|
* The data format depends on bytes per SPI word:
|
||||||
* 4 bytes: 0x12345678
|
* 4 bytes: 0x12345678
|
||||||
@@ -247,38 +252,80 @@ static void spi_qup_fifo_read(struct spi_qup *controller,
|
@@ -247,38 +252,80 @@ static void spi_qup_fifo_read(struct spi
|
||||||
* 1 byte : 0x00000012
|
* 1 byte : 0x00000012
|
||||||
*/
|
*/
|
||||||
shift = BITS_PER_BYTE;
|
shift = BITS_PER_BYTE;
|
||||||
|
@ -117,11 +115,11 @@ index 089c5e8..e487416 100644
|
||||||
+ if (!spi_qup_is_flag_set(controller,
|
+ if (!spi_qup_is_flag_set(controller,
|
||||||
+ QUP_OP_IN_FIFO_NOT_EMPTY))
|
+ QUP_OP_IN_FIFO_NOT_EMPTY))
|
||||||
+ break;
|
+ break;
|
||||||
+
|
|
||||||
+ num_words = 1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- w_size = controller->w_size;
|
- w_size = controller->w_size;
|
||||||
|
+ num_words = 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ /* read up to the maximum transfer size available */
|
+ /* read up to the maximum transfer size available */
|
||||||
+ spi_qup_read_from_fifo(controller, xfer, num_words);
|
+ spi_qup_read_from_fifo(controller, xfer, num_words);
|
||||||
|
|
||||||
|
@ -240,7 +238,7 @@ index 089c5e8..e487416 100644
|
||||||
|
|
||||||
if (xfer->rx_buf) {
|
if (xfer->rx_buf) {
|
||||||
ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done,
|
ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done,
|
||||||
@@ -401,7 +488,7 @@ static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer,
|
@@ -401,7 +488,7 @@ static int spi_qup_do_pio(struct spi_mas
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qup->mode == QUP_IO_M_MODE_FIFO)
|
if (qup->mode == QUP_IO_M_MODE_FIFO)
|
||||||
|
@ -249,7 +247,7 @@ index 089c5e8..e487416 100644
|
||||||
|
|
||||||
ret = spi_qup_set_state(qup, QUP_STATE_RUN);
|
ret = spi_qup_set_state(qup, QUP_STATE_RUN);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -434,10 +521,11 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -434,10 +521,11 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
|
|
||||||
writel_relaxed(qup_err, controller->base + QUP_ERROR_FLAGS);
|
writel_relaxed(qup_err, controller->base + QUP_ERROR_FLAGS);
|
||||||
writel_relaxed(spi_err, controller->base + SPI_ERROR_FLAGS);
|
writel_relaxed(spi_err, controller->base + SPI_ERROR_FLAGS);
|
||||||
|
@ -263,7 +261,7 @@ index 089c5e8..e487416 100644
|
||||||
qup_err, spi_err, opflags);
|
qup_err, spi_err, opflags);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
@@ -463,12 +551,20 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -463,12 +551,20 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
error = -EIO;
|
error = -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +285,7 @@ index 089c5e8..e487416 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&controller->lock, flags);
|
spin_lock_irqsave(&controller->lock, flags);
|
||||||
@@ -476,6 +572,9 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -476,6 +572,9 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
controller->xfer = xfer;
|
controller->xfer = xfer;
|
||||||
spin_unlock_irqrestore(&controller->lock, flags);
|
spin_unlock_irqrestore(&controller->lock, flags);
|
||||||
|
|
||||||
|
@ -297,7 +295,7 @@ index 089c5e8..e487416 100644
|
||||||
if ((controller->rx_bytes == xfer->len &&
|
if ((controller->rx_bytes == xfer->len &&
|
||||||
(opflags & QUP_OP_MAX_INPUT_DONE_FLAG)) || error)
|
(opflags & QUP_OP_MAX_INPUT_DONE_FLAG)) || error)
|
||||||
complete(&controller->done);
|
complete(&controller->done);
|
||||||
@@ -519,11 +618,13 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
|
@@ -519,11 +618,13 @@ static int spi_qup_io_config(struct spi_
|
||||||
/* must be zero for FIFO */
|
/* must be zero for FIFO */
|
||||||
writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT);
|
||||||
writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
|
||||||
|
@ -312,6 +310,3 @@ index 089c5e8..e487416 100644
|
||||||
writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
|
||||||
writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
|
writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
|
||||||
|
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,9 @@ Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org>
|
||||||
drivers/spi/spi-qup.c | 15 +++++++++------
|
drivers/spi/spi-qup.c | 15 +++++++++------
|
||||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index e487416..45e30c7 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -509,6 +509,7 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -509,6 +509,7 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
u32 opflags, qup_err, spi_err;
|
u32 opflags, qup_err, spi_err;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
@ -29,7 +27,7 @@ index e487416..45e30c7 100644
|
||||||
|
|
||||||
spin_lock_irqsave(&controller->lock, flags);
|
spin_lock_irqsave(&controller->lock, flags);
|
||||||
xfer = controller->xfer;
|
xfer = controller->xfer;
|
||||||
@@ -567,16 +568,19 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -567,16 +568,19 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
spi_qup_write(controller, xfer);
|
spi_qup_write(controller, xfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +52,7 @@ index e487416..45e30c7 100644
|
||||||
complete(&controller->done);
|
complete(&controller->done);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@@ -769,7 +773,6 @@ static int spi_qup_transfer_one(struct spi_master *master,
|
@@ -769,7 +773,6 @@ static int spi_qup_transfer_one(struct s
|
||||||
exit:
|
exit:
|
||||||
spi_qup_set_state(controller, QUP_STATE_RESET);
|
spi_qup_set_state(controller, QUP_STATE_RESET);
|
||||||
spin_lock_irqsave(&controller->lock, flags);
|
spin_lock_irqsave(&controller->lock, flags);
|
||||||
|
@ -62,6 +60,3 @@ index e487416..45e30c7 100644
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = controller->error;
|
ret = controller->error;
|
||||||
spin_unlock_irqrestore(&controller->lock, flags);
|
spin_unlock_irqrestore(&controller->lock, flags);
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,9 @@ Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org>
|
||||||
drivers/spi/spi-qup.c | 3 ++-
|
drivers/spi/spi-qup.c | 3 ++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
|
|
||||||
index 45e30c7..59bc37c 100644
|
|
||||||
--- a/drivers/spi/spi-qup.c
|
--- a/drivers/spi/spi-qup.c
|
||||||
+++ b/drivers/spi/spi-qup.c
|
+++ b/drivers/spi/spi-qup.c
|
||||||
@@ -569,7 +569,8 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
|
@@ -569,7 +569,8 @@ static irqreturn_t spi_qup_qup_irq(int i
|
||||||
}
|
}
|
||||||
|
|
||||||
/* re-read opflags as flags may have changed due to actions above */
|
/* re-read opflags as flags may have changed due to actions above */
|
||||||
|
@ -27,6 +25,3 @@ index 45e30c7..59bc37c 100644
|
||||||
|
|
||||||
if ((controller->rx_bytes == xfer->len &&
|
if ((controller->rx_bytes == xfer->len &&
|
||||||
(opflags & QUP_OP_MAX_INPUT_DONE_FLAG)) || error)
|
(opflags & QUP_OP_MAX_INPUT_DONE_FLAG)) || error)
|
||||||
--
|
|
||||||
2.7.2
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
|
|
||||||
index 2c2b28e..64c037d 100644
|
|
||||||
--- a/arch/arm/Makefile
|
--- a/arch/arm/Makefile
|
||||||
+++ b/arch/arm/Makefile
|
+++ b/arch/arm/Makefile
|
||||||
@@ -67,7 +67,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra)
|
@@ -72,7 +72,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-i
|
||||||
# macro, but instead defines a whole series of macros which makes
|
# macro, but instead defines a whole series of macros which makes
|
||||||
# testing for a specific architecture or later rather impossible.
|
# testing for a specific architecture or later rather impossible.
|
||||||
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
|
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
|
||||||
|
|
|
@ -4296,7 +4296,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -715,9 +848,9 @@ static const struct flash_info spi_nor_i
|
@@ -716,9 +849,9 @@ static const struct flash_info spi_nor_i
|
||||||
{ "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) },
|
{ "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) },
|
||||||
{ "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) },
|
{ "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) },
|
||||||
{ "mx25l1606e", INFO(0xc22015, 0, 64 * 1024, 32, SECT_4K) },
|
{ "mx25l1606e", INFO(0xc22015, 0, 64 * 1024, 32, SECT_4K) },
|
||||||
|
@ -4308,7 +4308,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
{ "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
|
{ "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
|
||||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||||
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
||||||
@@ -732,8 +865,8 @@ static const struct flash_info spi_nor_i
|
@@ -733,8 +866,8 @@ static const struct flash_info spi_nor_i
|
||||||
{ "n25q032a", INFO(0x20bb16, 0, 64 * 1024, 64, SPI_NOR_QUAD_READ) },
|
{ "n25q032a", INFO(0x20bb16, 0, 64 * 1024, 64, SPI_NOR_QUAD_READ) },
|
||||||
{ "n25q064", INFO(0x20ba17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
|
{ "n25q064", INFO(0x20ba17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
|
||||||
{ "n25q064a", INFO(0x20bb17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
|
{ "n25q064a", INFO(0x20bb17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
|
||||||
|
@ -4319,7 +4319,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
{ "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_QUAD_READ) },
|
{ "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_QUAD_READ) },
|
||||||
{ "n25q512a", INFO(0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
|
{ "n25q512a", INFO(0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
|
||||||
{ "n25q512ax3", INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
|
{ "n25q512ax3", INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
|
||||||
@@ -767,6 +900,7 @@ static const struct flash_info spi_nor_i
|
@@ -768,6 +901,7 @@ static const struct flash_info spi_nor_i
|
||||||
{ "s25fl008k", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
{ "s25fl008k", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
||||||
{ "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
{ "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
||||||
{ "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
|
{ "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
|
||||||
|
@ -4327,7 +4327,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
{ "s25fl132k", INFO(0x014016, 0, 64 * 1024, 64, SECT_4K) },
|
{ "s25fl132k", INFO(0x014016, 0, 64 * 1024, 64, SECT_4K) },
|
||||||
{ "s25fl164k", INFO(0x014017, 0, 64 * 1024, 128, SECT_4K) },
|
{ "s25fl164k", INFO(0x014017, 0, 64 * 1024, 128, SECT_4K) },
|
||||||
{ "s25fl204k", INFO(0x014013, 0, 64 * 1024, 8, SECT_4K | SPI_NOR_DUAL_READ) },
|
{ "s25fl204k", INFO(0x014013, 0, 64 * 1024, 8, SECT_4K | SPI_NOR_DUAL_READ) },
|
||||||
@@ -830,11 +964,23 @@ static const struct flash_info spi_nor_i
|
@@ -831,11 +965,23 @@ static const struct flash_info spi_nor_i
|
||||||
{ "w25x16", INFO(0xef3015, 0, 64 * 1024, 32, SECT_4K) },
|
{ "w25x16", INFO(0xef3015, 0, 64 * 1024, 32, SECT_4K) },
|
||||||
{ "w25x32", INFO(0xef3016, 0, 64 * 1024, 64, SECT_4K) },
|
{ "w25x32", INFO(0xef3016, 0, 64 * 1024, 64, SECT_4K) },
|
||||||
{ "w25q32", INFO(0xef4016, 0, 64 * 1024, 64, SECT_4K) },
|
{ "w25q32", INFO(0xef4016, 0, 64 * 1024, 64, SECT_4K) },
|
||||||
|
@ -4354,7 +4354,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
||||||
@@ -857,7 +1003,7 @@ static const struct flash_info *spi_nor_
|
@@ -858,7 +1004,7 @@ static const struct flash_info *spi_nor_
|
||||||
|
|
||||||
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
|
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
|
@ -4363,7 +4363,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
return ERR_PTR(tmp);
|
return ERR_PTR(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -868,7 +1014,7 @@ static const struct flash_info *spi_nor_
|
@@ -869,7 +1015,7 @@ static const struct flash_info *spi_nor_
|
||||||
return &spi_nor_ids[tmp];
|
return &spi_nor_ids[tmp];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4372,7 +4372,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
id[0], id[1], id[2]);
|
id[0], id[1], id[2]);
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
}
|
}
|
||||||
@@ -1014,6 +1160,8 @@ static int macronix_quad_enable(struct s
|
@@ -1015,6 +1161,8 @@ static int macronix_quad_enable(struct s
|
||||||
int ret, val;
|
int ret, val;
|
||||||
|
|
||||||
val = read_sr(nor);
|
val = read_sr(nor);
|
||||||
|
@ -4381,7 +4381,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
write_enable(nor);
|
write_enable(nor);
|
||||||
|
|
||||||
write_sr(nor, val | SR_QUAD_EN_MX);
|
write_sr(nor, val | SR_QUAD_EN_MX);
|
||||||
@@ -1095,7 +1243,7 @@ static int set_quad_mode(struct spi_nor
|
@@ -1096,7 +1244,7 @@ static int set_quad_mode(struct spi_nor
|
||||||
static int spi_nor_check(struct spi_nor *nor)
|
static int spi_nor_check(struct spi_nor *nor)
|
||||||
{
|
{
|
||||||
if (!nor->dev || !nor->read || !nor->write ||
|
if (!nor->dev || !nor->read || !nor->write ||
|
||||||
|
@ -4390,7 +4390,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
pr_err("spi-nor: please fill all the necessary fields!\n");
|
pr_err("spi-nor: please fill all the necessary fields!\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -1108,7 +1256,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1109,7 +1257,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
const struct flash_info *info = NULL;
|
const struct flash_info *info = NULL;
|
||||||
struct device *dev = nor->dev;
|
struct device *dev = nor->dev;
|
||||||
struct mtd_info *mtd = &nor->mtd;
|
struct mtd_info *mtd = &nor->mtd;
|
||||||
|
@ -4399,7 +4399,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -1158,9 +1306,11 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1159,9 +1307,11 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
|
if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
|
||||||
JEDEC_MFR(info) == SNOR_MFR_INTEL ||
|
JEDEC_MFR(info) == SNOR_MFR_INTEL ||
|
||||||
JEDEC_MFR(info) == SNOR_MFR_MACRONIX ||
|
JEDEC_MFR(info) == SNOR_MFR_MACRONIX ||
|
||||||
|
@ -4412,7 +4412,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mtd->name)
|
if (!mtd->name)
|
||||||
@@ -1174,7 +1324,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1175,7 +1325,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
mtd->_read = spi_nor_read;
|
mtd->_read = spi_nor_read;
|
||||||
|
|
||||||
/* NOR protection support for STmicro/Micron chips and similar */
|
/* NOR protection support for STmicro/Micron chips and similar */
|
||||||
|
@ -4422,7 +4422,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
nor->flash_lock = stm_lock;
|
nor->flash_lock = stm_lock;
|
||||||
nor->flash_unlock = stm_unlock;
|
nor->flash_unlock = stm_unlock;
|
||||||
nor->flash_is_locked = stm_is_locked;
|
nor->flash_is_locked = stm_is_locked;
|
||||||
@@ -1194,6 +1345,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1195,6 +1346,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
|
|
||||||
if (info->flags & USE_FSR)
|
if (info->flags & USE_FSR)
|
||||||
nor->flags |= SNOR_F_USE_FSR;
|
nor->flags |= SNOR_F_USE_FSR;
|
||||||
|
@ -4431,7 +4431,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
|
|
||||||
#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
|
#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
|
||||||
/* prefer "small sector" erase if possible */
|
/* prefer "small sector" erase if possible */
|
||||||
@@ -1296,6 +1449,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1297,6 +1450,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
nor->addr_width = 3;
|
nor->addr_width = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
On Cortex-A9 based Marvell SoCs, when HW I/O coherency is enabled, all
|
|
||||||
non-RAM space needs to be mapped strongly ordered.
|
|
||||||
In upstream this was added for PCIe I/O only, this change expands it
|
|
||||||
to cover all device memory. Fixes issues with CESA.
|
|
||||||
Based on patch from Thomas Petazzoni.
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
|
|
||||||
--- a/arch/arm/mach-mvebu/coherency.c
|
|
||||||
+++ b/arch/arm/mach-mvebu/coherency.c
|
|
||||||
@@ -162,22 +162,16 @@ exit:
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * This ioremap hook is used on Armada 375/38x to ensure that PCIe
|
|
||||||
+ * This ioremap hook is used on Armada 375/38x to ensure that all non-RAM
|
|
||||||
* memory areas are mapped as MT_UNCACHED instead of MT_DEVICE. This
|
|
||||||
- * is needed as a workaround for a deadlock issue between the PCIe
|
|
||||||
+ * is needed as a workaround for a deadlock issue between the bus
|
|
||||||
* interface and the cache controller.
|
|
||||||
*/
|
|
||||||
static void __iomem *
|
|
||||||
-armada_pcie_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
|
|
||||||
- unsigned int mtype, void *caller)
|
|
||||||
+armada_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
|
|
||||||
+ unsigned int mtype, void *caller)
|
|
||||||
{
|
|
||||||
- struct resource pcie_mem;
|
|
||||||
-
|
|
||||||
- mvebu_mbus_get_pcie_mem_aperture(&pcie_mem);
|
|
||||||
-
|
|
||||||
- if (pcie_mem.start <= phys_addr && (phys_addr + size) <= pcie_mem.end)
|
|
||||||
- mtype = MT_UNCACHED;
|
|
||||||
-
|
|
||||||
+ mtype = MT_UNCACHED;
|
|
||||||
return __arm_ioremap_caller(phys_addr, size, mtype, caller);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -186,7 +180,7 @@ static void __init armada_375_380_cohere
|
|
||||||
struct device_node *cache_dn;
|
|
||||||
|
|
||||||
coherency_cpu_base = of_iomap(np, 0);
|
|
||||||
- arch_ioremap_caller = armada_pcie_wa_ioremap_caller;
|
|
||||||
+ arch_ioremap_caller = armada_wa_ioremap_caller;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We should switch the PL310 to I/O coherency mode only if
|
|
|
@ -1,13 +0,0 @@
|
||||||
--- a/arch/arm/boot/dts/armada-385-linksys.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/armada-385-linksys.dtsi
|
|
||||||
@@ -58,8 +58,8 @@
|
|
||||||
soc {
|
|
||||||
ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
|
|
||||||
MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
|
|
||||||
- MBUS_ID(0x09, 0x09) 0 0xf1100000 0x10000
|
|
||||||
- MBUS_ID(0x09, 0x05) 0 0xf1110000 0x10000>;
|
|
||||||
+ MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
|
|
||||||
+ MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>;
|
|
||||||
|
|
||||||
internal-regs {
|
|
||||||
|
|
|
@ -7,3 +7,4 @@
|
||||||
+ .always_on = true,
|
+ .always_on = true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
@@ -4781,6 +4789,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
|
@@ -4787,6 +4795,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);
|
||||||
@@ -4826,6 +4837,8 @@ void ata_qc_free(struct ata_queued_cmd *
|
@@ -4832,6 +4843,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);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1009,6 +1009,66 @@ write_err:
|
@@ -1010,6 +1010,66 @@ write_err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
static int macronix_quad_enable(struct spi_nor *nor)
|
static int macronix_quad_enable(struct spi_nor *nor)
|
||||||
{
|
{
|
||||||
int ret, val;
|
int ret, val;
|
||||||
@@ -1187,10 +1247,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1188,10 +1248,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sst nor chips use AAI word program */
|
/* sst nor chips use AAI word program */
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
|
|
||||||
if (info->flags & USE_FSR)
|
if (info->flags & USE_FSR)
|
||||||
nor->flags |= SNOR_F_USE_FSR;
|
nor->flags |= SNOR_F_USE_FSR;
|
||||||
@@ -1218,11 +1280,20 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -1219,11 +1281,20 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
mtd->writebufsize = nor->page_size;
|
mtd->writebufsize = nor->page_size;
|
||||||
|
|
||||||
if (np) {
|
if (np) {
|
||||||
|
|
Loading…
Reference in New Issue