Most of silicon errata about the eSDHC need to be identified through
the SoC version/revision. This patch makes the driver get these
information from SVR(system version register) of global utilities
registers.

Signed-off-by: Yangbo Lu <yangbo...@freescale.com>
---
Changes for v2:
        - Got SVR through iomap instead of dts
Changes for v3:
        - Managed GUTS through syscon instead of iomap in eSDHC driver
Changes for v4:
        - Got SVR by GUTS driver instead of SYSCON
---
 drivers/mmc/host/sdhci-of-esdhc.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/sdhci-of-esdhc.c 
b/drivers/mmc/host/sdhci-of-esdhc.c
index 83b1226..9105888 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -18,6 +18,8 @@
 #include <linux/of.h>
 #include <linux/delay.h>
 #include <linux/module.h>
+#include <linux/svr.h>
+#include <linux/fsl/guts.h>
 #include <linux/mmc/host.h>
 #include "sdhci-pltfm.h"
 #include "sdhci-esdhc.h"
@@ -28,6 +30,8 @@
 struct sdhci_esdhc {
        u8 vendor_ver;
        u8 spec_ver;
+       u32 soc_ver;
+       u8 soc_rev;
 };
 
 /**
@@ -566,18 +570,27 @@ static void esdhc_init(struct platform_device *pdev, 
struct sdhci_host *host)
 {
        struct sdhci_pltfm_host *pltfm_host;
        struct sdhci_esdhc *esdhc;
+       struct ccsr_guts __iomem *guts;
+       u32 svr;
        u16 host_ver;
 
        pltfm_host = sdhci_priv(host);
        esdhc = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_esdhc),
                             GFP_KERNEL);
+       pltfm_host->priv = esdhc;
+
+       guts = guts_regmap();
+       if (guts) {
+               svr = guts_get_reg32(&guts->svr);
+               esdhc->soc_ver = SVR_SOC_VER(svr);
+               esdhc->soc_rev = SVR_REV(svr);
+       } else
+               dev_err(&pdev->dev, "unable to get SVR value!\n");
 
        host_ver = sdhci_readw(host, SDHCI_HOST_VERSION);
        esdhc->vendor_ver = (host_ver & SDHCI_VENDOR_VER_MASK) >>
                             SDHCI_VENDOR_VER_SHIFT;
        esdhc->spec_ver = host_ver & SDHCI_SPEC_VER_MASK;
-
-       pltfm_host->priv = esdhc;
 }
 
 static int sdhci_esdhc_probe(struct platform_device *pdev)
-- 
2.1.0.27.g96db324

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to