* [PATCH v6 00/12] Qualcomm SD Card Controller support
@ 2014-06-02 9:03 srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 01/12] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
` (12 more replies)
0 siblings, 13 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:03 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Thankyou Linus W, Ulf H, Russell K and everyone for reviewing RFC to v5 patches.
This patch series adds Qualcomm SD Card Controller support in pl180 mmci
driver. QCom SDCC is basically a pl180, but bit more customized, some of the
register layouts and offsets are different to the ones mentioned in pl180
datasheet. The plan is to totally remove the standalone SDCC driver
drivers/mmc/host/msm_sdcc.* and start using generic mmci driver for all
Qualcomm parts, as we get chance to test on other Qcom boards.
To start using the existing mmci driver, a fake amba id for Qualcomm is added
in patches:
mmc: mmci: Add Qualcomm specific register defines.
mmc: mmci: Add Qualcomm Id to amba id table.
Second change is, adding a 3 clock cycle delay in between writes to
CLKCTRL/POWER/DATACTRL/COMMAND registers. Most of the delays are taken care with
the existing driver except delay for the COMMAND register was too small.
This patch fixes it.
mmc: mmci: Add enough delay between writes to CMD register.
Third change is to accommodate CLK, DATCTRL and MMCICLK register layout changes
in Qcom SDCC and provide more flexibity in driver to specify these changes via
variant datastructure. Which are done in patches:
mmc: mmci: Add Qcom datactrl register variant
mmc: mmci: add ddrmode mask to variant data
mmc: mmci: add 8bit bus support in variant data
mmc: mmci: add edge support to data and command out in variant data.
mmc: mmci: add Qcom specifics of clk and datactrl registers.
mmc: mmci: Add support to data commands via variant structure.
mmc: mmci: add f_max to variant structure
mmc: mmci: add explicit clk control
Fourth change was to add qcom specfic fifocnt logic, the need for
this is because the way MCIFIFOCNT register behaved in QCOM SDCC is very
different to the one in pl180. This change is done in patch:
mmc: mmci: Add Qcom specific rx_fifocnt logic.
Last some Qcom unrelated changes/cleanup to driver are done in patches:
mmc: mmci: use NSEC_PER_SEC macro
This patches are tested in PIO mode on IFC8064 board with both eMMC and
external SD card. I would like to get this support in v3.16.
Changes from v5:
- removed BIT conversion patch as suggested by Russell K.
- removed extra parens as pointed by Russell K.
- correct the f_max for explicit clk control
Changes from v4:
- moved the amba id table addition to the end of the patchset as suggested by Ulf.
- reused the mmci_pio_read function after experimenting with the fifo behaviour.
- simplify f_max/f_min calcuation logic as suggested by Ulf.
- created a new patch for the register defination as suggested by Ulf.
Changes from v3:
- moved pio_read to a function pointer so as to reduce additional cycles
in hot-path, suggested by Ulf.
- simplify the flags used for explicit mclk control, suggested by Ulf.
- fixed issues in cacluating f_max and f_min pointed and suggested by Ulf.
- removed unessary DDR flags on un-supported STE variants.
- used BIT macros as suggested by Ulf.
- removed the read/write wrappers with delays, and used most optimal way
to introduce the delays to the only registers that require delays.
Changes from v2:
- merged fbclk latch patch with clkreg_enable patch as suggested by Linus W.
- remove qcom prefix for explicit clk control pointed by Linus W.
- cleaned up mmci_qcom_pio_read and consider SDIO as suggested by Linus W.
Changes from v1:
- moved most of the SOC specifics to variant parameters as suggested
by Linus W.
- renamed registers as suggested by Linus W.
- Added comments in the code as suggested by Linus W.
- moved out AMBA ID addition patch from this series.
- rebased the patches to
git://git.linaro.org/people/ulf.hansson/mmc.git next
as suggested by Ulf H.
Changes from RFC:
- moved out clk setup out of spinlock as pointed by Stephen B.
Am hoping to get this for v3.16.
All these patches are tested on IF6410 board on both eMMC and external SD card.
Thanks,
srini
Srinivas Kandagatla (12):
mmc: mmci: use NSEC_PER_SEC macro
mmc: mmci: Add Qualcomm specific register defines.
mmc: mmci: Add enough delay between writes to CMD register.
mmc: mmci: Add Qcom datactrl register variant
mmc: mmci: add ddrmode mask to variant data
mmc: mmci: add 8bit bus support in variant data
mmc: mmci: add edge support to data and command out in variant data.
mmc: mmci: Add support to data commands via variant structure.
mmc: mmci: add f_max to variant structure
mmc: mmci: add explicit clk control
mmc: mmci: Add Qcom specific rx_fifocnt logic.
mmc: mmci: Add Qualcomm Id to amba id table
drivers/mmc/host/mmci.c | 128 +++++++++++++++++++++++++++++++++++++++++++-----
drivers/mmc/host/mmci.h | 20 ++++++++
2 files changed, 136 insertions(+), 12 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH v6 01/12] mmc: mmci: use NSEC_PER_SEC macro
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
@ 2014-06-02 9:08 ` srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines srinivas.kandagatla
` (11 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:08 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch replaces a constant used in calculating timeout with a proper
macro. This is make code more readable.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index a084edd..a38e714 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -718,7 +718,7 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
data->bytes_xfered = 0;
clks = (unsigned long long)data->timeout_ns * host->cclk;
- do_div(clks, 1000000000UL);
+ do_div(clks, NSEC_PER_SEC);
timeout = data->timeout_clks + (unsigned int)clks;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines.
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 01/12] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
@ 2014-06-02 9:08 ` srinivas.kandagatla
2014-06-11 12:45 ` Linus Walleij
2014-06-02 9:08 ` [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register srinivas.kandagatla
` (10 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:08 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds a Qualcomm SD Card controller specific register variations
to header file. Qualcomm SDCC controller is pl180, with slight changes in
the register layout from standard pl180 register set.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index 347d942..d38a99d 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -41,6 +41,15 @@
/* Modified PL180 on Versatile Express platform */
#define MCI_ARM_HWFCEN (1 << 12)
+/* Modified on Qualcomm Integrations */
+#define MCI_QCOM_CLK_WIDEBUS_8 (BIT(10) | BIT(11))
+#define MCI_QCOM_CLK_FLOWENA BIT(12)
+#define MCI_QCOM_CLK_INVERTOUT BIT(13)
+
+/* select in latch data and command in */
+#define MCI_QCOM_CLK_SELECT_IN_FBCLK BIT(15)
+#define MCI_QCOM_CLK_SELECT_IN_DDR_MODE (BIT(14) | BIT(15))
+
#define MMCIARGUMENT 0x008
#define MMCICOMMAND 0x00c
#define MCI_CPSM_RESPONSE (1 << 6)
@@ -54,6 +63,14 @@
#define MCI_ST_NIEN (1 << 13)
#define MCI_ST_CE_ATACMD (1 << 14)
+/* Modified on Qualcomm Integrations */
+#define MCI_QCOM_CSPM_DATCMD BIT(12)
+#define MCI_QCOM_CSPM_MCIABORT BIT(13)
+#define MCI_QCOM_CSPM_CCSENABLE BIT(14)
+#define MCI_QCOM_CSPM_CCSDISABLE BIT(15)
+#define MCI_QCOM_CSPM_AUTO_CMD19 BIT(16)
+#define MCI_QCOM_CSPM_AUTO_CMD21 BIT(21)
+
#define MMCIRESPCMD 0x010
#define MMCIRESPONSE0 0x014
#define MMCIRESPONSE1 0x018
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register.
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 01/12] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines srinivas.kandagatla
@ 2014-06-02 9:08 ` srinivas.kandagatla
2014-06-11 12:46 ` Linus Walleij
2014-06-02 9:09 ` [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
` (9 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:08 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
On Qcom SD Card controller POWER, CLKCTRL, DATACTRL and COMMAND registers
should be updated in MCLK domain, and writes to these registers must be
separated by three MCLK cycles. This resitriction is not applicable for
other registers. Any subsequent writes to these register will be ignored
until 3 MCLK have passed.
One usec delay between two CMD register writes is not sufficient in the
card identification phase where the CCLK is very low. This patch replaces
a static 1 usec delay to use mmci_reg_delay function which can provide
correct delay depending on the cclk frequency.
Without this patch the card is not detected.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index a38e714..ed20bf5 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -810,7 +810,7 @@ mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c)
if (readl(base + MMCICOMMAND) & MCI_CPSM_ENABLE) {
writel(0, base + MMCICOMMAND);
- udelay(1);
+ mmci_reg_delay(host);
}
c |= cmd->opcode | MCI_CPSM_ENABLE;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (2 preceding siblings ...)
2014-06-02 9:08 ` [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
[not found] ` <CA+neC=Of9Ua5OxUiezmTHfzq9zkXVRCFei3xKMbXi3OGV84EHw@mail.gmail.com>
2014-06-02 9:09 ` [PATCH v6 05/12] mmc: mmci: add ddrmode mask to variant data srinivas.kandagatla
` (8 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Instance of this IP on Qualcomm's SOCs has bit different layout for datactrl
register. Bit position datactrl[16:4] hold the true block size instead of power
of 2.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index ed20bf5..72981f6 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -60,6 +60,8 @@ static unsigned int fmax = 515633;
* @sdio: variant supports SDIO
* @st_clkdiv: true if using a ST-specific clock divider algorithm
* @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register
+ * @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl
+ * register
* @pwrreg_powerup: power up value for MMCIPOWER register
* @signal_direction: input/out direction of bus signals can be indicated
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
@@ -75,6 +77,7 @@ struct variant_data {
bool sdio;
bool st_clkdiv;
bool blksz_datactrl16;
+ bool blksz_datactrl4;
u32 pwrreg_powerup;
bool signal_direction;
bool pwrreg_clkgate;
@@ -731,6 +734,8 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
if (variant->blksz_datactrl16)
datactrl = MCI_DPSM_ENABLE | (data->blksz << 16);
+ else if (variant->blksz_datactrl4)
+ datactrl = MCI_DPSM_ENABLE | (data->blksz << 4);
else
datactrl = MCI_DPSM_ENABLE | blksz_bits << 4;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 05/12] mmc: mmci: add ddrmode mask to variant data
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (3 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 06/12] mmc: mmci: add 8bit bus support in " srinivas.kandagatla
` (7 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds ddrmode mask to variant structure giving more flexibility
to the driver to support more SOCs which have different datactrl register
layout.
Without this patch datactrl register is updated with incorrect ddrmode mask,
resulting in failures on Qualcomm SD Card Controller.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 72981f6..ad7e538 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -59,6 +59,7 @@ static unsigned int fmax = 515633;
* is asserted (likewise for RX)
* @sdio: variant supports SDIO
* @st_clkdiv: true if using a ST-specific clock divider algorithm
+ * @datactrl_mask_ddrmode: ddr mode mask in datactrl register.
* @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register
* @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl
* register
@@ -74,6 +75,7 @@ struct variant_data {
unsigned int datalength_bits;
unsigned int fifosize;
unsigned int fifohalfsize;
+ unsigned int datactrl_mask_ddrmode;
bool sdio;
bool st_clkdiv;
bool blksz_datactrl16;
@@ -152,6 +154,7 @@ static struct variant_data variant_ux500v2 = {
.fifohalfsize = 8 * 4,
.clkreg = MCI_CLK_ENABLE,
.clkreg_enable = MCI_ST_UX500_HWFCEN,
+ .datactrl_mask_ddrmode = MCI_ST_DPSM_DDRMODE,
.datalength_bits = 24,
.sdio = true,
.st_clkdiv = true,
@@ -770,7 +773,7 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
}
if (host->mmc->ios.timing == MMC_TIMING_UHS_DDR50)
- datactrl |= MCI_ST_DPSM_DDRMODE;
+ datactrl |= variant->datactrl_mask_ddrmode;
/*
* Attempt to use DMA operation mode, if this
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 06/12] mmc: mmci: add 8bit bus support in variant data
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (4 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 05/12] mmc: mmci: add ddrmode mask to variant data srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 07/12] mmc: mmci: add edge support to data and command out " srinivas.kandagatla
` (6 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds 8bit bus enable to variant structure giving more flexibility
to the driver to support more SOCs which have different clock register layout.
Without this patch other new SOCs like Qcom will have to add more code
to special case them.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index ad7e538..fa3ad83 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -52,6 +52,7 @@ static unsigned int fmax = 515633;
* struct variant_data - MMCI variant-specific quirks
* @clkreg: default value for MCICLOCK register
* @clkreg_enable: enable value for MMCICLOCK register
+ * @clkreg_8bit_bus_enable: enable value for 8 bit bus
* @datalength_bits: number of bits in the MMCIDATALENGTH register
* @fifosize: number of bytes that can be written when MMCI_TXFIFOEMPTY
* is asserted (likewise for RX)
@@ -72,6 +73,7 @@ static unsigned int fmax = 515633;
struct variant_data {
unsigned int clkreg;
unsigned int clkreg_enable;
+ unsigned int clkreg_8bit_bus_enable;
unsigned int datalength_bits;
unsigned int fifosize;
unsigned int fifohalfsize;
@@ -113,6 +115,7 @@ static struct variant_data variant_u300 = {
.fifosize = 16 * 4,
.fifohalfsize = 8 * 4,
.clkreg_enable = MCI_ST_U300_HWFCEN,
+ .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.datalength_bits = 16,
.sdio = true,
.pwrreg_powerup = MCI_PWR_ON,
@@ -139,6 +142,7 @@ static struct variant_data variant_ux500 = {
.fifohalfsize = 8 * 4,
.clkreg = MCI_CLK_ENABLE,
.clkreg_enable = MCI_ST_UX500_HWFCEN,
+ .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.datalength_bits = 24,
.sdio = true,
.st_clkdiv = true,
@@ -154,6 +158,7 @@ static struct variant_data variant_ux500v2 = {
.fifohalfsize = 8 * 4,
.clkreg = MCI_CLK_ENABLE,
.clkreg_enable = MCI_ST_UX500_HWFCEN,
+ .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.datactrl_mask_ddrmode = MCI_ST_DPSM_DDRMODE,
.datalength_bits = 24,
.sdio = true,
@@ -305,7 +310,7 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired)
if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_4)
clk |= MCI_4BIT_BUS;
if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_8)
- clk |= MCI_ST_8BIT_BUS;
+ clk |= variant->clkreg_8bit_bus_enable;
if (host->mmc->ios.timing == MMC_TIMING_UHS_DDR50)
clk |= MCI_ST_UX500_NEG_EDGE;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 07/12] mmc: mmci: add edge support to data and command out in variant data.
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (5 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 06/12] mmc: mmci: add 8bit bus support in " srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 08/12] mmc: mmci: Add support to data commands via variant structure srinivas.kandagatla
` (5 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds edge support for data and command out to variant structure
giving more flexibility to the driver to support more SOCs which have
different clock register layout.
Without this patch other new SOCs like Qcom will have to add more code to
special case them
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index fa3ad83..4c95a9b 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -53,6 +53,7 @@ static unsigned int fmax = 515633;
* @clkreg: default value for MCICLOCK register
* @clkreg_enable: enable value for MMCICLOCK register
* @clkreg_8bit_bus_enable: enable value for 8 bit bus
+ * @clkreg_neg_edge_enable: enable value for inverted data/cmd output
* @datalength_bits: number of bits in the MMCIDATALENGTH register
* @fifosize: number of bytes that can be written when MMCI_TXFIFOEMPTY
* is asserted (likewise for RX)
@@ -74,6 +75,7 @@ struct variant_data {
unsigned int clkreg;
unsigned int clkreg_enable;
unsigned int clkreg_8bit_bus_enable;
+ unsigned int clkreg_neg_edge_enable;
unsigned int datalength_bits;
unsigned int fifosize;
unsigned int fifohalfsize;
@@ -143,6 +145,7 @@ static struct variant_data variant_ux500 = {
.clkreg = MCI_CLK_ENABLE,
.clkreg_enable = MCI_ST_UX500_HWFCEN,
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
+ .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
.datalength_bits = 24,
.sdio = true,
.st_clkdiv = true,
@@ -159,6 +162,7 @@ static struct variant_data variant_ux500v2 = {
.clkreg = MCI_CLK_ENABLE,
.clkreg_enable = MCI_ST_UX500_HWFCEN,
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
+ .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
.datactrl_mask_ddrmode = MCI_ST_DPSM_DDRMODE,
.datalength_bits = 24,
.sdio = true,
@@ -313,7 +317,7 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired)
clk |= variant->clkreg_8bit_bus_enable;
if (host->mmc->ios.timing == MMC_TIMING_UHS_DDR50)
- clk |= MCI_ST_UX500_NEG_EDGE;
+ clk |= variant->clkreg_neg_edge_enable;
mmci_write_clkreg(host, clk);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 08/12] mmc: mmci: Add support to data commands via variant structure.
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (6 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 07/12] mmc: mmci: add edge support to data and command out " srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 09/12] mmc: mmci: add f_max to " srinivas.kandagatla
` (4 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
On some SOCs like Qcom there are explicit bits in the command register
to specify if its a data transfer command or not. So this patch adds
support to such bits in variant data, giving more flexibility to the
driver.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 4c95a9b..8534c29 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -59,6 +59,7 @@ static unsigned int fmax = 515633;
* is asserted (likewise for RX)
* @fifohalfsize: number of bytes that can be written when MCI_TXFIFOHALFEMPTY
* is asserted (likewise for RX)
+ * @data_cmd_enable: enable value for data commands.
* @sdio: variant supports SDIO
* @st_clkdiv: true if using a ST-specific clock divider algorithm
* @datactrl_mask_ddrmode: ddr mode mask in datactrl register.
@@ -79,6 +80,7 @@ struct variant_data {
unsigned int datalength_bits;
unsigned int fifosize;
unsigned int fifohalfsize;
+ unsigned int data_cmd_enable;
unsigned int datactrl_mask_ddrmode;
bool sdio;
bool st_clkdiv;
@@ -839,6 +841,9 @@ mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c)
if (/*interrupt*/0)
c |= MCI_CPSM_INTERRUPT;
+ if (mmc_cmd_type(cmd) == MMC_CMD_ADTC)
+ c |= host->variant->data_cmd_enable;
+
host->cmd = cmd;
writel(cmd->arg, base + MMCIARGUMENT);
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 09/12] mmc: mmci: add f_max to variant structure
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (7 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 08/12] mmc: mmci: Add support to data commands via variant structure srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-11 12:47 ` Linus Walleij
2014-06-02 9:09 ` [PATCH v6 10/12] mmc: mmci: add explicit clk control srinivas.kandagatla
` (3 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Some of the controller have maximum supported frequency, This patch adds
support in variant data structure to specify such restrictions. This
gives more flexibility in calculating the f_max before passing it to
mmc-core.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 8534c29..55d39d2 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -67,6 +67,7 @@ static unsigned int fmax = 515633;
* @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl
* register
* @pwrreg_powerup: power up value for MMCIPOWER register
+ * @f_max: maximum clk frequency supported by the controller.
* @signal_direction: input/out direction of bus signals can be indicated
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
* @busy_detect: true if busy detection on dat0 is supported
@@ -87,6 +88,7 @@ struct variant_data {
bool blksz_datactrl16;
bool blksz_datactrl4;
u32 pwrreg_powerup;
+ u32 f_max;
bool signal_direction;
bool pwrreg_clkgate;
bool busy_detect;
@@ -98,6 +100,7 @@ static struct variant_data variant_arm = {
.fifohalfsize = 8 * 4,
.datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP,
+ .f_max = 100000000,
};
static struct variant_data variant_arm_extended_fifo = {
@@ -105,6 +108,7 @@ static struct variant_data variant_arm_extended_fifo = {
.fifohalfsize = 64 * 4,
.datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP,
+ .f_max = 100000000,
};
static struct variant_data variant_arm_extended_fifo_hwfc = {
@@ -113,6 +117,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = {
.clkreg_enable = MCI_ARM_HWFCEN,
.datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP,
+ .f_max = 100000000,
};
static struct variant_data variant_u300 = {
@@ -123,6 +128,7 @@ static struct variant_data variant_u300 = {
.datalength_bits = 16,
.sdio = true,
.pwrreg_powerup = MCI_PWR_ON,
+ .f_max = 100000000,
.signal_direction = true,
.pwrreg_clkgate = true,
.pwrreg_nopower = true,
@@ -136,6 +142,7 @@ static struct variant_data variant_nomadik = {
.sdio = true,
.st_clkdiv = true,
.pwrreg_powerup = MCI_PWR_ON,
+ .f_max = 100000000,
.signal_direction = true,
.pwrreg_clkgate = true,
.pwrreg_nopower = true,
@@ -152,6 +159,7 @@ static struct variant_data variant_ux500 = {
.sdio = true,
.st_clkdiv = true,
.pwrreg_powerup = MCI_PWR_ON,
+ .f_max = 100000000,
.signal_direction = true,
.pwrreg_clkgate = true,
.busy_detect = true,
@@ -171,6 +179,7 @@ static struct variant_data variant_ux500v2 = {
.st_clkdiv = true,
.blksz_datactrl16 = true,
.pwrreg_powerup = MCI_PWR_ON,
+ .f_max = 100000000,
.signal_direction = true,
.pwrreg_clkgate = true,
.busy_detect = true,
@@ -1471,8 +1480,8 @@ static int mmci_probe(struct amba_device *dev,
* so we try to adjust the clock down to this,
* (if possible).
*/
- if (host->mclk > 100000000) {
- ret = clk_set_rate(host->clk, 100000000);
+ if (host->mclk > variant->f_max) {
+ ret = clk_set_rate(host->clk, variant->f_max);
if (ret < 0)
goto clk_disable;
host->mclk = clk_get_rate(host->clk);
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 10/12] mmc: mmci: add explicit clk control
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (8 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 09/12] mmc: mmci: add f_max to " srinivas.kandagatla
@ 2014-06-02 9:09 ` srinivas.kandagatla
2014-06-11 12:50 ` Linus Walleij
2014-06-02 9:10 ` [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic srinivas.kandagatla
` (2 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:09 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
On Controllers like Qcom SD card controller where cclk is mclk and mclk should
be directly controlled by the driver.
This patch adds support to control mclk directly in the driver, and also
adds explicit_mclk_control flag in variant structure giving more flexibility
to the driver.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 30 +++++++++++++++++++++++++++---
drivers/mmc/host/mmci.h | 2 ++
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 55d39d2..08715ab 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -72,6 +72,7 @@ static unsigned int fmax = 515633;
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
* @busy_detect: true if busy detection on dat0 is supported
* @pwrreg_nopower: bits in MMCIPOWER don't controls ext. power supply
+ * @explicit_mclk_control: enable explicit mclk control in driver.
*/
struct variant_data {
unsigned int clkreg;
@@ -93,6 +94,7 @@ struct variant_data {
bool pwrreg_clkgate;
bool busy_detect;
bool pwrreg_nopower;
+ bool explicit_mclk_control;
};
static struct variant_data variant_arm = {
@@ -286,7 +288,9 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired)
host->cclk = 0;
if (desired) {
- if (desired >= host->mclk) {
+ if (variant->explicit_mclk_control) {
+ host->cclk = host->mclk;
+ } else if (desired >= host->mclk) {
clk = MCI_CLK_BYPASS;
if (variant->st_clkdiv)
clk |= MCI_ST_UX500_NEG_EDGE;
@@ -1325,6 +1329,18 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
if (!ios->clock && variant->pwrreg_clkgate)
pwr &= ~MCI_PWR_ON;
+ if (host->variant->explicit_mclk_control &&
+ ios->clock != host->clock_cache) {
+ int rc = clk_set_rate(host->clk, ios->clock);
+ if (rc < 0) {
+ dev_err(mmc_dev(host->mmc),
+ "Error setting clock rate (%d)\n", rc);
+ } else {
+ host->mclk = clk_get_rate(host->clk);
+ host->clock_cache = ios->clock;
+ }
+ }
+
spin_lock_irqsave(&host->lock, flags);
mmci_set_clkreg(host, ios->clock);
@@ -1500,9 +1516,12 @@ static int mmci_probe(struct amba_device *dev,
* The ARM and ST versions of the block have slightly different
* clock divider equations which means that the minimum divider
* differs too.
+ * on Qualcomm like controllers get the nearest minimum clock to 100Khz
*/
if (variant->st_clkdiv)
mmc->f_min = DIV_ROUND_UP(host->mclk, 257);
+ else if (variant->explicit_mclk_control)
+ mmc->f_min = clk_round_rate(host->clk, 100000);
else
mmc->f_min = DIV_ROUND_UP(host->mclk, 512);
/*
@@ -1512,9 +1531,14 @@ static int mmci_probe(struct amba_device *dev,
* the block, of course.
*/
if (mmc->f_max)
- mmc->f_max = min(host->mclk, mmc->f_max);
+ mmc->f_max = variant->explicit_mclk_control ?
+ min(variant->f_max, mmc->f_max) :
+ min(host->mclk, mmc->f_max);
else
- mmc->f_max = min(host->mclk, fmax);
+ mmc->f_max = variant->explicit_mclk_control ?
+ fmax : min(host->mclk, fmax);
+
+
dev_dbg(mmc_dev(mmc), "clocking block at %u Hz\n", mmc->f_max);
/* Get regulators and the supported OCR mask */
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index d38a99d..ef34617 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -208,6 +208,8 @@ struct mmci_host {
spinlock_t lock;
unsigned int mclk;
+ /* cached value of requested clk in set_ios */
+ unsigned int clock_cache;
unsigned int cclk;
u32 pwr_reg;
u32 pwr_reg_add;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic.
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (9 preceding siblings ...)
2014-06-02 9:09 ` [PATCH v6 10/12] mmc: mmci: add explicit clk control srinivas.kandagatla
@ 2014-06-02 9:10 ` srinivas.kandagatla
2014-06-11 12:52 ` Linus Walleij
2014-06-02 9:10 ` [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-06-11 17:35 ` [PATCH v6 00/12] Qualcomm SD Card Controller support Ulf Hansson
12 siblings, 1 reply; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:10 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
MCIFIFOCNT register behaviour on Qcom chips is very different than the other
pl180 integrations. MCIFIFOCNT register contains the number of
words that are still waiting to be transferred through the FIFO. It keeps
decrementing once the host CPU reads the MCIFIFO. With the existing logic and
the MCIFIFOCNT behaviour, mmci_pio_read will loop forever, as the FIFOCNT
register will always return transfer size before reading the FIFO.
Also the data sheet states that "This register is only useful for debug
purposes and should not be used for normal operation since it does not reflect
data which may or may not be in the pipeline".
This patch implements a qcom specific get_rx_fifocnt function which is
implemented based on status register flags. Based on qcom_fifo flag in
variant data structure, the corresponding get_rx_fifocnt function is selected.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 30 ++++++++++++++++++++++++++++--
drivers/mmc/host/mmci.h | 1 +
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 08715ab..08ff8d2 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -73,6 +73,7 @@ static unsigned int fmax = 515633;
* @busy_detect: true if busy detection on dat0 is supported
* @pwrreg_nopower: bits in MMCIPOWER don't controls ext. power supply
* @explicit_mclk_control: enable explicit mclk control in driver.
+ * @qcom_fifo: enables qcom specific fifo pio read logic.
*/
struct variant_data {
unsigned int clkreg;
@@ -95,6 +96,7 @@ struct variant_data {
bool busy_detect;
bool pwrreg_nopower;
bool explicit_mclk_control;
+ bool qcom_fifo;
};
static struct variant_data variant_arm = {
@@ -990,15 +992,34 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
}
}
+static int mmci_get_rx_fifocnt(struct mmci_host *host, u32 status, int remain)
+{
+ return remain - (readl(host->base + MMCIFIFOCNT) << 2);
+}
+
+static int mmci_qcom_get_rx_fifocnt(struct mmci_host *host, u32 status, int r)
+{
+ /*
+ * on qcom SDCC4 only 8 words are used in each burst so only 8 addresses
+ * from the fifo range should be used
+ */
+ if (status & MCI_RXFIFOHALFFULL)
+ return host->variant->fifohalfsize;
+ else if (status & MCI_RXDATAAVLBL)
+ return 4;
+
+ return 0;
+}
+
static int mmci_pio_read(struct mmci_host *host, char *buffer, unsigned int remain)
{
void __iomem *base = host->base;
char *ptr = buffer;
- u32 status;
+ u32 status = readl(host->base + MMCISTATUS);
int host_remain = host->size;
do {
- int count = host_remain - (readl(base + MMCIFIFOCNT) << 2);
+ int count = host->get_rx_fifocnt(host, status, host_remain);
if (count > remain)
count = remain;
@@ -1488,6 +1509,11 @@ static int mmci_probe(struct amba_device *dev,
if (ret)
goto host_free;
+ if (variant->qcom_fifo)
+ host->get_rx_fifocnt = mmci_qcom_get_rx_fifocnt;
+ else
+ host->get_rx_fifocnt = mmci_get_rx_fifocnt;
+
host->plat = plat;
host->variant = variant;
host->mclk = clk_get_rate(host->clk);
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index ef34617..a1f5e4f 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -229,6 +229,7 @@ struct mmci_host {
/* pio stuff */
struct sg_mapping_iter sg_miter;
unsigned int size;
+ int (*get_rx_fifocnt)(struct mmci_host *h, u32 status, int remain);
#ifdef CONFIG_DMA_ENGINE
/* DMA stuff */
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (10 preceding siblings ...)
2014-06-02 9:10 ` [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic srinivas.kandagatla
@ 2014-06-02 9:10 ` srinivas.kandagatla
2014-06-11 12:52 ` Linus Walleij
[not found] ` <CA+neC=PRkUqcL63yNkvJNgRQqvQ+c+1g+qptM7vXH5c9-b5UDw@mail.gmail.com>
2014-06-11 17:35 ` [PATCH v6 00/12] Qualcomm SD Card Controller support Ulf Hansson
12 siblings, 2 replies; 23+ messages in thread
From: srinivas.kandagatla @ 2014-06-02 9:10 UTC (permalink / raw)
To: Russell King, Ulf Hansson, linux-mmc
Cc: Chris Ball, linux-kernel, linux-arm-msm, linus.walleij,
Srinivas Kandagatla
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds a fake Qualcomm ID 0x00051180 to the amba_ids, as Qualcomm
SDCC controller is pl180, but amba id registers read 0x0's.
The plan is to remove SDCC driver totally and use mmci as the main SD
controller driver for Qualcomm SOCs.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 08ff8d2..fa851d5 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -190,6 +190,23 @@ static struct variant_data variant_ux500v2 = {
.pwrreg_nopower = true,
};
+static struct variant_data variant_qcom = {
+ .fifosize = 16 * 4,
+ .fifohalfsize = 8 * 4,
+ .clkreg = MCI_CLK_ENABLE,
+ .clkreg_enable = MCI_QCOM_CLK_FLOWENA |
+ MCI_QCOM_CLK_SELECT_IN_FBCLK,
+ .clkreg_8bit_bus_enable = MCI_QCOM_CLK_WIDEBUS_8,
+ .datactrl_mask_ddrmode = MCI_QCOM_CLK_SELECT_IN_DDR_MODE,
+ .data_cmd_enable = MCI_QCOM_CSPM_DATCMD,
+ .blksz_datactrl4 = true,
+ .datalength_bits = 24,
+ .pwrreg_powerup = MCI_PWR_UP,
+ .f_max = 208000000,
+ .explicit_mclk_control = true,
+ .qcom_fifo = true,
+};
+
static int mmci_card_busy(struct mmc_host *mmc)
{
struct mmci_host *host = mmc_priv(mmc);
@@ -1831,6 +1848,12 @@ static struct amba_id mmci_ids[] = {
.mask = 0xf0ffffff,
.data = &variant_ux500v2,
},
+ /* Qualcomm variants */
+ {
+ .id = 0x00051180,
+ .mask = 0x000fffff,
+ .data = &variant_qcom,
+ },
{ 0, 0 },
};
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines.
2014-06-02 9:08 ` [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines srinivas.kandagatla
@ 2014-06-11 12:45 ` Linus Walleij
0 siblings, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:45 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:08 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> This patch adds a Qualcomm SD Card controller specific register variations
> to header file. Qualcomm SDCC controller is pl180, with slight changes in
> the register layout from standard pl180 register set.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register.
2014-06-02 9:08 ` [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register srinivas.kandagatla
@ 2014-06-11 12:46 ` Linus Walleij
0 siblings, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:46 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:08 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> On Qcom SD Card controller POWER, CLKCTRL, DATACTRL and COMMAND registers
> should be updated in MCLK domain, and writes to these registers must be
> separated by three MCLK cycles. This resitriction is not applicable for
> other registers. Any subsequent writes to these register will be ignored
> until 3 MCLK have passed.
>
> One usec delay between two CMD register writes is not sufficient in the
> card identification phase where the CCLK is very low. This patch replaces
> a static 1 usec delay to use mmci_reg_delay function which can provide
> correct delay depending on the cclk frequency.
>
> Without this patch the card is not detected.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 09/12] mmc: mmci: add f_max to variant structure
2014-06-02 9:09 ` [PATCH v6 09/12] mmc: mmci: add f_max to " srinivas.kandagatla
@ 2014-06-11 12:47 ` Linus Walleij
0 siblings, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:47 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:09 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> Some of the controller have maximum supported frequency, This patch adds
> support in variant data structure to specify such restrictions. This
> gives more flexibility in calculating the f_max before passing it to
> mmc-core.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 10/12] mmc: mmci: add explicit clk control
2014-06-02 9:09 ` [PATCH v6 10/12] mmc: mmci: add explicit clk control srinivas.kandagatla
@ 2014-06-11 12:50 ` Linus Walleij
0 siblings, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:50 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:09 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> On Controllers like Qcom SD card controller where cclk is mclk and mclk should
> be directly controlled by the driver.
>
> This patch adds support to control mclk directly in the driver, and also
> adds explicit_mclk_control flag in variant structure giving more flexibility
> to the driver.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic.
2014-06-02 9:10 ` [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic srinivas.kandagatla
@ 2014-06-11 12:52 ` Linus Walleij
0 siblings, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:52 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:10 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> MCIFIFOCNT register behaviour on Qcom chips is very different than the other
> pl180 integrations. MCIFIFOCNT register contains the number of
> words that are still waiting to be transferred through the FIFO. It keeps
> decrementing once the host CPU reads the MCIFIFO. With the existing logic and
> the MCIFIFOCNT behaviour, mmci_pio_read will loop forever, as the FIFOCNT
> register will always return transfer size before reading the FIFO.
>
> Also the data sheet states that "This register is only useful for debug
> purposes and should not be used for normal operation since it does not reflect
> data which may or may not be in the pipeline".
>
> This patch implements a qcom specific get_rx_fifocnt function which is
> implemented based on status register flags. Based on qcom_fifo flag in
> variant data structure, the corresponding get_rx_fifocnt function is selected.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table
2014-06-02 9:10 ` [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
@ 2014-06-11 12:52 ` Linus Walleij
[not found] ` <CA+neC=PRkUqcL63yNkvJNgRQqvQ+c+1g+qptM7vXH5c9-b5UDw@mail.gmail.com>
1 sibling, 0 replies; 23+ messages in thread
From: Linus Walleij @ 2014-06-11 12:52 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Russell King, Ulf Hansson, linux-mmc@vger.kernel.org, Chris Ball,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
On Mon, Jun 2, 2014 at 11:10 AM, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> This patch adds a fake Qualcomm ID 0x00051180 to the amba_ids, as Qualcomm
> SDCC controller is pl180, but amba id registers read 0x0's.
> The plan is to remove SDCC driver totally and use mmci as the main SD
> controller driver for Qualcomm SOCs.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 00/12] Qualcomm SD Card Controller support
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
` (11 preceding siblings ...)
2014-06-02 9:10 ` [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
@ 2014-06-11 17:35 ` Ulf Hansson
2014-06-11 17:37 ` Srinivas Kandagatla
12 siblings, 1 reply; 23+ messages in thread
From: Ulf Hansson @ 2014-06-11 17:35 UTC (permalink / raw)
To: Srinivas Kandagatla, Russell King
Cc: linux-mmc, Chris Ball, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, Linus Walleij
On 2 June 2014 11:03, <srinivas.kandagatla@linaro.org> wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
> Thankyou Linus W, Ulf H, Russell K and everyone for reviewing RFC to v5 patches.
>
> This patch series adds Qualcomm SD Card Controller support in pl180 mmci
> driver. QCom SDCC is basically a pl180, but bit more customized, some of the
> register layouts and offsets are different to the ones mentioned in pl180
> datasheet. The plan is to totally remove the standalone SDCC driver
> drivers/mmc/host/msm_sdcc.* and start using generic mmci driver for all
> Qualcomm parts, as we get chance to test on other Qcom boards.
>
> To start using the existing mmci driver, a fake amba id for Qualcomm is added
> in patches:
> mmc: mmci: Add Qualcomm specific register defines.
> mmc: mmci: Add Qualcomm Id to amba id table.
>
> Second change is, adding a 3 clock cycle delay in between writes to
> CLKCTRL/POWER/DATACTRL/COMMAND registers. Most of the delays are taken care with
> the existing driver except delay for the COMMAND register was too small.
> This patch fixes it.
> mmc: mmci: Add enough delay between writes to CMD register.
>
> Third change is to accommodate CLK, DATCTRL and MMCICLK register layout changes
> in Qcom SDCC and provide more flexibity in driver to specify these changes via
> variant datastructure. Which are done in patches:
> mmc: mmci: Add Qcom datactrl register variant
> mmc: mmci: add ddrmode mask to variant data
> mmc: mmci: add 8bit bus support in variant data
> mmc: mmci: add edge support to data and command out in variant data.
> mmc: mmci: add Qcom specifics of clk and datactrl registers.
> mmc: mmci: Add support to data commands via variant structure.
> mmc: mmci: add f_max to variant structure
> mmc: mmci: add explicit clk control
>
> Fourth change was to add qcom specfic fifocnt logic, the need for
> this is because the way MCIFIFOCNT register behaved in QCOM SDCC is very
> different to the one in pl180. This change is done in patch:
> mmc: mmci: Add Qcom specific rx_fifocnt logic.
>
> Last some Qcom unrelated changes/cleanup to driver are done in patches:
> mmc: mmci: use NSEC_PER_SEC macro
>
> This patches are tested in PIO mode on IFC8064 board with both eMMC and
> external SD card. I would like to get this support in v3.16.
Thanks Srinivas, great work!
We didn't reach 3.16, but now I have applied this for my next branch
intended for 3.17.
For you information, the v6 patchset needed a minor re-base, and one
of the patches had a checkpatch error. I managed to fix them, hope you
are fine with that.
Russell, if you have any concerns with the patches - just let me know,
then I can easily drop them.
Kind regards
Uffe
>
> Changes from v5:
> - removed BIT conversion patch as suggested by Russell K.
> - removed extra parens as pointed by Russell K.
> - correct the f_max for explicit clk control
>
> Changes from v4:
> - moved the amba id table addition to the end of the patchset as suggested by Ulf.
> - reused the mmci_pio_read function after experimenting with the fifo behaviour.
> - simplify f_max/f_min calcuation logic as suggested by Ulf.
> - created a new patch for the register defination as suggested by Ulf.
>
> Changes from v3:
> - moved pio_read to a function pointer so as to reduce additional cycles
> in hot-path, suggested by Ulf.
> - simplify the flags used for explicit mclk control, suggested by Ulf.
> - fixed issues in cacluating f_max and f_min pointed and suggested by Ulf.
> - removed unessary DDR flags on un-supported STE variants.
> - used BIT macros as suggested by Ulf.
> - removed the read/write wrappers with delays, and used most optimal way
> to introduce the delays to the only registers that require delays.
>
> Changes from v2:
> - merged fbclk latch patch with clkreg_enable patch as suggested by Linus W.
> - remove qcom prefix for explicit clk control pointed by Linus W.
> - cleaned up mmci_qcom_pio_read and consider SDIO as suggested by Linus W.
>
> Changes from v1:
> - moved most of the SOC specifics to variant parameters as suggested
> by Linus W.
> - renamed registers as suggested by Linus W.
> - Added comments in the code as suggested by Linus W.
> - moved out AMBA ID addition patch from this series.
> - rebased the patches to
> git://git.linaro.org/people/ulf.hansson/mmc.git next
> as suggested by Ulf H.
>
> Changes from RFC:
> - moved out clk setup out of spinlock as pointed by Stephen B.
>
> Am hoping to get this for v3.16.
>
> All these patches are tested on IF6410 board on both eMMC and external SD card.
>
> Thanks,
> srini
>
>
> Srinivas Kandagatla (12):
> mmc: mmci: use NSEC_PER_SEC macro
> mmc: mmci: Add Qualcomm specific register defines.
> mmc: mmci: Add enough delay between writes to CMD register.
> mmc: mmci: Add Qcom datactrl register variant
> mmc: mmci: add ddrmode mask to variant data
> mmc: mmci: add 8bit bus support in variant data
> mmc: mmci: add edge support to data and command out in variant data.
> mmc: mmci: Add support to data commands via variant structure.
> mmc: mmci: add f_max to variant structure
> mmc: mmci: add explicit clk control
> mmc: mmci: Add Qcom specific rx_fifocnt logic.
> mmc: mmci: Add Qualcomm Id to amba id table
>
> drivers/mmc/host/mmci.c | 128 +++++++++++++++++++++++++++++++++++++++++++-----
> drivers/mmc/host/mmci.h | 20 ++++++++
> 2 files changed, 136 insertions(+), 12 deletions(-)
>
> --
> 1.9.1
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v6 00/12] Qualcomm SD Card Controller support
2014-06-11 17:35 ` [PATCH v6 00/12] Qualcomm SD Card Controller support Ulf Hansson
@ 2014-06-11 17:37 ` Srinivas Kandagatla
0 siblings, 0 replies; 23+ messages in thread
From: Srinivas Kandagatla @ 2014-06-11 17:37 UTC (permalink / raw)
To: Ulf Hansson, Russell King
Cc: linux-mmc, Chris Ball, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, Linus Walleij
Hi Ulf,
On 11/06/14 18:35, Ulf Hansson wrote:
> Thanks Srinivas, great work!
>
> We didn't reach 3.16, but now I have applied this for my next branch
> intended for 3.17.
>
That's great.
> For you information, the v6 patchset needed a minor re-base, and one
> of the patches had a checkpatch error. I managed to fix them, hope you
> are fine with that.
>
Thankyou for fixing it.
--srini
> Russell, if you have any concerns with the patches - just let me know,
> then I can easily drop them.
>
> Kind regards
> Uffe
^ permalink raw reply [flat|nested] 23+ messages in thread
* RE: Fwd: [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table
[not found] ` <CA+neC=PRkUqcL63yNkvJNgRQqvQ+c+1g+qptM7vXH5c9-b5UDw@mail.gmail.com>
@ 2014-07-17 8:31 ` prakash.burla
0 siblings, 0 replies; 23+ messages in thread
From: prakash.burla @ 2014-07-17 8:31 UTC (permalink / raw)
To: srinivas.kandagatla; +Cc: ulf.hansson, linux-mmc, linux-arm-msm, linus.walleij
tested-by: Prakash Burla <prakash.burla@smartplayin.com>
This driver tested on AP806X with mmc Driver.
--------------------------------------------------------------------
From: <srinivas.kandagatla@linaro.org>
Date: Mon, Jun 2, 2014 at 2:40 PM
Subject: [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table
To: Russell King <linux@arm.linux.org.uk>, Ulf Hansson
<ulf.hansson@linaro.org>, linux-mmc@vger.kernel.org
Cc: Chris Ball <chris@printf.net>, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linus.walleij@linaro.org, Srinivas
Kandagatla <srinivas.kandagatla@linaro.org>
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This patch adds a fake Qualcomm ID 0x00051180 to the amba_ids, as Qualcomm
SDCC controller is pl180, but amba id registers read 0x0's.
The plan is to remove SDCC driver totally and use mmci as the main SD
controller driver for Qualcomm SOCs.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/mmc/host/mmci.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 08ff8d2..fa851d5 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -190,6 +190,23 @@ static struct variant_data variant_ux500v2 = {
.pwrreg_nopower = true,
};
+static struct variant_data variant_qcom = {
+ .fifosize = 16 * 4,
+ .fifohalfsize = 8 * 4,
+ .clkreg = MCI_CLK_ENABLE,
+ .clkreg_enable = MCI_QCOM_CLK_FLOWENA |
+ MCI_QCOM_CLK_SELECT_IN_FBCLK,
+ .clkreg_8bit_bus_enable = MCI_QCOM_CLK_WIDEBUS_8,
+ .datactrl_mask_ddrmode = MCI_QCOM_CLK_SELECT_IN_DDR_MODE,
+ .data_cmd_enable = MCI_QCOM_CSPM_DATCMD,
+ .blksz_datactrl4 = true,
+ .datalength_bits = 24,
+ .pwrreg_powerup = MCI_PWR_UP,
+ .f_max = 208000000,
+ .explicit_mclk_control = true,
+ .qcom_fifo = true,
+};
+
static int mmci_card_busy(struct mmc_host *mmc)
{
struct mmci_host *host = mmc_priv(mmc);
@@ -1831,6 +1848,12 @@ static struct amba_id mmci_ids[] = {
.mask = 0xf0ffffff,
.data = &variant_ux500v2,
},
+ /* Qualcomm variants */
+ {
+ .id = 0x00051180,
+ .mask = 0x000fffff,
+ .data = &variant_qcom,
+ },
{ 0, 0 },
};
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* RE: Fwd: [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant
[not found] ` <CA+neC=Of9Ua5OxUiezmTHfzq9zkXVRCFei3xKMbXi3OGV84EHw@mail.gmail.com>
@ 2014-07-17 10:26 ` prakash.burla
0 siblings, 0 replies; 23+ messages in thread
From: prakash.burla @ 2014-07-17 10:26 UTC (permalink / raw)
To: srinivas.kandagatla
Cc: linux, ulf.hansson, linux-mmc, linux-kernel, linux-arm-msm
tested-by: Prakash Burla <prakash.burla@smartplayin.com>
This driver tested on AP806X with mmc Driver.
----------------------------------------------------------------------------------
From: <srinivas.kandagatla@linaro.org>
Date: Mon, Jun 2, 2014 at 2:39 PM
Subject: [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant
To: Russell King <linux@arm.linux.org.uk>, Ulf Hansson
<ulf.hansson@linaro.org>, linux-mmc@vger.kernel.org
Cc: Chris Ball <chris@printf.net>, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linus.walleij@linaro.org, Srinivas
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Instance of this IP on Qualcomm's SOCs has bit different layout for datactrl
register. Bit position datactrl[16:4] hold the true block size instead of power
of 2.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/mmc/host/mmci.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index ed20bf5..72981f6 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -60,6 +60,8 @@ static unsigned int fmax = 515633;
* @sdio: variant supports SDIO
* @st_clkdiv: true if using a ST-specific clock divider algorithm
* @blksz_datactrl16: true if Block size is at b16..b30 position in
datactrl register
+ * @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl
+ * register
* @pwrreg_powerup: power up value for MMCIPOWER register
* @signal_direction: input/out direction of bus signals can be indicated
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
@@ -75,6 +77,7 @@ struct variant_data {
bool sdio;
bool st_clkdiv;
bool blksz_datactrl16;
+ bool blksz_datactrl4;
u32 pwrreg_powerup;
bool signal_direction;
bool pwrreg_clkgate;
@@ -731,6 +734,8 @@ static void mmci_start_data(struct mmci_host
*host, struct mmc_data *data)
if (variant->blksz_datactrl16)
datactrl = MCI_DPSM_ENABLE | (data->blksz << 16);
+ else if (variant->blksz_datactrl4)
+ datactrl = MCI_DPSM_ENABLE | (data->blksz << 4);
else
datactrl = MCI_DPSM_ENABLE | blksz_bits << 4;
--
1.9.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
end of thread, other threads:[~2014-07-17 10:26 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-02 9:03 [PATCH v6 00/12] Qualcomm SD Card Controller support srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 01/12] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-06-02 9:08 ` [PATCH v6 02/12] mmc: mmci: Add Qualcomm specific register defines srinivas.kandagatla
2014-06-11 12:45 ` Linus Walleij
2014-06-02 9:08 ` [PATCH v6 03/12] mmc: mmci: Add enough delay between writes to CMD register srinivas.kandagatla
2014-06-11 12:46 ` Linus Walleij
2014-06-02 9:09 ` [PATCH v6 04/12] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
[not found] ` <CA+neC=Of9Ua5OxUiezmTHfzq9zkXVRCFei3xKMbXi3OGV84EHw@mail.gmail.com>
2014-07-17 10:26 ` Fwd: " prakash.burla
2014-06-02 9:09 ` [PATCH v6 05/12] mmc: mmci: add ddrmode mask to variant data srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 06/12] mmc: mmci: add 8bit bus support in " srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 07/12] mmc: mmci: add edge support to data and command out " srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 08/12] mmc: mmci: Add support to data commands via variant structure srinivas.kandagatla
2014-06-02 9:09 ` [PATCH v6 09/12] mmc: mmci: add f_max to " srinivas.kandagatla
2014-06-11 12:47 ` Linus Walleij
2014-06-02 9:09 ` [PATCH v6 10/12] mmc: mmci: add explicit clk control srinivas.kandagatla
2014-06-11 12:50 ` Linus Walleij
2014-06-02 9:10 ` [PATCH v6 11/12] mmc: mmci: Add Qcom specific rx_fifocnt logic srinivas.kandagatla
2014-06-11 12:52 ` Linus Walleij
2014-06-02 9:10 ` [PATCH v6 12/12] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-06-11 12:52 ` Linus Walleij
[not found] ` <CA+neC=PRkUqcL63yNkvJNgRQqvQ+c+1g+qptM7vXH5c9-b5UDw@mail.gmail.com>
2014-07-17 8:31 ` Fwd: " prakash.burla
2014-06-11 17:35 ` [PATCH v6 00/12] Qualcomm SD Card Controller support Ulf Hansson
2014-06-11 17:37 ` Srinivas Kandagatla
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).