Message ID | 1408446847-1604-1-git-send-email-srinivas.kandagatla@linaro.org |
---|---|
State | New |
Headers | show |
On 19 August 2014 13:14, Srinivas Kandagatla <srinivas.kandagatla@linaro.org> wrote: > From: Ulf Hansson <ulf.hansson@linaro.org> > > For the ux500v2 variant of the PL18x block, any block sizes are > supported. This will make it possible to decrease data overhead > for SDIO transfers. > > This patch is based on Ulf Hansson patch > http://www.spinics.net/lists/linux-mmc/msg12160.html > > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > enabled this support on qcom variant. > > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/mmc/host/mmci.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c > index c11cb05..3089fba 100644 > --- a/drivers/mmc/host/mmci.c > +++ b/drivers/mmc/host/mmci.c > @@ -77,6 +77,7 @@ static unsigned int fmax = 515633; > * @qcom_fifo: enables qcom specific fifo pio read logic. > * @reversed_irq_handling: handle data irq before cmd irq. > * @qcom_dml: enables qcom specific dma glue for dma transfers. > + * @any_blksize: true if block any sizes are supported > */ > struct variant_data { > unsigned int clkreg; > @@ -102,6 +103,7 @@ struct variant_data { > bool qcom_fifo; > bool reversed_irq_handling; > bool qcom_dml; > + bool any_blksize; > }; > > static struct variant_data variant_arm = { > @@ -194,6 +196,7 @@ static struct variant_data variant_ux500v2 = { > .pwrreg_clkgate = true, > .busy_detect = true, > .pwrreg_nopower = true, > + .any_blksize = true, > }; There are some prerequisites of the data buffers to supports any block size, at least for ux500. Try read up on this discussion: http://marc.info/?t=135005062400002&r=2&w=2 The conclusion from the above is that we need to adopt mmci_pio_write() to handle corner cases. Now, I suppose, unless someone objects, we could go ahead and merge this patch. Then you will have to fixup mmci_pio_write() later on. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index c11cb05..3089fba 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -77,6 +77,7 @@ static unsigned int fmax = 515633; * @qcom_fifo: enables qcom specific fifo pio read logic. * @reversed_irq_handling: handle data irq before cmd irq. * @qcom_dml: enables qcom specific dma glue for dma transfers. + * @any_blksize: true if block any sizes are supported */ struct variant_data { unsigned int clkreg; @@ -102,6 +103,7 @@ struct variant_data { bool qcom_fifo; bool reversed_irq_handling; bool qcom_dml; + bool any_blksize; }; static struct variant_data variant_arm = { @@ -194,6 +196,7 @@ static struct variant_data variant_ux500v2 = { .pwrreg_clkgate = true, .busy_detect = true, .pwrreg_nopower = true, + .any_blksize = true, }; static struct variant_data variant_qcom = { @@ -212,6 +215,7 @@ static struct variant_data variant_qcom = { .explicit_mclk_control = true, .qcom_fifo = true, .qcom_dml = true, + .any_blksize = true, }; static int mmci_card_busy(struct mmc_host *mmc) @@ -239,10 +243,11 @@ static int mmci_card_busy(struct mmc_host *mmc) static int mmci_validate_data(struct mmci_host *host, struct mmc_data *data) { + struct variant_data *variant = host->variant; + if (!data) return 0; - - if (!is_power_of_2(data->blksz)) { + if (!is_power_of_2(data->blksz) && !variant->any_blksize) { dev_err(mmc_dev(host->mmc), "unsupported block size (%d bytes)\n", data->blksz); return -EINVAL;