Merge tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 Jul 2012 23:08:40 +0000 (16:08 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 Jul 2012 23:08:40 +0000 (16:08 -0700)
Pull arm soc-specific updates from Arnd Bergmann:
 "This is stuff that does not fit well into another category and in
  particular is not related to a particular board.  The largest part in
  here is extending the am33xx support in the omap platform."

Fix up trivial conflicts in arch/arm/mach-{imx/mach-mx35_3ds.c, tegra/Makefile}

* tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (74 commits)
  ARM: LPC32xx: Add PWM support
  ARM: LPC32xx: Add PWM clock
  ARM: LPC32xx: Set system serial based on cpu unique id
  ARM: vexpress: Config option for early printk console
  ARM: vexpress: Add Device Tree for V2P-CA15_CA7 core tile
  ARM: vexpress: Convert V2P-CA15 Device Tree to 64 bit addresses
  ARM: vexpress: Add fixed regulator for SMSC
  ARM: vexpress: Add missing SP804 interrupt in motherboard's DTS files
  ARM: vexpress: Initial common clock support
  ARM: SAMSUNG: Introduce Kconfig variable for Samsung custom clk API
  ARM: EXYNOS: Add missing static storage class specifier in pmu.c file
  ARM: EXYNOS: Make combiner_init function static
  ARM: EXYNOS: Update HSOTG PHY clock setting for EXYNOS4X12
  ARM: versatile: Make plat-versatile clock optional
  ARM: vexpress: Check master site in daughterboard's sysctl operations
  ARM: vexpress: remove automatic errata workaround selection
  ARM: LPC32xx: Adjust to pl08x DMA interface changes
  ARM: EXYNOS: Clear SYS_WDTRESET bit to use watchdog reset
  ARM: imx: fix mx51 ehci setup errors
  ARM: imx: make ehci power/oc polarities configurable
  ...

13 files changed:
1  2 
arch/arm/Kconfig
arch/arm/mach-ep93xx/edb93xx.c
arch/arm/mach-exynos/common.c
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/devices-imx35.h
arch/arm/mach-imx/mach-mx35_3ds.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/clockdomain.h
arch/arm/mach-omap2/control.h
arch/arm/mach-omap2/irq.c
arch/arm/mach-tegra/Makefile
arch/arm/plat-samsung/Kconfig
arch/arm/plat-samsung/Makefile

diff --combined arch/arm/Kconfig
@@@ -260,6 -260,7 +260,7 @@@ config ARCH_INTEGRATO
        select ICST
        select GENERIC_CLOCKEVENTS
        select PLAT_VERSATILE
+       select PLAT_VERSATILE_CLOCK
        select PLAT_VERSATILE_FPGA_IRQ
        select NEED_MACH_IO_H
        select NEED_MACH_MEMORY_H
@@@ -277,6 -278,7 +278,7 @@@ config ARCH_REALVIE
        select GENERIC_CLOCKEVENTS
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select PLAT_VERSATILE
+       select PLAT_VERSATILE_CLOCK
        select PLAT_VERSATILE_CLCD
        select ARM_TIMER_SP804
        select GPIO_PL061 if GPIOLIB
@@@ -295,6 -297,7 +297,7 @@@ config ARCH_VERSATIL
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select NEED_MACH_IO_H if PCI
        select PLAT_VERSATILE
+       select PLAT_VERSATILE_CLOCK
        select PLAT_VERSATILE_CLCD
        select PLAT_VERSATILE_FPGA_IRQ
        select ARM_TIMER_SP804
@@@ -307,7 -310,7 +310,7 @@@ config ARCH_VEXPRES
        select ARM_AMBA
        select ARM_TIMER_SP804
        select CLKDEV_LOOKUP
-       select HAVE_MACH_CLKDEV
+       select COMMON_CLK
        select GENERIC_CLOCKEVENTS
        select HAVE_CLK
        select HAVE_PATA_PLATFORM
        select NO_IOPORT
        select PLAT_VERSATILE
        select PLAT_VERSATILE_CLCD
+       select REGULATOR_FIXED_VOLTAGE if REGULATOR
        help
          This enables support for the ARM Ltd Versatile Express boards.
  
@@@ -567,6 -571,7 +571,7 @@@ config ARCH_LPC32X
        select CLKDEV_LOOKUP
        select GENERIC_CLOCKEVENTS
        select USE_OF
+       select HAVE_PWM
        help
          Support for the NXP LPC32XX family of processors
  
@@@ -913,7 -918,7 +918,7 @@@ config ARCH_NOMADI
        select ARM_AMBA
        select ARM_VIC
        select CPU_ARM926T
-       select CLKDEV_LOOKUP
+       select COMMON_CLK
        select GENERIC_CLOCKEVENTS
        select PINCTRL
        select MIGHT_HAVE_CACHE_L2X0
@@@ -936,7 -941,6 +941,7 @@@ config ARCH_DAVINC
  
  config ARCH_OMAP
        bool "TI OMAP"
 +      depends on MMU
        select HAVE_CLK
        select ARCH_REQUIRE_GPIOLIB
        select ARCH_HAS_CPUFREQ
@@@ -1022,8 -1026,6 +1027,6 @@@ source "arch/arm/mach-kirkwood/Kconfig
  
  source "arch/arm/mach-ks8695/Kconfig"
  
- source "arch/arm/mach-lpc32xx/Kconfig"
  source "arch/arm/mach-msm/Kconfig"
  
  source "arch/arm/mach-mv78xx0/Kconfig"
@@@ -91,8 -91,8 +91,8 @@@ static void __init edb93xx_register_i2c
                ep93xx_register_i2c(&edb93xx_i2c_gpio_data,
                                    edb93xxa_i2c_board_info,
                                    ARRAY_SIZE(edb93xxa_i2c_board_info));
 -      } else if (machine_is_edb9307() || machine_is_edb9312() ||
 -                 machine_is_edb9315()) {
 +      } else if (machine_is_edb9302() || machine_is_edb9307()
 +              || machine_is_edb9312() || machine_is_edb9315()) {
                ep93xx_register_i2c(&edb93xx_i2c_gpio_data,
                                    edb93xx_i2c_board_info,
                                    ARRAY_SIZE(edb93xx_i2c_board_info));
@@@ -233,6 -233,29 +233,29 @@@ static void __init edb93xx_register_fb(
  }
  
  
+ /*************************************************************************
+  * EDB93xx IDE
+  *************************************************************************/
+ static int __init edb93xx_has_ide(void)
+ {
+       /*
+        * Although EDB9312 and EDB9315 do have IDE capability, they have
+        * INTRQ line wired as pull-up, which makes using IDE interface
+        * problematic.
+        */
+       return machine_is_edb9312() || machine_is_edb9315() ||
+              machine_is_edb9315a();
+ }
+ static void __init edb93xx_register_ide(void)
+ {
+       if (!edb93xx_has_ide())
+               return;
+       ep93xx_register_ide();
+ }
  static void __init edb93xx_init_machine(void)
  {
        ep93xx_init_devices();
        edb93xx_register_i2s();
        edb93xx_register_pwm();
        edb93xx_register_fb();
+       edb93xx_register_ide();
  }
  
  
@@@ -540,7 -540,8 +540,8 @@@ static struct irq_domain_ops combiner_i
        .map    = combiner_irq_domain_map,
  };
  
