diff options
author | Michal Simek <michal.simek@xilinx.com> | 2014-02-24 11:16:31 +0100 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-03-04 09:27:35 -0500 |
commit | 345d3c0f01172995da749fb9ac57faa8b639cfdc (patch) | |
tree | c01428250712b9aedb932a3261ca13894411939c | |
parent | f88a6869a10a5a7aea4c4fda52db854a693796b0 (diff) | |
download | u-boot-345d3c0f01172995da749fb9ac57faa8b639cfdc.tar.gz u-boot-345d3c0f01172995da749fb9ac57faa8b639cfdc.tar.xz u-boot-345d3c0f01172995da749fb9ac57faa8b639cfdc.zip |
mmc: zynq: Add OF initialization support
Enable initialize sdhci from DTB.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
-rw-r--r-- | arch/arm/include/asm/arch-zynq/sys_proto.h | 1 | ||||
-rw-r--r-- | drivers/mmc/zynq_sdhci.c | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/include/asm/arch-zynq/sys_proto.h b/arch/arm/include/asm/arch-zynq/sys_proto.h index 0a2ba058f2..a68e1b3d23 100644 --- a/arch/arm/include/asm/arch-zynq/sys_proto.h +++ b/arch/arm/include/asm/arch-zynq/sys_proto.h @@ -19,5 +19,6 @@ extern void zynq_ddrc_init(void); /* Driver extern functions */ extern int zynq_sdhci_init(u32 regbase); +extern int zynq_sdhci_of_init(const void *blob); #endif /* _SYS_PROTO_H_ */ diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index 72a272f2ba..fdce2c2c10 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -7,6 +7,8 @@ */ #include <common.h> +#include <fdtdec.h> +#include <libfdt.h> #include <malloc.h> #include <sdhci.h> #include <asm/arch/sys_proto.h> @@ -32,3 +34,30 @@ int zynq_sdhci_init(u32 regbase) add_sdhci(host, 52000000, 52000000 >> 9); return 0; } + +#ifdef CONFIG_OF_CONTROL +int zynq_sdhci_of_init(const void *blob) +{ + int offset = 0; + u32 ret = 0; + u32 reg; + + debug("ZYNQ SDHCI: Initialization\n"); + + do { + offset = fdt_node_offset_by_compatible(blob, offset, + "arasan,sdhci-8.9a"); + if (offset != -1) { + reg = fdtdec_get_addr(blob, offset, "reg"); + if (reg != FDT_ADDR_T_NONE) { + ret |= zynq_sdhci_init(reg); + } else { + debug("ZYNQ SDHCI: Can't get base address\n"); + return -1; + } + } + } while (offset != -1); + + return ret; +} +#endif |