Skip to content
Snippets Groups Projects
Commit 08546df9 authored by Tom Rini's avatar Tom Rini
Browse files
parents 821560fd da2364cc
No related merge requests found
...@@ -96,7 +96,6 @@ config X86 ...@@ -96,7 +96,6 @@ config X86
select DM_SPI select DM_SPI
select DM_SPI_FLASH select DM_SPI_FLASH
select USB_EHCI_HCD select USB_EHCI_HCD
select DM_MMC if MMC
imply CMD_FPGA_LOADMK imply CMD_FPGA_LOADMK
imply CMD_GETTIME imply CMD_GETTIME
imply CMD_IO imply CMD_IO
......
...@@ -11,6 +11,18 @@ ...@@ -11,6 +11,18 @@
#include <asm/mrccache.h> #include <asm/mrccache.h>
#include <asm/post.h> #include <asm/post.h>
static struct pci_device_id mmc_supported[] = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_SDIO },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_SD },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_EMMC2 },
{},
};
int cpu_mmc_init(bd_t *bis)
{
return pci_mmc_init("ValleyView SDHCI", mmc_supported);
}
#ifndef CONFIG_EFI_APP #ifndef CONFIG_EFI_APP
int arch_cpu_init(void) int arch_cpu_init(void)
{ {
......
...@@ -16,6 +16,11 @@ ...@@ -16,6 +16,11 @@
#include <asm/arch/msg_port.h> #include <asm/arch/msg_port.h>
#include <asm/arch/quark.h> #include <asm/arch/quark.h>
static struct pci_device_id mmc_supported[] = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_SDIO },
{},
};
static void quark_setup_mtrr(void) static void quark_setup_mtrr(void)
{ {
u32 base, mask; u32 base, mask;
...@@ -323,6 +328,11 @@ int arch_early_init_r(void) ...@@ -323,6 +328,11 @@ int arch_early_init_r(void)
return 0; return 0;
} }
int cpu_mmc_init(bd_t *bis)
{
return pci_mmc_init("Quark SDHCI", mmc_supported);
}
int arch_misc_init(void) int arch_misc_init(void)
{ {
#ifdef CONFIG_ENABLE_MRC_CACHE #ifdef CONFIG_ENABLE_MRC_CACHE
......
...@@ -5,4 +5,4 @@ ...@@ -5,4 +5,4 @@
# #
obj-y += fsp_configs.o irq.o obj-y += fsp_configs.o irq.o
obj-y += tnc.o obj-y += tnc.o topcliff.o
/*
* Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <mmc.h>
#include <pci_ids.h>
static struct pci_device_id mmc_supported[] = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_SDIO_0 },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_SDIO_1 },
{},
};
int cpu_mmc_init(bd_t *bis)
{
return pci_mmc_init("Topcliff SDHCI", mmc_supported);
}
...@@ -6,71 +6,37 @@ ...@@ -6,71 +6,37 @@
*/ */
#include <common.h> #include <common.h>
#include <dm.h>
#include <errno.h> #include <errno.h>
#include <malloc.h> #include <malloc.h>
#include <mapmem.h>
#include <sdhci.h> #include <sdhci.h>
#include <asm/pci.h> #include <asm/pci.h>
struct pci_mmc_plat { int pci_mmc_init(const char *name, struct pci_device_id *mmc_supported)
struct mmc_config cfg;
struct mmc mmc;
};
struct pci_mmc_priv {
struct sdhci_host host;
void *base;
};
static int pci_mmc_probe(struct udevice *dev)
{ {
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); struct sdhci_host *mmc_host;
struct pci_mmc_plat *plat = dev_get_platdata(dev); u32 iobase;
struct pci_mmc_priv *priv = dev_get_priv(dev);
struct sdhci_host *host = &priv->host;
u32 ioaddr;
int ret; int ret;
int i;
dm_pci_read_config32(dev, PCI_BASE_ADDRESS_0, &ioaddr);
host->ioaddr = map_sysmem(ioaddr, 0); for (i = 0; ; i++) {
host->name = dev->name; struct udevice *dev;
ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0);
if (ret) ret = pci_find_device_id(mmc_supported, i, &dev);
return ret; if (ret)
host->mmc = &plat->mmc; return ret;
host->mmc->priv = &priv->host; mmc_host = malloc(sizeof(struct sdhci_host));
host->mmc->dev = dev; if (!mmc_host)
upriv->mmc = host->mmc; return -ENOMEM;
return sdhci_probe(dev); mmc_host->name = name;
dm_pci_read_config32(dev, PCI_BASE_ADDRESS_0, &iobase);
mmc_host->ioaddr = (void *)(ulong)iobase;
mmc_host->quirks = 0;
mmc_host->max_clk = 0;
ret = add_sdhci(mmc_host, 0, 0);
if (ret)
return ret;
}
return 0;
} }
static int pci_mmc_bind(struct udevice *dev)
{
struct pci_mmc_plat *plat = dev_get_platdata(dev);
return sdhci_bind(dev, &plat->mmc, &plat->cfg);
}
U_BOOT_DRIVER(pci_mmc) = {
.name = "pci_mmc",
.id = UCLASS_MMC,
.bind = pci_mmc_bind,
.probe = pci_mmc_probe,
.ops = &sdhci_ops,
.priv_auto_alloc_size = sizeof(struct pci_mmc_priv),
.platdata_auto_alloc_size = sizeof(struct pci_mmc_plat),
};
static struct pci_device_id mmc_supported[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_SDIO) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_SD) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT_EMMC2) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_SDIO) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_SDIO_0) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_SDIO_1) },
{},
};
U_BOOT_PCI_DEVICE(pci_mmc, mmc_supported);
...@@ -585,6 +585,18 @@ int cpu_mmc_init(bd_t *bis); ...@@ -585,6 +585,18 @@ int cpu_mmc_init(bd_t *bis);
int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr); int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
int mmc_get_env_dev(void); int mmc_get_env_dev(void);
struct pci_device_id;
/**
* pci_mmc_init() - set up PCI MMC devices
*
* This finds all the matching PCI IDs and sets them up as MMC devices.
*
* @name: Name to use for devices
* @mmc_supported: PCI IDs to search for, terminated by {0, 0}
*/
int pci_mmc_init(const char *name, struct pci_device_id *mmc_supported);
/* Set block count limit because of 16 bit register limit on some hardware*/ /* Set block count limit because of 16 bit register limit on some hardware*/
#ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
#define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment