diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 15:27:22 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 15:27:22 -0800 | 
| commit | bab588fcfb6335c767d811a8955979f5440328e0 (patch) | |
| tree | 2a862ddf47a82be885a8e7945a17cc3ff7a658b9 /arch/arm/mach-shmobile/setup-sh73a0.c | |
| parent | 3298a3511f1e73255a8dc023efd909e569eea037 (diff) | |
| parent | 9cb0d1babfcb1b4ac248c09425f7d5de1e771133 (diff) | |
| download | olio-linux-3.10-bab588fcfb6335c767d811a8955979f5440328e0.tar.xz olio-linux-3.10-bab588fcfb6335c767d811a8955979f5440328e0.zip  | |
Merge tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC-specific updates from Arnd Bergmann:
 "This is a larger set of new functionality for the existing SoC
  families, including:
   - vt8500 gains support for new CPU cores, notably the Cortex-A9 based
     wm8850
   - prima2 gains support for the "marco" SoC family, its SMP based
     cousin
   - tegra gains support for the new Tegra4 (Tegra114) family
   - socfpga now supports a newer version of the hardware including SMP
   - i.mx31 and bcm2835 are now using DT probing for their clocks
   - lots of updates for sh-mobile
   - OMAP updates for clocks, power management and USB
   - i.mx6q and tegra now support cpuidle
   - kirkwood now supports PCIe hot plugging
   - tegra clock support is updated
   - tegra USB PHY probing gets implemented diffently"
* tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (148 commits)
  ARM: prima2: remove duplicate v7_invalidate_l1
  ARM: shmobile: r8a7779: Correct TMU clock support again
  ARM: prima2: fix __init section for cpu hotplug
  ARM: OMAP: Consolidate OMAP USB-HS platform data (part 3/3)
  ARM: OMAP: Consolidate OMAP USB-HS platform data (part 1/3)
  arm: socfpga: Add SMP support for actual socfpga harware
  arm: Add v7_invalidate_l1 to cache-v7.S
  arm: socfpga: Add entries to enable make dtbs socfpga
  arm: socfpga: Add new device tree source for actual socfpga HW
  ARM: tegra: sort Kconfig selects for Tegra114
  ARM: tegra: enable ARCH_REQUIRE_GPIOLIB for Tegra114
  ARM: tegra: Fix build error w/ ARCH_TEGRA_114_SOC w/o ARCH_TEGRA_3x_SOC
  ARM: tegra: Fix build error for gic update
  ARM: tegra: remove empty tegra_smp_init_cpus()
  ARM: shmobile: Register ARM architected timer
  ARM: MARCO: fix the build issue due to gic-vic-to-irqchip move
  ARM: shmobile: r8a7779: Correct TMU clock support
  ARM: mxs_defconfig: Select CONFIG_DEVTMPFS_MOUNT
  ARM: mxs: decrease mxs_clockevent_device.min_delta_ns to 2 clock cycles
  ARM: mxs: use apbx bus clock to drive the timers on timrotv2
  ...
Diffstat (limited to 'arch/arm/mach-shmobile/setup-sh73a0.c')
| -rw-r--r-- | arch/arm/mach-shmobile/setup-sh73a0.c | 62 | 
1 files changed, 61 insertions, 1 deletions
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index 48f7f583647..2ecd6681692 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c @@ -23,6 +23,7 @@  #include <linux/interrupt.h>  #include <linux/irq.h>  #include <linux/platform_device.h> +#include <linux/of_platform.h>  #include <linux/delay.h>  #include <linux/input.h>  #include <linux/io.h> @@ -779,7 +780,7 @@ static struct platform_device pmu_device = {  	.resource	= pmu_resources,  }; -static struct platform_device *sh73a0_early_devices[] __initdata = { +static struct platform_device *sh73a0_early_devices_dt[] __initdata = {  	&scif0_device,  	&scif1_device,  	&scif2_device, @@ -790,6 +791,9 @@ static struct platform_device *sh73a0_early_devices[] __initdata = {  	&scif7_device,  	&scif8_device,  	&cmt10_device, +}; + +static struct platform_device *sh73a0_early_devices[] __initdata = {  	&tmu00_device,  	&tmu01_device,  }; @@ -812,6 +816,8 @@ void __init sh73a0_add_standard_devices(void)  	/* Clear software reset bit on SY-DMAC module */  	__raw_writel(__raw_readl(SRCR2) & ~(1 << 18), SRCR2); +	platform_add_devices(sh73a0_early_devices_dt, +			    ARRAY_SIZE(sh73a0_early_devices_dt));  	platform_add_devices(sh73a0_early_devices,  			    ARRAY_SIZE(sh73a0_early_devices));  	platform_add_devices(sh73a0_late_devices, @@ -830,9 +836,63 @@ void __init sh73a0_earlytimer_init(void)  void __init sh73a0_add_early_devices(void)  { +	early_platform_add_devices(sh73a0_early_devices_dt, +				   ARRAY_SIZE(sh73a0_early_devices_dt));  	early_platform_add_devices(sh73a0_early_devices,  				   ARRAY_SIZE(sh73a0_early_devices));  	/* setup early console here as well */  	shmobile_setup_console();  } + +#ifdef CONFIG_USE_OF + +/* Please note that the clock initialisation shcheme used in + * sh73a0_add_early_devices_dt() and sh73a0_add_standard_devices_dt() + * does not work with SMP as there is a yet to be resolved lock-up in + * workqueue initialisation. + * + * CONFIG_SMP should be disabled when using this code. + */ + +void __init sh73a0_add_early_devices_dt(void) +{ +	shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */ + +	early_platform_add_devices(sh73a0_early_devices_dt, +				   ARRAY_SIZE(sh73a0_early_devices_dt)); + +	/* setup early console here as well */ +	shmobile_setup_console(); +} + +static const struct of_dev_auxdata sh73a0_auxdata_lookup[] __initconst = { +	{}, +}; + +void __init sh73a0_add_standard_devices_dt(void) +{ +	/* clocks are setup late during boot in the case of DT */ +	sh73a0_clock_init(); + +	platform_add_devices(sh73a0_early_devices_dt, +			     ARRAY_SIZE(sh73a0_early_devices_dt)); +	of_platform_populate(NULL, of_default_bus_match_table, +			     sh73a0_auxdata_lookup, NULL); +} + +static const char *sh73a0_boards_compat_dt[] __initdata = { +	"renesas,sh73a0", +	NULL, +}; + +DT_MACHINE_START(SH73A0_DT, "Generic SH73A0 (Flattened Device Tree)") +	.map_io		= sh73a0_map_io, +	.init_early	= sh73a0_add_early_devices_dt, +	.nr_irqs	= NR_IRQS_LEGACY, +	.init_irq	= sh73a0_init_irq_dt, +	.init_machine	= sh73a0_add_standard_devices_dt, +	.init_time	= shmobile_timer_init, +	.dt_compat	= sh73a0_boards_compat_dt, +MACHINE_END +#endif /* CONFIG_USE_OF */  |