All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK
@ 2019-12-17  9:53 Adrian Hunter
  2019-12-17  9:53 ` [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing Adrian Hunter
  2019-12-18 14:01 ` [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Ulf Hansson
  0 siblings, 2 replies; 4+ messages in thread
From: Adrian Hunter @ 2019-12-17  9:53 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc

Command queuing has been reported broken on some Lenovo systems based on
Intel GLK. This is likely a BIOS issue, so disable command queuing for
Intel GLK if the BIOS vendor string is "LENOVO".

Fixes: 8ee82bda230f ("mmc: sdhci-pci: Add CQHCI support for Intel GLK")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org
---
 drivers/mmc/host/sdhci-pci-core.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
index acefb76b4e15..5091e2c1c0e5 100644
--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -27,6 +27,7 @@
 #include <linux/mmc/slot-gpio.h>
 #include <linux/mmc/sdhci-pci-data.h>
 #include <linux/acpi.h>
+#include <linux/dmi.h>
 
 #ifdef CONFIG_X86
 #include <asm/iosf_mbi.h>
@@ -783,11 +784,18 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
 	return 0;
 }
 
+static bool glk_broken_cqhci(struct sdhci_pci_slot *slot)
+{
+	return slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_GLK_EMMC &&
+	       dmi_match(DMI_BIOS_VENDOR, "LENOVO");
+}
+
 static int glk_emmc_probe_slot(struct sdhci_pci_slot *slot)
 {
 	int ret = byt_emmc_probe_slot(slot);
 
-	slot->host->mmc->caps2 |= MMC_CAP2_CQE;
+	if (!glk_broken_cqhci(slot))
+		slot->host->mmc->caps2 |= MMC_CAP2_CQE;
 
 	if (slot->chip->pdev->device != PCI_DEVICE_ID_INTEL_GLK_EMMC) {
 		slot->host->mmc->caps2 |= MMC_CAP2_HS400_ES,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing
  2019-12-17  9:53 [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Adrian Hunter
@ 2019-12-17  9:53 ` Adrian Hunter
  2019-12-18 14:01   ` Ulf Hansson
  2019-12-18 14:01 ` [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Ulf Hansson
  1 sibling, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2019-12-17  9:53 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc

Command queuing has been reported broken on some systems based on Intel
GLK. A separate patch disables command queuing in some cases.

This patch adds a quirk for broken command queuing, which enables users
with problems to disable command queuing using sdhci module parameters for
quirks.

Fixes: 8ee82bda230f ("mmc: sdhci-pci: Add CQHCI support for Intel GLK")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org
---
 drivers/mmc/host/sdhci.c | 3 +++
 drivers/mmc/host/sdhci.h | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 3140fe2e5dba..f4540f9892ce 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -3769,6 +3769,9 @@ int sdhci_setup_host(struct sdhci_host *host)
 		       mmc_hostname(mmc), host->version);
 	}
 
+	if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
+		mmc->caps2 &= ~MMC_CAP2_CQE;
+
 	if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
 		host->flags |= SDHCI_USE_SDMA;
 	else if (!(host->caps & SDHCI_CAN_DO_SDMA))
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 0ed3e0eaef5f..fe83ece6965b 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -409,6 +409,8 @@ struct sdhci_host {
 #define SDHCI_QUIRK_BROKEN_CARD_DETECTION		(1<<15)
 /* Controller reports inverted write-protect state */
 #define SDHCI_QUIRK_INVERTED_WRITE_PROTECT		(1<<16)
+/* Controller has unusable command queue engine */
+#define SDHCI_QUIRK_BROKEN_CQE				(1<<17)
 /* Controller does not like fast PIO transfers */
 #define SDHCI_QUIRK_PIO_NEEDS_DELAY			(1<<18)
 /* Controller does not have a LED */
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK
  2019-12-17  9:53 [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Adrian Hunter
  2019-12-17  9:53 ` [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing Adrian Hunter
@ 2019-12-18 14:01 ` Ulf Hansson
  1 sibling, 0 replies; 4+ messages in thread
From: Ulf Hansson @ 2019-12-18 14:01 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: linux-mmc

On Tue, 17 Dec 2019 at 10:54, Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> Command queuing has been reported broken on some Lenovo systems based on
> Intel GLK. This is likely a BIOS issue, so disable command queuing for
> Intel GLK if the BIOS vendor string is "LENOVO".
>
> Fixes: 8ee82bda230f ("mmc: sdhci-pci: Add CQHCI support for Intel GLK")
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> Cc: stable@vger.kernel.org

Applied for fixes, thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/sdhci-pci-core.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
> index acefb76b4e15..5091e2c1c0e5 100644
> --- a/drivers/mmc/host/sdhci-pci-core.c
> +++ b/drivers/mmc/host/sdhci-pci-core.c
> @@ -27,6 +27,7 @@
>  #include <linux/mmc/slot-gpio.h>
>  #include <linux/mmc/sdhci-pci-data.h>
>  #include <linux/acpi.h>
> +#include <linux/dmi.h>
>
>  #ifdef CONFIG_X86
>  #include <asm/iosf_mbi.h>
> @@ -783,11 +784,18 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
>         return 0;
>  }
>
> +static bool glk_broken_cqhci(struct sdhci_pci_slot *slot)
> +{
> +       return slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_GLK_EMMC &&
> +              dmi_match(DMI_BIOS_VENDOR, "LENOVO");
> +}
> +
>  static int glk_emmc_probe_slot(struct sdhci_pci_slot *slot)
>  {
>         int ret = byt_emmc_probe_slot(slot);
>
> -       slot->host->mmc->caps2 |= MMC_CAP2_CQE;
> +       if (!glk_broken_cqhci(slot))
> +               slot->host->mmc->caps2 |= MMC_CAP2_CQE;
>
>         if (slot->chip->pdev->device != PCI_DEVICE_ID_INTEL_GLK_EMMC) {
>                 slot->host->mmc->caps2 |= MMC_CAP2_HS400_ES,
> --
> 2.17.1
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing
  2019-12-17  9:53 ` [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing Adrian Hunter
@ 2019-12-18 14:01   ` Ulf Hansson
  0 siblings, 0 replies; 4+ messages in thread
From: Ulf Hansson @ 2019-12-18 14:01 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: linux-mmc

On Tue, 17 Dec 2019 at 10:54, Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> Command queuing has been reported broken on some systems based on Intel
> GLK. A separate patch disables command queuing in some cases.
>
> This patch adds a quirk for broken command queuing, which enables users
> with problems to disable command queuing using sdhci module parameters for
> quirks.
>
> Fixes: 8ee82bda230f ("mmc: sdhci-pci: Add CQHCI support for Intel GLK")
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> Cc: stable@vger.kernel.org

Applied for fixes, thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/sdhci.c | 3 +++
>  drivers/mmc/host/sdhci.h | 2 ++
>  2 files changed, 5 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 3140fe2e5dba..f4540f9892ce 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -3769,6 +3769,9 @@ int sdhci_setup_host(struct sdhci_host *host)
>                        mmc_hostname(mmc), host->version);
>         }
>
> +       if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
> +               mmc->caps2 &= ~MMC_CAP2_CQE;
> +
>         if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
>                 host->flags |= SDHCI_USE_SDMA;
>         else if (!(host->caps & SDHCI_CAN_DO_SDMA))
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index 0ed3e0eaef5f..fe83ece6965b 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -409,6 +409,8 @@ struct sdhci_host {
>  #define SDHCI_QUIRK_BROKEN_CARD_DETECTION              (1<<15)
>  /* Controller reports inverted write-protect state */
>  #define SDHCI_QUIRK_INVERTED_WRITE_PROTECT             (1<<16)
> +/* Controller has unusable command queue engine */
> +#define SDHCI_QUIRK_BROKEN_CQE                         (1<<17)
>  /* Controller does not like fast PIO transfers */
>  #define SDHCI_QUIRK_PIO_NEEDS_DELAY                    (1<<18)
>  /* Controller does not have a LED */
> --
> 2.17.1
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-12-18 14:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-17  9:53 [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Adrian Hunter
2019-12-17  9:53 ` [PATCH 2/2] mmc: sdhci: Add a quirk for broken command queuing Adrian Hunter
2019-12-18 14:01   ` Ulf Hansson
2019-12-18 14:01 ` [PATCH 1/2] mmc: sdhci: Workaround broken command queuing on Intel GLK Ulf Hansson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.