From eac9a6e619138c85ee3e1ac97ab6bad54169cbf0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 13 Mar 2009 17:34:04 -0700 Subject: [PATCH] one more .28 patch --- ...-controllers-with-no-end-of-busy-irq.patch | 52 +++++++++++++++++++ queue-2.6.28/series | 1 + 2 files changed, 53 insertions(+) create mode 100644 queue-2.6.28/sdhci-add-quirk-for-controllers-with-no-end-of-busy-irq.patch diff --git a/queue-2.6.28/sdhci-add-quirk-for-controllers-with-no-end-of-busy-irq.patch b/queue-2.6.28/sdhci-add-quirk-for-controllers-with-no-end-of-busy-irq.patch new file mode 100644 index 00000000000..d677d5bdc29 --- /dev/null +++ b/queue-2.6.28/sdhci-add-quirk-for-controllers-with-no-end-of-busy-irq.patch @@ -0,0 +1,52 @@ +From f945405cdecd9e0ae3e58ff84cabd19b4522965e Mon Sep 17 00:00:00 2001 +From: Ben Dooks +Date: Fri, 20 Feb 2009 20:33:08 +0300 +Subject: sdhci: Add quirk for controllers with no end-of-busy IRQ + +From: Ben Dooks + +commit f945405cdecd9e0ae3e58ff84cabd19b4522965e upstream. + +The Samsung SDHCI (and FSL eSDHC) controller block seems to fail +to generate an INT_DATA_END after the transfer has completed and +the bus busy state finished. + +Changes in e809517f6fa5803a5a1cd56026f0e2190fc13d5c to use the +new busy method are the cause of the behaviour change. + +Signed-off-by: Ben Dooks +Signed-off-by: Anton Vorontsov +Signed-off-by: Pierre Ossman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/host/sdhci.c | 5 ++++- + drivers/mmc/host/sdhci.h | 2 ++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -1286,8 +1286,11 @@ static void sdhci_cmd_irq(struct sdhci_h + if (host->cmd->data) + DBG("Cannot wait for busy signal when also " + "doing a data transfer"); +- else ++ else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ)) + return; ++ ++ /* The controller does not support the end-of-busy IRQ, ++ * fall through and take the SDHCI_INT_RESPONSE */ + } + + if (intmask & SDHCI_INT_RESPONSE) +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -210,6 +210,8 @@ struct sdhci_host { + #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13) + /* Controller supports high speed but doesn't have the caps bit set */ + #define SDHCI_QUIRK_FORCE_HIGHSPEED (1<<14) ++/* Controller does not provide transfer-complete interrupt when not busy */ ++#define SDHCI_QUIRK_NO_BUSY_IRQ (1<<15) + + int irq; /* Device IRQ */ + void __iomem * ioaddr; /* Mapped address */ diff --git a/queue-2.6.28/series b/queue-2.6.28/series index 094d1d215c6..36fa091e0ef 100644 --- a/queue-2.6.28/series +++ b/queue-2.6.28/series @@ -79,6 +79,7 @@ pci-add-pci-quirk-to-disable-l0s-aspm-state-for-82575-and-82598.patch copy_process-fix-clone_parent-parent_exec_id-interaction.patch proc-fix-pg_locked-reporting-in-proc-kpageflags.patch powerpc-fix-load-store-float-double-alignment-handler.patch +sdhci-add-quirk-for-controllers-with-no-end-of-busy-irq.patch sdhci-add-no_busy_irq-quirk-for-marvell-cafe-host-chip.patch pipe_rdwr_fasync-fix-the-error-handling-to-prevent-the-leak-crash.patch 0001-DVB-s5h1409-Perform-s5h1409-soft-reset-after-tunin.patch -- 2.47.3