aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-01-08 19:11:05 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2016-01-08 19:11:05 -0500
commit44d8a7d5c1b4f9e99c5601217ce03a48412f9aac (patch)
tree2bfa80eb54b83faf163ca9f0bad576bd2bb22dba
parent516c50cde604e93f094bb4c42a2cf81411c7a78d (diff)
parent841bcd2e5014f83ed99e88bd550645d8848ce19a (diff)
Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC fixes from Arnd Bergmann: "This is the final small set of ARM SoC bug fixes for linux-4.4, almost all regressions: OMAP: - data corruption on the Nokia N900 flash Allwinner: - Two defconfig change to get USB working again ARM Versatile: - Interrupt numbers gone bad after an older bug fix Nomadik: - Crashes from incorrect L2 cache settings VIA vt8500: - SD/MMC support on WM8650 never worked" * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: dts: vt8500: Add SDHC node to DTS file for WM8650 ARM: Fix broken USB support in multi_v7_defconfig for sunxi devices ARM: versatile: fix MMC/SD interrupt assignment ARM: nomadik: set latencies to 8 cycles ARM: OMAP2+: Fix onenand rate detection to avoid filesystem corruption ARM: Fix broken USB support in sunxi_defconfig
-rw-r--r--arch/arm/boot/dts/ste-nomadik-stn8815.dtsi6
-rw-r--r--arch/arm/boot/dts/versatile-ab.dts10
-rw-r--r--arch/arm/boot/dts/versatile-pb.dts20
-rw-r--r--arch/arm/boot/dts/wm8650.dtsi9
-rw-r--r--arch/arm/configs/multi_v7_defconfig1
-rw-r--r--arch/arm/configs/sunxi_defconfig1
-rw-r--r--arch/arm/mach-omap2/gpmc-onenand.c14
7 files changed, 49 insertions, 12 deletions
diff --git a/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi b/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
index 314f59c12162..d0c743853318 100644
--- a/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
+++ b/arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
@@ -25,9 +25,9 @@
25 cache-sets = <512>; 25 cache-sets = <512>;
26 cache-line-size = <32>; 26 cache-line-size = <32>;
27 /* At full speed latency must be >=2 */ 27 /* At full speed latency must be >=2 */
28 arm,tag-latency = <2>; 28 arm,tag-latency = <8>;
29 arm,data-latency = <2 2>; 29 arm,data-latency = <8 8>;
30 arm,dirty-latency = <2>; 30 arm,dirty-latency = <8>;
31 }; 31 };
32 32
33 mtu0: mtu@101e2000 { 33 mtu0: mtu@101e2000 {
diff --git a/arch/arm/boot/dts/versatile-ab.dts b/arch/arm/boot/dts/versatile-ab.dts
index 01f40197ea13..3279bf1a17a1 100644
--- a/arch/arm/boot/dts/versatile-ab.dts
+++ b/arch/arm/boot/dts/versatile-ab.dts
@@ -110,7 +110,11 @@
110 interrupt-parent = <&vic>; 110 interrupt-parent = <&vic>;
111 interrupts = <31>; /* Cascaded to vic */ 111 interrupts = <31>; /* Cascaded to vic */
112 clear-mask = <0xffffffff>; 112 clear-mask = <0xffffffff>;
113 valid-mask = <0xffc203f8>; 113 /*
114 * Valid interrupt lines mask according to
115 * table 4-36 page 4-50 of ARM DUI 0225D
116 */
117 valid-mask = <0x0760031b>;
114 }; 118 };
115 119
116 dma@10130000 { 120 dma@10130000 {
@@ -266,8 +270,8 @@
266 }; 270 };
267 mmc@5000 { 271 mmc@5000 {
268 compatible = "arm,pl180", "arm,primecell"; 272 compatible = "arm,pl180", "arm,primecell";
269 reg = < 0x5000 0x1000>; 273 reg = <0x5000 0x1000>;
270 interrupts-extended = <&vic 22 &sic 2>; 274 interrupts-extended = <&vic 22 &sic 1>;
271 clocks = <&xtal24mhz>, <&pclk>; 275 clocks = <&xtal24mhz>, <&pclk>;
272 clock-names = "mclk", "apb_pclk"; 276 clock-names = "mclk", "apb_pclk";
273 }; 277 };
diff --git a/arch/arm/boot/dts/versatile-pb.dts b/arch/arm/boot/dts/versatile-pb.dts
index b83137f66034..33a8eb28374e 100644
--- a/arch/arm/boot/dts/versatile-pb.dts
+++ b/arch/arm/boot/dts/versatile-pb.dts
@@ -5,6 +5,16 @@
5 compatible = "arm,versatile-pb"; 5 compatible = "arm,versatile-pb";
6 6
7 amba { 7 amba {
8 /* The Versatile PB is using more SIC IRQ lines than the AB */
9 sic: intc@10003000 {
10 clear-mask = <0xffffffff>;
11 /*
12 * Valid interrupt lines mask according to
13 * figure 3-30 page 3-74 of ARM DUI 0224B
14 */
15 valid-mask = <0x7fe003ff>;
16 };
17
8 gpio2: gpio@101e6000 { 18 gpio2: gpio@101e6000 {
9 compatible = "arm,pl061", "arm,primecell"; 19 compatible = "arm,pl061", "arm,primecell";
10 reg = <0x101e6000 0x1000>; 20 reg = <0x101e6000 0x1000>;
@@ -67,6 +77,13 @@
67 }; 77 };
68 78
69 fpga { 79 fpga {
80 mmc@5000 {
81 /*
82 * Overrides the interrupt assignment from
83 * the Versatile AB board file.
84 */
85 interrupts-extended = <&sic 22 &sic 23>;
86 };
70 uart@9000 { 87 uart@9000 {
71 compatible = "arm,pl011", "arm,primecell"; 88 compatible = "arm,pl011", "arm,primecell";
72 reg = <0x9000 0x1000>; 89 reg = <0x9000 0x1000>;
@@ -86,7 +103,8 @@
86 mmc@b000 { 103 mmc@b000 {
87 compatible = "arm,pl180", "arm,primecell"; 104 compatible = "arm,pl180", "arm,primecell";
88 reg = <0xb000 0x1000>; 105 reg = <0xb000 0x1000>;
89 interrupts-extended = <&vic 23 &sic 2>; 106 interrupt-parent = <&sic>;
107 interrupts = <1>, <2>;
90 clocks = <&xtal24mhz>, <&pclk>; 108 clocks = <&xtal24mhz>, <&pclk>;
91 clock-names = "mclk", "apb_pclk"; 109 clock-names = "mclk", "apb_pclk";
92 }; 110 };
diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi
index b1c59a766a13..e12213d16693 100644
--- a/arch/arm/boot/dts/wm8650.dtsi
+++ b/arch/arm/boot/dts/wm8650.dtsi
@@ -187,6 +187,15 @@
187 interrupts = <43>; 187 interrupts = <43>;
188 }; 188 };
189 189
190 sdhc@d800a000 {
191 compatible = "wm,wm8505-sdhc";
192 reg = <0xd800a000 0x400>;
193 interrupts = <20>, <21>;
194 clocks = <&clksdhc>;
195 bus-width = <4>;
196 sdon-inverted;
197 };
198
190 fb: fb@d8050800 { 199 fb: fb@d8050800 {
191 compatible = "wm,wm8505-fb"; 200 compatible = "wm,wm8505-fb";
192 reg = <0xd8050800 0x200>; 201 reg = <0xd8050800 0x200>;
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 69a22fdb52a5..cd7b198fc79e 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -366,6 +366,7 @@ CONFIG_BATTERY_MAX17042=m
366CONFIG_CHARGER_MAX14577=m 366CONFIG_CHARGER_MAX14577=m
367CONFIG_CHARGER_MAX77693=m 367CONFIG_CHARGER_MAX77693=m
368CONFIG_CHARGER_TPS65090=y 368CONFIG_CHARGER_TPS65090=y
369CONFIG_AXP20X_POWER=m
369CONFIG_POWER_RESET_AS3722=y 370CONFIG_POWER_RESET_AS3722=y
370CONFIG_POWER_RESET_GPIO=y 371CONFIG_POWER_RESET_GPIO=y
371CONFIG_POWER_RESET_GPIO_RESTART=y 372CONFIG_POWER_RESET_GPIO_RESTART=y
diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
index 3c36e16fcacf..b503a89441bf 100644
--- a/arch/arm/configs/sunxi_defconfig
+++ b/arch/arm/configs/sunxi_defconfig
@@ -84,6 +84,7 @@ CONFIG_SPI_SUN4I=y
84CONFIG_SPI_SUN6I=y 84CONFIG_SPI_SUN6I=y
85CONFIG_GPIO_SYSFS=y 85CONFIG_GPIO_SYSFS=y
86CONFIG_POWER_SUPPLY=y 86CONFIG_POWER_SUPPLY=y
87CONFIG_AXP20X_POWER=y
87CONFIG_THERMAL=y 88CONFIG_THERMAL=y
88CONFIG_CPU_THERMAL=y 89CONFIG_CPU_THERMAL=y
89CONFIG_WATCHDOG=y 90CONFIG_WATCHDOG=y
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 17a6f752a436..7b76ce01c21d 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -149,8 +149,8 @@ static int omap2_onenand_get_freq(struct omap_onenand_platform_data *cfg,
149 freq = 104; 149 freq = 104;
150 break; 150 break;
151 default: 151 default:
152 freq = 54; 152 pr_err("onenand rate not detected, bad GPMC async timings?\n");
153 break; 153 freq = 0;
154 } 154 }
155 155
156 return freq; 156 return freq;
@@ -271,6 +271,11 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
271 struct gpmc_timings t; 271 struct gpmc_timings t;
272 int ret; 272 int ret;
273 273
274 /*
275 * Note that we need to keep sync_write set for the call to
276 * omap2_onenand_set_async_mode() to work to detect the onenand
277 * supported clock rate for the sync timings.
278 */
274 if (gpmc_onenand_data->of_node) { 279 if (gpmc_onenand_data->of_node) {
275 gpmc_read_settings_dt(gpmc_onenand_data->of_node, 280 gpmc_read_settings_dt(gpmc_onenand_data->of_node,
276 &onenand_async); 281 &onenand_async);
@@ -281,12 +286,9 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
281 else 286 else
282 gpmc_onenand_data->flags |= ONENAND_SYNC_READ; 287 gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
283 onenand_async.sync_read = false; 288 onenand_async.sync_read = false;
284 onenand_async.sync_write = false;
285 } 289 }
286 } 290 }
287 291
288 omap2_onenand_set_async_mode(onenand_base);
289
290 omap2_onenand_calc_async_timings(&t); 292 omap2_onenand_calc_async_timings(&t);
291 293
292 ret = gpmc_cs_program_settings(gpmc_onenand_data->cs, &onenand_async); 294 ret = gpmc_cs_program_settings(gpmc_onenand_data->cs, &onenand_async);
@@ -310,6 +312,8 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr)
310 if (!freq) { 312 if (!freq) {
311 /* Very first call freq is not known */ 313 /* Very first call freq is not known */
312 freq = omap2_onenand_get_freq(gpmc_onenand_data, onenand_base); 314 freq = omap2_onenand_get_freq(gpmc_onenand_data, onenand_base);
315 if (!freq)
316 return -ENODEV;
313 set_onenand_cfg(onenand_base); 317 set_onenand_cfg(onenand_base);
314 } 318 }
315 319