diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-07 11:06:17 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-07 11:06:17 -0700 | 
| commit | 38f56f33ca381751f9b8910f67e7a805ec0b68cb (patch) | |
| tree | 202f2ce60f3f43a948607ec76c8cc48c1cf73a4b /arch/arm/mach-exynos/common.c | |
| parent | fcba914542082b272f31c8e4c40000b88ed3208d (diff) | |
| parent | 4183bef2e093a2f0aab45f2d5fed82b0e02aeacf (diff) | |
| download | olio-linux-3.10-38f56f33ca381751f9b8910f67e7a805ec0b68cb.tar.xz olio-linux-3.10-38f56f33ca381751f9b8910f67e7a805ec0b68cb.zip  | |
Merge tag 'dt-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC device tree updates (part 2) from Arnd Bergmann:
 "These are mostly new device tree bindings for existing drivers, as
  well as changes to the device tree source files to add support for
  those devices, and a couple of new boards, most notably Samsung's
  Exynos5 based Chromebook.
  The changes depend on earlier platform specific updates and touch the
  usual platforms: omap, exynos, tegra, mxs, mvebu and davinci."
* tag 'dt-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (169 commits)
  ARM: exynos: dts: cros5250: add EC device
  ARM: dts: Add sbs-battery for exynos5250-snow
  ARM: dts: Add i2c-arbitrator bus for exynos5250-snow
  ARM: dts: add mshc controller node for Exynos4x12 SoCs
  ARM: dts: Add chip-id controller node on Exynos4/5 SoC
  ARM: EXYNOS: Create virtual I/O mapping for Chip-ID controller using device tree
  ARM: davinci: da850-evm: add SPI flash support
  ARM: davinci: da850: override SPI DT node device name
  ARM: davinci: da850: add SPI1 DT node
  spi/davinci: add DT binding documentation
  spi/davinci: no wildcards in DT compatible property
  ARM: dts: mvebu: Convert mvebu device tree files to 64 bits
  ARM: dts: mvebu: introduce internal-regs node
  ARM: dts: mvebu: Convert all the mvebu files to use the range property
  ARM: dts: mvebu: move all peripherals inside soc
  ARM: dts: mvebu: fix cpus section indentation
  ARM: davinci: da850: add EHRPWM & ECAP DT node
  ARM/dts: OMAP3: fix pinctrl-single configuration
  ARM: dts: Add OMAP3430 SDP NOR flash memory binding
  ARM: dts: Add NOR flash bindings for OMAP2420 H4
  ...
Diffstat (limited to 'arch/arm/mach-exynos/common.c')
| -rw-r--r-- | arch/arm/mach-exynos/common.c | 53 | 
1 files changed, 30 insertions, 23 deletions
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 46089fe2470..d126f26dbbf 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -120,17 +120,6 @@ static struct map_desc exynos_iodesc[] __initdata = {  	},  }; -#ifdef CONFIG_ARCH_EXYNOS5 -static struct map_desc exynos5440_iodesc[] __initdata = { -	{ -		.virtual	= (unsigned long)S5P_VA_CHIPID, -		.pfn		= __phys_to_pfn(EXYNOS5440_PA_CHIPID), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, -}; -#endif -  static struct map_desc exynos4_iodesc[] __initdata = {  	{  		.virtual	= (unsigned long)S3C_VA_SYS, @@ -348,6 +337,31 @@ void __init exynos_init_late(void)  	exynos_pm_late_initcall();  } +#ifdef CONFIG_OF +int __init exynos_fdt_map_chipid(unsigned long node, const char *uname, +					int depth, void *data) +{ +	struct map_desc iodesc; +	__be32 *reg; +	unsigned long len; + +	if (!of_flat_dt_is_compatible(node, "samsung,exynos4210-chipid") && +		!of_flat_dt_is_compatible(node, "samsung,exynos5440-clock")) +		return 0; + +	reg = of_get_flat_dt_prop(node, "reg", &len); +	if (reg == NULL || len != (sizeof(unsigned long) * 2)) +		return 0; + +	iodesc.pfn = __phys_to_pfn(be32_to_cpu(reg[0])); +	iodesc.length = be32_to_cpu(reg[1]) - 1; +	iodesc.virtual = (unsigned long)S5P_VA_CHIPID; +	iodesc.type = MT_DEVICE; +	iotable_init(&iodesc, 1); +	return 1; +} +#endif +  /*   * exynos_map_io   * @@ -356,19 +370,12 @@ void __init exynos_init_late(void)  void __init exynos_init_io(struct map_desc *mach_desc, int size)  { -	struct map_desc *iodesc = exynos_iodesc; -	int iodesc_sz = ARRAY_SIZE(exynos_iodesc); -#if defined(CONFIG_OF) && defined(CONFIG_ARCH_EXYNOS5) -	unsigned long root = of_get_flat_dt_root(); - -	/* initialize the io descriptors we need for initialization */ -	if (of_flat_dt_is_compatible(root, "samsung,exynos5440")) { -		iodesc = exynos5440_iodesc; -		iodesc_sz = ARRAY_SIZE(exynos5440_iodesc); -	} +#ifdef CONFIG_OF +	if (initial_boot_params) +		of_scan_flat_dt(exynos_fdt_map_chipid, NULL); +	else  #endif - -	iotable_init(iodesc, iodesc_sz); +		iotable_init(exynos_iodesc, ARRAY_SIZE(exynos_iodesc));  	if (mach_desc)  		iotable_init(mach_desc, size);  |