- void __init combiner_init(void __iomem *combiner_base, struct device_node *np)
+ static void __init combiner_init(void __iomem *combiner_base,
+                                struct device_node *np)
  {
        int i, irq, irq_base;
        unsigned int max_nr, nr_irq;
@@@ -712,6 -713,31 +713,6 @@@ static int __init exynos4_l2x0_cache_in
  early_initcall(exynos4_l2x0_cache_init);
  #endif
  
 -static int __init exynos5_l2_cache_init(void)
 -{
 -      unsigned int val;
 -
 -      if (!soc_is_exynos5250())
 -              return 0;
 -
 -      asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
 -                   "bic %0, %0, #(1 << 2)\n"  /* cache disable */
 -                   "mcr p15, 0, %0, c1, c0, 0\n"
 -                   "mrc p15, 1, %0, c9, c0, 2\n"
 -                   : "=r"(val));
 -
 -      val |= (1 << 9) | (1 << 5) | (2 << 6) | (2 << 0);
 -
 -      asm volatile("mcr p15, 1, %0, c9, c0, 2\n" : : "r"(val));
 -      asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
 -                   "orr %0, %0, #(1 << 2)\n"  /* cache enable */
 -                   "mcr p15, 0, %0, c1, c0, 0\n"
 -                   : : "r"(val));
 -
 -      return 0;
 -}
 -early_initcall(exynos5_l2_cache_init);
 -
  static int __init exynos_init(void)
  {
        printk(KERN_INFO "EXYNOS: Initializing architecture\n");
@@@ -73,7 -73,7 +73,7 @@@ config SOC_IMX3
  
  config SOC_IMX35
        bool
-       select CPU_V6
+       select CPU_V6K
        select ARCH_MXC_IOMUX_V3
        select COMMON_CLK
        select HAVE_EPIT
@@@ -158,6 -158,7 +158,6 @@@ config MACH_MX25_3D
        select IMX_HAVE_PLATFORM_IMX2_WDT
        select IMX_HAVE_PLATFORM_IMXDI_RTC
        select IMX_HAVE_PLATFORM_IMX_I2C
 -      select IMX_HAVE_PLATFORM_IMX_SSI
        select IMX_HAVE_PLATFORM_IMX_FB
        select IMX_HAVE_PLATFORM_IMX_KEYPAD
        select IMX_HAVE_PLATFORM_IMX_UART
@@@ -588,6 -589,7 +588,7 @@@ config MACH_MX35_3D
        select IMX_HAVE_PLATFORM_IPU_CORE
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
+       select IMX_HAVE_PLATFORM_MXC_RTC
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
        help
          Include support for MX35PDK platform. This includes specific
@@@ -24,7 -24,7 +24,7 @@@ extern const struct imx_flexcan_data im
  #define imx35_add_flexcan1(pdata)     imx35_add_flexcan(1, pdata)
  
  extern const struct imx_imx2_wdt_data imx35_imx2_wdt_data;
 -#define imx35_add_imx2_wdt(pdata)       \
 +#define imx35_add_imx2_wdt()       \
        imx_add_imx2_wdt(&imx35_imx2_wdt_data)
  
  extern const struct imx_imx_i2c_data imx35_imx_i2c_data[];
@@@ -68,8 -68,12 +68,12 @@@ extern const struct imx_mxc_nand_data i
  #define imx35_add_mxc_nand(pdata)     \
        imx_add_mxc_nand(&imx35_mxc_nand_data, pdata)
  
+ extern const struct imx_mxc_rtc_data imx35_mxc_rtc_data;
+ #define imx35_add_mxc_rtc()   \
+       imx_add_mxc_rtc(&imx35_mxc_rtc_data)
  extern const struct imx_mxc_w1_data imx35_mxc_w1_data;
 -#define imx35_add_mxc_w1(pdata)       \
 +#define imx35_add_mxc_w1()    \
        imx_add_mxc_w1(&imx35_mxc_w1_data)
  
  extern const struct imx_sdhci_esdhc_imx_data imx35_sdhci_esdhc_imx_data[];
@@@ -540,18 -540,18 +540,18 @@@ static const struct mxc_usbh_platform_d
        .portsc         = MXC_EHCI_MODE_SERIAL,
  };
  
 -static int otg_mode_host;
 +static bool otg_mode_host __initdata;
  
  static int __init mx35_3ds_otg_mode(char *options)
  {
        if (!strcmp(options, "host"))
 -              otg_mode_host = 1;
 +              otg_mode_host = true;
        else if (!strcmp(options, "device"))
 -              otg_mode_host = 0;
 +              otg_mode_host = false;
        else
                pr_info("otg_mode neither \"host\" nor \"device\". "
                        "Defaulting to device\n");
 -      return 0;
 +      return 1;
  }
  __setup("otg_mode=", mx35_3ds_otg_mode);
  
