This adds support for OF_PLATDATA to the socfpga_dw_mmc driver. To do that, also the name of the driver has to be changed to match the compatible string in the platdata generated from dts.
Signed-off-by: Simon Goldschmidt <simon.k.r.goldschm...@gmail.com> --- drivers/mmc/socfpga_dw_mmc.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/socfpga_dw_mmc.c b/drivers/mmc/socfpga_dw_mmc.c index 739c1629a2..8503dff932 100644 --- a/drivers/mmc/socfpga_dw_mmc.c +++ b/drivers/mmc/socfpga_dw_mmc.c @@ -8,6 +8,7 @@ #include <asm/arch/system_manager.h> #include <clk.h> #include <dm.h> +#include <dt-structs.h> #include <dwmmc.h> #include <errno.h> #include <fdtdec.h> @@ -24,6 +25,9 @@ static const struct socfpga_system_manager *system_manager_base = (void *)SOCFPGA_SYSMGR_ADDRESS; struct socfpga_dwmci_plat { +#if CONFIG_IS_ENABLED(OF_PLATDATA) + struct dtd_altr_socfpga_dw_mshc dtplat; +#endif struct mmc_config cfg; struct mmc mmc; }; @@ -100,6 +104,7 @@ static int socfpga_dwmmc_get_clk_rate(struct udevice *dev) static int socfpga_dwmmc_ofdata_to_platdata(struct udevice *dev) { +#if !CONFIG_IS_ENABLED(OF_PLATDATA) struct dwmci_socfpga_priv_data *priv = dev_get_priv(dev); struct dwmci_host *host = &priv->host; int fifo_depth; @@ -129,13 +134,13 @@ static int socfpga_dwmmc_ofdata_to_platdata(struct udevice *dev) priv->smplsel = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "smplsel", 0); host->priv = priv; - +#endif return 0; } static int socfpga_dwmmc_probe(struct udevice *dev) { -#ifdef CONFIG_BLK +#if defined(CONFIG_BLK) || CONFIG_IS_ENABLED(OF_PLATDATA) struct socfpga_dwmci_plat *plat = dev_get_platdata(dev); #endif struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); @@ -143,6 +148,23 @@ static int socfpga_dwmmc_probe(struct udevice *dev) struct dwmci_host *host = &priv->host; int ret; +#if CONFIG_IS_ENABLED(OF_PLATDATA) + struct dtd_altr_socfpga_dw_mshc *dtplat = &plat->dtplat; + + host->name = dev->name; + host->ioaddr = (void *)dtplat->reg[0]; + host->buswidth = dtplat->bus_width; + host->clksel = socfpga_dwmci_clksel; + host->dev_index = 0; + host->fifoth_val = MSIZE(0x2) | + RX_WMARK(dtplat->fifo_depth / 2 - 1) | + TX_WMARK(dtplat->fifo_depth / 2); + host->priv = priv; + /* TODO: these are optional, of-platdata does not support this. */ + priv->drvsel = 3; + priv->smplsel = 0; +#endif + ret = socfpga_dwmmc_get_clk_rate(dev); if (ret) return ret; @@ -185,7 +207,7 @@ static const struct udevice_id socfpga_dwmmc_ids[] = { }; U_BOOT_DRIVER(socfpga_dwmmc_drv) = { - .name = "socfpga_dwmmc", + .name = "altr_socfpga_dw_mshc", .id = UCLASS_MMC, .of_match = socfpga_dwmmc_ids, .ofdata_to_platdata = socfpga_dwmmc_ofdata_to_platdata, -- 2.17.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot