* [PATCH 1/6] mmc: sdhci-pltfm: Add structure for host-specific data
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-11 14:21 ` [PATCH 2/6] mmc: sdhci-pltfm: move .h-file into apropriate subdir Wolfram Sang
` (6 subsequent siblings)
7 siblings, 0 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
We need to carry some information per host, e.g. the clock. Add a
structure for it and initialize it in the generic part. Also improve
the check for a parent.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: Richard R?jfors <richard.rojfors.ext@mocean-labs.com>
---
Changes since last version:
* Improved detection of a "real" parent device
drivers/mmc/host/sdhci-pltfm.c | 10 +++++++---
drivers/mmc/host/sdhci-pltfm.h | 7 +++++++
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 4f126de..730fdf5 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -55,6 +55,7 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
struct sdhci_pltfm_data *pdata = pdev->dev.platform_data;
const struct platform_device_id *platid = platform_get_device_id(pdev);
struct sdhci_host *host;
+ struct sdhci_pltfm_host *pltfm_host;
struct resource *iomem;
int ret;
@@ -71,16 +72,19 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "Invalid iomem size. You may "
"experience problems.\n");
- if (pdev->dev.parent)
- host = sdhci_alloc_host(pdev->dev.parent, 0);
+ /* Some PCI-based MFD need the parent here */
+ if (pdev->dev.parent != &platform_bus)
+ host = sdhci_alloc_host(pdev->dev.parent, sizeof(*pltfm_host));
else
- host = sdhci_alloc_host(&pdev->dev, 0);
+ host = sdhci_alloc_host(&pdev->dev, sizeof(*pltfm_host));
if (IS_ERR(host)) {
ret = PTR_ERR(host);
goto err;
}
+ pltfm_host = sdhci_priv(host);
+
host->hw_name = "platform";
if (pdata && pdata->ops)
host->ops = pdata->ops;
diff --git a/drivers/mmc/host/sdhci-pltfm.h b/drivers/mmc/host/sdhci-pltfm.h
index 900f329..93a0319 100644
--- a/drivers/mmc/host/sdhci-pltfm.h
+++ b/drivers/mmc/host/sdhci-pltfm.h
@@ -11,8 +11,15 @@
#ifndef _DRIVERS_MMC_SDHCI_PLTFM_H
#define _DRIVERS_MMC_SDHCI_PLTFM_H
+#include <linux/clk.h>
+#include <linux/types.h>
#include <linux/sdhci-pltfm.h>
+struct sdhci_pltfm_host {
+ struct clk *clk;
+ u32 scratchpad; /* to handle quirks across io-accessor calls */
+};
+
extern struct sdhci_pltfm_data sdhci_cns3xxx_pdata;
#endif /* _DRIVERS_MMC_SDHCI_PLTFM_H */
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 2/6] mmc: sdhci-pltfm: move .h-file into apropriate subdir
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
2010-10-11 14:21 ` [PATCH 1/6] mmc: sdhci-pltfm: Add structure for host-specific data Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-11 14:21 ` [PATCH 3/6] mmc: sdhci: introduce private get_ro Wolfram Sang
` (5 subsequent siblings)
7 siblings, 0 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
Make use of the mmc-directory.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Acked-by: Anton Vorontsov <cbouatmailru@gmail.com>
Tested-by : Eric B?nard <eric@eukrea.com>
---
drivers/mmc/host/sdhci-cns3xxx.c | 2 +-
drivers/mmc/host/sdhci-pltfm.c | 2 +-
drivers/mmc/host/sdhci-pltfm.h | 2 +-
include/linux/mmc/sdhci-pltfm.h | 35 +++++++++++++++++++++++++++++++++++
include/linux/sdhci-pltfm.h | 35 -----------------------------------
5 files changed, 38 insertions(+), 38 deletions(-)
create mode 100644 include/linux/mmc/sdhci-pltfm.h
delete mode 100644 include/linux/sdhci-pltfm.h
diff --git a/drivers/mmc/host/sdhci-cns3xxx.c b/drivers/mmc/host/sdhci-cns3xxx.c
index b7050b3..9ebd1d7 100644
--- a/drivers/mmc/host/sdhci-cns3xxx.c
+++ b/drivers/mmc/host/sdhci-cns3xxx.c
@@ -15,7 +15,7 @@
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/mmc/host.h>
-#include <linux/sdhci-pltfm.h>
+#include <linux/mmc/sdhci-pltfm.h>
#include <mach/cns3xxx.h>
#include "sdhci.h"
#include "sdhci-pltfm.h"
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 730fdf5..685202b 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -30,7 +30,7 @@
#include <linux/mmc/host.h>
#include <linux/io.h>
-#include <linux/sdhci-pltfm.h>
+#include <linux/mmc/sdhci-pltfm.h>
#include "sdhci.h"
#include "sdhci-pltfm.h"
diff --git a/drivers/mmc/host/sdhci-pltfm.h b/drivers/mmc/host/sdhci-pltfm.h
index 93a0319..562b929 100644
--- a/drivers/mmc/host/sdhci-pltfm.h
+++ b/drivers/mmc/host/sdhci-pltfm.h
@@ -13,7 +13,7 @@
#include <linux/clk.h>
#include <linux/types.h>
-#include <linux/sdhci-pltfm.h>
+#include <linux/mmc/sdhci-pltfm.h>
struct sdhci_pltfm_host {
struct clk *clk;
diff --git a/include/linux/mmc/sdhci-pltfm.h b/include/linux/mmc/sdhci-pltfm.h
new file mode 100644
index 0000000..0239bd7
--- /dev/null
+++ b/include/linux/mmc/sdhci-pltfm.h
@@ -0,0 +1,35 @@
+/*
+ * Platform data declarations for the sdhci-pltfm driver.
+ *
+ * Copyright (c) 2010 MontaVista Software, LLC.
+ *
+ * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ */
+
+#ifndef _SDHCI_PLTFM_H
+#define _SDHCI_PLTFM_H
+
+struct sdhci_ops;
+struct sdhci_host;
+
+/**
+ * struct sdhci_pltfm_data - SDHCI platform-specific information & hooks
+ * @ops: optional pointer to the platform-provided SDHCI ops
+ * @quirks: optional SDHCI quirks
+ * @init: optional hook that is called during device probe, before the
+ * driver tries to access any SDHCI registers
+ * @exit: optional hook that is called during device removal
+ */
+struct sdhci_pltfm_data {
+ struct sdhci_ops *ops;
+ unsigned int quirks;
+ int (*init)(struct sdhci_host *host);
+ void (*exit)(struct sdhci_host *host);
+};
+
+#endif /* _SDHCI_PLTFM_H */
diff --git a/include/linux/sdhci-pltfm.h b/include/linux/sdhci-pltfm.h
deleted file mode 100644
index 0239bd7..0000000
--- a/include/linux/sdhci-pltfm.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Platform data declarations for the sdhci-pltfm driver.
- *
- * Copyright (c) 2010 MontaVista Software, LLC.
- *
- * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- */
-
-#ifndef _SDHCI_PLTFM_H
-#define _SDHCI_PLTFM_H
-
-struct sdhci_ops;
-struct sdhci_host;
-
-/**
- * struct sdhci_pltfm_data - SDHCI platform-specific information & hooks
- * @ops: optional pointer to the platform-provided SDHCI ops
- * @quirks: optional SDHCI quirks
- * @init: optional hook that is called during device probe, before the
- * driver tries to access any SDHCI registers
- * @exit: optional hook that is called during device removal
- */
-struct sdhci_pltfm_data {
- struct sdhci_ops *ops;
- unsigned int quirks;
- int (*init)(struct sdhci_host *host);
- void (*exit)(struct sdhci_host *host);
-};
-
-#endif /* _SDHCI_PLTFM_H */
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 3/6] mmc: sdhci: introduce private get_ro
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
2010-10-11 14:21 ` [PATCH 1/6] mmc: sdhci-pltfm: Add structure for host-specific data Wolfram Sang
2010-10-11 14:21 ` [PATCH 2/6] mmc: sdhci-pltfm: move .h-file into apropriate subdir Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-11 14:21 ` [PATCH 4/6] mmc: sdhci_pltfm: pass more data on custom init-call Wolfram Sang
` (4 subsequent siblings)
7 siblings, 0 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
Some controllers handle their write-protection differently. Introduce a
callback to be able to handle it, ensuring the same locking takes place
for it.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by : Eric B?nard <eric@eukrea.com>
---
drivers/mmc/host/sdhci.c | 11 +++++++----
drivers/mmc/host/sdhci.h | 1 +
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 9cb60ba..970110a 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1231,14 +1231,17 @@ static int sdhci_get_ro(struct mmc_host *mmc)
if (host->flags & SDHCI_DEVICE_DEAD)
present = 0;
+ else if (host->ops->get_ro)
+ present = host->ops->get_ro(host);
else
- present = sdhci_readl(host, SDHCI_PRESENT_STATE);
+ present = !(sdhci_readl(host, SDHCI_PRESENT_STATE)
+ & SDHCI_WRITE_PROTECT);
spin_unlock_irqrestore(&host->lock, flags);
- if (host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT)
- return !!(present & SDHCI_WRITE_PROTECT);
- return !(present & SDHCI_WRITE_PROTECT);
+ /* This quirk needs to be replaced by a callback-function later */
+ return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ?
+ !present : present;
}
static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index bfcd611..b7b8a3b 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -214,6 +214,7 @@ struct sdhci_ops {
unsigned int (*get_timeout_clock)(struct sdhci_host *host);
void (*platform_send_init_74_clocks)(struct sdhci_host *host,
u8 power_mode);
+ unsigned int (*get_ro)(struct sdhci_host *host);
};
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 4/6] mmc: sdhci_pltfm: pass more data on custom init-call
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
` (2 preceding siblings ...)
2010-10-11 14:21 ` [PATCH 3/6] mmc: sdhci: introduce private get_ro Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-11 14:21 ` [PATCH 5/6] mmc: sdhci-of-esdhc: factor out common stuff Wolfram Sang
` (3 subsequent siblings)
7 siblings, 0 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
The custom init call may need more data to perform its job, so we pass
it a pointer to pdata, too. Also, always use the platform_id specific
data even if platform_data is present. Doing that, platform_data can
additionally be parsed by init() for board-specific information (via
sdhci->mmc->parent).
(Note: the old behaviour was that you could override the platform_id
specific data with your own. However, one can still do this by using the
"sdhci" id instead of "sdhci-<something>".)
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by : Eric B?nard <eric@eukrea.com>
---
drivers/mmc/host/sdhci-pltfm.c | 8 +++++---
include/linux/mmc/sdhci-pltfm.h | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 685202b..00e8a8a 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -52,15 +52,17 @@ static struct sdhci_ops sdhci_pltfm_ops = {
static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
{
- struct sdhci_pltfm_data *pdata = pdev->dev.platform_data;
const struct platform_device_id *platid = platform_get_device_id(pdev);
+ struct sdhci_pltfm_data *pdata;
struct sdhci_host *host;
struct sdhci_pltfm_host *pltfm_host;
struct resource *iomem;
int ret;
- if (!pdata && platid && platid->driver_data)
+ if (platid && platid->driver_data)
pdata = (void *)platid->driver_data;
+ else
+ pdata = pdev->dev.platform_data;
iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!iomem) {
@@ -109,7 +111,7 @@ static int __devinit sdhci_pltfm_probe(struct platform_device *pdev)
}
if (pdata && pdata->init) {
- ret = pdata->init(host);
+ ret = pdata->init(host, pdata);
if (ret)
goto err_plat_init;
}
diff --git a/include/linux/mmc/sdhci-pltfm.h b/include/linux/mmc/sdhci-pltfm.h
index 0239bd7..548d59d 100644
--- a/include/linux/mmc/sdhci-pltfm.h
+++ b/include/linux/mmc/sdhci-pltfm.h
@@ -28,7 +28,7 @@ struct sdhci_host;
struct sdhci_pltfm_data {
struct sdhci_ops *ops;
unsigned int quirks;
- int (*init)(struct sdhci_host *host);
+ int (*init)(struct sdhci_host *host, struct sdhci_pltfm_data *pdata);
void (*exit)(struct sdhci_host *host);
};
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 5/6] mmc: sdhci-of-esdhc: factor out common stuff
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
` (3 preceding siblings ...)
2010-10-11 14:21 ` [PATCH 4/6] mmc: sdhci_pltfm: pass more data on custom init-call Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-11 17:10 ` [PATCH v2 " Wolfram Sang
2010-10-11 14:21 ` [PATCH 6/6] mmc: sdhci-pltfm: add pltfm-driver for imx35/51 Wolfram Sang
` (2 subsequent siblings)
7 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
Put everything which can be shared between the OF and platform version
of this driver into a local .h-file.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by : Eric B?nard <eric@eukrea.com>
---
drivers/mmc/host/sdhci-esdhc.h | 81 +++++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci-of-esdhc.c | 70 ++++----------------------------
2 files changed, 89 insertions(+), 62 deletions(-)
create mode 100644 drivers/mmc/host/sdhci-esdhc.h
diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h
new file mode 100644
index 0000000..7ccc8cb
--- /dev/null
+++ b/drivers/mmc/host/sdhci-esdhc.h
@@ -0,0 +1,81 @@
+/*
+ * Freescale eSDHC controller driver generics for OF and pltfm.
+ *
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ * Copyright (c) 2009 MontaVista Software, Inc.
+ * Copyright (c) 2010 Pengutronix e.K.
+ * Author: Wolfram Sang <w.sang@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License.
+ */
+
+#ifndef _DRIVERS_MMC_SDHCI_ESDHC_H
+#define _DRIVERS_MMC_SDHCI_ESDHC_H
+
+/*
+ * Ops and quirks for the Freescale eSDHC controller.
+ */
+
+#define ESDHC_DEFAULT_QUIRKS (SDHCI_QUIRK_FORCE_BLK_SZ_2048 | \
+ SDHCI_QUIRK_BROKEN_CARD_DETECTION | \
+ SDHCI_QUIRK_NO_BUSY_IRQ | \
+ SDHCI_QUIRK_NONSTANDARD_CLOCK | \
+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | \
+ SDHCI_QUIRK_PIO_NEEDS_DELAY | \
+ SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET | \
+ SDHCI_QUIRK_NO_CARD_NO_RESET)
+
+#define ESDHC_SYSTEM_CONTROL 0x2c
+#define ESDHC_CLOCK_MASK 0x0000fff0
+#define ESDHC_PREDIV_SHIFT 8
+#define ESDHC_DIVIDER_SHIFT 4
+#define ESDHC_CLOCK_PEREN 0x00000004
+#define ESDHC_CLOCK_HCKEN 0x00000002
+#define ESDHC_CLOCK_IPGEN 0x00000001
+
+/* pltfm-specific */
+#define ESDHC_HOST_CONTROL_LE 0x20
+
+/* OF-specific */
+#define ESDHC_DMA_SYSCTL 0x40c
+#define ESDHC_DMA_SNOOP 0x00000040
+
+#define ESDHC_HOST_CONTROL_RES 0x05
+
+static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
+{
+ int pre_div = 2;
+ int div = 1;
+ u32 temp;
+
+ temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
+ temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
+ sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
+
+ if (clock == 0)
+ goto out;
+
+ while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
+ pre_div *= 2;
+
+ while (host->max_clk / pre_div / div > clock && div < 16)
+ div++;
+
+ dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
+ clock, host->max_clk / pre_div / div);
+
+ pre_div >>= 1;
+ div--;
+
+ temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
+ temp |= (ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN |
+ (div << ESDHC_DIVIDER_SHIFT) | (pre_div << ESDHC_PREDIV_SHIFT));
+ sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
+ mdelay(100);
+out:
+ host->clock = clock;
+}
+
+#endif /* _DRIVERS_MMC_SDHCI_ESDHC_H */
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index c8623de..277fcb9 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -18,23 +18,7 @@
#include <linux/mmc/host.h>
#include "sdhci-of.h"
#include "sdhci.h"
-
-/*
- * Ops and quirks for the Freescale eSDHC controller.
- */
-
-#define ESDHC_DMA_SYSCTL 0x40c
-#define ESDHC_DMA_SNOOP 0x00000040
-
-#define ESDHC_SYSTEM_CONTROL 0x2c
-#define ESDHC_CLOCK_MASK 0x0000fff0
-#define ESDHC_PREDIV_SHIFT 8
-#define ESDHC_DIVIDER_SHIFT 4
-#define ESDHC_CLOCK_PEREN 0x00000004
-#define ESDHC_CLOCK_HCKEN 0x00000002
-#define ESDHC_CLOCK_IPGEN 0x00000001
-
-#define ESDHC_HOST_CONTROL_RES 0x05
+#include "sdhci-esdhc.c"
static u16 esdhc_readw(struct sdhci_host *host, int reg)
{
@@ -68,51 +52,20 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg)
sdhci_be32bs_writeb(host, val, reg);
}
-static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
-{
- int pre_div = 2;
- int div = 1;
-
- clrbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
- ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
-
- if (clock == 0)
- goto out;
-
- while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
- pre_div *= 2;
-
- while (host->max_clk / pre_div / div > clock && div < 16)
- div++;
-
- dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
- clock, host->max_clk / pre_div / div);
-
- pre_div >>= 1;
- div--;
-
- setbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
- ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN |
- div << ESDHC_DIVIDER_SHIFT | pre_div << ESDHC_PREDIV_SHIFT);
- mdelay(100);
-out:
- host->clock = clock;
-}
-
-static int esdhc_enable_dma(struct sdhci_host *host)
+static int esdhc_of_enable_dma(struct sdhci_host *host)
{
setbits32(host->ioaddr + ESDHC_DMA_SYSCTL, ESDHC_DMA_SNOOP);
return 0;
}
-static unsigned int esdhc_get_max_clock(struct sdhci_host *host)
+static unsigned int esdhc_of_get_max_clock(struct sdhci_host *host)
{
struct sdhci_of_host *of_host = sdhci_priv(host);
return of_host->clock;
}
-static unsigned int esdhc_get_min_clock(struct sdhci_host *host)
+static unsigned int esdhc_of_get_min_clock(struct sdhci_host *host)
{
struct sdhci_of_host *of_host = sdhci_priv(host);
@@ -120,14 +73,7 @@ static unsigned int esdhc_get_min_clock(struct sdhci_host *host)
}
struct sdhci_of_data sdhci_esdhc = {
- .quirks = SDHCI_QUIRK_FORCE_BLK_SZ_2048 |
- SDHCI_QUIRK_BROKEN_CARD_DETECTION |
- SDHCI_QUIRK_NO_BUSY_IRQ |
- SDHCI_QUIRK_NONSTANDARD_CLOCK |
- SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
- SDHCI_QUIRK_PIO_NEEDS_DELAY |
- SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET |
- SDHCI_QUIRK_NO_CARD_NO_RESET,
+ .quirks = ESDHC_DEFAULT_QUIRKS,
.ops = {
.read_l = sdhci_be32bs_readl,
.read_w = esdhc_readw,
@@ -136,8 +82,8 @@ struct sdhci_of_data sdhci_esdhc = {
.write_w = esdhc_writew,
.write_b = esdhc_writeb,
.set_clock = esdhc_set_clock,
- .enable_dma = esdhc_enable_dma,
- .get_max_clock = esdhc_get_max_clock,
- .get_min_clock = esdhc_get_min_clock,
+ .enable_dma = esdhc_of_enable_dma,
+ .get_max_clock = esdhc_of_get_max_clock,
+ .get_min_clock = esdhc_of_get_min_clock,
},
};
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH v2 5/6] mmc: sdhci-of-esdhc: factor out common stuff
2010-10-11 14:21 ` [PATCH 5/6] mmc: sdhci-of-esdhc: factor out common stuff Wolfram Sang
@ 2010-10-11 17:10 ` Wolfram Sang
2010-10-11 18:33 ` Chris Ball
0 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 17:10 UTC (permalink / raw)
To: linux-arm-kernel
Put everything which can be shared between the OF and platform version
of this driver into a local .h-file.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by : Eric B?nard <eric@eukrea.com>
---
80 char/line fixed. Untested as of now, can only test tomorrow again.
Should be safe changes, though (famous last words again ;)))
drivers/mmc/host/sdhci-esdhc.h | 83 +++++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci-of-esdhc.c | 70 ++++---------------------------
2 files changed, 91 insertions(+), 62 deletions(-)
create mode 100644 drivers/mmc/host/sdhci-esdhc.h
diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h
new file mode 100644
index 0000000..afaf1bc
--- /dev/null
+++ b/drivers/mmc/host/sdhci-esdhc.h
@@ -0,0 +1,83 @@
+/*
+ * Freescale eSDHC controller driver generics for OF and pltfm.
+ *
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ * Copyright (c) 2009 MontaVista Software, Inc.
+ * Copyright (c) 2010 Pengutronix e.K.
+ * Author: Wolfram Sang <w.sang@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License.
+ */
+
+#ifndef _DRIVERS_MMC_SDHCI_ESDHC_H
+#define _DRIVERS_MMC_SDHCI_ESDHC_H
+
+/*
+ * Ops and quirks for the Freescale eSDHC controller.
+ */
+
+#define ESDHC_DEFAULT_QUIRKS (SDHCI_QUIRK_FORCE_BLK_SZ_2048 | \
+ SDHCI_QUIRK_BROKEN_CARD_DETECTION | \
+ SDHCI_QUIRK_NO_BUSY_IRQ | \
+ SDHCI_QUIRK_NONSTANDARD_CLOCK | \
+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | \
+ SDHCI_QUIRK_PIO_NEEDS_DELAY | \
+ SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET | \
+ SDHCI_QUIRK_NO_CARD_NO_RESET)
+
+#define ESDHC_SYSTEM_CONTROL 0x2c
+#define ESDHC_CLOCK_MASK 0x0000fff0
+#define ESDHC_PREDIV_SHIFT 8
+#define ESDHC_DIVIDER_SHIFT 4
+#define ESDHC_CLOCK_PEREN 0x00000004
+#define ESDHC_CLOCK_HCKEN 0x00000002
+#define ESDHC_CLOCK_IPGEN 0x00000001
+
+/* pltfm-specific */
+#define ESDHC_HOST_CONTROL_LE 0x20
+
+/* OF-specific */
+#define ESDHC_DMA_SYSCTL 0x40c
+#define ESDHC_DMA_SNOOP 0x00000040
+
+#define ESDHC_HOST_CONTROL_RES 0x05
+
+static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
+{
+ int pre_div = 2;
+ int div = 1;
+ u32 temp;
+
+ temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
+ temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN
+ | ESDHC_CLOCK_MASK);
+ sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
+
+ if (clock == 0)
+ goto out;
+
+ while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
+ pre_div *= 2;
+
+ while (host->max_clk / pre_div / div > clock && div < 16)
+ div++;
+
+ dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
+ clock, host->max_clk / pre_div / div);
+
+ pre_div >>= 1;
+ div--;
+
+ temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
+ temp |= (ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN
+ | (div << ESDHC_DIVIDER_SHIFT)
+ | (pre_div << ESDHC_PREDIV_SHIFT));
+ sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
+ mdelay(100);
+out:
+ host->clock = clock;
+}
+
+#endif /* _DRIVERS_MMC_SDHCI_ESDHC_H */
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index c8623de..277fcb9 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -18,23 +18,7 @@
#include <linux/mmc/host.h>
#include "sdhci-of.h"
#include "sdhci.h"
-
-/*
- * Ops and quirks for the Freescale eSDHC controller.
- */
-
-#define ESDHC_DMA_SYSCTL 0x40c
-#define ESDHC_DMA_SNOOP 0x00000040
-
-#define ESDHC_SYSTEM_CONTROL 0x2c
-#define ESDHC_CLOCK_MASK 0x0000fff0
-#define ESDHC_PREDIV_SHIFT 8
-#define ESDHC_DIVIDER_SHIFT 4
-#define ESDHC_CLOCK_PEREN 0x00000004
-#define ESDHC_CLOCK_HCKEN 0x00000002
-#define ESDHC_CLOCK_IPGEN 0x00000001
-
-#define ESDHC_HOST_CONTROL_RES 0x05
+#include "sdhci-esdhc.c"
static u16 esdhc_readw(struct sdhci_host *host, int reg)
{
@@ -68,51 +52,20 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg)
sdhci_be32bs_writeb(host, val, reg);
}
-static void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
-{
- int pre_div = 2;
- int div = 1;
-
- clrbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
- ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
-
- if (clock == 0)
- goto out;
-
- while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
- pre_div *= 2;
-
- while (host->max_clk / pre_div / div > clock && div < 16)
- div++;
-
- dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
- clock, host->max_clk / pre_div / div);
-
- pre_div >>= 1;
- div--;
-
- setbits32(host->ioaddr + ESDHC_SYSTEM_CONTROL, ESDHC_CLOCK_IPGEN |
- ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN |
- div << ESDHC_DIVIDER_SHIFT | pre_div << ESDHC_PREDIV_SHIFT);
- mdelay(100);
-out:
- host->clock = clock;
-}
-
-static int esdhc_enable_dma(struct sdhci_host *host)
+static int esdhc_of_enable_dma(struct sdhci_host *host)
{
setbits32(host->ioaddr + ESDHC_DMA_SYSCTL, ESDHC_DMA_SNOOP);
return 0;
}
-static unsigned int esdhc_get_max_clock(struct sdhci_host *host)
+static unsigned int esdhc_of_get_max_clock(struct sdhci_host *host)
{
struct sdhci_of_host *of_host = sdhci_priv(host);
return of_host->clock;
}
-static unsigned int esdhc_get_min_clock(struct sdhci_host *host)
+static unsigned int esdhc_of_get_min_clock(struct sdhci_host *host)
{
struct sdhci_of_host *of_host = sdhci_priv(host);
@@ -120,14 +73,7 @@ static unsigned int esdhc_get_min_clock(struct sdhci_host *host)
}
struct sdhci_of_data sdhci_esdhc = {
- .quirks = SDHCI_QUIRK_FORCE_BLK_SZ_2048 |
- SDHCI_QUIRK_BROKEN_CARD_DETECTION |
- SDHCI_QUIRK_NO_BUSY_IRQ |
- SDHCI_QUIRK_NONSTANDARD_CLOCK |
- SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
- SDHCI_QUIRK_PIO_NEEDS_DELAY |
- SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET |
- SDHCI_QUIRK_NO_CARD_NO_RESET,
+ .quirks = ESDHC_DEFAULT_QUIRKS,
.ops = {
.read_l = sdhci_be32bs_readl,
.read_w = esdhc_readw,
@@ -136,8 +82,8 @@ struct sdhci_of_data sdhci_esdhc = {
.write_w = esdhc_writew,
.write_b = esdhc_writeb,
.set_clock = esdhc_set_clock,
- .enable_dma = esdhc_enable_dma,
- .get_max_clock = esdhc_get_max_clock,
- .get_min_clock = esdhc_get_min_clock,
+ .enable_dma = esdhc_of_enable_dma,
+ .get_max_clock = esdhc_of_get_max_clock,
+ .get_min_clock = esdhc_of_get_min_clock,
},
};
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH v2 5/6] mmc: sdhci-of-esdhc: factor out common stuff
2010-10-11 17:10 ` [PATCH v2 " Wolfram Sang
@ 2010-10-11 18:33 ` Chris Ball
2010-10-13 10:22 ` Zhu Richard-R65037
0 siblings, 1 reply; 41+ messages in thread
From: Chris Ball @ 2010-10-11 18:33 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
On Mon, Oct 11, 2010 at 07:10:32PM +0200, Wolfram Sang wrote:
> +static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
> +{
> + int pre_div = 2;
> + int div = 1;
> + u32 temp;
> +
> + temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
> + temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN
> + | ESDHC_CLOCK_MASK);
> + sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
> +
> + if (clock == 0)
> + goto out;
> +
> + while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
> + pre_div *= 2;
> +
> + while (host->max_clk / pre_div / div > clock && div < 16)
> + div++;
> +
> + dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n",
> + clock, host->max_clk / pre_div / div);
> +
> + pre_div >>= 1;
> + div--;
> +
> + temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
> + temp |= (ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN
> + | (div << ESDHC_DIVIDER_SHIFT)
> + | (pre_div << ESDHC_PREDIV_SHIFT));
> + sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
> + mdelay(100);
This isn't directly related to this patchset (the code was there
beforehand), but it would be nice to rework the mdelay(100).
Thanks,
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH v2 5/6] mmc: sdhci-of-esdhc: factor out common stuff
2010-10-11 18:33 ` Chris Ball
@ 2010-10-13 10:22 ` Zhu Richard-R65037
2010-10-13 10:31 ` Wolfram Sang
0 siblings, 1 reply; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-13 10:22 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram:
It's better that the mdelay(100) is replaced by some litter value such
as 10ms and so on,
since I encounter one bug ever when this values is set to 100. The
audio playback would
be noised by the sd/mmc insertion/extraction operations.
Best Regards
Richard Zhu
> -----Original Message-----
> From: Chris Ball [mailto:cjb at laptop.org]
> Sent: Tuesday, October 12, 2010 2:33 AM
> To: Wolfram Sang
> Cc: linux-mmc at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
Zhu
> Richard-R65037
> Subject: Re: [PATCH v2 5/6] mmc: sdhci-of-esdhc: factor out common
stuff
>
> Hi Wolfram,
>
> On Mon, Oct 11, 2010 at 07:10:32PM +0200, Wolfram Sang wrote:
> > +static inline void esdhc_set_clock(struct sdhci_host *host,
unsigned
> > +int clock) {
> > + int pre_div = 2;
> > + int div = 1;
> > + u32 temp;
> > +
> > + temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
> > + temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN |
ESDHC_CLOCK_PEREN
> > + | ESDHC_CLOCK_MASK);
> > + sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
> > +
> > + if (clock == 0)
> > + goto out;
> > +
> > + while (host->max_clk / pre_div / 16 > clock && pre_div < 256)
> > + pre_div *= 2;
> > +
> > + while (host->max_clk / pre_div / div > clock && div < 16)
> > + div++;
> > +
> > + dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual:
%d\n",
> > + clock, host->max_clk / pre_div / div);
> > +
> > + pre_div >>= 1;
> > + div--;
> > +
> > + temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL);
> > + temp |= (ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN |
ESDHC_CLOCK_PEREN
> > + | (div << ESDHC_DIVIDER_SHIFT)
> > + | (pre_div << ESDHC_PREDIV_SHIFT));
> > + sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
> > + mdelay(100);
>
> This isn't directly related to this patchset (the code was there
> beforehand), but it would be nice to rework the mdelay(100).
>
> Thanks,
>
> --
> Chris Ball <cjb@laptop.org> <http://printf.net/>
> One Laptop Per Child
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 6/6] mmc: sdhci-pltfm: add pltfm-driver for imx35/51
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
` (4 preceding siblings ...)
2010-10-11 14:21 ` [PATCH 5/6] mmc: sdhci-of-esdhc: factor out common stuff Wolfram Sang
@ 2010-10-11 14:21 ` Wolfram Sang
2010-10-14 3:07 ` Chris Ball
2010-10-11 16:32 ` [PATCH 0/6] SD/MMC driver for MX25/35/51 Chris Ball
2010-10-12 22:06 ` Arnaud Patard (Rtp)
7 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 14:21 UTC (permalink / raw)
To: linux-arm-kernel
This driver adds basic support for the esdhc-core found on e.g.
imx35/51. It adds up to the pltfm-core.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Acked-by: Anton Vorontsov <cbouatmailru@gmail.com>
Tested-by : Eric B?nard <eric@eukrea.com>
---
Changes since last version:
* use PTR_ERR if clk_get failed
drivers/mmc/host/Kconfig | 10 +++
drivers/mmc/host/Makefile | 1 +
drivers/mmc/host/sdhci-esdhc-imx.c | 143 ++++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci-pltfm.c | 3 +
drivers/mmc/host/sdhci-pltfm.h | 1 +
5 files changed, 158 insertions(+), 0 deletions(-)
create mode 100644 drivers/mmc/host/sdhci-esdhc-imx.c
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 8de7b9e..7b07f10 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -130,6 +130,16 @@ config MMC_SDHCI_CNS3XXX
If unsure, say N.
+config MMC_SDHCI_ESDHC_IMX
+ bool "SDHCI platform support for the Freescale eSDHC i.MX controller"
+ depends on MMC_SDHCI_PLTFM
+ select MMC_SDHCI_IO_ACCESSORS
+ help
+ This selects the Freescale eSDHC controller support on the platform
+ bus, found on platforms like mx35/51.
+
+ If unsure, say N.
+
config MMC_SDHCI_S3C
tristate "SDHCI support on Samsung S3C SoC"
depends on MMC_SDHCI && PLAT_SAMSUNG
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
index eae5d62..6c4ac67 100644
--- a/drivers/mmc/host/Makefile
+++ b/drivers/mmc/host/Makefile
@@ -37,6 +37,7 @@ obj-$(CONFIG_MMC_USHC) += ushc.o
obj-$(CONFIG_MMC_SDHCI_PLTFM) += sdhci-platform.o
sdhci-platform-y := sdhci-pltfm.o
sdhci-platform-$(CONFIG_MMC_SDHCI_CNS3XXX) += sdhci-cns3xxx.o
+sdhci-platform-$(CONFIG_MMC_SDHCI_ESDHC_IMX) += sdhci-esdhc-imx.o
obj-$(CONFIG_MMC_SDHCI_OF) += sdhci-of.o
sdhci-of-y := sdhci-of-core.o
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
new file mode 100644
index 0000000..2e9cca1
--- /dev/null
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -0,0 +1,143 @@
+/*
+ * Freescale eSDHC i.MX controller driver for the platform bus.
+ *
+ * derived from the OF-version.
+ *
+ * Copyright (c) 2010 Pengutronix e.K.
+ * Author: Wolfram Sang <w.sang@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License.
+ */
+
+#include <linux/io.h>
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/clk.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/sdhci-pltfm.h>
+#include "sdhci.h"
+#include "sdhci-pltfm.h"
+#include "sdhci-esdhc.h"
+
+static inline void esdhc_clrset_le(struct sdhci_host *host, u32 mask, u32 val, int reg)
+{
+ void __iomem *base = host->ioaddr + (reg & ~0x3);
+ u32 shift = (reg & 0x3) * 8;
+
+ writel(((readl(base) & ~(mask << shift)) | (val << shift)), base);
+}
+
+static u16 esdhc_readw_le(struct sdhci_host *host, int reg)
+{
+ if (unlikely(reg == SDHCI_HOST_VERSION))
+ reg ^= 2;
+
+ return readw(host->ioaddr + reg);
+}
+
+static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+ switch (reg) {
+ case SDHCI_TRANSFER_MODE:
+ /*
+ * Postpone this write, we must do it together with a
+ * command write that is down below.
+ */
+ pltfm_host->scratchpad = val;
+ return;
+ case SDHCI_COMMAND:
+ writel(val << 16 | pltfm_host->scratchpad,
+ host->ioaddr + SDHCI_TRANSFER_MODE);
+ return;
+ case SDHCI_BLOCK_SIZE:
+ val &= ~SDHCI_MAKE_BLKSZ(0x7, 0);
+ break;
+ }
+ esdhc_clrset_le(host, 0xffff, val, reg);
+}
+
+static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg)
+{
+ u32 new_val;
+
+ switch (reg) {
+ case SDHCI_POWER_CONTROL:
+ /*
+ * FSL put some DMA bits here
+ * If your board has a regulator, code should be here
+ */
+ return;
+ case SDHCI_HOST_CONTROL:
+ /* FSL messed up here, so we can just keep those two */
+ new_val = val & (SDHCI_CTRL_LED | SDHCI_CTRL_4BITBUS);
+ /* ensure the endianess */
+ new_val |= ESDHC_HOST_CONTROL_LE;
+ /* DMA mode bits are shifted */
+ new_val |= (val & SDHCI_CTRL_DMA_MASK) << 5;
+
+ esdhc_clrset_le(host, 0xffff, new_val, reg);
+ return;
+ }
+ esdhc_clrset_le(host, 0xff, val, reg);
+}
+
+static unsigned int esdhc_pltfm_get_max_clock(struct sdhci_host *host)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+ return clk_get_rate(pltfm_host->clk);
+}
+
+static unsigned int esdhc_pltfm_get_min_clock(struct sdhci_host *host)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+ return clk_get_rate(pltfm_host->clk) / 256 / 16;
+}
+
+static int esdhc_pltfm_init(struct sdhci_host *host, struct sdhci_pltfm_data *pdata)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct clk *clk;
+
+ clk = clk_get(mmc_dev(host->mmc), NULL);
+ if (IS_ERR(clk)) {
+ dev_err(mmc_dev(host->mmc), "clk err\n");
+ return PTR_ERR(clk);
+ }
+ clk_enable(clk);
+ pltfm_host->clk = clk;
+
+ return 0;
+}
+
+static void esdhc_pltfm_exit(struct sdhci_host *host)
+{
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+ clk_disable(pltfm_host->clk);
+ clk_put(pltfm_host->clk);
+}
+
+static struct sdhci_ops sdhci_esdhc_ops = {
+ .read_w = esdhc_readw_le,
+ .write_w = esdhc_writew_le,
+ .write_b = esdhc_writeb_le,
+ .set_clock = esdhc_set_clock,
+ .get_max_clock = esdhc_pltfm_get_max_clock,
+ .get_min_clock = esdhc_pltfm_get_min_clock,
+};
+
+struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
+ .quirks = ESDHC_DEFAULT_QUIRKS | SDHCI_QUIRK_NO_MULTIBLOCK
+ | SDHCI_QUIRK_BROKEN_ADMA,
+ /* ADMA has issues. Might be fixable */
+ /* NO_MULTIBLOCK might be MX35 only (Errata: ENGcm07207) */
+ .ops = &sdhci_esdhc_ops,
+ .init = esdhc_pltfm_init,
+ .exit = esdhc_pltfm_exit,
+};
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
index 00e8a8a..0502f89 100644
--- a/drivers/mmc/host/sdhci-pltfm.c
+++ b/drivers/mmc/host/sdhci-pltfm.c
@@ -167,6 +167,9 @@ static const struct platform_device_id sdhci_pltfm_ids[] = {
#ifdef CONFIG_MMC_SDHCI_CNS3XXX
{ "sdhci-cns3xxx", (kernel_ulong_t)&sdhci_cns3xxx_pdata },
#endif
+#ifdef CONFIG_MMC_SDHCI_ESDHC_IMX
+ { "sdhci-esdhc-imx", (kernel_ulong_t)&sdhci_esdhc_imx_pdata },
+#endif
{ },
};
MODULE_DEVICE_TABLE(platform, sdhci_pltfm_ids);
diff --git a/drivers/mmc/host/sdhci-pltfm.h b/drivers/mmc/host/sdhci-pltfm.h
index 562b929..c1bfe48 100644
--- a/drivers/mmc/host/sdhci-pltfm.h
+++ b/drivers/mmc/host/sdhci-pltfm.h
@@ -21,5 +21,6 @@ struct sdhci_pltfm_host {
};
extern struct sdhci_pltfm_data sdhci_cns3xxx_pdata;
+extern struct sdhci_pltfm_data sdhci_esdhc_imx_pdata;
#endif /* _DRIVERS_MMC_SDHCI_PLTFM_H */
--
1.7.1
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6/6] mmc: sdhci-pltfm: add pltfm-driver for imx35/51
2010-10-11 14:21 ` [PATCH 6/6] mmc: sdhci-pltfm: add pltfm-driver for imx35/51 Wolfram Sang
@ 2010-10-14 3:07 ` Chris Ball
0 siblings, 0 replies; 41+ messages in thread
From: Chris Ball @ 2010-10-14 3:07 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
On Mon, Oct 11, 2010 at 04:21:06PM +0200, Wolfram Sang wrote:
> This driver adds basic support for the esdhc-core found on e.g.
> imx35/51. It adds up to the pltfm-core.
>
> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> Acked-by: Anton Vorontsov <cbouatmailru@gmail.com>
> Tested-by : Eric B?nard <eric@eukrea.com>
> ---
>
> Changes since last version:
>
> * use PTR_ERR if clk_get failed
>
> drivers/mmc/host/Kconfig | 10 +++
> drivers/mmc/host/Makefile | 1 +
> drivers/mmc/host/sdhci-esdhc-imx.c | 143 ++++++++++++++++++++++++++++++++++++
> drivers/mmc/host/sdhci-pltfm.c | 3 +
> drivers/mmc/host/sdhci-pltfm.h | 1 +
> 5 files changed, 158 insertions(+), 0 deletions(-)
> create mode 100644 drivers/mmc/host/sdhci-esdhc-imx.c
>
> diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
> index 8de7b9e..7b07f10 100644
> --- a/drivers/mmc/host/Kconfig
> +++ b/drivers/mmc/host/Kconfig
> @@ -130,6 +130,16 @@ config MMC_SDHCI_CNS3XXX
>
> If unsure, say N.
>
> +config MMC_SDHCI_ESDHC_IMX
> + bool "SDHCI platform support for the Freescale eSDHC i.MX controller"
> + depends on MMC_SDHCI_PLTFM
> + select MMC_SDHCI_IO_ACCESSORS
> + help
> + This selects the Freescale eSDHC controller support on the platform
> + bus, found on platforms like mx35/51.
> +
> + If unsure, say N.
> +
Could you add a machine dependency here? Otherwise this is going to
offer itself to x86 users, and then fail to compile due to lack of a
clk_* implementation.
Apart from that, looks ready for mmc-next -- the mdelay(100) fix can
come later, since that's orthogonal.
Thanks,
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
` (5 preceding siblings ...)
2010-10-11 14:21 ` [PATCH 6/6] mmc: sdhci-pltfm: add pltfm-driver for imx35/51 Wolfram Sang
@ 2010-10-11 16:32 ` Chris Ball
2010-10-11 16:44 ` Wolfram Sang
2010-10-12 22:06 ` Arnaud Patard (Rtp)
7 siblings, 1 reply; 41+ messages in thread
From: Chris Ball @ 2010-10-11 16:32 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
On Mon, Oct 11, 2010 at 04:21:00PM +0200, Wolfram Sang wrote:
> Wolfram Sang (6):
> mmc: sdhci-pltfm: Add structure for host-specific data
> mmc: sdhci-pltfm: move .h-file into apropriate subdir
> mmc: sdhci: introduce private get_ro
> mmc: sdhci_pltfm: pass more data on custom init-call
> mmc: sdhci-of-esdhc: factor out common stuff
> mmc: sdhci-pltfm: add pltfm-driver for imx35/51
Mind fixing up the >80 char lines in the last two patches? It's just:
WARNING: line over 80 characters
#79: FILE: drivers/mmc/host/sdhci-esdhc.h:54:
+ temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK);
WARNING: line over 80 characters
#99: FILE: drivers/mmc/host/sdhci-esdhc.h:74:
+ (div << ESDHC_DIVIDER_SHIFT) | (pre_div << ESDHC_PREDIV_SHIFT));
WARNING: line over 80 characters
#86: FILE: drivers/mmc/host/sdhci-esdhc-imx.c:24:
+static inline void esdhc_clrset_le(struct sdhci_host *host, u32 mask, u32 val, int reg)
WARNING: line over 80 characters
#164: FILE: drivers/mmc/host/sdhci-esdhc-imx.c:102:
+static int esdhc_pltfm_init(struct sdhci_host *host, struct sdhci_pltfm_data *pdata)
Thanks,
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-11 16:32 ` [PATCH 0/6] SD/MMC driver for MX25/35/51 Chris Ball
@ 2010-10-11 16:44 ` Wolfram Sang
2010-10-11 16:59 ` Chris Ball
0 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-11 16:44 UTC (permalink / raw)
To: linux-arm-kernel
> > Wolfram Sang (6):
> > mmc: sdhci-pltfm: Add structure for host-specific data
> > mmc: sdhci-pltfm: move .h-file into apropriate subdir
> > mmc: sdhci: introduce private get_ro
> > mmc: sdhci_pltfm: pass more data on custom init-call
> > mmc: sdhci-of-esdhc: factor out common stuff
> > mmc: sdhci-pltfm: add pltfm-driver for imx35/51
>
> Mind fixing up the >80 char lines in the last two patches? It's just:
Sigh, I don't think it will help the readability of the code, but if it can't
be helped...
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101011/10b93013/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-11 16:44 ` Wolfram Sang
@ 2010-10-11 16:59 ` Chris Ball
0 siblings, 0 replies; 41+ messages in thread
From: Chris Ball @ 2010-10-11 16:59 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
On Mon, Oct 11, 2010 at 06:44:59PM +0200, Wolfram Sang wrote:
> > Mind fixing up the >80 char lines in the last two patches? It's just:
>
> Sigh, I don't think it will help the readability of the code, but if it can't
> be helped...
Okay. Perhaps as a compromise, just reflow the two lines in 5/6 and
leave the long prototypes in 6/6 as they are? (For the second hunk
in 5/6, you could just pull the start of the line back two cols.)
Thanks,
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-11 14:21 [PATCH 0/6] SD/MMC driver for MX25/35/51 Wolfram Sang
` (6 preceding siblings ...)
2010-10-11 16:32 ` [PATCH 0/6] SD/MMC driver for MX25/35/51 Chris Ball
@ 2010-10-12 22:06 ` Arnaud Patard (Rtp)
2010-10-13 8:15 ` Eric Bénard
7 siblings, 1 reply; 41+ messages in thread
From: Arnaud Patard (Rtp) @ 2010-10-12 22:06 UTC (permalink / raw)
To: linux-arm-kernel
Wolfram Sang <w.sang@pengutronix.de> writes:
Hi,
> Here is the hopefully final (famous last words) version of my patch series. The
> first four are still updates/improvements for sdhci and sdhci-pltfm and are of
> generic interest, too. Thanks to Eric for the tests on MX25/35. Looking forward
> to comments/applied-to-mmc-next-messages ;)
>
> The series is based on mmc-next as of today and also available at
>
> git://git.pengutronix.de/git/wsa/linux-2.6.git pcm043-mmc
I've tried it on a efika mx (to2 version) and I've a problem with the
write-protect. It's on a GPIO and I don't see any way to configure the
esdhc-imx driver to use it. Any idea on how it should be done ?
thanks,
Arnaud
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-12 22:06 ` Arnaud Patard (Rtp)
@ 2010-10-13 8:15 ` Eric Bénard
2010-10-13 8:29 ` Wolfram Sang
0 siblings, 1 reply; 41+ messages in thread
From: Eric Bénard @ 2010-10-13 8:15 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
Le 13/10/2010 00:06, Arnaud Patard (Rtp) a ?crit :
> Wolfram Sang<w.sang@pengutronix.de> writes:
>> Here is the hopefully final (famous last words) version of my patch series. The
>> first four are still updates/improvements for sdhci and sdhci-pltfm and are of
>> generic interest, too. Thanks to Eric for the tests on MX25/35. Looking forward
>> to comments/applied-to-mmc-next-messages ;)
>>
>> The series is based on mmc-next as of today and also available at
>>
>> git://git.pengutronix.de/git/wsa/linux-2.6.git pcm043-mmc
>
> I've tried it on a efika mx (to2 version) and I've a problem with the
> write-protect. It's on a GPIO and I don't see any way to configure the
> esdhc-imx driver to use it. Any idea on how it should be done ?
>
it's actually not yet supported by the driver. There is a wp_gpio in
struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
but it's not yet used by the driver.
Also card detect using a GPIO is not implemented and card detect if
actually done by polling.
Eric
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 8:15 ` Eric Bénard
@ 2010-10-13 8:29 ` Wolfram Sang
2010-10-13 9:28 ` Arnaud Patard (Rtp)
0 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-13 8:29 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Oct 13, 2010 at 10:15:04AM +0200, Eric B?nard wrote:
> >I've tried it on a efika mx (to2 version) and I've a problem with the
> >write-protect. It's on a GPIO and I don't see any way to configure the
> >esdhc-imx driver to use it. Any idea on how it should be done ?
> >
> it's actually not yet supported by the driver. There is a wp_gpio in
> struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
> but it's not yet used by the driver.
It's all prepared. I finally will have a look into it today.
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101013/55c7b3f3/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 8:29 ` Wolfram Sang
@ 2010-10-13 9:28 ` Arnaud Patard (Rtp)
2010-10-13 9:53 ` Zhu Richard-R65037
2010-10-15 10:25 ` Wolfram Sang
0 siblings, 2 replies; 41+ messages in thread
From: Arnaud Patard (Rtp) @ 2010-10-13 9:28 UTC (permalink / raw)
To: linux-arm-kernel
Wolfram Sang <w.sang@pengutronix.de> writes:
Hi,
> On Wed, Oct 13, 2010 at 10:15:04AM +0200, Eric B?nard wrote:
>
>> >I've tried it on a efika mx (to2 version) and I've a problem with the
>> >write-protect. It's on a GPIO and I don't see any way to configure the
>> >esdhc-imx driver to use it. Any idea on how it should be done ?
>> >
>> it's actually not yet supported by the driver. There is a wp_gpio in
>> struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
>> but it's not yet used by the driver.
>
> It's all prepared. I finally will have a look into it today.
oh, great. I was thinking about doing it but I'll wait for your patches
then. I'm sure I need support for WP on GPIO but I may also need support
for CD on GPIO so I'll be happy to test any patch you have.
Thanks,
Arnaud
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 9:28 ` Arnaud Patard (Rtp)
@ 2010-10-13 9:53 ` Zhu Richard-R65037
2010-10-13 10:06 ` Wolfram Sang
2010-10-15 10:25 ` Wolfram Sang
1 sibling, 1 reply; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-13 9:53 UTC (permalink / raw)
To: linux-arm-kernel
Hi Arnaud:
The mechanism of the GPIO used as write protection pin is implemented ever, you can make a reference to the following suggestions.
The details pls refer to the [PATCH 3/6] mmc: sdhci: introduce private get_ro sent by wolfram.
and
http://lists.infradead.org/pipermail/linux-arm-kernel/2010-September/027269.html
The GPIO Card Detection solution maybe a little complex refer to the GPIO Write Protection,
since the CD irq should be configured, and the poll Of card detection should be disabled at the same time.
So the sdhc-pltfm.c maybe should be changed too.
Hi Eric:
Can you add this GPIO WP mechanism into your serial patches?
I can't access the external git repos because of the firewall.:(.
The GPIO WP solution had been implemented in my patches before, the details pls refer to the URL listed above.
The codes are simple, maybe the definition of the platform data should be considered.
Best Regards
Richard Zhu
> -----Original Message-----
> From: Arnaud Patard [mailto:arnaud.patard at rtp-net.org]
> Sent: Wednesday, October 13, 2010 5:28 PM
> To: Wolfram Sang
> Cc: Eric B?nard; Zhu Richard-R65037; linux-mmc at vger.kernel.org; linux-
> arm-kernel at lists.infradead.org
> Subject: Re: [PATCH 0/6] SD/MMC driver for MX25/35/51
>
> Wolfram Sang <w.sang@pengutronix.de> writes:
>
> Hi,
>
> > On Wed, Oct 13, 2010 at 10:15:04AM +0200, Eric B?nard wrote:
> >
> >> >I've tried it on a efika mx (to2 version) and I've a problem with
> >> >the write-protect. It's on a GPIO and I don't see any way to
> >> >configure the esdhc-imx driver to use it. Any idea on how it should
> be done ?
> >> >
> >> it's actually not yet supported by the driver. There is a wp_gpio in
> >> struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
> >> but it's not yet used by the driver.
> >
> > It's all prepared. I finally will have a look into it today.
>
> oh, great. I was thinking about doing it but I'll wait for your patches
> then. I'm sure I need support for WP on GPIO but I may also need support
> for CD on GPIO so I'll be happy to test any patch you have.
>
>
> Thanks,
> Arnaud
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 9:53 ` Zhu Richard-R65037
@ 2010-10-13 10:06 ` Wolfram Sang
2010-10-13 10:09 ` Eric Bénard
0 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-13 10:06 UTC (permalink / raw)
To: linux-arm-kernel
Hi Richard,
great to have you back! Did you have the chance to test my latest
patch-series? And can you help Eric with the comments for the
clock-calculation on MX51?
> I can't access the external git repos because of the firewall.:(.
Ouch! I hope you already complained ;) At least my repo should be
accessible via HTTP by the way...
Regards,
Wolfram
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101013/bcf36423/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 10:06 ` Wolfram Sang
@ 2010-10-13 10:09 ` Eric Bénard
2010-10-13 10:13 ` Zhu Richard-R65037
0 siblings, 1 reply; 41+ messages in thread
From: Eric Bénard @ 2010-10-13 10:09 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
Le 13/10/2010 12:06, Wolfram Sang a ?crit :
> great to have you back! Did you have the chance to test my latest
> patch-series? And can you help Eric with the comments for the
> clock-calculation on MX51?
>
that's solved in the latest version of the patch (and the max value
checks in the function were improved at the same time).
Eric
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 10:09 ` Eric Bénard
@ 2010-10-13 10:13 ` Zhu Richard-R65037
2010-10-13 10:20 ` Wolfram Sang
0 siblings, 1 reply; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-13 10:13 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram&Eric:
I take one day leave yesterday for one examination that had been booked a few days ago,
and missed Eric's patches, so regretful.
Best Regards
Richard Zhu
> -----Original Message-----
> From: Eric B?nard [mailto:eric at eukrea.com]
> Sent: Wednesday, October 13, 2010 6:10 PM
> To: Wolfram Sang
> Cc: Zhu Richard-R65037; Arnaud Patard; linux-mmc at vger.kernel.org; linux-
> arm-kernel at lists.infradead.org
> Subject: Re: [PATCH 0/6] SD/MMC driver for MX25/35/51
>
> Hi Wolfram,
>
> Le 13/10/2010 12:06, Wolfram Sang a ?crit :
> > great to have you back! Did you have the chance to test my latest
> > patch-series? And can you help Eric with the comments for the
> > clock-calculation on MX51?
> >
> that's solved in the latest version of the patch (and the max value
> checks in the function were improved at the same time).
>
> Eric
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 10:13 ` Zhu Richard-R65037
@ 2010-10-13 10:20 ` Wolfram Sang
2010-10-15 10:27 ` Wolfram Sang
0 siblings, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-13 10:20 UTC (permalink / raw)
To: linux-arm-kernel
> I take one day leave yesterday for one examination that had been booked a few days ago,
> and missed Eric's patches, so regretful.
No problem, such things happen. If you'd have time to review those
patches now, that would be great, too.
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101013/933dd515/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 10:20 ` Wolfram Sang
@ 2010-10-15 10:27 ` Wolfram Sang
2010-10-18 3:29 ` Zhu Richard-R65037
2010-10-18 8:48 ` Zhu Richard-R65037
0 siblings, 2 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-15 10:27 UTC (permalink / raw)
To: linux-arm-kernel
Richard,
> > I take one day leave yesterday for one examination that had been booked a few days ago,
> > and missed Eric's patches, so regretful.
>
> No problem, such things happen. If you'd have time to review those
> patches now, that would be great, too.
Do you have time to check the latest series (V5, just posted)? BTW which
patch-set are you using now for development?
Regards,
Wolfram
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101015/23e80511/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-15 10:27 ` Wolfram Sang
@ 2010-10-18 3:29 ` Zhu Richard-R65037
2010-10-18 8:48 ` Zhu Richard-R65037
1 sibling, 0 replies; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-18 3:29 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram:
Can you sync-up the http URL of your repos with your latest patches?
I can't get fetch and sync-up with your latest codes now, since I can only used the HTTP URL to clone your codes.
Best Regards
Richard Zhu
> -----Original Message-----
> From: Wolfram Sang [mailto:w.sang at pengutronix.de]
> Sent: Friday, October 15, 2010 6:27 PM
> To: Zhu Richard-R65037
> Cc: Eric B?nard; Arnaud Patard; linux-mmc at vger.kernel.org; linux-arm-
> kernel at lists.infradead.org
> Subject: Re: [PATCH 0/6] SD/MMC driver for MX25/35/51
>
> Richard,
>
> > > I take one day leave yesterday for one examination that had been
> > > booked a few days ago, and missed Eric's patches, so regretful.
> >
> > No problem, such things happen. If you'd have time to review those
> > patches now, that would be great, too.
>
> Do you have time to check the latest series (V5, just posted)? BTW which
> patch-set are you using now for development?
>
> Regards,
>
> Wolfram
>
> --
> Pengutronix e.K. | Wolfram Sang
> |
> Industrial Linux Solutions | http://www.pengutronix.de/
> |
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-15 10:27 ` Wolfram Sang
2010-10-18 3:29 ` Zhu Richard-R65037
@ 2010-10-18 8:48 ` Zhu Richard-R65037
2010-10-18 9:36 ` Eric Bénard
2010-10-18 11:36 ` Wolfram Sang
1 sibling, 2 replies; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-18 8:48 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram:
I tested your serial patches with Eric's platform related codes on i.MX51 BBG3.0 board.
Two phenomena:
The debug msg "mmc0: mmc_rescan: trying to init card at 400000 Hz..." are dumped out repeatedly.
ROOT: There are pr_info codes in the mmc_rescan func.
The other:
Encounter the Timeout and CRC error when the sandisk 4G SDHC card are used as the ROOTFS storage media
When I boot up the BBG board.
It seems that the "SDHCI_QUIRK_BROKEN_TIMEOUT_VAL" is mandatory required at my side when I did the tests
on BBG3.0 board, and the i.MX51 board can support the "MULTI-BLOCK".
Hi Eric:
What's kinds of tests and environment you did at your side?
BTW, I still can't fetch out the latest codes out, that means I still can't found the V5 patches, although I run
the git fetch and git rebase. :(
Best Regards
Richard Zhu
> -----Original Message-----
> From: Zhu Richard-R65037
> Sent: Monday, October 18, 2010 11:30 AM
> To: 'Wolfram Sang'
> Cc: Eric B?nard; Arnaud Patard; linux-mmc at vger.kernel.org; linux-arm-
> kernel at lists.infradead.org
> Subject: RE: [PATCH 0/6] SD/MMC driver for MX25/35/51
>
> Hi Wolfram:
> Can you sync-up the http URL of your repos with your latest patches?
> I can't get fetch and sync-up with your latest codes now, since I can
> only used the HTTP URL to clone your codes.
>
> Best Regards
> Richard Zhu
>
>
> > -----Original Message-----
> > From: Wolfram Sang [mailto:w.sang at pengutronix.de]
> > Sent: Friday, October 15, 2010 6:27 PM
> > To: Zhu Richard-R65037
> > Cc: Eric B?nard; Arnaud Patard; linux-mmc at vger.kernel.org; linux-arm-
> > kernel at lists.infradead.org
> > Subject: Re: [PATCH 0/6] SD/MMC driver for MX25/35/51
> >
> > Richard,
> >
> > > > I take one day leave yesterday for one examination that had been
> > > > booked a few days ago, and missed Eric's patches, so regretful.
> > >
> > > No problem, such things happen. If you'd have time to review those
> > > patches now, that would be great, too.
> >
> > Do you have time to check the latest series (V5, just posted)? BTW
> > which patch-set are you using now for development?
> >
> > Regards,
> >
> > Wolfram
> >
> > --
> > Pengutronix e.K. | Wolfram Sang
> > |
> > Industrial Linux Solutions | http://www.pengutronix.de/
> > |
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-18 8:48 ` Zhu Richard-R65037
@ 2010-10-18 9:36 ` Eric Bénard
2010-10-18 9:44 ` Zhu Richard-R65037
2010-10-18 11:38 ` Wolfram Sang
2010-10-18 11:36 ` Wolfram Sang
1 sibling, 2 replies; 41+ messages in thread
From: Eric Bénard @ 2010-10-18 9:36 UTC (permalink / raw)
To: linux-arm-kernel
Hi Richard,
Le 18/10/2010 10:48, Zhu Richard-R65037 a ?crit :
> I tested your serial patches with Eric's platform related codes on i.MX51 BBG3.0 board.
> Two phenomena:
> The debug msg "mmc0: mmc_rescan: trying to init card at 400000 Hz..." are dumped out repeatedly.
> ROOT: There are pr_info codes in the mmc_rescan func.
>
fixed by this patch :
http://git.kernel.org/?p=linux/kernel/git/cjb/mmc.git;a=commit;h=0ca6d53ec81a13263f6643372b2a5abf7818e8fa
> The other:
> Encounter the Timeout and CRC error when the sandisk 4G SDHC card are used as the ROOTFS storage media
> When I boot up the BBG board.
>
> It seems that the "SDHCI_QUIRK_BROKEN_TIMEOUT_VAL" is mandatory required at my side when I did the tests
> on BBG3.0 board, and the i.MX51 board can support the "MULTI-BLOCK".
>
you seems to be right, the attached patch seems to fix it (tested on our board
using a Linaro rootfs on a Transcend SDHC card and I didn't get errors after
applying this patch but I'm stopped by udev errors now with this rootfs).
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c
b/drivers/mmc/host/sdhci-esdhc-imx.c
index 2e9cca1..e8f7048 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -134,7 +134,8 @@ static struct sdhci_ops sdhci_esdhc_ops = {
struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
.quirks = ESDHC_DEFAULT_QUIRKS | SDHCI_QUIRK_NO_MULTIBLOCK
- | SDHCI_QUIRK_BROKEN_ADMA,
+ | SDHCI_QUIRK_BROKEN_ADMA
+ | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
/* ADMA has issues. Might be fixable */
/* NO_MULTIBLOCK might be MX35 only (Errata: ENGcm07207) */
.ops = &sdhci_esdhc_ops,
> What's kinds of tests and environment you did at your side?
>
Environment : our i.MX515 based boards.
Tests (until now) : mount + a few read/write.
We have a nand flash on board so our rootfs is on it so I didn't test a rootfs
until this morning.
Eric
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-18 9:36 ` Eric Bénard
@ 2010-10-18 9:44 ` Zhu Richard-R65037
2010-10-18 11:38 ` Wolfram Sang
1 sibling, 0 replies; 41+ messages in thread
From: Zhu Richard-R65037 @ 2010-10-18 9:44 UTC (permalink / raw)
To: linux-arm-kernel
Hi Eric:
Got that, great.
I tested at my side with the "SDHCI_QUIRK_BROKEN_TIMEOUT_VAL" added, and I can login the ROOTFS, and complete some general tests.
:)
HI Wolfram:
About the codes I used in my verification, pls refer to the following log with "git log" cmd
commit 44139322fc36bb23a066ccebb85981b544c957e7
Author: Wolfram Sang <w.sang@pengutronix.de>
Date: Fri Sep 3 18:27:48 2010 +0200
mmc: sdhci-pltfm: add pltfm-driver for imx35/51
This driver adds basic support for the esdhc-core found on e.g.
imx35/51. It adds up to the pltfm-core.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Acked-by: Anton Vorontsov <cbouatmailru@gmail.com>
Tested-by : Eric B?nard <eric@eukrea.com>
commit 1c458bcff936e8b391b47cf916bcc2b17774cba9
Author: Wolfram Sang <w.sang@pengutronix.de>
Date: Tue Sep 7 13:00:26 2010 +0200
mmc: sdhci-of-esdhc: factor out common stuff
Put everything which can be shared between the OF and platform version
of this driver into a local .h-file.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by : Eric B?nard <eric@eukrea.com>
Best Regards
Richard Zhu
> -----Original Message-----
> From: Eric B?nard [mailto:eric at eukrea.com]
> Sent: Monday, October 18, 2010 5:37 PM
> To: Zhu Richard-R65037
> Cc: Wolfram Sang; linux-arm-kernel at lists.infradead.org; Guo Shawn-R65073;
> linux-mmc at vger.kernel.org; Arnaud Patard
> Subject: Re: [PATCH 0/6] SD/MMC driver for MX25/35/51
>
> Hi Richard,
>
> Le 18/10/2010 10:48, Zhu Richard-R65037 a ?crit :
> > I tested your serial patches with Eric's platform related codes on
> i.MX51 BBG3.0 board.
> > Two phenomena:
> > The debug msg "mmc0: mmc_rescan: trying to init card at 400000 Hz..."
> are dumped out repeatedly.
> > ROOT: There are pr_info codes in the mmc_rescan func.
> >
> fixed by this patch :
> http://git.kernel.org/?p=linux/kernel/git/cjb/mmc.git;a=commit;h=0ca6d53e
> c81a13263f6643372b2a5abf7818e8fa
>
> > The other:
> > Encounter the Timeout and CRC error when the sandisk 4G SDHC card are
> > used as the ROOTFS storage media When I boot up the BBG board.
> >
> > It seems that the "SDHCI_QUIRK_BROKEN_TIMEOUT_VAL" is mandatory
> required at my side when I did the tests
> > on BBG3.0 board, and the i.MX51 board can support the "MULTI-BLOCK".
> >
> you seems to be right, the attached patch seems to fix it (tested on our
> board using a Linaro rootfs on a Transcend SDHC card and I didn't get
> errors after applying this patch but I'm stopped by udev errors now with
> this rootfs).
>
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c
> b/drivers/mmc/host/sdhci-esdhc-imx.c
> index 2e9cca1..e8f7048 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -134,7 +134,8 @@ static struct sdhci_ops sdhci_esdhc_ops = {
>
> struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
> .quirks = ESDHC_DEFAULT_QUIRKS | SDHCI_QUIRK_NO_MULTIBLOCK
> - | SDHCI_QUIRK_BROKEN_ADMA,
> + | SDHCI_QUIRK_BROKEN_ADMA
> + | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
> /* ADMA has issues. Might be fixable */
> /* NO_MULTIBLOCK might be MX35 only (Errata: ENGcm07207) */
> .ops = &sdhci_esdhc_ops,
>
>
> > What's kinds of tests and environment you did at your side?
> >
> Environment : our i.MX515 based boards.
> Tests (until now) : mount + a few read/write.
> We have a nand flash on board so our rootfs is on it so I didn't test a
> rootfs until this morning.
>
> Eric
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-18 9:36 ` Eric Bénard
2010-10-18 9:44 ` Zhu Richard-R65037
@ 2010-10-18 11:38 ` Wolfram Sang
2010-10-18 11:51 ` Eric Bénard
1 sibling, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-18 11:38 UTC (permalink / raw)
To: linux-arm-kernel
> you seems to be right, the attached patch seems to fix it (tested on our
> board using a Linaro rootfs on a Transcend SDHC card and I didn't get
> errors after applying this patch but I'm stopped by udev errors now with
> this rootfs).
Is this needed on MX35, too?
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101018/1609f006/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-18 8:48 ` Zhu Richard-R65037
2010-10-18 9:36 ` Eric Bénard
@ 2010-10-18 11:36 ` Wolfram Sang
1 sibling, 0 replies; 41+ messages in thread
From: Wolfram Sang @ 2010-10-18 11:36 UTC (permalink / raw)
To: linux-arm-kernel
Hi Richard,
On Mon, Oct 18, 2010 at 04:48:07PM +0800, Zhu Richard-R65037 wrote:
> The debug msg "mmc0: mmc_rescan: trying to init card at 400000 Hz..." are dumped out repeatedly.
> ROOT: There are pr_info codes in the mmc_rescan func.
There was already a patch on this list fixing it.
> The other:
> Encounter the Timeout and CRC error when the sandisk 4G SDHC card are used as the ROOTFS storage media
> When I boot up the BBG board.
>
> It seems that the "SDHCI_QUIRK_BROKEN_TIMEOUT_VAL" is mandatory required at my side when I did the tests
> on BBG3.0 board, and the i.MX51 board can support the "MULTI-BLOCK".
Okay, this can be fixed...
> BTW, I still can't fetch out the latest codes out, that means I still can't found the V5 patches, although I run
> the git fetch and git rebase. :(
My branch gets rebased because I can't mainline the driver with all my
incremental improvements. Does just taking the branch and cherry-pick
your additions work? (BTW meanwhile you can also just use mmc-next)
Regards,
Wolfram
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101018/bd8ece60/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-13 9:28 ` Arnaud Patard (Rtp)
2010-10-13 9:53 ` Zhu Richard-R65037
@ 2010-10-15 10:25 ` Wolfram Sang
2010-10-15 21:20 ` Arnaud Patard (Rtp)
1 sibling, 1 reply; 41+ messages in thread
From: Wolfram Sang @ 2010-10-15 10:25 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Oct 13, 2010 at 11:28:15AM +0200, Arnaud Patard wrote:
> >> it's actually not yet supported by the driver. There is a wp_gpio in
> >> struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
> >> but it's not yet used by the driver.
> >
> > It's all prepared. I finally will have a look into it today.
>
> oh, great. I was thinking about doing it but I'll wait for your patches
> then. I'm sure I need support for WP on GPIO but I may also need support
> for CD on GPIO so I'll be happy to test any patch you have.
Just to keep you updated: Got a bit distracted again but I hope to
finish it on Saturday. Looks like a patch for the gpiolib is also
needed...
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20101015/e8fb7eaf/attachment.sig>
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 0/6] SD/MMC driver for MX25/35/51
2010-10-15 10:25 ` Wolfram Sang
@ 2010-10-15 21:20 ` Arnaud Patard (Rtp)
0 siblings, 0 replies; 41+ messages in thread
From: Arnaud Patard (Rtp) @ 2010-10-15 21:20 UTC (permalink / raw)
To: linux-arm-kernel
Wolfram Sang <w.sang@pengutronix.de> writes:
Hi,
> On Wed, Oct 13, 2010 at 11:28:15AM +0200, Arnaud Patard wrote:
>
>> >> it's actually not yet supported by the driver. There is a wp_gpio in
>> >> struct esdhc_platform_data (arch/arm/plat-mxc/include/mach/esdhc.h)
>> >> but it's not yet used by the driver.
>> >
>> > It's all prepared. I finally will have a look into it today.
>>
>> oh, great. I was thinking about doing it but I'll wait for your patches
>> then. I'm sure I need support for WP on GPIO but I may also need support
>> for CD on GPIO so I'll be happy to test any patch you have.
>
> Just to keep you updated: Got a bit distracted again but I hope to
> finish it on Saturday. Looks like a patch for the gpiolib is also
> needed...
ok. Take your time. It turns out that the infos I had were a bit
misleading. I've been told the mmc driver was using some gpios and the
gpios are GPIO_1_0/1_1 and GPIO_1_7/1_8... which are in fact the esdhc1
and esdhc2 CD and WP.
This means :
- with proper iomux configuration, WP detection is working fine
- I should still be able to test WP on GPIO
Thanks,
Arnaud
^ permalink raw reply [flat|nested] 41+ messages in thread