Commit e6694d98 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 Olof Johansson:
 "These are a little later than I planned on since I got caught up with
  handling merges for 3.11 most of the week.

  Another week, another batch of fixes for arm-soc platforms.

  Again, nothing controversial.  A few more than would be ideal, but all
  are valid fixes.  In particular the prima2 panic patch is critical
  since it fixes a problem where multiplatform kernels panic on all but
  prima2 hardware."

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  ARM: SAMSUNG: pm: Adjust for pinctrl- and DT-enabled platforms
  ARM: prima2: fix incorrect panic usage
  arm: mvebu: armada-xp-{gp,openblocks-ax3-4}: specify PCIe range
  ARM: Kirkwood: handle mv88f6282 cpu in __kirkwood_variant().
  ARM: omap3: clock: fix wrong container_of in clock36xx.c
  ARM: dts: OMAP5: Fix missing PWM capability to timer nodes
  ARM: dts: omap4-panda|sdp: Fix mux for twl6030 IRQ pin and msecure line
  ARM: dts: AM33xx: Fix properties on gpmc node
  arm: omap2: fix AM33xx hwmod infos for UART2
  ARM: OMAP3: Fix iva2_pwrdm settings for 3703
parents 596fa9e6 323226bb
...@@ -409,8 +409,8 @@ gpmc: gpmc@50000000 { ...@@ -409,8 +409,8 @@ gpmc: gpmc@50000000 {
ti,hwmods = "gpmc"; ti,hwmods = "gpmc";
reg = <0x50000000 0x2000>; reg = <0x50000000 0x2000>;
interrupts = <100>; interrupts = <100>;
num-cs = <7>; gpmc,num-cs = <7>;
num-waitpins = <2>; gpmc,num-waitpins = <2>;
#address-cells = <2>; #address-cells = <2>;
#size-cells = <1>; #size-cells = <1>;
status = "disabled"; status = "disabled";
......
...@@ -39,8 +39,9 @@ memory { ...@@ -39,8 +39,9 @@ memory {
}; };
soc { soc {
ranges = <0 0 0xd0000000 0x100000 ranges = <0 0 0xd0000000 0x100000 /* Internal registers 1MiB */
0xf0000000 0 0xf0000000 0x1000000>; 0xe0000000 0 0xe0000000 0x8100000 /* PCIe */
0xf0000000 0 0xf0000000 0x1000000 /* Device Bus, NOR 16MiB */>;
internal-regs { internal-regs {
serial@12000 { serial@12000 {
......
...@@ -27,8 +27,9 @@ memory { ...@@ -27,8 +27,9 @@ memory {
}; };
soc { soc {
ranges = <0 0 0xd0000000 0x100000 ranges = <0 0 0xd0000000 0x100000 /* Internal registers 1MiB */
0xf0000000 0 0xf0000000 0x8000000>; 0xe0000000 0 0xe0000000 0x8100000 /* PCIe */
0xf0000000 0 0xf0000000 0x8000000 /* Device Bus, NOR 128MiB */>;
internal-regs { internal-regs {
serial@12000 { serial@12000 {
......
...@@ -56,9 +56,23 @@ sound: sound { ...@@ -56,9 +56,23 @@ sound: sound {
}; };
}; };
&omap4_pmx_wkup {
pinctrl-names = "default";
pinctrl-0 = <
&twl6030_wkup_pins
>;
twl6030_wkup_pins: pinmux_twl6030_wkup_pins {
pinctrl-single,pins = <
0x14 0x2 /* fref_clk0_out.sys_drm_msecure OUTPUT | MODE2 */
>;
};
};
&omap4_pmx_core { &omap4_pmx_core {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = < pinctrl-0 = <
&twl6030_pins
&twl6040_pins &twl6040_pins
&mcpdm_pins &mcpdm_pins
&mcbsp1_pins &mcbsp1_pins
...@@ -66,6 +80,12 @@ &dss_hdmi_pins ...@@ -66,6 +80,12 @@ &dss_hdmi_pins
&tpd12s015_pins &tpd12s015_pins
>; >;
twl6030_pins: pinmux_twl6030_pins {
pinctrl-single,pins = <
0x15e 0x4118 /* sys_nirq1.sys_nirq1 OMAP_WAKEUP_EN | INPUT_PULLUP | MODE0 */
>;
};
twl6040_pins: pinmux_twl6040_pins { twl6040_pins: pinmux_twl6040_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */
......
...@@ -142,9 +142,23 @@ sound { ...@@ -142,9 +142,23 @@ sound {
}; };
}; };
&omap4_pmx_wkup {
pinctrl-names = "default";
pinctrl-0 = <
&twl6030_wkup_pins
>;
twl6030_wkup_pins: pinmux_twl6030_wkup_pins {
pinctrl-single,pins = <
0x14 0x2 /* fref_clk0_out.sys_drm_msecure OUTPUT | MODE2 */
>;
};
};
&omap4_pmx_core { &omap4_pmx_core {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = < pinctrl-0 = <
&twl6030_pins
&twl6040_pins &twl6040_pins
&mcpdm_pins &mcpdm_pins
&dmic_pins &dmic_pins
...@@ -179,6 +193,12 @@ uart4_pins: pinmux_uart4_pins { ...@@ -179,6 +193,12 @@ uart4_pins: pinmux_uart4_pins {
>; >;
}; };
twl6030_pins: pinmux_twl6030_pins {
pinctrl-single,pins = <
0x15e 0x4118 /* sys_nirq1.sys_nirq1 OMAP_WAKEUP_EN | INPUT_PULLUP | MODE0 */
>;
};
twl6040_pins: pinmux_twl6040_pins { twl6040_pins: pinmux_twl6040_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */ 0xe0 0x3 /* hdq_sio.gpio_127 OUTPUT | MODE3 */
......
...@@ -538,6 +538,7 @@ timer5: timer@40138000 { ...@@ -538,6 +538,7 @@ timer5: timer@40138000 {
interrupts = <0 41 0x4>; interrupts = <0 41 0x4>;
ti,hwmods = "timer5"; ti,hwmods = "timer5";
ti,timer-dsp; ti,timer-dsp;
ti,timer-pwm;
}; };
timer6: timer@4013a000 { timer6: timer@4013a000 {
...@@ -574,6 +575,7 @@ timer9: timer@4803e000 { ...@@ -574,6 +575,7 @@ timer9: timer@4803e000 {
reg = <0x4803e000 0x80>; reg = <0x4803e000 0x80>;
interrupts = <0 45 0x4>; interrupts = <0 45 0x4>;
ti,hwmods = "timer9"; ti,hwmods = "timer9";
ti,timer-pwm;
}; };
timer10: timer@48086000 { timer10: timer@48086000 {
...@@ -581,6 +583,7 @@ timer10: timer@48086000 { ...@@ -581,6 +583,7 @@ timer10: timer@48086000 {
reg = <0x48086000 0x80>; reg = <0x48086000 0x80>;
interrupts = <0 46 0x4>; interrupts = <0 46 0x4>;
ti,hwmods = "timer10"; ti,hwmods = "timer10";
ti,timer-pwm;
}; };
timer11: timer@48088000 { timer11: timer@48088000 {
......
...@@ -22,9 +22,10 @@ static unsigned int __init kirkwood_variant(void) ...@@ -22,9 +22,10 @@ static unsigned int __init kirkwood_variant(void)
kirkwood_pcie_id(&dev, &rev); kirkwood_pcie_id(&dev, &rev);
if ((dev == MV88F6281_DEV_ID && rev >= MV88F6281_REV_A0) || if (dev == MV88F6281_DEV_ID && rev >= MV88F6281_REV_A0)
(dev == MV88F6282_DEV_ID))
return MPP_F6281_MASK; return MPP_F6281_MASK;
if (dev == MV88F6282_DEV_ID)
return MPP_F6282_MASK;
if (dev == MV88F6192_DEV_ID && rev >= MV88F6192_REV_A0) if (dev == MV88F6192_DEV_ID && rev >= MV88F6192_REV_A0)
return MPP_F6192_MASK; return MPP_F6192_MASK;
if (dev == MV88F6180_DEV_ID) if (dev == MV88F6180_DEV_ID)
......
...@@ -20,11 +20,12 @@ ...@@ -20,11 +20,12 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/io.h> #include <linux/io.h>
#include "clock.h" #include "clock.h"
#include "clock36xx.h" #include "clock36xx.h"
#define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw)
/** /**
* omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering * omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering
...@@ -39,29 +40,28 @@ ...@@ -39,29 +40,28 @@
*/ */
int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk)
{ {
struct clk_hw_omap *parent; struct clk_divider *parent;
struct clk_hw *parent_hw; struct clk_hw *parent_hw;
u32 dummy_v, orig_v, clksel_shift; u32 dummy_v, orig_v;
int ret; int ret;
/* Clear PWRDN bit of HSDIVIDER */ /* Clear PWRDN bit of HSDIVIDER */
ret = omap2_dflt_clk_enable(clk); ret = omap2_dflt_clk_enable(clk);
parent_hw = __clk_get_hw(__clk_get_parent(clk->clk)); parent_hw = __clk_get_hw(__clk_get_parent(clk->clk));
parent = to_clk_hw_omap(parent_hw); parent = to_clk_divider(parent_hw);
/* Restore the dividers */ /* Restore the dividers */
if (!ret) { if (!ret) {
clksel_shift = __ffs(parent->clksel_mask); orig_v = __raw_readl(parent->reg);
orig_v = __raw_readl(parent->clksel_reg);
dummy_v = orig_v; dummy_v = orig_v;
/* Write any other value different from the Read value */ /* Write any other value different from the Read value */
dummy_v ^= (1 << clksel_shift); dummy_v ^= (1 << parent->shift);
__raw_writel(dummy_v, parent->clksel_reg); __raw_writel(dummy_v, parent->reg);
/* Write the original divider */ /* Write the original divider */
__raw_writel(orig_v, parent->clksel_reg); __raw_writel(orig_v, parent->reg);
} }
return ret; return ret;
......
...@@ -2007,6 +2007,13 @@ static struct omap_hwmod am33xx_uart1_hwmod = { ...@@ -2007,6 +2007,13 @@ static struct omap_hwmod am33xx_uart1_hwmod = {
}, },
}; };
/* uart2 */
static struct omap_hwmod_dma_info uart2_edma_reqs[] = {
{ .name = "tx", .dma_req = 28, },
{ .name = "rx", .dma_req = 29, },
{ .dma_req = -1 }
};
static struct omap_hwmod_irq_info am33xx_uart2_irqs[] = { static struct omap_hwmod_irq_info am33xx_uart2_irqs[] = {
{ .irq = 73 + OMAP_INTC_START, }, { .irq = 73 + OMAP_INTC_START, },
{ .irq = -1 }, { .irq = -1 },
...@@ -2018,7 +2025,7 @@ static struct omap_hwmod am33xx_uart2_hwmod = { ...@@ -2018,7 +2025,7 @@ static struct omap_hwmod am33xx_uart2_hwmod = {
.clkdm_name = "l4ls_clkdm", .clkdm_name = "l4ls_clkdm",
.flags = HWMOD_SWSUP_SIDLE_ACT, .flags = HWMOD_SWSUP_SIDLE_ACT,
.mpu_irqs = am33xx_uart2_irqs, .mpu_irqs = am33xx_uart2_irqs,
.sdma_reqs = uart1_edma_reqs, .sdma_reqs = uart2_edma_reqs,
.main_clk = "dpll_per_m2_div4_ck", .main_clk = "dpll_per_m2_div4_ck",
.prcm = { .prcm = {
.omap4 = { .omap4 = {
......
...@@ -546,7 +546,9 @@ static void __init prcm_setup_regs(void) ...@@ -546,7 +546,9 @@ static void __init prcm_setup_regs(void)
/* Clear any pending PRCM interrupts */ /* Clear any pending PRCM interrupts */
omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
if (omap3_has_iva()) /*
* We need to idle iva2_pwrdm even on am3703 with no iva2.
*/
omap3_iva_idle(); omap3_iva_idle();
omap3_d2d_idle(); omap3_d2d_idle();
......
...@@ -101,8 +101,10 @@ static int __init sirfsoc_of_pwrc_init(void) ...@@ -101,8 +101,10 @@ static int __init sirfsoc_of_pwrc_init(void)
struct device_node *np; struct device_node *np;
np = of_find_matching_node(NULL, pwrc_ids); np = of_find_matching_node(NULL, pwrc_ids);
if (!np) if (!np) {
panic("unable to find compatible pwrc node in dtb\n"); pr_err("unable to find compatible sirf pwrc node in dtb\n");
return -ENOENT;
}
/* /*
* pwrc behind rtciobrg is not located in memory space * pwrc behind rtciobrg is not located in memory space
......
...@@ -28,8 +28,10 @@ static int __init sirfsoc_of_rstc_init(void) ...@@ -28,8 +28,10 @@ static int __init sirfsoc_of_rstc_init(void)
struct device_node *np; struct device_node *np;
np = of_find_matching_node(NULL, rstc_ids); np = of_find_matching_node(NULL, rstc_ids);
if (!np) if (!np) {
panic("unable to find compatible rstc node in dtb\n"); pr_err("unable to find compatible sirf rstc node in dtb\n");
return -ENOENT;
}
sirfsoc_rstc_base = of_iomap(np, 0); sirfsoc_rstc_base = of_iomap(np, 0);
if (!sirfsoc_rstc_base) if (!sirfsoc_rstc_base)
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/suspend.h> #include <linux/suspend.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/of.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/io.h> #include <linux/io.h>
...@@ -261,7 +262,8 @@ static int s3c_pm_enter(suspend_state_t state) ...@@ -261,7 +262,8 @@ static int s3c_pm_enter(suspend_state_t state)
* require a full power-cycle) * require a full power-cycle)
*/ */
if (!any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) && if (!of_have_populated_dt() &&
!any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) &&
!any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) { !any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) {
printk(KERN_ERR "%s: No wake-up sources!\n", __func__); printk(KERN_ERR "%s: No wake-up sources!\n", __func__);
printk(KERN_ERR "%s: Aborting sleep\n", __func__); printk(KERN_ERR "%s: Aborting sleep\n", __func__);
...@@ -270,8 +272,11 @@ static int s3c_pm_enter(suspend_state_t state) ...@@ -270,8 +272,11 @@ static int s3c_pm_enter(suspend_state_t state)
/* save all necessary core registers not covered by the drivers */ /* save all necessary core registers not covered by the drivers */
if (!of_have_populated_dt()) {
samsung_pm_save_gpios(); samsung_pm_save_gpios();
samsung_pm_saved_gpios(); samsung_pm_saved_gpios();
}
s3c_pm_save_uarts(); s3c_pm_save_uarts();
s3c_pm_save_core(); s3c_pm_save_core();
...@@ -310,8 +315,11 @@ static int s3c_pm_enter(suspend_state_t state) ...@@ -310,8 +315,11 @@ static int s3c_pm_enter(suspend_state_t state)
s3c_pm_restore_core(); s3c_pm_restore_core();
s3c_pm_restore_uarts(); s3c_pm_restore_uarts();
if (!of_have_populated_dt()) {
samsung_pm_restore_gpios(); samsung_pm_restore_gpios();
s3c_pm_restored_gpios(); s3c_pm_restored_gpios();
}
s3c_pm_debug_init(); s3c_pm_debug_init();
......
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