pci_mmc.c 810 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * Copyright (C) 2015, Google, Inc
  3. * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. #include <common.h>
  8. #include <errno.h>
  9. #include <malloc.h>
  10. #include <sdhci.h>
  11. #include <asm/pci.h>
  12. int pci_mmc_init(const char *name, struct pci_device_id *mmc_supported)
  13. {
  14. struct sdhci_host *mmc_host;
  15. u32 iobase;
  16. int ret;
  17. int i;
  18. for (i = 0; ; i++) {
  19. struct udevice *dev;
  20. ret = pci_find_device_id(mmc_supported, i, &dev);
  21. if (ret)
  22. return ret;
  23. mmc_host = malloc(sizeof(struct sdhci_host));
  24. if (!mmc_host)
  25. return -ENOMEM;
  26. mmc_host->name = name;
  27. dm_pci_read_config32(dev, PCI_BASE_ADDRESS_0, &iobase);
  28. mmc_host->ioaddr = (void *)(ulong)iobase;
  29. mmc_host->quirks = 0;
  30. ret = add_sdhci(mmc_host, 0, 0);
  31. if (ret)
  32. return ret;
  33. }
  34. return 0;
  35. }