@@@ -571,7 -571,8 +571,8 @@@ static void __init mx35_3ds_init(void
        mxc_iomux_v3_setup_multiple_pads(mx35pdk_pads, ARRAY_SIZE(mx35pdk_pads));
  
        imx35_add_fec(NULL);
 -      imx35_add_imx2_wdt(NULL);
 +      imx35_add_imx2_wdt();
+       imx35_add_mxc_rtc();
        platform_add_devices(devices, ARRAY_SIZE(devices));
  
        imx35_add_imx_uart0(&uart_pdata);
@@@ -66,7 -66,9 +66,7 @@@ ifeq ($(CONFIG_PM),y
  obj-$(CONFIG_ARCH_OMAP2)              += pm24xx.o
  obj-$(CONFIG_ARCH_OMAP2)              += sleep24xx.o
  obj-$(CONFIG_ARCH_OMAP3)              += pm34xx.o sleep34xx.o
 -obj-$(CONFIG_ARCH_OMAP3)              += cpuidle34xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += pm44xx.o omap-mpuss-lowpower.o
 -obj-$(CONFIG_ARCH_OMAP4)              += cpuidle44xx.o
  obj-$(CONFIG_PM_DEBUG)                        += pm-debug.o
  obj-$(CONFIG_OMAP_SMARTREFLEX)          += sr_device.o smartreflex.o
  obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o
@@@ -80,11 -82,6 +80,11 @@@ endi
  
  endif
  
 +ifeq ($(CONFIG_CPU_IDLE),y)
 +obj-$(CONFIG_ARCH_OMAP3)                += cpuidle34xx.o
 +obj-$(CONFIG_ARCH_OMAP4)                += cpuidle44xx.o
 +endif
 +
  # PRCM
  obj-y                                 += prm_common.o
  obj-$(CONFIG_ARCH_OMAP2)              += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
@@@ -93,6 -90,7 +93,7 @@@ obj-$(CONFIG_ARCH_OMAP3)              += vc3xxx_dat
  obj-$(CONFIG_ARCH_OMAP4)              += prcm.o cminst44xx.o cm44xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += prcm_mpu44xx.o prminst44xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += vc44xx_data.o vp44xx_data.o prm44xx.o
+ obj-$(CONFIG_SOC_AM33XX)              += prcm.o prm33xx.o cm33xx.o
  
  # OMAP voltage domains
  voltagedomain-common                  := voltage.o vc.o vp.o
@@@ -102,6 -100,7 +103,7 @@@ obj-$(CONFIG_ARCH_OMAP3)           += $(voltaged
  obj-$(CONFIG_ARCH_OMAP3)              += voltagedomains3xxx_data.o
  obj-$(CONFIG_ARCH_OMAP4)              += $(voltagedomain-common)
  obj-$(CONFIG_ARCH_OMAP4)              += voltagedomains44xx_data.o
+ obj-$(CONFIG_SOC_AM33XX)                += voltagedomains33xx_data.o
  
  # OMAP powerdomain framework
  powerdomain-common                    += powerdomain.o powerdomain-common.o
@@@ -116,9 -115,12 +118,11 @@@ obj-$(CONFIG_ARCH_OMAP3)         += powerdomai
  obj-$(CONFIG_ARCH_OMAP4)              += $(powerdomain-common)
  obj-$(CONFIG_ARCH_OMAP4)              += powerdomain44xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += powerdomains44xx_data.o
+ obj-$(CONFIG_SOC_AM33XX)              += powerdomain33xx.o
+ obj-$(CONFIG_SOC_AM33XX)              += powerdomains33xx_data.o
  
  # PRCM clockdomain control
  clockdomain-common                    += clockdomain.o
 -clockdomain-common                    += clockdomains_common_data.o
  obj-$(CONFIG_ARCH_OMAP2)              += $(clockdomain-common)
  obj-$(CONFIG_ARCH_OMAP2)              += clockdomain2xxx_3xxx.o
  obj-$(CONFIG_ARCH_OMAP2)              += clockdomains2xxx_3xxx_data.o
@@@ -131,6 -133,8 +135,8 @@@ obj-$(CONFIG_ARCH_OMAP3)           += clockdomai
  obj-$(CONFIG_ARCH_OMAP4)              += $(clockdomain-common)
  obj-$(CONFIG_ARCH_OMAP4)              += clockdomain44xx.o
  obj-$(CONFIG_ARCH_OMAP4)              += clockdomains44xx_data.o
+ obj-$(CONFIG_SOC_AM33XX)              += clockdomain33xx.o
+ obj-$(CONFIG_SOC_AM33XX)              += clockdomains33xx_data.o
  
  # Clock framework
  obj-$(CONFIG_ARCH_OMAP2)              += $(clock-common) clock2xxx.o
@@@ -246,6 -250,9 +252,6 @@@ obj-y                                      += $(omap-flash-y) $(omap-fla
  omap-hsmmc-$(CONFIG_MMC_OMAP_HS)      := hsmmc.o
  obj-y                                 += $(omap-hsmmc-m) $(omap-hsmmc-y)
  
 -
 -usbfs-$(CONFIG_ARCH_OMAP_OTG)         := usb-fs.o
 -obj-y                                 += $(usbfs-m) $(usbfs-y)
  obj-y                                 += usb-musb.o
  obj-y                                 += omap_phy_internal.o
  
   *
   * CLKDM_NO_AUTODEPS: Prevent "autodeps" from being added/removed from this
   *     clockdomain.  (Currently, this applies to OMAP3 clockdomains only.)
 + * CLKDM_ACTIVE_WITH_MPU: The PRCM guarantees that this clockdomain is
 + *     active whenever the MPU is active.  True for interconnects and
 + *     the WKUP clockdomains.
   */
  #define CLKDM_CAN_FORCE_SLEEP                 (1 << 0)
  #define CLKDM_CAN_FORCE_WAKEUP                        (1 << 1)
  #define CLKDM_CAN_ENABLE_AUTO                 (1 << 2)
  #define CLKDM_CAN_DISABLE_AUTO                        (1 << 3)
  #define CLKDM_NO_AUTODEPS                     (1 << 4)
 +#define CLKDM_ACTIVE_WITH_MPU                 (1 << 5)
  
  #define CLKDM_CAN_HWSUP               (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_DISABLE_AUTO)
  #define CLKDM_CAN_SWSUP               (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
@@@ -199,6 -195,7 +199,7 @@@ int clkdm_hwmod_disable(struct clockdom
  extern void __init omap242x_clockdomains_init(void);
  extern void __init omap243x_clockdomains_init(void);
  extern void __init omap3xxx_clockdomains_init(void);
+ extern void __init am33xx_clockdomains_init(void);
  extern void __init omap44xx_clockdomains_init(void);
  extern void _clkdm_add_autodeps(struct clockdomain *clkdm);
  extern void _clkdm_del_autodeps(struct clockdomain *clkdm);
  extern struct clkdm_ops omap2_clkdm_operations;
  extern struct clkdm_ops omap3_clkdm_operations;
  extern struct clkdm_ops omap4_clkdm_operations;
+ extern struct clkdm_ops am33xx_clkdm_operations;
  
  extern struct clkdm_dep gfx_24xx_wkdeps[];
  extern struct clkdm_dep dsp_24xx_wkdeps[];
  extern struct clockdomain wkup_common_clkdm;
 -extern struct clockdomain prm_common_clkdm;
 -extern struct clockdomain cm_common_clkdm;
  
  #endif
@@@ -21,6 -21,8 +21,8 @@@
  #include <mach/ctrl_module_pad_core_44xx.h>
  #include <mach/ctrl_module_pad_wkup_44xx.h>
  
+ #include <plat/am33xx.h>
  #ifndef __ASSEMBLY__
  #define OMAP242X_CTRL_REGADDR(reg)                                    \
                OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg))
@@@ -28,6 -30,8 +30,8 @@@
                OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg))
  #define OMAP343X_CTRL_REGADDR(reg)                                    \
                OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg))
