From a0030a8f91caf50b8c02404be73c5a331af979de Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Tue, 22 Oct 2013 16:35:25 +0200 Subject: vexpress: mmc support qemu-system-arm -m 1024 -smp 1 -M vexpress-a15 -monitor pty -kernel zbarebox -drive if=sd,cache=unsafe,file=sd -nographic -tftp . -net nic -net user Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD Signed-off-by: Sascha Hauer --- arch/arm/boards/vexpress/init.c | 9 ++++++++- arch/arm/mach-vexpress/devices.c | 12 +++++++++++- arch/arm/mach-vexpress/include/mach/devices.h | 5 +++++ arch/arm/mach-vexpress/v2m.c | 1 + 4 files changed, 25 insertions(+), 2 deletions(-) (limited to 'arch') diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c index 72a3b08224..6196c4e0ad 100644 --- a/arch/arm/boards/vexpress/init.c +++ b/arch/arm/boards/vexpress/init.c @@ -16,6 +16,7 @@ #include #include #include +#include struct vexpress_init { void (*core_init)(void); @@ -24,6 +25,11 @@ struct vexpress_init { void (*devices_init)(void); }; +struct mmci_platform_data mmci_plat = { + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, + .clkdiv_init = SDI_CLKCR_CLKDIV_INIT, +}; + struct vexpress_init *v2m_init; static void vexpress_ax_mem_init(void) @@ -37,6 +43,7 @@ static void vexpress_ax_devices_init(void) { add_cfi_flash_device(0, 0x08000000, SZ_64M, 0); add_cfi_flash_device(1, 0x0c000000, SZ_64M, 0); + vexpress_register_mmc(&mmci_plat); add_generic_device("smc911x", DEVICE_ID_DYNAMIC, NULL, 0x1a000000, 64 * 1024, IORESOURCE_MEM, NULL); armlinux_set_bootparams((void *)(0x80000100)); @@ -68,7 +75,7 @@ static void vexpress_a9_legacy_devices_init(void) add_cfi_flash_device(1, 0x44000000, SZ_64M, 0); add_generic_device("smc911x", DEVICE_ID_DYNAMIC, NULL, 0x4e000000, 64 * 1024, IORESOURCE_MEM, NULL); - + vexpress_a9_legacy_register_mmc(&mmci_plat); armlinux_set_architecture(MACH_TYPE_VEXPRESS); armlinux_set_bootparams((void *)(0x60000100)); } diff --git a/arch/arm/mach-vexpress/devices.c b/arch/arm/mach-vexpress/devices.c index 6ccce5261f..5b53011924 100644 --- a/arch/arm/mach-vexpress/devices.c +++ b/arch/arm/mach-vexpress/devices.c @@ -20,7 +20,6 @@ void vexpress_a9_legacy_add_ddram(u32 ddr0_size, u32 ddr1_size) arm_add_mem_device("ram1", 0x80000000, ddr1_size); } - void vexpress_a9_legacy_register_uart(unsigned id) { resource_size_t start; @@ -44,6 +43,12 @@ void vexpress_a9_legacy_register_uart(unsigned id) amba_apb_device_add(NULL, "uart-pl011", id, start, 4096, NULL, 0); } +void vexpress_a9_legacy_register_mmc(struct mmci_platform_data *plat) +{ + amba_apb_device_add(NULL, "mmci-pl18x", DEVICE_ID_SINGLE, 0x10005000, + 4096, plat, 0); +} + void vexpress_add_ddram(u32 size) { arm_add_mem_device("ram1", 0x80000000, size); @@ -71,3 +76,8 @@ void vexpress_register_uart(unsigned id) } amba_apb_device_add(NULL, "uart-pl011", id, start, 4096, NULL, 0); } + +void vexpress_register_mmc(struct mmci_platform_data *plat) +{ + amba_apb_device_add(NULL, "mmci-pl18x", DEVICE_ID_SINGLE, 0x1c050000, 4096, plat, 0); +} diff --git a/arch/arm/mach-vexpress/include/mach/devices.h b/arch/arm/mach-vexpress/include/mach/devices.h index 3146a475eb..96d1400501 100644 --- a/arch/arm/mach-vexpress/include/mach/devices.h +++ b/arch/arm/mach-vexpress/include/mach/devices.h @@ -7,6 +7,8 @@ #ifndef __ASM_ARCH_DEVICES_H__ #define __ASM_ARCH_DEVICES_H__ +#include + void vexpress_a9_legacy_add_ddram(u32 ddr0_size, u32 ddr1_size); void vexpress_add_ddram(u32 size); @@ -16,6 +18,9 @@ void vexpress_register_uart(unsigned id); void vexpress_a9_legacy_init(void); void vexpress_init(void); +void vexpress_a9_legacy_register_mmc(struct mmci_platform_data *plat); +void vexpress_register_mmc(struct mmci_platform_data *plat); + extern void *v2m_wdt_base; extern void *v2m_sysreg_base; diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index d6dde83e46..025bbb17fc 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c @@ -20,6 +20,7 @@ void __iomem *v2m_sysreg_base; static const char *v2m_osc2_periphs[] = { + "mb:mmci", "mmci-pl18x", /* PL180 MMCI */ "mb:uart0", "uart-pl0110", /* PL011 UART0 */ "mb:uart1", "uart-pl0111", /* PL011 UART1 */ "mb:uart2", "uart-pl0112", /* PL011 UART2 */ -- cgit v1.2.3