mmc: socfpga_dw_mmc: Move drvsel and smplsel to dts
PATCH v3 1/2 mmc: socfpga_dw_mmc: Move drvsel and smplsel to dts
socfpga_dw_mmc driver will obtain the drvsel and smplsel value from device tree instead of definition in config header file.
---
Changes for v3
- Split patch to separte DTS and driver patches Changes for v2
- Put default value for drvsel to 3 in case node in DT missing
- Remove unnecessary ad-hoc vairable
- Free up first calloc if second calloc failed
--- drivers/mmc/socfpga_dw_mmc.c | 29 +++++++++++++++++++++-------- include/configs/socfpga_common.h | 2 -- 2 files changed, 21 insertions(+), 10 deletions(-)
drivers/mmc/socfpga_dw_mmc.c +21 -8
@@ -19,21 +19,23 @@ static const struct socfpga_clock_manager *clock_manager_base =static const struct socfpga_system_manager *system_manager_base = (void *)SOCFPGA_SYSMGR_ADDRESS ; -static void socfpga_dwmci_clksel (struct dwmci_host *host) -{ +/* socfpga implmentation specific drver private data */ +struct dwmci_socfpga_priv_data {unsigned int drvsel;unsigned int smplsel; +}; + +static void socfpga_dwmci_clksel (struct dwmci_host *host) +{ +struct dwmci_socfpga_priv_data *priv = host->priv;/* Disable SDMMC clock. */ clrbits_le32 (&clock_manager_base->per_pll.en,CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK ); -/* Configures drv_sel and smpl_sel */ - drvsel =CONFIG_SOCFPGA_DWMMC_DRVSEL ; - smplsel =CONFIG_SOCFPGA_DWMMC_SMPSEL ; - -debug ("%s: drvsel %d smplsel %d\n" , __func__, drvsel, smplsel); -writel (SYSMGR_SDMMC_CTRL_SET (smplsel, drvsel), +debug ("%s: drvsel %d smplsel %d\n" , __func__, + priv->drvsel, priv->smplsel); +writel (SYSMGR_SDMMC_CTRL_SET (priv->smplsel, priv->drvsel), &system_manager_base->sdmmcgrp_ctrl); debug("%s: SYSMGR_SDMMCGRP_CTRL_REG = 0x%x\n", __func__,
@@ -50,6 +52,7 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx)const unsigned long clk =cm_get_mmc_controller_clk_hz ();struct dwmci_host *host; +struct dwmci_socfpga_priv_data *priv;fdt_addr_t reg_base;int bus_width, fifo_depth;
@@ -83,6 +86,13 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx)if (!host)return -ENOMEM ; +/* Allocate the priv */ + priv =calloc (1 ,sizeof (*priv)); +if (!priv) { +free (host); +return -ENOMEM ; + } + host->name ="SOCFPGA DWMMC" ; host->ioaddr = (void *)reg_base; host->buswidth = bus_width;
@@ -92,6 +102,9 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx) host->bus_hz = clk; host->fifoth_val =MSIZE (0x2 ) |RX_WMARK (fifo_depth /2 -1 ) |TX_WMARK (fifo_depth /2 ); + priv->drvsel =fdtdec_get_uint (blob, node,"drvsel" ,3 ); + priv->smplsel =fdtdec_get_uint (blob, node,"smplsel" ,0 ); + host->priv = priv;return add_dwmci (host, host->bus_hz,400000 ); }
include/configs/socfpga_common.h +0 -2
@@ -153,8 +153,6 @@#define CONFIG_DWMMC #define CONFIG_SOCFPGA_DWMMC #define CONFIG_SOCFPGA_DWMMC_FIFO_DEPTH 1024 -#define CONFIG_SOCFPGA_DWMMC_DRVSEL 3 -#define CONFIG_SOCFPGA_DWMMC_SMPSEL 0/* FIXME */ /* using smaller max blk cnt to avoid flooding the limited stack we have */ #define CONFIG_SYS_MMC_MAX_BLK_COUNT 256/* FIXME -- SPL only? */
Signature · 1 line
2.2.0
PATCH v3 1/2 mmc: socfpga_dw_mmc: Move drvsel and smplsel to dts
Quoted 108 lines · Chin Liang See
socfpga_dw_mmcdriver will obtain the drvsel and smplsel value from device tree instead of definition in config header file.Signed-off-by Chin Liang See <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Pavel Machek <[email protected]>Cc Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Pantelis Antoniou <[email protected]>Cc Simon Glass <[email protected]>Cc Jaehoon Chung <[email protected]>Acked-by Marek Vasut <[email protected]>---
Changes for v3
- Split patch to separte DTS and driver patches Changes for v2
- Put default value for drvsel to 3 in case node in DT missing
- Remove unnecessary ad-hoc vairable
- Free up first calloc if second calloc failed--- drivers/mmc/socfpga_dw_mmc.c | 29 +++++++++++++++++++++-------- include/configs/socfpga_common.h | 2 -- 2 files changed, 21 insertions(+), 10 deletions(-)drivers/mmc/socfpga_dw_mmc.c +21
-8@@ -19,21 +19,23 @@ static const struct socfpga_clock_manager *clock_manager_base =static const struct socfpga_system_manager *system_manager_base = (void *)SOCFPGA_SYSMGR_ADDRESS ; -static void socfpga_dwmci_clksel (struct dwmci_host *host) -{ +/* socfpga implmentation specific drver private data */ +struct dwmci_socfpga_priv_data {unsigned int drvsel;unsigned int smplsel; +}; + +static void socfpga_dwmci_clksel (struct dwmci_host *host) +{ +struct dwmci_socfpga_priv_data *priv = host->priv;/* Disable SDMMC clock. */ clrbits_le32 (&clock_manager_base->per_pll.en,CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK ); -/* Configures drv_sel and smpl_sel */ - drvsel =CONFIG_SOCFPGA_DWMMC_DRVSEL ; - smplsel =CONFIG_SOCFPGA_DWMMC_SMPSEL ; - -debug ("%s: drvsel %d smplsel %d\n" , __func__, drvsel, smplsel); -writel (SYSMGR_SDMMC_CTRL_SET (smplsel, drvsel), +debug ("%s: drvsel %d smplsel %d\n" , __func__, + priv->drvsel, priv->smplsel); +writel (SYSMGR_SDMMC_CTRL_SET (priv->smplsel, priv->drvsel), &system_manager_base->sdmmcgrp_ctrl); debug("%s: SYSMGR_SDMMCGRP_CTRL_REG = 0x%x\n", __func__,@@ -50,6 +52,7 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx)const unsigned long clk =cm_get_mmc_controller_clk_hz ();struct dwmci_host *host; +struct dwmci_socfpga_priv_data *priv;fdt_addr_t reg_base;int bus_width, fifo_depth;@@ -83,6 +86,13 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx)if (!host)return -ENOMEM ; +/* Allocate the priv */ + priv =calloc (1 ,sizeof (*priv)); +if (!priv) { +free (host); +return -ENOMEM ; + } + host->name ="SOCFPGA DWMMC" ; host->ioaddr = (void *)reg_base; host->buswidth = bus_width;@@ -92,6 +102,9 @@ static int socfpga_dwmci_of_probe(const void *blob, int node, const int idx) host->bus_hz = clk; host->fifoth_val =MSIZE (0x2 ) |RX_WMARK (fifo_depth /2 -1 ) |TX_WMARK (fifo_depth /2 ); + priv->drvsel =fdtdec_get_uint (blob, node,"drvsel" ,3 ); + priv->smplsel =fdtdec_get_uint (blob, node,"smplsel" ,0 ); + host->priv = priv;return add_dwmci (host, host->bus_hz,400000 ); }include/configs/socfpga_common.h +0
-2@@ -153,8 +153,6 @@#define CONFIG_DWMMC #define CONFIG_SOCFPGA_DWMMC #define CONFIG_SOCFPGA_DWMMC_FIFO_DEPTH 1024 -#define CONFIG_SOCFPGA_DWMMC_DRVSEL 3 -#define CONFIG_SOCFPGA_DWMMC_SMPSEL 0/* FIXME */ /* using smaller max blk cnt to avoid flooding the limited stack we have */ #define CONFIG_SYS_MMC_MAX_BLK_COUNT 256/* FIXME -- SPL only? */
Marek Vasut
AppliedPATCH v3 1/2 mmc: socfpga_dw_mmc: Move drvsel and smplsel to dts
In reply to Chin Liang SeeQuoted 4 lines · Chin Liang See
socfpga_dw_mmcdriver will obtain the drvsel and smplsel value from device tree instead of definition in config header file.
Quoted 10 lines
Signed-off-by Chin Liang See <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Dinh Nguyen <[email protected]>Cc Pavel Machek <[email protected]>Cc Marek Vasut <[email protected]>Cc Stefan Roese <[email protected]>Cc Pantelis Antoniou <[email protected]>Cc Simon Glass <[email protected]>Cc Jaehoon Chung <[email protected]>Acked-by Marek Vasut <[email protected]>
Applied both, thanks!
Best regards,
Marek Vasut