uboot/drivers/mmc/pci_mmc.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2015, Google, Inc
   4 * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
   5 */
   6
   7#include <common.h>
   8#include <dm.h>
   9#include <errno.h>
  10#include <malloc.h>
  11#include <mapmem.h>
  12#include <sdhci.h>
  13#include <asm/pci.h>
  14
  15struct pci_mmc_plat {
  16        struct mmc_config cfg;
  17        struct mmc mmc;
  18};
  19
  20struct pci_mmc_priv {
  21        struct sdhci_host host;
  22        void *base;
  23};
  24
  25static int pci_mmc_probe(struct udevice *dev)
  26{
  27        struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  28        struct pci_mmc_plat *plat = dev_get_platdata(dev);
  29        struct pci_mmc_priv *priv = dev_get_priv(dev);
  30        struct sdhci_host *host = &priv->host;
  31        int ret;
  32
  33        host->ioaddr = (void *)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0,
  34                                              PCI_REGION_MEM);
  35        host->name = dev->name;
  36        host->mmc = &plat->mmc;
  37        host->mmc->dev = dev;
  38        ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
  39        if (ret)
  40                return ret;
  41        host->mmc->priv = &priv->host;
  42        upriv->mmc = host->mmc;
  43
  44        return sdhci_probe(dev);
  45}
  46
  47static int pci_mmc_bind(struct udevice *dev)
  48{
  49        struct pci_mmc_plat *plat = dev_get_platdata(dev);
  50
  51        return sdhci_bind(dev, &plat->mmc, &plat->cfg);
  52}
  53
  54U_BOOT_DRIVER(pci_mmc) = {
  55        .name   = "pci_mmc",
  56        .id     = UCLASS_MMC,
  57        .bind   = pci_mmc_bind,
  58        .probe  = pci_mmc_probe,
  59        .ops    = &sdhci_ops,
  60        .priv_auto_alloc_size = sizeof(struct pci_mmc_priv),
  61        .platdata_auto_alloc_size = sizeof(struct pci_mmc_plat),
  62};
  63
  64static struct pci_device_id mmc_supported[] = {
  65        { PCI_DEVICE_CLASS(PCI_CLASS_SYSTEM_SDHCI << 8, 0xffff00) },
  66        {},
  67};
  68
  69U_BOOT_PCI_DEVICE(pci_mmc, mmc_supported);
  70