1293eb33fSMichal Simek /* 2*d9ae52c8SMichal Simek * (C) Copyright 2013 - 2015 Xilinx, Inc. 3293eb33fSMichal Simek * 4293eb33fSMichal Simek * Xilinx Zynq SD Host Controller Interface 5293eb33fSMichal Simek * 61a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 7293eb33fSMichal Simek */ 8293eb33fSMichal Simek 9293eb33fSMichal Simek #include <common.h> 10*d9ae52c8SMichal Simek #include <dm.h> 11345d3c0fSMichal Simek #include <fdtdec.h> 12345d3c0fSMichal Simek #include <libfdt.h> 13293eb33fSMichal Simek #include <malloc.h> 14293eb33fSMichal Simek #include <sdhci.h> 15293eb33fSMichal Simek 16*d9ae52c8SMichal Simek static int arasan_sdhci_probe(struct udevice *dev) 17293eb33fSMichal Simek { 18*d9ae52c8SMichal Simek struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); 19*d9ae52c8SMichal Simek struct sdhci_host *host = dev_get_priv(dev); 20293eb33fSMichal Simek 21eddabd16SSiva Durga Prasad Paladugu host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD | 22f9ec45d1SSiva Durga Prasad Paladugu SDHCI_QUIRK_BROKEN_R1B; 23293eb33fSMichal Simek host->version = sdhci_readw(host, SDHCI_HOST_VERSION); 24293eb33fSMichal Simek 25b8a9bebeSSiva Durga Prasad Paladugu add_sdhci(host, CONFIG_ZYNQ_SDHCI_MAX_FREQ, 0); 26*d9ae52c8SMichal Simek 27*d9ae52c8SMichal Simek upriv->mmc = host->mmc; 28*d9ae52c8SMichal Simek 29293eb33fSMichal Simek return 0; 30293eb33fSMichal Simek } 31*d9ae52c8SMichal Simek 32*d9ae52c8SMichal Simek static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) 33*d9ae52c8SMichal Simek { 34*d9ae52c8SMichal Simek struct sdhci_host *host = dev_get_priv(dev); 35*d9ae52c8SMichal Simek 36*d9ae52c8SMichal Simek host->name = (char *)dev->name; 37*d9ae52c8SMichal Simek host->ioaddr = (void *)dev_get_addr(dev); 38*d9ae52c8SMichal Simek 39*d9ae52c8SMichal Simek return 0; 40*d9ae52c8SMichal Simek } 41*d9ae52c8SMichal Simek 42*d9ae52c8SMichal Simek static const struct udevice_id arasan_sdhci_ids[] = { 43*d9ae52c8SMichal Simek { .compatible = "arasan,sdhci-8.9a" }, 44*d9ae52c8SMichal Simek { } 45*d9ae52c8SMichal Simek }; 46*d9ae52c8SMichal Simek 47*d9ae52c8SMichal Simek U_BOOT_DRIVER(arasan_sdhci_drv) = { 48*d9ae52c8SMichal Simek .name = "arasan_sdhci", 49*d9ae52c8SMichal Simek .id = UCLASS_MMC, 50*d9ae52c8SMichal Simek .of_match = arasan_sdhci_ids, 51*d9ae52c8SMichal Simek .ofdata_to_platdata = arasan_sdhci_ofdata_to_platdata, 52*d9ae52c8SMichal Simek .probe = arasan_sdhci_probe, 53*d9ae52c8SMichal Simek .priv_auto_alloc_size = sizeof(struct sdhci_host), 54*d9ae52c8SMichal Simek }; 55