lkml.org 
[lkml]   [2020]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH 1/2] mmc: host: meson-mx-sdhc: fix manual RX FIFO flushing
On Mon, May 18, 2020 at 12:29 AM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:
>
> For Meson8 and Meson8b SoCs the vendor driver follows the following
> pattern:
> - for eMMC and SD cards in .set_pdma it sets:
> pdma->rxfifo_manual_flush = 1;
> - for SDIO cards in .set_pdma it sets:
> pdma->rxfifo_manual_flush = 0;
> - before syncing the DMA read buffer is sets:
> pdma->rxfifo_manual_flush |= 0x02;
>
> Set the second bit of MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH without
> clearing the first bit before syncing the DMA read buffer. This fixes a
> problem where Meson8 and Meson8b SoCs would read random garbage from SD
> cards. It is not clear why it worked for eMMC cards. This manifested in
> the following errors when plugging in an SD card:
> unrecognised SCR structure version <random number>
>
> Fixes: 53ded1b676d199 ("mmc: host: meson-mx-sdhc: new driver for the Amlogic Meson SDHC host")
> Cc: Thomas Graichen <thomas.graichen@gmail.com>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

Tested-by: thomas graichen <thomas.graichen@gmail.com>

BEFORE: on my meson8 based mxiii i got the above error and the sd card
was not useable

AFTER: no more error and sd cards works fine

> ---
> drivers/mmc/host/meson-mx-sdhc.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/host/meson-mx-sdhc.c b/drivers/mmc/host/meson-mx-sdhc.c
> index 5c00958d7754..53e3f6a4245a 100644
> --- a/drivers/mmc/host/meson-mx-sdhc.c
> +++ b/drivers/mmc/host/meson-mx-sdhc.c
> @@ -586,10 +586,17 @@ static irqreturn_t meson_mx_sdhc_irq_thread(int irq, void *irq_data)
> cmd->data->flags & MMC_DATA_READ) {
> meson_mx_sdhc_wait_cmd_ready(host->mmc);
>
> + /*
> + * If MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH was
> + * previously 0x1 then it has to be set to 0x3. If it
> + * was 0x0 before then it has to be set to 0x2. Without
> + * this reading SD cards sometimes transfers garbage,
> + * which results in cards not being detected due to:
> + * unrecognised SCR structure version <random number>
> + */
> val = FIELD_PREP(MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH,
> 2);
> - regmap_update_bits(host->regmap, MESON_SDHC_PDMA,
> - MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH,
> + regmap_update_bits(host->regmap, MESON_SDHC_PDMA, val,
> val);
> }
>
> --
> 2.26.2
>

\
 
 \ /
  Last update: 2020-05-25 08:14    [W:0.053 / U:1.648 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site