diff options
Diffstat (limited to 'arch/arm/mach-ux500/cpu-db8500.c')
| -rw-r--r-- | arch/arm/mach-ux500/cpu-db8500.c | 43 | 
1 files changed, 36 insertions, 7 deletions
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 9bd8163896c..16169c4bf6c 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c @@ -34,8 +34,8 @@ static struct map_desc u8500_uart_io_desc[] __initdata = {  	__IO_DEV_DESC(U8500_UART0_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_UART2_BASE, SZ_4K),  }; - -static struct map_desc u8500_io_desc[] __initdata = { +/*  U8500 and U9540 common io_desc */ +static struct map_desc u8500_common_io_desc[] __initdata = {  	/* SCU base also covers GIC CPU BASE and TWD with its 4K page */  	__IO_DEV_DESC(U8500_SCU_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K), @@ -49,12 +49,23 @@ static struct map_desc u8500_io_desc[] __initdata = {  	__IO_DEV_DESC(U8500_CLKRST5_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_CLKRST6_BASE, SZ_4K), -	__IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_GPIO0_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_GPIO1_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_GPIO2_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_GPIO3_BASE, SZ_4K), +}; + +/* U8500 IO map specific description */ +static struct map_desc u8500_io_desc[] __initdata = { +	__IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K),  	__IO_DEV_DESC(U8500_PRCMU_TCDM_BASE, SZ_4K), + +}; + +/* U9540 IO map specific description */ +static struct map_desc u9540_io_desc[] __initdata = { +	__IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K + SZ_8K), +	__IO_DEV_DESC(U8500_PRCMU_TCDM_BASE, SZ_4K + SZ_8K),  };  void __init u8500_map_io(void) @@ -66,7 +77,12 @@ void __init u8500_map_io(void)  	ux500_map_io(); -	iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); +	iotable_init(u8500_common_io_desc, ARRAY_SIZE(u8500_common_io_desc)); + +	if (cpu_is_u9540()) +		iotable_init(u9540_io_desc, ARRAY_SIZE(u9540_io_desc)); +	else +		iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc));  	_PRCMU_BASE = __io_address(U8500_PRCMU_BASE);  } @@ -121,6 +137,12 @@ static struct platform_device *platform_devs[] __initdata = {  	&db8500_prcmu_device,  }; +static struct platform_device *of_platform_devs[] __initdata = { +	&u8500_dma40_device, +	&db8500_pmu_device, +	&db8500_prcmu_device, +}; +  static resource_size_t __initdata db8500_gpio_base[] = {  	U8500_GPIOBANK0_BASE,  	U8500_GPIOBANK1_BASE, @@ -141,6 +163,7 @@ static void __init db8500_add_gpios(struct device *parent)  	dbx500_add_gpios(parent, ARRAY_AND_SIZE(db8500_gpio_base),  			 IRQ_DB8500_GPIO0, &pdata); +	dbx500_add_pinctrl(parent, "pinctrl-db8500");  }  static int usb_db8500_rx_dma_cfg[] = { @@ -199,10 +222,16 @@ struct device * __init u8500_init_devices(void)  	platform_device_register_data(parent,  		"cpufreq-u8500", -1, NULL, 0); -	for (i = 0; i < ARRAY_SIZE(platform_devs); i++) -		platform_devs[i]->dev.parent = parent; +	for (i = 0; i < ARRAY_SIZE(of_platform_devs); i++) +		of_platform_devs[i]->dev.parent = parent; -	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); +	/* +	 * Devices to be DT:ed: +	 *   u8500_dma40_device  = todo +	 *   db8500_pmu_device   = todo +	 *   db8500_prcmu_device = todo +	 */ +	platform_add_devices(of_platform_devs, ARRAY_SIZE(of_platform_devs));  	return parent;  }  |