+ #define AM33XX_CTRL_REGADDR(reg)                                      \
+               AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg))
  #else
  #define OMAP242X_CTRL_REGADDR(reg)                                    \
                OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg))
@@@ -35,6 -39,8 +39,8 @@@
                OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg))
  #define OMAP343X_CTRL_REGADDR(reg)                                    \
                OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg))
+ #define AM33XX_CTRL_REGADDR(reg)                                      \
+               AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg))
  #endif /* __ASSEMBLY__ */
  
  /*
                                                OMAP343X_SCRATCHPAD + reg)
  
  /* AM35XX_CONTROL_IPSS_CLK_CTRL bits */
- #define AM35XX_USBOTG_VBUSP_CLK_SHIFT   0
- #define AM35XX_CPGMAC_VBUSP_CLK_SHIFT   1
- #define AM35XX_VPFE_VBUSP_CLK_SHIFT     2
- #define AM35XX_HECC_VBUSP_CLK_SHIFT     3
- #define AM35XX_USBOTG_FCLK_SHIFT        8
- #define AM35XX_CPGMAC_FCLK_SHIFT        9
- #define AM35XX_VPFE_FCLK_SHIFT          10
- /*AM35XX CONTROL_LVL_INTR_CLEAR bits*/
+ #define AM35XX_USBOTG_VBUSP_CLK_SHIFT 0
+ #define AM35XX_CPGMAC_VBUSP_CLK_SHIFT 1
+ #define AM35XX_VPFE_VBUSP_CLK_SHIFT   2
+ #define AM35XX_HECC_VBUSP_CLK_SHIFT   3
+ #define AM35XX_USBOTG_FCLK_SHIFT      8
+ #define AM35XX_CPGMAC_FCLK_SHIFT      9
+ #define AM35XX_VPFE_FCLK_SHIFT                10
+ /* AM35XX CONTROL_LVL_INTR_CLEAR bits */
  #define AM35XX_CPGMAC_C0_MISC_PULSE_CLR       BIT(0)
  #define AM35XX_CPGMAC_C0_RX_PULSE_CLR BIT(1)
  #define AM35XX_CPGMAC_C0_RX_THRESH_CLR        BIT(2)
  #define AM35XX_VPFE_CCDC_VD1_INT_CLR  BIT(6)
  #define AM35XX_VPFE_CCDC_VD2_INT_CLR  BIT(7)
  
- /*AM35XX CONTROL_IP_SW_RESET bits*/
+ /* AM35XX CONTROL_IP_SW_RESET bits */
  #define AM35XX_USBOTGSS_SW_RST                BIT(0)
  #define AM35XX_CPGMACSS_SW_RST                BIT(1)
  #define AM35XX_VPFE_VBUSP_SW_RST      BIT(2)
  #define AM35XX_HECC_SW_RST            BIT(3)
  #define AM35XX_VPFE_PCLK_SW_RST               BIT(4)
  
- /*
-  * CONTROL AM33XX STATUS register
-  */
+ /* AM33XX CONTROL_STATUS register */
  #define AM33XX_CONTROL_STATUS         0x040
+ #define AM33XX_CONTROL_SEC_CLK_CTRL   0x1bc
  
- /*
-  * CONTROL OMAP STATUS register to identify OMAP3 features
-  */
+ /* AM33XX CONTROL_STATUS bitfields (partial) */
+ #define AM33XX_CONTROL_STATUS_SYSBOOT1_SHIFT          22
+ #define AM33XX_CONTROL_STATUS_SYSBOOT1_MASK           (0x3 << 22)
+ /* CONTROL OMAP STATUS register to identify OMAP3 features */
  #define OMAP3_CONTROL_OMAP_STATUS     0x044c
  
  #define OMAP3_SGX_SHIFT                       13
