Commit 44d8a7d5 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 516c50cd 841bcd2e
...@@ -25,9 +25,9 @@ L2: l2-cache { ...@@ -25,9 +25,9 @@ L2: l2-cache {
cache-sets = <512>; cache-sets = <512>;
cache-line-size = <32>; cache-line-size = <32>;
/* At full speed latency must be >=2 */ /* At full speed latency must be >=2 */
arm,tag-latency = <2>; arm,tag-latency = <8>;
arm,data-latency = <2 2>; arm,data-latency = <8 8>;
arm,dirty-latency = <2>; arm,dirty-latency = <8>;
}; };
mtu0: mtu@101e2000 { mtu0: mtu@101e2000 {
......
...@@ -110,7 +110,11 @@ sic: intc@10003000 { ...@@ -110,7 +110,11 @@ sic: intc@10003000 {
interrupt-parent = <&vic>; interrupt-parent = <&vic>;
interrupts = <31>; /* Cascaded to vic */ interrupts = <31>; /* Cascaded to vic */
clear-mask = <0xffffffff>; clear-mask = <0xffffffff>;
valid-mask = <0xffc203f8>; /*
* Valid interrupt lines mask according to
* table 4-36 page 4-50 of ARM DUI 0225D
*/
valid-mask = <0x0760031b>;
}; };
dma@10130000 { dma@10130000 {
...@@ -266,8 +270,8 @@ aaci@4000 { ...@@ -266,8 +270,8 @@ aaci@4000 {
}; };
mmc@5000 { mmc@5000 {
compatible = "arm,pl180", "arm,primecell"; compatible = "arm,pl180", "arm,primecell";
reg = < 0x5000 0x1000>; reg = <0x5000 0x1000>;
interrupts-extended = <&vic 22 &sic 2>; interrupts-extended = <&vic 22 &sic 1>;
clocks = <&xtal24mhz>, <&pclk>; clocks = <&xtal24mhz>, <&pclk>;
clock-names = "mclk", "apb_pclk"; clock-names = "mclk", "apb_pclk";
}; };
......
...@@ -5,6 +5,16 @@ / { ...@@ -5,6 +5,16 @@ / {
compatible = "arm,versatile-pb"; compatible = "arm,versatile-pb";
amba { amba {
/* The Versatile PB is using more SIC IRQ lines than the AB */
sic: intc@10003000 {
clear-mask = <0xffffffff>;
/*
* Valid interrupt lines mask according to
* figure 3-30 page 3-74 of ARM DUI 0224B
*/
valid-mask = <0x7fe003ff>;
};
gpio2: gpio@101e6000 { gpio2: gpio@101e6000 {
compatible = "arm,pl061", "arm,primecell"; compatible = "arm,pl061", "arm,primecell";
reg = <0x101e6000 0x1000>; reg = <0x101e6000 0x1000>;
...@@ -67,6 +77,13 @@ pci-controller@10001000 { ...@@ -67,6 +77,13 @@ pci-controller@10001000 {
}; };
fpga { fpga {
mmc@5000 {
/*
* Overrides the interrupt assignment from
* the Versatile AB board file.
*/
interrupts-extended = <&sic 22 &sic 23>;
};
uart@9000 { uart@9000 {
compatible = "arm,pl011", "arm,primecell"; compatible = "arm,pl011", "arm,primecell";
reg = <0x9000 0x1000>; reg = <0x9000 0x1000>;
...@@ -86,7 +103,8 @@ sci@a000 { ...@@ -86,7 +103,8 @@ sci@a000 {
mmc@b000 { mmc@b000 {
compatible = "arm,pl180", "arm,primecell"; compatible = "arm,pl180", "arm,primecell";
reg = <0xb000 0x1000>; reg = <0xb000 0x1000>;
interrupts-extended = <&vic 23 &sic 2>; interrupt-parent = <&sic>;
interrupts = <1>, <2>;
clocks = <&xtal24mhz>, <&pclk>; clocks = <&xtal24mhz>, <&pclk>;
clock-names = "mclk", "apb_pclk"; clock-names = "mclk", "apb_pclk";
}; };
......
...@@ -187,6 +187,15 @@ uhci@d8007b00 { ...@@ -187,6 +187,15 @@ uhci@d8007b00 {
interrupts = <43>; interrupts = <43>;
}; };
sdhc@d800a000 {
compatible = "wm,wm8505-sdhc";
reg = <0xd800a000 0x400>;
interrupts = <20>, <21>;
clocks = <&clksdhc>;
bus-width = <4>;
sdon-inverted;
};
fb: fb@d8050800 { fb: fb@d8050800 {
compatible = "wm,wm8505-fb"; compatible = "wm,wm8505-fb";
reg = <0xd8050800 0x200>; reg = <0xd8050800 0x200>;
......
...@@ -366,6 +366,7 @@ CONFIG_BATTERY_MAX17042=m ...@@ -366,6 +366,7 @@ CONFIG_BATTERY_MAX17042=m
CONFIG_CHARGER_MAX14577=m CONFIG_CHARGER_MAX14577=m
CONFIG_CHARGER_MAX77693=m CONFIG_CHARGER_MAX77693=m
CONFIG_CHARGER_TPS65090=y CONFIG_CHARGER_TPS65090=y
CONFIG_AXP20X_POWER=m
CONFIG_POWER_RESET_AS3722=y CONFIG_POWER_RESET_AS3722=y
CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y CONFIG_POWER_RESET_GPIO_RESTART=y
......
...@@ -84,6 +84,7 @@ CONFIG_SPI_SUN4I=y ...@@ -84,6 +84,7 @@ CONFIG_SPI_SUN4I=y
CONFIG_SPI_SUN6I=y CONFIG_SPI_SUN6I=y
CONFIG_GPIO_SYSFS=y CONFIG_GPIO_SYSFS=y
CONFIG_POWER_SUPPLY=y CONFIG_POWER_SUPPLY=y
CONFIG_AXP20X_POWER=y
CONFIG_THERMAL=y CONFIG_THERMAL=y
CONFIG_CPU_THERMAL=y CONFIG_CPU_THERMAL=y
CONFIG_WATCHDOG=y CONFIG_WATCHDOG=y
......
...@@ -149,8 +149,8 @@ static int omap2_onenand_get_freq(struct omap_onenand_platform_data *cfg, ...@@ -149,8 +149,8 @@ static int omap2_onenand_get_freq(struct omap_onenand_platform_data *cfg,
freq = 104; freq = 104;
break; break;
default: default:
freq = 54; pr_err("onenand rate not detected, bad GPMC async timings?\n");
break; freq = 0;
} }
return freq; return freq;
...@@ -271,6 +271,11 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base) ...@@ -271,6 +271,11 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
struct gpmc_timings t; struct gpmc_timings t;
int ret; int ret;
/*
* Note that we need to keep sync_write set for the call to
* omap2_onenand_set_async_mode() to work to detect the onenand
* supported clock rate for the sync timings.
*/
if (gpmc_onenand_data->of_node) { if (gpmc_onenand_data->of_node) {
gpmc_read_settings_dt(gpmc_onenand_data->of_node, gpmc_read_settings_dt(gpmc_onenand_data->of_node,
&onenand_async); &onenand_async);
...@@ -281,12 +286,9 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base) ...@@ -281,12 +286,9 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
else else
gpmc_onenand_data->flags |= ONENAND_SYNC_READ; gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
onenand_async.sync_read = false; onenand_async.sync_read = false;
onenand_async.sync_write = false;
} }
} }
omap2_onenand_set_async_mode(onenand_base);
omap2_onenand_calc_async_timings(&t); omap2_onenand_calc_async_timings(&t);
ret = gpmc_cs_program_settings(gpmc_onenand_data->cs, &onenand_async); 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,6 +312,8 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr)
if (!freq) { if (!freq) {
/* Very first call freq is not known */ /* Very first call freq is not known */
freq = omap2_onenand_get_freq(gpmc_onenand_data, onenand_base); freq = omap2_onenand_get_freq(gpmc_onenand_data, onenand_base);
if (!freq)
return -ENODEV;
set_onenand_cfg(onenand_base); set_onenand_cfg(onenand_base);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment