From: Michal Simek Date: Mon, 22 Apr 2013 12:56:49 +0000 (+0200) Subject: mmc: Add support for Xilinx Zynq sdhci controller X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=16a0ab0d38acd89d5af33948a9c18ac340f67e05;p=thirdparty%2Fu-boot.git mmc: Add support for Xilinx Zynq sdhci controller Add support for SD, MMC and eMMC card on Xilinx Zynq. Signed-off-by: Michal Simek --- diff --git a/arch/arm/include/asm/arch-zynq/hardware.h b/arch/arm/include/asm/arch-zynq/hardware.h index a61eb2f59eb..5bb9cff0391 100644 --- a/arch/arm/include/asm/arch-zynq/hardware.h +++ b/arch/arm/include/asm/arch-zynq/hardware.h @@ -29,6 +29,8 @@ #define ZYNQ_SCUTIMER_BASEADDR 0xF8F00600 #define ZYNQ_GEM_BASEADDR0 0xE000B000 #define ZYNQ_GEM_BASEADDR1 0xE000C000 +#define ZYNQ_SDHCI_BASEADDR0 0xE0100000 +#define ZYNQ_SDHCI_BASEADDR1 0xE0101000 /* Reflect slcr offsets */ struct slcr_regs { diff --git a/arch/arm/include/asm/arch-zynq/sys_proto.h b/arch/arm/include/asm/arch-zynq/sys_proto.h index 776c3b2748b..378baade010 100644 --- a/arch/arm/include/asm/arch-zynq/sys_proto.h +++ b/arch/arm/include/asm/arch-zynq/sys_proto.h @@ -39,4 +39,7 @@ extern int zynq_slcr_get_mio_pin_status(const char *periph); extern int zynq_nand_init(struct nand_chip *nand_chip); extern int zynq_sdhci_init(u32 regbase); +/* Driver extern functions */ +extern int zynq_sdhci_init(u32 regbase); + #endif /* _SYS_PROTO_H_ */ diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 03b6bf9cc3d..119cde439ea 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -163,11 +163,11 @@ int board_mmc_init(bd_t *bd) int ret = 0; #if defined(CONFIG_ZYNQ_SDHCI) -# if defined(CONFIG_ZYNQ_SDHCI_BASEADDR0) - ret = zynq_sdhci_init(CONFIG_ZYNQ_SDHCI_BASEADDR0); +# if defined(CONFIG_ZYNQ_SDHCI0) + ret = zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR0); # endif -# if defined(CONFIG_ZYNQ_SDHCI_BASEADDR1) - ret |= zynq_sdhci_init(CONFIG_ZYNQ_SDHCI_BASEADDR1); +# if defined(CONFIG_ZYNQ_SDHCI1) + ret |= zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR1); # endif #endif return ret; diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index a3b9dfa552b..9e37af45fc6 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -29,7 +29,7 @@ int zynq_sdhci_init(u32 regbase) } host->name = "zynq_sdhci"; - host->ioaddr = (void *) regbase; + host->ioaddr = (void *)regbase; host->quirks = SDHCI_QUIRK_NO_CD | SDHCI_QUIRK_WAIT_SEND_CMD; host->version = sdhci_readw(host, SDHCI_HOST_VERSION); diff --git a/include/configs/petalinux-auto-board.h.template b/include/configs/petalinux-auto-board.h.template index bdba0feb0f0..9e15ad07091 100644 --- a/include/configs/petalinux-auto-board.h.template +++ b/include/configs/petalinux-auto-board.h.template @@ -450,7 +450,11 @@ # define CONFIG_GENERIC_MMC # define CONFIG_SDHCI # define CONFIG_ZYNQ_SDHCI -# define CONFIG_ZYNQ_SDHCI_BASEADDR0 XILINX_PS7_SDIO_BASEADDR +# if (XILINX_PS7_SDIO_BASEADDR == CONFIG_ZYNQ_SDHCI_BASEADDR0) +# define CONFIG_ZYNQ_SDHCI0 +# else +# define CONFIG_ZYNQ_SDHCI1 +# endif # define CONFIG_CMD_MMC # define CONFIG_CMD_FAT # define CONFIG_CMD_EXT2 diff --git a/include/configs/zynq.h b/include/configs/zynq.h index 3b23354bc8a..2ed88a72c4d 100644 --- a/include/configs/zynq.h +++ b/include/configs/zynq.h @@ -56,6 +56,22 @@ #define CONFIG_ZYNQ_GEM0 #define CONFIG_ZYNQ_GEM_PHY_ADDR0 7 +#define CONFIG_ZYNQ_SDHCI +#define CONFIG_ZYNQ_SDHCI0 + +/* MMC */ +#if defined(CONFIG_ZYNQ_SDHCI0) || defined(CONFIG_ZYNQ_SDHCI1) +# define CONFIG_MMC +# define CONFIG_GENERIC_MMC +# define CONFIG_SDHCI +# define CONFIG_ZYNQ_SDHCI +# define CONFIG_CMD_MMC +# define CONFIG_CMD_FAT +# define CONFIG_SUPPORT_VFAT +# define CONFIG_CMD_EXT2 +# define CONFIG_DOS_PARTITION +#endif + #if defined(CONFIG_ZYNQ_DCC) # define CONFIG_ARM_DCC # define CONFIG_CPU_V6 /* Required by CONFIG_ARM_DCC */ diff --git a/include/configs/zynq_common.h b/include/configs/zynq_common.h index 77df3eceb7d..f19eac47a5f 100644 --- a/include/configs/zynq_common.h +++ b/include/configs/zynq_common.h @@ -131,14 +131,6 @@ #endif /* MMC */ -#ifdef CONFIG_ZYNQ_SDHCI0 -# define CONFIG_ZYNQ_SDHCI_BASEADDR0 0xE0100000 -#endif - -#ifdef CONFIG_ZYNQ_SDHCI1 -# define CONFIG_ZYNQ_SDHCI_BASEADDR1 0xE0101000 -#endif - #if defined(CONFIG_ZYNQ_SDHCI0) || defined(CONFIG_ZYNQ_SDHCI1) # define CONFIG_MMC # define CONFIG_GENERIC_MMC