[U-Boot] [PATCH v1 4/4] mmc: socfpga: support of-platdata
Simon Goldschmidt
simon.k.r.goldschmidt at gmail.com
Mon Jan 7 21:14:23 UTC 2019
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.goldschmidt at 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
More information about the U-Boot
mailing list