@@@ -397,8 -404,6 +404,8 @@@ extern u32 omap3_arm_context[128]
  extern void omap3_control_save_context(void);
  extern void omap3_control_restore_context(void);
  extern void omap3_ctrl_write_boot_mode(u8 bootmode);
 +extern void omap_ctrl_write_dsp_boot_addr(u32 bootaddr);
 +extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode);
  extern void omap3630_ctrl_disable_rta(void);
  extern int omap3_ctrl_save_padconf(void);
  #else
@@@ -262,7 -262,7 +262,7 @@@ int __init omap_intc_of_init(struct dev
                             struct device_node *parent)
  {
        struct resource res;
 -      u32 nr_irqs = 96;
 +      u32 nr_irq = 96;
  
        if (WARN_ON(!node))
                return -ENODEV;
                return -EINVAL;
        }
  
 -      if (of_property_read_u32(node, "ti,intc-size", &nr_irqs))
 -              pr_warn("unable to get intc-size, default to %d\n", nr_irqs);
 +      if (of_property_read_u32(node, "ti,intc-size", &nr_irq))
 +              pr_warn("unable to get intc-size, default to %d\n", nr_irq);
  
 -      omap_init_irq(res.start, nr_irqs, of_node_get(node));
 +      omap_init_irq(res.start, nr_irq, of_node_get(node));
  
        return 0;
  }
  
- #ifdef CONFIG_ARCH_OMAP3
+ #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
  static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)];
  
  void omap_intc_save_context(void)
@@@ -8,9 -8,10 +8,10 @@@ obj-
  obj-y                                 += fuse.o
  obj-y                                 += pmc.o
  obj-y                                 += flowctrl.o
 +obj-y                                 += powergate.o
+ obj-y                                 += apbio.o
  obj-$(CONFIG_CPU_IDLE)                        += cpuidle.o
  obj-$(CONFIG_CPU_IDLE)                        += sleep.o
 -obj-$(CONFIG_ARCH_TEGRA_2x_SOC)               += powergate.o
  obj-$(CONFIG_ARCH_TEGRA_2x_SOC)         += tegra2_clocks.o
  obj-$(CONFIG_ARCH_TEGRA_2x_SOC)               += tegra2_emc.o
  obj-$(CONFIG_ARCH_TEGRA_3x_SOC)               += board-dt-tegra30.o
@@@ -18,7 -19,7 +19,7 @@@ obj-$(CONFIG_ARCH_TEGRA_3x_SOC)               += teg
  obj-$(CONFIG_SMP)                     += platsmp.o headsmp.o
  obj-$(CONFIG_SMP)                       += reset.o
  obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o
- obj-$(CONFIG_TEGRA_SYSTEM_DMA)                += dma.o apbio.o
+ obj-$(CONFIG_TEGRA_SYSTEM_DMA)                += dma.o
  obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o
  obj-$(CONFIG_TEGRA_PCI)                       += pcie.o
  obj-$(CONFIG_USB_SUPPORT)             += usb_phy.o
@@@ -78,6 -78,10 +78,10 @@@ config S5P_HR
  
  # clock options
  
+ config SAMSUNG_CLOCK
+       bool
+       default y if !COMMON_CLK
  config SAMSUNG_CLKSRC
        bool
        help
@@@ -491,6 -495,14 +495,6 @@@ config S5P_SLEE
          Internal config node to apply common S5P sleep management code.
          Can be selected by S5P and newer SoCs with similar sleep procedure.
  
 -comment "Power Domain"
 -
 -config SAMSUNG_PD
 -      bool "Samsung Power Domain"
 -      depends on PM_RUNTIME
 -      help
 -        Say Y here if you want to control Power Domain by Runtime PM.
 -
  config DEBUG_S3C_UART
        depends on PLAT_SAMSUNG
        int
@@@ -15,8 -15,8 +15,8 @@@ obj-y                         += init.o cpu.
  obj-$(CONFIG_ARCH_USES_GETTIMEOFFSET)   += time.o
  obj-$(CONFIG_S5P_HRT)                 += s5p-time.o
  
- obj-y                         += clock.o
- obj-y                         += pwm-clock.o
+ obj-$(CONFIG_SAMSUNG_CLOCK)   += clock.o
+ obj-$(CONFIG_SAMSUNG_CLOCK)   += pwm-clock.o
  
  obj-$(CONFIG_SAMSUNG_CLKSRC)  += clock-clksrc.o
  obj-$(CONFIG_S5P_CLOCK)               += s5p-clock.o
@@@ -60,6 -60,10 +60,6 @@@ obj-$(CONFIG_SAMSUNG_WAKEMASK)       += wakeu
  obj-$(CONFIG_S5P_PM)          += s5p-pm.o s5p-irq-pm.o
  obj-$(CONFIG_S5P_SLEEP)               += s5p-sleep.o
  
 -# PD support
 -
 -obj-$(CONFIG_SAMSUNG_PD)      += pd.o
 -
  # PWM support
  
  obj-$(CONFIG_HAVE_PWM)                += pwm.o