]> Pileus Git - ~andy/linux/commitdiff
Merge tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 11 Nov 2013 07:49:45 +0000 (16:49 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 11 Nov 2013 07:49:45 +0000 (16:49 +0900)
Pull ARM SoC platform changes from Olof Johansson:
 "New and updated SoC support.  Among the things new for this release
  are:

   - More support for the AM33xx platforms from TI
   - Tegra 124 support, and some updates to older tegra families as well
   - imx cleanups and updates across the board
   - A rename of Broadcom's Mobile platforms which were introduced as
     ARCH_BCM, and turned out to be too broad a name.  New name is
     ARCH_BCM_MOBILE.
   - A whole bunch of updates and fixes for integrator, making the
     platform code more modern and switches over to DT-only booting.
   - Support for two new Renesas shmobile chipsets.  Next up for them is
     more work on consolidation instead of introduction of new
     non-multiplatform SoCs, we're all looking forward to that!
   - Misc cleanups for older Samsung platforms, some Allwinner updates,
     etc"

* tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (159 commits)
  ARM: bcm281xx: Add ARCH_BCM_MOBILE to bcm config
  ARM: bcm_defconfig: Run "make savedefconfig"
  ARM: bcm281xx: Add ARCH Timers to config
  rename ARCH_BCM to ARCH_BCM_MOBILE (mach-bcm)
  ARM: vexpress: Enable platform-specific options in defconfig
  ARM: vexpress: Make defconfig work again
  ARM: sunxi: remove .init_time hooks
  ARM: imx: enable suspend for imx6sl
  ARM: imx: ensure dsm_request signal is not asserted when setting LPM
  ARM: imx6q: call WB and RBC configuration from imx6q_pm_enter()
  ARM: imx6q: move low-power code out of clock driver
  ARM: imx: drop extern with function prototypes in common.h
  ARM: imx: reset core along with enable/disable operation
  ARM: imx: do not return from imx_cpu_die() call
  ARM: imx_v6_v7_defconfig: Select CONFIG_PROVE_LOCKING
  ARM: imx_v6_v7_defconfig: Enable LEDS_GPIO related options
  ARM: mxs_defconfig: Turn off CONFIG_DEBUG_GPIO
  ARM: imx: replace imx6q_restart() with mxc_restart()
  ARM: mach-imx: mm-imx5: Retrieve iomuxc base address from dt
  ARM: mach-imx: mm-imx5: Retrieve tzic base address from dt
  ...

1  2 
arch/arm/Kconfig
arch/arm/boot/dts/integratorcp.dts
arch/arm/mach-highbank/Kconfig
arch/arm/mach-imx/Kconfig
arch/arm/mach-omap2/id.c
arch/arm/mach-omap2/timer.c
arch/arm/mach-shmobile/board-lager.c
arch/arm/mach-shmobile/include/mach/r8a7778.h
arch/arm/mach-shmobile/setup-r8a7778.c
arch/arm/mach-tegra/Kconfig
drivers/usb/host/ohci-s3c2410.c

diff --combined arch/arm/Kconfig
index e98261cb05bdb709c957ef3e77421ec50d111253,bca9f94d27241916c2e9d741c060e0733a24a6cd..9bd3a85d880f412191478826ec1ea860e2b50097
@@@ -317,6 -317,7 +317,7 @@@ config ARCH_INTEGRATO
        select NEED_MACH_MEMORY_H
        select PLAT_VERSATILE
        select SPARSE_IRQ
+       select USE_OF
        select VERSATILE_FPGA_IRQ
        help
          Support for ARM's Integrator platform.
@@@ -358,6 -359,7 +359,6 @@@ config ARCH_AT9
        bool "Atmel AT91"
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
 -      select HAVE_CLK
        select IRQ_DOMAIN
        select NEED_MACH_GPIO_H
        select NEED_MACH_IO_H if PCCARD
@@@ -371,6 -373,7 +372,6 @@@ config ARCH_CLPS711
        bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"
        select ARCH_REQUIRE_GPIOLIB
        select AUTO_ZRELADDR
 -      select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select COMMON_CLK
        select CPU_ARM720T
  config ARCH_GEMINI
        bool "Cortina Systems Gemini"
        select ARCH_REQUIRE_GPIOLIB
 -      select ARCH_USES_GETTIMEOFFSET
 +      select CLKSRC_MMIO
        select CPU_FA526
 +      select GENERIC_CLOCKEVENTS
        select NEED_MACH_GPIO_H
        help
          Support for the Cortina Systems Gemini family SoCs
@@@ -630,6 -632,7 +631,6 @@@ config ARCH_PX
  config ARCH_MSM
        bool "Qualcomm MSM"
        select ARCH_REQUIRE_GPIOLIB
 -      select CLKDEV_LOOKUP
        select CLKSRC_OF if OF
        select COMMON_CLK
        select GENERIC_CLOCKEVENTS
@@@ -647,6 -650,7 +648,6 @@@ config ARCH_SHMOBIL
        select GENERIC_CLOCKEVENTS
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
 -      select HAVE_CLK
        select HAVE_MACH_CLKDEV
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
@@@ -703,6 -707,7 +704,6 @@@ config ARCH_S3C24X
        select CLKSRC_SAMSUNG_PWM
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
@@@ -723,22 -728,21 +724,22 @@@ config ARCH_S3C64X
        select ARM_VIC
        select CLKDEV_LOOKUP
        select CLKSRC_SAMSUNG_PWM
+       select COMMON_CLK
        select CPU_V6
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_TCM
        select NEED_MACH_GPIO_H
        select NO_IOPORT
        select PLAT_SAMSUNG
 +      select PM_GENERIC_DOMAINS
        select S3C_DEV_NAND
        select S3C_GPIO_TRACK
        select SAMSUNG_ATAGS
-       select SAMSUNG_CLKSRC
        select SAMSUNG_GPIOLIB_4BIT
 +      select SAMSUNG_WAKEMASK
        select SAMSUNG_WDT_RESET
        select USB_ARCH_HAS_OHCI
        help
@@@ -751,6 -755,7 +752,6 @@@ config ARCH_S5P64X
        select CPU_V6
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
@@@ -769,6 -774,7 +770,6 @@@ config ARCH_S5PC10
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
@@@ -788,6 -794,7 +789,6 @@@ config ARCH_S5PV21
        select CPU_V7
        select GENERIC_CLOCKEVENTS
        select GPIO_SAMSUNG
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
@@@ -804,9 -811,11 +805,9 @@@ config ARCH_EXYNO
        select ARCH_REQUIRE_GPIOLIB
        select ARCH_SPARSEMEM_ENABLE
        select ARM_GIC
 -      select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_V7
        select GENERIC_CLOCKEVENTS
 -      select HAVE_CLK
        select HAVE_S3C2410_I2C if I2C
        select HAVE_S3C2410_WATCHDOG if WATCHDOG
        select HAVE_S3C_RTC if RTC_CLASS
        help
          Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
  
 -config ARCH_SHARK
 -      bool "Shark"
 -      select ARCH_USES_GETTIMEOFFSET
 -      select CPU_SA110
 -      select ISA
 -      select ISA_DMA
 -      select NEED_MACH_MEMORY_H
 -      select PCI
 -      select VIRT_TO_BUS
 -      select ZONE_DMA
 -      help
 -        Support for the StrongARM based Digital DNARD machine, also known
 -        as "Shark" (<http://www.shark-linux.de/shark.html>).
 -
  config ARCH_DAVINCI
        bool "TI DaVinci"
        select ARCH_HAS_HOLES_MEMORYMODEL
@@@ -843,6 -866,7 +844,6 @@@ config ARCH_OMAP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS
        select GENERIC_IRQ_CHIP
 -      select HAVE_CLK
        select HAVE_IDE
        select IRQ_DOMAIN
        select NEED_MACH_IO_H if PCCARD
@@@ -986,7 -1010,9 +987,7 @@@ source "arch/arm/mach-sti/Kconfig
  
  source "arch/arm/mach-s3c24xx/Kconfig"
  
 -if ARCH_S3C64XX
  source "arch/arm/mach-s3c64xx/Kconfig"
 -endif
  
  source "arch/arm/mach-s5p64x0/Kconfig"
  
@@@ -1406,6 -1432,12 +1407,6 @@@ config PCI_NANOENGIN
  config PCI_SYSCALL
        def_bool PCI
  
 -# Select the host bridge type
 -config PCI_HOST_VIA82C505
 -      bool
 -      depends on PCI && ARCH_SHARK
 -      default y
 -
  config PCI_HOST_ITE8152
        bool
        depends on PCI && MACH_ARMCORE
index 72693a69f8300421f687f404ffa9f95768ea33d3,a3a06b893237d068ba731affb69a2a9b7729ccf6..7deb3a3182b42513d95bfdf34894692425a62c43
@@@ -9,28 -9,29 +9,28 @@@
        model = "ARM Integrator/CP";
        compatible = "arm,integrator-cp";
  
 -      aliases {
 -              arm,timer-primary = &timer2;
 -              arm,timer-secondary = &timer1;
 -      };
 -
        chosen {
                bootargs = "root=/dev/ram0 console=ttyAMA0,38400n8 earlyprintk";
        };
  
-       cpcon {
-               /* CP controller registers */
+       syscon {
+               compatible = "arm,integrator-cp-syscon";
                reg = <0xcb000000 0x100>;
        };
  
        timer0: timer@13000000 {
 +              /* TIMER0 runs @ 25MHz */
                compatible = "arm,integrator-cp-timer";
 +              status = "disabled";
        };
  
        timer1: timer@13000100 {
 +              /* TIMER1 runs @ 1MHz */
                compatible = "arm,integrator-cp-timer";
        };
  
        timer2: timer@13000200 {
 +              /* TIMER2 runs @ 1MHz */
                compatible = "arm,integrator-cp-timer";
        };
  
index 616408d76be545e75f9e36f1591b58451a520d9c,965623de354fbfcc9a8fe055a0a2fb936a258867..fe98df44579cfa5c22c77ebd53dd9efbee15cf1e
@@@ -10,8 -10,10 +10,9 @@@ config ARCH_HIGHBAN
        select ARM_ERRATA_775420
        select ARM_ERRATA_798181
        select ARM_GIC
+       select ARM_PSCI
        select ARM_TIMER_SP804
        select CACHE_L2X0
 -      select CLKDEV_LOOKUP
        select COMMON_CLK
        select CPU_V7
        select GENERIC_CLOCKEVENTS
index a91909b956017326e02101e528a59e34cde72905,270f78667dc60efeda197d270ae38358c0af2a5b..7a6e6f71006893a9c2a54d4a17166762c4647977
@@@ -4,13 -4,14 +4,14 @@@ config ARCH_MX
        select ARM_CPU_SUSPEND if PM
        select ARM_PATCH_PHYS_VIRT
        select AUTO_ZRELADDR if !ZBOOT_ROM
 -      select CLKDEV_LOOKUP
        select CLKSRC_MMIO
 +      select COMMON_CLK
        select GENERIC_ALLOCATOR
        select GENERIC_CLOCKEVENTS
        select GENERIC_IRQ_CHIP
        select MIGHT_HAVE_CACHE_L2X0 if ARCH_MULTI_V6_V7
        select MULTI_IRQ_HANDLER
+       select SOC_BUS
        select SPARSE_IRQ
        select USE_OF
        help
@@@ -24,7 -25,7 +25,7 @@@ config MXC_IRQ_PRIO
        help
          Select this if you want to use prioritized IRQ handling.
          This feature prevents higher priority ISR to be interrupted
-         by lower priority IRQ even IRQF_DISABLED flag is not set.
+         by lower priority IRQ.
          This may be useful in embedded applications, where are strong
          requirements for timing.
          Say N here, unless you have a specialized requirement.
@@@ -92,12 -93,14 +93,12 @@@ config MACH_MX2
  config SOC_IMX1
        bool
        select ARCH_MX1
 -      select COMMON_CLK
        select CPU_ARM920T
        select IMX_HAVE_IOMUX_V1
        select MXC_AVIC
  
  config SOC_IMX21
        bool
 -      select COMMON_CLK
        select CPU_ARM926T
        select IMX_HAVE_IOMUX_V1
        select MXC_AVIC
@@@ -106,6 -109,7 +107,6 @@@ config SOC_IMX2
        bool
        select ARCH_MX25
        select ARCH_MXC_IOMUX_V3
 -      select COMMON_CLK
        select CPU_ARM926T
        select MXC_AVIC
  
@@@ -113,6 -117,7 +114,6 @@@ config SOC_IMX2
        bool
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_OPP
 -      select COMMON_CLK
        select CPU_ARM926T
        select IMX_HAVE_IOMUX_V1
        select MACH_MX27
  
  config SOC_IMX31
        bool
 -      select COMMON_CLK
        select CPU_V6
        select IMX_HAVE_PLATFORM_MXC_RNGA
        select MXC_AVIC
  config SOC_IMX35
        bool
        select ARCH_MXC_IOMUX_V3
 -      select COMMON_CLK
        select CPU_V6K
        select HAVE_EPIT
        select MXC_AVIC
@@@ -138,6 -145,7 +139,6 @@@ config SOC_IMX
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_OPP
        select ARCH_MXC_IOMUX_V3
 -      select COMMON_CLK
        select CPU_V7
        select MXC_TZIC
  
@@@ -784,6 -792,7 +785,6 @@@ config SOC_IMX6
        select ARM_ERRATA_764369 if SMP
        select ARM_ERRATA_775420
        select ARM_GIC
 -      select COMMON_CLK
        select CPU_V7
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
        select HAVE_IMX_SRC
        select HAVE_SMP
        select MFD_SYSCON
+       select MIGHT_HAVE_PCI
+       select PCI_DOMAINS if PCI
        select PINCTRL
        select PINCTRL_IMX6Q
        select PL310_ERRATA_588369 if CACHE_PL310
diff --combined arch/arm/mach-omap2/id.c
index ef32d11c4bca6f5e08ead35d70f2177a85c68b8d,4f8f1cb3f5f76be68af9134147551a936451b81d..9428c5f9d4f2faa47e91a2caa193ecf39bba39fb
@@@ -18,7 -18,6 +18,7 @@@
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/io.h>
 +#include <linux/random.h>
  #include <linux/slab.h>
  
  #ifdef CONFIG_SOC_BUS
@@@ -131,17 -130,6 +131,17 @@@ void omap_get_die_id(struct omap_die_i
        odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_3);
  }
  
 +static int __init omap_feed_randpool(void)
 +{
 +      struct omap_die_id odi;
 +
 +      /* Throw the die ID into the entropy pool at boot */
 +      omap_get_die_id(&odi);
 +      add_device_randomness(&odi, sizeof(odi));
 +      return 0;
 +}
 +omap_device_initcall(omap_feed_randpool);
 +
  void __init omap2xxx_check_revision(void)
  {
        int i, j;
@@@ -588,8 -576,8 +588,8 @@@ void __init omap5xxx_check_revision(voi
        case 0xb942:
                switch (rev) {
                case 0:
-                       omap_revision = OMAP5430_REV_ES1_0;
-                       break;
+                       /* No support for ES1.0 Test chip */
+                       BUG();
                case 1:
                default:
                        omap_revision = OMAP5430_REV_ES2_0;
        case 0xb998:
                switch (rev) {
                case 0:
-                       omap_revision = OMAP5432_REV_ES1_0;
-                       break;
+                       /* No support for ES1.0 Test chip */
+                       BUG();
                case 1:
                default:
                        omap_revision = OMAP5432_REV_ES2_0;
index 538e7cda5eea5069dc2ae0c11a8e18fdc6f6f938,d59b51f07cf23a45b22daa2aabf35358c92ba0bf..3ca81e0ada5e228e083ed591f0976174e2e6b972
@@@ -55,6 -55,7 +55,7 @@@
  #include "soc.h"
  #include "common.h"
  #include "powerdomain.h"
+ #include "omap-secure.h"
  
  #define REALTIME_COUNTER_BASE                         0x48243200
  #define INCREMENTER_NUMERATOR_OFFSET                  0x10
  static struct omap_dm_timer clkev;
  static struct clock_event_device clockevent_gpt;
  
+ #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
+ static unsigned long arch_timer_freq;
+ void set_cntfreq(void)
+ {
+       omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq);
+ }
+ #endif
  static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)
  {
        struct clock_event_device *evt = &clockevent_gpt;
@@@ -78,7 -88,7 +88,7 @@@
  
  static struct irqaction omap2_gp_timer_irq = {
        .name           = "gp_timer",
 -      .flags          = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
 +      .flags          = IRQF_TIMER | IRQF_IRQPOLL,
        .handler        = omap2_gp_timer_interrupt,
  };
  
@@@ -515,6 -525,10 +525,10 @@@ static void __init realtime_counter_ini
                num = 8;
                den = 25;
                break;
+       case 20000000:
+               num = 192;
+               den = 625;
+               break;
        case 2600000:
                num = 384;
                den = 1625;
        reg |= den;
        __raw_writel(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET);
  
+       arch_timer_freq = (rate / den) * num;
+       set_cntfreq();
        iounmap(base);
  }
  #else
@@@ -628,7 -645,7 +645,7 @@@ void __init omap4_local_timer_init(void
  #endif /* CONFIG_HAVE_ARM_TWD */
  #endif /* CONFIG_ARCH_OMAP4 */
  
 -#ifdef CONFIG_SOC_OMAP5
 +#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
  void __init omap5_realtime_timer_init(void)
  {
        omap4_sync32k_timer_init();
  
        clocksource_of_init();
  }
 -#endif /* CONFIG_SOC_OMAP5 */
 +#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */
  
  /**
   * omap_timer_init - build and register timer device with an
index 66edb7e10089875ba494c7ebc47dc9dc1b5c75ed,4e040e4d1102cd6100a2cf1119f586e58c11226d..fd6146ca7a5af23630fe4a67cf7371af796fcd21
@@@ -56,7 -56,7 +56,7 @@@ static struct gpio_led lager_leds[] = 
        },
  };
  
 -static __initdata struct gpio_led_platform_data lager_leds_pdata = {
 +static const struct gpio_led_platform_data lager_leds_pdata __initconst = {
        .leds           = lager_leds,
        .num_leds       = ARRAY_SIZE(lager_leds),
  };
@@@ -72,7 -72,7 +72,7 @@@ static struct gpio_keys_button gpio_but
        GPIO_KEY(KEY_1,         RCAR_GP_PIN(1, 14),     "SW2-pin1"),
  };
  
 -static __initdata struct gpio_keys_platform_data lager_keys_pdata = {
 +static const struct gpio_keys_platform_data lager_keys_pdata __initconst = {
        .buttons        = gpio_buttons,
        .nbuttons       = ARRAY_SIZE(gpio_buttons),
  };
@@@ -84,24 -84,24 +84,24 @@@ static struct regulator_consumer_suppl
  };
  
  /* MMCIF */
 -static struct sh_mmcif_plat_data mmcif1_pdata __initdata = {
 +static const struct sh_mmcif_plat_data mmcif1_pdata __initconst = {
        .caps           = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE,
  };
  
 -static struct resource mmcif1_resources[] __initdata = {
 +static const struct resource mmcif1_resources[] __initconst = {
        DEFINE_RES_MEM_NAMED(0xee220000, 0x80, "MMCIF1"),
        DEFINE_RES_IRQ(gic_spi(170)),
  };
  
  /* Ether */
 -static struct sh_eth_plat_data ether_pdata __initdata = {
 +static const struct sh_eth_plat_data ether_pdata __initconst = {
        .phy                    = 0x1,
        .edmac_endian           = EDMAC_LITTLE_ENDIAN,
        .phy_interface          = PHY_INTERFACE_MODE_RMII,
        .ether_link_active_low  = 1,
  };
  
 -static struct resource ether_resources[] __initdata = {
 +static const struct resource ether_resources[] __initconst = {
        DEFINE_RES_MEM(0xee700000, 0x400),
        DEFINE_RES_IRQ(gic_spi(162)),
  };
@@@ -180,14 -180,15 +180,15 @@@ static void __init lager_init(void
        phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup);
  }
  
 -static const char *lager_boards_compat_dt[] __initdata = {
 +static const char * const lager_boards_compat_dt[] __initconst = {
        "renesas,lager",
        NULL,
  };
  
  DT_MACHINE_START(LAGER_DT, "lager")
+       .smp            = smp_ops(r8a7790_smp_ops),
        .init_early     = r8a7790_init_early,
-       .init_time      = r8a7790_timer_init,
+       .init_time      = rcar_gen2_timer_init,
        .init_machine   = lager_init,
        .dt_compat      = lager_boards_compat_dt,
  MACHINE_END
index 48933def0d5581d8111164d6573967ce47e01e99,dbe221a484d5da01d61edba3a00e0aa3fae44c85..441886c9714baddffb609247b872fca7054c514a
@@@ -1,6 -1,7 +1,7 @@@
  /*
   * Copyright (C) 2013  Renesas Solutions Corp.
   * Copyright (C) 2013  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+  * Copyright (C) 2013  Cogent Embedded, Inc.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
  #include <linux/sh_eth.h>
  #include <linux/platform_data/camera-rcar.h>
  
+ /* HPB-DMA slave IDs */
+ enum {
+       HPBDMA_SLAVE_DUMMY,
+       HPBDMA_SLAVE_SDHI0_TX,
+       HPBDMA_SLAVE_SDHI0_RX,
+ };
  extern void r8a7778_add_standard_devices(void);
  extern void r8a7778_add_standard_devices_dt(void);
 -extern void r8a7778_add_ether_device(struct sh_eth_plat_data *pdata);
 -extern void r8a7778_add_vin_device(int id,
 -                                 struct rcar_vin_platform_data *pdata);
  extern void r8a7778_add_dt_devices(void);
  
  extern void r8a7778_init_late(void);
@@@ -30,6 -41,9 +38,9 @@@ extern void r8a7778_init_delay(void)
  extern void r8a7778_init_irq_dt(void);
  extern void r8a7778_clock_init(void);
  extern void r8a7778_init_irq_extpin(int irlm);
+ extern void r8a7778_init_irq_extpin_dt(int irlm);
  extern void r8a7778_pinmux_init(void);
  
+ extern int r8a7778_usb_phy_power(bool enable);
  #endif /* __ASM_R8A7778_H__ */
index 468ee65511846ae2be00c8e1ca212204424171d4,16d49aa8b5dbedb48265d7394b6f7fc1208b468b..03fcc5974ef92170c5002bf857ddb35e95a49d57
@@@ -24,6 -24,7 +24,7 @@@
  #include <linux/irqchip/arm-gic.h>
  #include <linux/of.h>
  #include <linux/of_platform.h>
+ #include <linux/platform_data/dma-rcar-hpbdma.h>
  #include <linux/platform_data/gpio-rcar.h>
  #include <linux/platform_data/irq-renesas-intc-irqpin.h>
  #include <linux/platform_device.h>
@@@ -95,29 -96,46 +96,46 @@@ static struct sh_timer_config sh_tmu1_p
                &sh_tmu##idx##_platform_data,           \
                sizeof(sh_tmu##idx##_platform_data))
  
- /* USB */
- static struct usb_phy *phy;
+ int r8a7778_usb_phy_power(bool enable)
+ {
+       static struct usb_phy *phy = NULL;
+       int ret = 0;
+       if (!phy)
+               phy = usb_get_phy(USB_PHY_TYPE_USB2);
+       if (IS_ERR(phy)) {
+               pr_err("kernel doesn't have usb phy driver\n");
+               return PTR_ERR(phy);
+       }
+       if (enable)
+               ret = usb_phy_init(phy);
+       else
+               usb_phy_shutdown(phy);
  
+       return ret;
+ }
+ /* USB */
  static int usb_power_on(struct platform_device *pdev)
  {
-       if (IS_ERR(phy))
-               return PTR_ERR(phy);
+       int ret = r8a7778_usb_phy_power(true);
+       if (ret)
+               return ret;
  
        pm_runtime_enable(&pdev->dev);
        pm_runtime_get_sync(&pdev->dev);
  
-       usb_phy_init(phy);
        return 0;
  }
  
  static void usb_power_off(struct platform_device *pdev)
  {
-       if (IS_ERR(phy))
+       if (r8a7778_usb_phy_power(false))
                return;
  
-       usb_phy_shutdown(phy);
        pm_runtime_put_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
  }
@@@ -174,6 -192,20 +192,6 @@@ static struct platform_device_info hci#
  USB_PLATFORM_INFO(ehci);
  USB_PLATFORM_INFO(ohci);
  
 -/* Ether */
 -static struct resource ether_resources[] __initdata = {
 -      DEFINE_RES_MEM(0xfde00000, 0x400),
 -      DEFINE_RES_IRQ(gic_iid(0x89)),
 -};
 -
 -void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
 -{
 -      platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1,
 -                                        ether_resources,
 -                                        ARRAY_SIZE(ether_resources),
 -                                        pdata, sizeof(*pdata));
 -}
 -
  /* PFC/GPIO */
  static struct resource pfc_resources[] __initdata = {
        DEFINE_RES_MEM(0xfffc0000, 0x118),
@@@ -258,7 -290,7 +276,7 @@@ static struct resource hspi_resources[
        DEFINE_RES_IRQ(gic_iid(0x75)),
  };
  
 -void __init r8a7778_register_hspi(int id)
 +static void __init r8a7778_register_hspi(int id)
  {
        BUG_ON(id < 0 || id > 2);
  
                hspi_resources + (2 * id), 2);
  }
  
 -/* VIN */
 -#define R8A7778_VIN(idx)                                              \
 -static struct resource vin##idx##_resources[] __initdata = {          \
 -      DEFINE_RES_MEM(0xffc50000 + 0x1000 * (idx), 0x1000),            \
 -      DEFINE_RES_IRQ(gic_iid(0x5a)),                                  \
 -};                                                                    \
 -                                                                      \
 -static struct platform_device_info vin##idx##_info __initdata = {     \
 -      .parent         = &platform_bus,                                \
 -      .name           = "r8a7778-vin",                                \
 -      .id             = idx,                                          \
 -      .res            = vin##idx##_resources,                         \
 -      .num_res        = ARRAY_SIZE(vin##idx##_resources),             \
 -      .dma_mask       = DMA_BIT_MASK(32),                             \
 -}
 -
 -R8A7778_VIN(0);
 -R8A7778_VIN(1);
 -
 -static struct platform_device_info *vin_info_table[] __initdata = {
 -      &vin0_info,
 -      &vin1_info,
 -};
 -
 -void __init r8a7778_add_vin_device(int id, struct rcar_vin_platform_data *pdata)
 -{
 -      BUG_ON(id < 0 || id > 1);
 -
 -      vin_info_table[id]->data = pdata;
 -      vin_info_table[id]->size_data = sizeof(*pdata);
 -
 -      platform_device_register_full(vin_info_table[id]);
 -}
 -
  void __init r8a7778_add_dt_devices(void)
  {
        int i;
        r8a7778_register_tmu(1);
  }
  
+ /* HPB-DMA */
+ /* Asynchronous mode register (ASYNCMDR) bits */
+ #define HPB_DMAE_ASYNCMDR_ASMD22_MASK BIT(2)  /* SDHI0 */
+ #define HPB_DMAE_ASYNCMDR_ASMD22_SINGLE       BIT(2)  /* SDHI0 */
+ #define HPB_DMAE_ASYNCMDR_ASMD22_MULTI        0       /* SDHI0 */
+ #define HPB_DMAE_ASYNCMDR_ASMD21_MASK BIT(1)  /* SDHI0 */
+ #define HPB_DMAE_ASYNCMDR_ASMD21_SINGLE       BIT(1)  /* SDHI0 */
+ #define HPB_DMAE_ASYNCMDR_ASMD21_MULTI        0       /* SDHI0 */
+ static const struct hpb_dmae_slave_config hpb_dmae_slaves[] = {
+       {
+               .id     = HPBDMA_SLAVE_SDHI0_TX,
+               .addr   = 0xffe4c000 + 0x30,
+               .dcr    = HPB_DMAE_DCR_SPDS_16BIT |
+                         HPB_DMAE_DCR_DMDL |
+                         HPB_DMAE_DCR_DPDS_16BIT,
+               .rstr   = HPB_DMAE_ASYNCRSTR_ASRST21 |
+                         HPB_DMAE_ASYNCRSTR_ASRST22 |
+                         HPB_DMAE_ASYNCRSTR_ASRST23,
+               .mdr    = HPB_DMAE_ASYNCMDR_ASMD21_MULTI,
+               .mdm    = HPB_DMAE_ASYNCMDR_ASMD21_MASK,
+               .port   = 0x0D0C,
+               .flags  = HPB_DMAE_SET_ASYNC_RESET | HPB_DMAE_SET_ASYNC_MODE,
+               .dma_ch = 21,
+       }, {
+               .id     = HPBDMA_SLAVE_SDHI0_RX,
+               .addr   = 0xffe4c000 + 0x30,
+               .dcr    = HPB_DMAE_DCR_SMDL |
+                         HPB_DMAE_DCR_SPDS_16BIT |
+                         HPB_DMAE_DCR_DPDS_16BIT,
+               .rstr   = HPB_DMAE_ASYNCRSTR_ASRST21 |
+                         HPB_DMAE_ASYNCRSTR_ASRST22 |
+                         HPB_DMAE_ASYNCRSTR_ASRST23,
+               .mdr    = HPB_DMAE_ASYNCMDR_ASMD22_MULTI,
+               .mdm    = HPB_DMAE_ASYNCMDR_ASMD22_MASK,
+               .port   = 0x0D0C,
+               .flags  = HPB_DMAE_SET_ASYNC_RESET | HPB_DMAE_SET_ASYNC_MODE,
+               .dma_ch = 22,
+       },
+ };
+ static const struct hpb_dmae_channel hpb_dmae_channels[] = {
+       HPB_DMAE_CHANNEL(0x7e, HPBDMA_SLAVE_SDHI0_TX), /* ch. 21 */
+       HPB_DMAE_CHANNEL(0x7e, HPBDMA_SLAVE_SDHI0_RX), /* ch. 22 */
+ };
+ static struct hpb_dmae_pdata dma_platform_data __initdata = {
+       .slaves                 = hpb_dmae_slaves,
+       .num_slaves             = ARRAY_SIZE(hpb_dmae_slaves),
+       .channels               = hpb_dmae_channels,
+       .num_channels           = ARRAY_SIZE(hpb_dmae_channels),
+       .ts_shift               = {
+               [XMIT_SZ_8BIT]  = 0,
+               [XMIT_SZ_16BIT] = 1,
+               [XMIT_SZ_32BIT] = 2,
+       },
+       .num_hw_channels        = 39,
+ };
+ static struct resource hpb_dmae_resources[] __initdata = {
+       /* Channel registers */
+       DEFINE_RES_MEM(0xffc08000, 0x1000),
+       /* Common registers */
+       DEFINE_RES_MEM(0xffc09000, 0x170),
+       /* Asynchronous reset registers */
+       DEFINE_RES_MEM(0xffc00300, 4),
+       /* Asynchronous mode registers */
+       DEFINE_RES_MEM(0xffc00400, 4),
+       /* IRQ for DMA channels */
+       DEFINE_RES_NAMED(gic_iid(0x7b), 5, NULL, IORESOURCE_IRQ),
+ };
+ static void __init r8a7778_register_hpb_dmae(void)
+ {
+       platform_device_register_resndata(&platform_bus, "hpb-dma-engine", -1,
+                                         hpb_dmae_resources,
+                                         ARRAY_SIZE(hpb_dmae_resources),
+                                         &dma_platform_data,
+                                         sizeof(dma_platform_data));
+ }
  void __init r8a7778_add_standard_devices(void)
  {
        r8a7778_add_dt_devices();
        r8a7778_register_hspi(0);
        r8a7778_register_hspi(1);
        r8a7778_register_hspi(2);
+       r8a7778_register_hpb_dmae();
  }
  
  void __init r8a7778_init_late(void)
  {
-       phy = usb_get_phy(USB_PHY_TYPE_USB2);
        platform_device_register_full(&ehci_info);
        platform_device_register_full(&ohci_info);
  }
@@@ -328,7 -476,7 +428,7 @@@ static struct resource irqpin_resources
        DEFINE_RES_IRQ(gic_iid(0x3e)), /* IRQ3 */
  };
  
- void __init r8a7778_init_irq_extpin(int irlm)
+ void __init r8a7778_init_irq_extpin_dt(int irlm)
  {
        void __iomem *icr0 = ioremap_nocache(0xfe780000, PAGE_SIZE);
        unsigned long tmp;
        tmp |= (1 << 21); /* LVLMODE = 1 */
        iowrite32(tmp, icr0);
        iounmap(icr0);
+ }
  
+ void __init r8a7778_init_irq_extpin(int irlm)
+ {
+       r8a7778_init_irq_extpin_dt(irlm);
        if (irlm)
                platform_device_register_resndata(
                        &platform_bus, "renesas_intc_irqpin", -1,
index 56bb6c35d958b62dd971a4d9e70c435342d92d7d,a5e6556f87bc1b6f873c3f8cb7a163d9c2511506..0bf04a0bca9d5c4d5d831b730de89cff332bb7b4
@@@ -3,6 -3,7 +3,6 @@@ config ARCH_TEGR
        select ARCH_HAS_CPUFREQ
        select ARCH_REQUIRE_GPIOLIB
        select ARM_GIC
 -      select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select CLKSRC_OF
        select COMMON_CLK
@@@ -10,6 -11,7 +10,6 @@@
        select GENERIC_CLOCKEVENTS
        select HAVE_ARM_SCU if SMP
        select HAVE_ARM_TWD if SMP
 -      select HAVE_CLK
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
        select MIGHT_HAVE_PCI
@@@ -59,6 -61,14 +59,14 @@@ config ARCH_TEGRA_114_SO
          Support for NVIDIA Tegra T114 processor family, based on the
          ARM CortexA15MP CPU
  
+ config ARCH_TEGRA_124_SOC
+       bool "Enable support for Tegra124 family"
+       select ARM_L1_CACHE_SHIFT_6
+       select HAVE_ARM_ARCH_TIMER
+       help
+         Support for NVIDIA Tegra T124 processor family, based on the
+         ARM CortexA15MP CPU
  config TEGRA_AHB
        bool "Enable AHB driver for NVIDIA Tegra SoCs"
        default y
index be3429e08d909a58b3b2d3fb9923ca592d4eabc4,1adff32e40e2ad9e1f204d8e975103ddbf5f7e98..f90101b9cdb98a7b68053281a39e5b4796e56f60
   * This file is licenced under the GPL.
  */
  
 -#include <linux/platform_device.h>
  #include <linux/clk.h>
 +#include <linux/io.h>
 +#include <linux/kernel.h>
 +#include <linux/module.h>
 +#include <linux/platform_device.h>
  #include <linux/platform_data/usb-ohci-s3c2410.h>
 +#include <linux/usb.h>
 +#include <linux/usb/hcd.h>
 +
 +#include "ohci.h"
 +
  
  #define valid_port(idx) ((idx) == 1 || (idx) == 2)
  
  /* clock device associated with the hcd */
  
 +
 +#define DRIVER_DESC "OHCI S3C2410 driver"
 +
 +static const char hcd_name[] = "ohci-s3c2410";
 +
  static struct clk *clk;
  static struct clk *usb_clk;
  
  /* forward definitions */
  
 +static int (*orig_ohci_hub_control)(struct usb_hcd  *hcd, u16 typeReq,
 +                      u16 wValue, u16 wIndex, char *buf, u16 wLength);
 +static int (*orig_ohci_hub_status_data)(struct usb_hcd *hcd, char *buf);
 +
  static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc);
  
  /* conversion functions */
@@@ -64,10 -47,10 +64,10 @@@ static void s3c2410_start_hc(struct pla
  
        dev_dbg(&dev->dev, "s3c2410_start_hc:\n");
  
-       clk_enable(usb_clk);
+       clk_prepare_enable(usb_clk);
        mdelay(2);                      /* let the bus clock stabilise */
  
-       clk_enable(clk);
+       clk_prepare_enable(clk);
  
        if (info != NULL) {
                info->hcd       = hcd;
@@@ -92,8 -75,8 +92,8 @@@ static void s3c2410_stop_hc(struct plat
                        (info->enable_oc)(info, 0);
        }
  
-       clk_disable(clk);
-       clk_disable(usb_clk);
+       clk_disable_unprepare(clk);
+       clk_disable_unprepare(usb_clk);
  }
  
  /* ohci_s3c2410_hub_status_data
@@@ -110,7 -93,7 +110,7 @@@ ohci_s3c2410_hub_status_data(struct usb
        int orig;
        int portno;
  
 -      orig  = ohci_hub_status_data(hcd, buf);
 +      orig = orig_ohci_hub_status_data(hcd, buf);
  
        if (info == NULL)
                return orig;
@@@ -181,7 -164,7 +181,7 @@@ static int ohci_s3c2410_hub_control
         * process the request straight away and exit */
  
        if (info == NULL) {
 -              ret = ohci_hub_control(hcd, typeReq, wValue,
 +              ret = orig_ohci_hub_control(hcd, typeReq, wValue,
                                       wIndex, buf, wLength);
                goto out;
        }
                break;
        }
  
 -      ret = ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
 +      ret = orig_ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
        if (ret)
                goto out;
  
@@@ -391,6 -374,8 +391,6 @@@ static int usb_hcd_s3c2410_probe(const 
  
        s3c2410_start_hc(dev, hcd);
  
 -      ohci_hcd_init(hcd_to_ohci(hcd));
 -
        retval = usb_add_hcd(hcd, dev->resource[1].start, 0);
        if (retval != 0)
                goto err_ioremap;
  
  /*-------------------------------------------------------------------------*/
  
 -static int
 -ohci_s3c2410_start(struct usb_hcd *hcd)
 -{
 -      struct ohci_hcd *ohci = hcd_to_ohci(hcd);
 -      int ret;
 -
 -      ret = ohci_init(ohci);
 -      if (ret < 0)
 -              return ret;
 -
 -      ret = ohci_run(ohci);
 -      if (ret < 0) {
 -              dev_err(hcd->self.controller, "can't start %s\n",
 -                      hcd->self.bus_name);
 -              ohci_stop(hcd);
 -              return ret;
 -      }
 -
 -      return 0;
 -}
 -
 -
 -static const struct hc_driver ohci_s3c2410_hc_driver = {
 -      .description =          hcd_name,
 -      .product_desc =         "S3C24XX OHCI",
 -      .hcd_priv_size =        sizeof(struct ohci_hcd),
 -
 -      /*
 -       * generic hardware linkage
 -       */
 -      .irq =                  ohci_irq,
 -      .flags =                HCD_USB11 | HCD_MEMORY,
 -
 -      /*
 -       * basic lifecycle operations
 -       */
 -      .start =                ohci_s3c2410_start,
 -      .stop =                 ohci_stop,
 -      .shutdown =             ohci_shutdown,
 -
 -      /*
 -       * managing i/o requests and associated device resources
 -       */
 -      .urb_enqueue =          ohci_urb_enqueue,
 -      .urb_dequeue =          ohci_urb_dequeue,
 -      .endpoint_disable =     ohci_endpoint_disable,
 -
 -      /*
 -       * scheduling support
 -       */
 -      .get_frame_number =     ohci_get_frame,
 -
 -      /*
 -       * root hub support
 -       */
 -      .hub_status_data =      ohci_s3c2410_hub_status_data,
 -      .hub_control =          ohci_s3c2410_hub_control,
 -#ifdef        CONFIG_PM
 -      .bus_suspend =          ohci_bus_suspend,
 -      .bus_resume =           ohci_bus_resume,
 -#endif
 -      .start_port_reset =     ohci_start_port_reset,
 -};
 -
 -/* device driver */
 +static struct hc_driver __read_mostly ohci_s3c2410_hc_driver;
  
  static int ohci_hcd_s3c2410_drv_probe(struct platform_device *pdev)
  {
@@@ -484,39 -533,4 +484,39 @@@ static struct platform_driver ohci_hcd_
        },
  };
  
 +static int __init ohci_s3c2410_init(void)
 +{
 +      if (usb_disabled())
 +              return -ENODEV;
 +
 +      pr_info("%s: " DRIVER_DESC "\n", hcd_name);
 +      ohci_init_driver(&ohci_s3c2410_hc_driver, NULL);
 +
 +      /*
 +       * The Samsung HW has some unusual quirks, which require
 +       * Sumsung-specific workarounds. We override certain hc_driver
 +       * functions here to achieve that. We explicitly do not enhance
 +       * ohci_driver_overrides to allow this more easily, since this
 +       * is an unusual case, and we don't want to encourage others to
 +       * override these functions by making it too easy.
 +       */
 +
 +      orig_ohci_hub_control = ohci_s3c2410_hc_driver.hub_control;
 +      orig_ohci_hub_status_data = ohci_s3c2410_hc_driver.hub_status_data;
 +
 +      ohci_s3c2410_hc_driver.hub_status_data  = ohci_s3c2410_hub_status_data;
 +      ohci_s3c2410_hc_driver.hub_control      = ohci_s3c2410_hub_control;
 +
 +      return platform_driver_register(&ohci_hcd_s3c2410_driver);
 +}
 +module_init(ohci_s3c2410_init);
 +
 +static void __exit ohci_s3c2410_cleanup(void)
 +{
 +      platform_driver_unregister(&ohci_hcd_s3c2410_driver);
 +}
 +module_exit(ohci_s3c2410_cleanup);
 +
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL");
  MODULE_ALIAS("platform:s3c2410-ohci");