Patch "mmc: meson-mx-sdio: remove the broken ->card_busy() op" has been added to the 5.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mmc: meson-mx-sdio: remove the broken ->card_busy() op

to the 5.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mmc-meson-mx-sdio-remove-the-broken-card_busy-op.patch
and it can be found in the queue-5.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e3ee9e480772df224708c32680b7764d8a9c2028
Author: Martin Blumenstingl <martin.blumenstingl@xxxxxxxxxxxxxx>
Date:   Thu Apr 16 20:35:13 2020 +0200

    mmc: meson-mx-sdio: remove the broken ->card_busy() op
    
    commit ddca1092c4324c89cf692b5efe655aa251864b51 upstream.
    
    The recent commit 0d84c3e6a5b2 ("mmc: core: Convert to
    mmc_poll_for_busy() for erase/trim/discard") makes use of the
    ->card_busy() op for SD cards. This uncovered that the ->card_busy() op
    in the Meson SDIO driver was never working right:
    while polling the busy status with ->card_busy()
    meson_mx_mmc_card_busy() reads only one of the two MESON_MX_SDIO_IRQC
    register values 0x1f001f10 or 0x1f003f10. This translates to "three out
    of four DAT lines are HIGH" and "all four DAT lines are HIGH", which
    is interpreted as "the card is busy".
    
    It turns out that no situation can be observed where all four DAT lines
    are LOW, meaning the card is not busy anymore. Upon further research the
    3.10 vendor driver for this controller does not implement the
    ->card_busy() op.
    
    Remove the ->card_busy() op from the meson-mx-sdio driver since it is
    not working. At the time of writing this patch it is not clear what's
    needed to make the ->card_busy() implementation work with this specific
    controller hardware. For all use-cases which have previously worked the
    MMC_CAP_WAIT_WHILE_BUSY flag is now taking over, even if we don't have
    a ->card_busy() op anymore.
    
    Fixes: ed80a13bb4c4c9 ("mmc: meson-mx-sdio: Add a driver for the Amlogic Meson8 and Meson8b SoCs")
    Signed-off-by: Martin Blumenstingl <martin.blumenstingl@xxxxxxxxxxxxxx>
    Cc: stable@xxxxxxxxxxxxxxx
    Link: https://lore.kernel.org/r/20200416183513.993763-3-martin.blumenstingl@xxxxxxxxxxxxxx
    Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

diff --git a/drivers/mmc/host/meson-mx-sdio.c b/drivers/mmc/host/meson-mx-sdio.c
index fe02130237a8e..2e58743d83bb5 100644
--- a/drivers/mmc/host/meson-mx-sdio.c
+++ b/drivers/mmc/host/meson-mx-sdio.c
@@ -357,14 +357,6 @@ static void meson_mx_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
 		meson_mx_mmc_start_cmd(mmc, mrq->cmd);
 }
 
-static int meson_mx_mmc_card_busy(struct mmc_host *mmc)
-{
-	struct meson_mx_mmc_host *host = mmc_priv(mmc);
-	u32 irqc = readl(host->base + MESON_MX_SDIO_IRQC);
-
-	return !!(irqc & MESON_MX_SDIO_IRQC_FORCE_DATA_DAT_MASK);
-}
-
 static void meson_mx_mmc_read_response(struct mmc_host *mmc,
 				       struct mmc_command *cmd)
 {
@@ -506,7 +498,6 @@ static void meson_mx_mmc_timeout(struct timer_list *t)
 static struct mmc_host_ops meson_mx_mmc_ops = {
 	.request		= meson_mx_mmc_request,
 	.set_ios		= meson_mx_mmc_set_ios,
-	.card_busy		= meson_mx_mmc_card_busy,
 	.get_cd			= mmc_gpio_get_cd,
 	.get_ro			= mmc_gpio_get_ro,
 };



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux