linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host
@ 2016-11-21 23:04 Zach Brown
  2016-11-21 23:04 ` [PATCH 1/2] mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller sub-vended by NI Zach Brown
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Zach Brown @ 2016-11-21 23:04 UTC (permalink / raw)
  To: ulf.hansson; +Cc: adrian.hunter, linux-mmc, linux-kernel, zach.brown

On some boards, max SDIO frequency is limited by trace lengths and other layout
choices. We would like a way to specify this limitation so the driver can
behave accordingly.

This patch set assumes that the limitation has been reported in an ACPI table
which the driver can check to get the max frequency.

The first patch creates a PCI ID and support for the Intel byt sdio where NI is
the subvendor.

The second patch uses the ACPI table to set f_max during the new
ni_byt_sdio_probe_slot.


Zach Brown (2):
  mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller
    sub-vended by NI
  mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio    
    controller sub-vended by NI

 drivers/mmc/host/sdhci-pci-core.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

-- 
2.7.4

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

* [PATCH 1/2] mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller sub-vended by NI
  2016-11-21 23:04 [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Zach Brown
@ 2016-11-21 23:04 ` Zach Brown
  2016-11-21 23:04 ` [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio " Zach Brown
  2016-11-22  8:27 ` [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Ulf Hansson
  2 siblings, 0 replies; 8+ messages in thread
From: Zach Brown @ 2016-11-21 23:04 UTC (permalink / raw)
  To: ulf.hansson; +Cc: adrian.hunter, linux-mmc, linux-kernel, zach.brown

Add PCI ID for Intel byt sdio host controller sub-vended by NI.

The controller has different behavior because of the board layout NI
puts it on.

Signed-off-by: Zach Brown <zach.brown@ni.com>
---
 drivers/mmc/host/sdhci-pci-core.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
index 1d9e00a..9741505 100644
--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -375,6 +375,13 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
 	return 0;
 }
 
+static int ni_byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
+{
+	slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE |
+				 MMC_CAP_WAIT_WHILE_BUSY;
+	return 0;
+}
+
 static int byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
 {
 	slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE |
@@ -447,6 +454,15 @@ static const struct sdhci_pci_fixes sdhci_intel_byt_emmc = {
 	.ops		= &sdhci_intel_byt_ops,
 };
 
+static const struct sdhci_pci_fixes sdhci_ni_byt_sdio = {
+	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
+	.quirks2	= SDHCI_QUIRK2_HOST_OFF_CARD_ON |
+			  SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
+	.allow_runtime_pm = true,
+	.probe_slot	= ni_byt_sdio_probe_slot,
+	.ops		= &sdhci_intel_byt_ops,
+};
+
 static const struct sdhci_pci_fixes sdhci_intel_byt_sdio = {
 	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
 	.quirks2	= SDHCI_QUIRK2_HOST_OFF_CARD_ON |
@@ -1079,6 +1095,14 @@ static const struct pci_device_id pci_ids[] = {
 	{
 		.vendor		= PCI_VENDOR_ID_INTEL,
 		.device		= PCI_DEVICE_ID_INTEL_BYT_SDIO,
+		.subvendor	= PCI_VENDOR_ID_NI,
+		.subdevice	= 0x7884,
+		.driver_data	= (kernel_ulong_t)&sdhci_ni_byt_sdio,
+	},
+
+	{
+		.vendor		= PCI_VENDOR_ID_INTEL,
+		.device		= PCI_DEVICE_ID_INTEL_BYT_SDIO,
 		.subvendor	= PCI_ANY_ID,
 		.subdevice	= PCI_ANY_ID,
 		.driver_data	= (kernel_ulong_t)&sdhci_intel_byt_sdio,
-- 
2.7.4

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

* [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio controller sub-vended by NI
  2016-11-21 23:04 [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Zach Brown
  2016-11-21 23:04 ` [PATCH 1/2] mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller sub-vended by NI Zach Brown
@ 2016-11-21 23:04 ` Zach Brown
  2016-11-22  6:46   ` Adrian Hunter
  2016-11-22  8:24   ` Ulf Hansson
  2016-11-22  8:27 ` [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Ulf Hansson
  2 siblings, 2 replies; 8+ messages in thread
From: Zach Brown @ 2016-11-21 23:04 UTC (permalink / raw)
  To: ulf.hansson; +Cc: adrian.hunter, linux-mmc, linux-kernel, zach.brown

On NI 9037 boards the max SDIO frequency is limited by trace lengths
and other layout choices. The max SDIO frequency is stored in an ACPI
table.

The driver reads the ACPI entry MXFQ during sdio_probe_slot and sets the
f_max field of the host.

Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
Reviewed-by: Jaeden Amero <jaeden.amero@ni.com>
Reviewed-by: Josh Cartwright <joshc@ni.com>
Signed-off-by: Zach Brown <zach.brown@ni.com>
---
 drivers/mmc/host/sdhci-pci-core.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
index 9741505..a855c97 100644
--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -27,6 +27,7 @@
 #include <linux/pm_runtime.h>
 #include <linux/mmc/slot-gpio.h>
 #include <linux/mmc/sdhci-pci-data.h>
+#include <linux/acpi.h>
 
 #include "sdhci.h"
 #include "sdhci-pci.h"
@@ -377,6 +378,20 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
 
 static int ni_byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
 {
+#ifdef CONFIG_ACPI
+	acpi_status status;
+	unsigned long long max_freq;
+
+	status = acpi_evaluate_integer(ACPI_HANDLE(&slot->chip->pdev->dev),
+				       "MXFQ", NULL, &max_freq);
+	if (ACPI_FAILURE(status)) {
+		dev_info(&slot->chip->pdev->dev,
+			"MXFQ not found in acpi table\n");
+		return -EINVAL;
+	}
+
+	slot->host->mmc->f_max = max_freq * 1000000;
+#endif
 	slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE |
 				 MMC_CAP_WAIT_WHILE_BUSY;
 	return 0;
-- 
2.7.4

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

* Re: [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio controller sub-vended by NI
  2016-11-21 23:04 ` [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio " Zach Brown
@ 2016-11-22  6:46   ` Adrian Hunter
  2016-11-22  8:24   ` Ulf Hansson
  1 sibling, 0 replies; 8+ messages in thread
From: Adrian Hunter @ 2016-11-22  6:46 UTC (permalink / raw)
  To: Zach Brown, ulf.hansson; +Cc: linux-mmc, linux-kernel

On 22/11/16 01:04, Zach Brown wrote:
> On NI 9037 boards the max SDIO frequency is limited by trace lengths
> and other layout choices. The max SDIO frequency is stored in an ACPI
> table.
> 
> The driver reads the ACPI entry MXFQ during sdio_probe_slot and sets the
> f_max field of the host.
> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Reviewed-by: Jaeden Amero <jaeden.amero@ni.com>
> Reviewed-by: Josh Cartwright <joshc@ni.com>
> Signed-off-by: Zach Brown <zach.brown@ni.com>
> ---
>  drivers/mmc/host/sdhci-pci-core.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
> index 9741505..a855c97 100644
> --- a/drivers/mmc/host/sdhci-pci-core.c
> +++ b/drivers/mmc/host/sdhci-pci-core.c
> @@ -27,6 +27,7 @@
>  #include <linux/pm_runtime.h>
>  #include <linux/mmc/slot-gpio.h>
>  #include <linux/mmc/sdhci-pci-data.h>
> +#include <linux/acpi.h>
>  
>  #include "sdhci.h"
>  #include "sdhci-pci.h"
> @@ -377,6 +378,20 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
>  
>  static int ni_byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
>  {
> +#ifdef CONFIG_ACPI
> +	acpi_status status;
> +	unsigned long long max_freq;
> +
> +	status = acpi_evaluate_integer(ACPI_HANDLE(&slot->chip->pdev->dev),
> +				       "MXFQ", NULL, &max_freq);
> +	if (ACPI_FAILURE(status)) {
> +		dev_info(&slot->chip->pdev->dev,

Doesn't it error out the whole probe.  So it should be dev_err()

> +			"MXFQ not found in acpi table\n");
> +		return -EINVAL;
> +	}
> +
> +	slot->host->mmc->f_max = max_freq * 1000000;
> +#endif
>  	slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE |
>  				 MMC_CAP_WAIT_WHILE_BUSY;
>  	return 0;
> 

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

* Re: [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio controller sub-vended by NI
  2016-11-21 23:04 ` [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio " Zach Brown
  2016-11-22  6:46   ` Adrian Hunter
@ 2016-11-22  8:24   ` Ulf Hansson
  1 sibling, 0 replies; 8+ messages in thread
From: Ulf Hansson @ 2016-11-22  8:24 UTC (permalink / raw)
  To: Zach Brown; +Cc: Adrian Hunter, linux-mmc, linux-kernel

On 22 November 2016 at 00:04, Zach Brown <zach.brown@ni.com> wrote:
> On NI 9037 boards the max SDIO frequency is limited by trace lengths
> and other layout choices. The max SDIO frequency is stored in an ACPI
> table.
>
> The driver reads the ACPI entry MXFQ during sdio_probe_slot and sets the
> f_max field of the host.
>
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Reviewed-by: Jaeden Amero <jaeden.amero@ni.com>
> Reviewed-by: Josh Cartwright <joshc@ni.com>
> Signed-off-by: Zach Brown <zach.brown@ni.com>
> ---
>  drivers/mmc/host/sdhci-pci-core.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
> index 9741505..a855c97 100644
> --- a/drivers/mmc/host/sdhci-pci-core.c
> +++ b/drivers/mmc/host/sdhci-pci-core.c
> @@ -27,6 +27,7 @@
>  #include <linux/pm_runtime.h>
>  #include <linux/mmc/slot-gpio.h>
>  #include <linux/mmc/sdhci-pci-data.h>
> +#include <linux/acpi.h>
>
>  #include "sdhci.h"
>  #include "sdhci-pci.h"
> @@ -377,6 +378,20 @@ static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
>
>  static int ni_byt_sdio_probe_slot(struct sdhci_pci_slot *slot)
>  {
> +#ifdef CONFIG_ACPI

I am not a fan of these kind of "ifdefs" immediately in the code. I
rather see them around functions.

Either separate the code within the ifdefs here into it's own function
(and call it from here) and make a stub function in case when
CONFIG_ACPI is unset. Or, perhaps easier, have one version of
ni_byt_sdio_probe_slot() when CONFIG_ACPI is set and another one when
it's unset.


> +       acpi_status status;
> +       unsigned long long max_freq;
> +
> +       status = acpi_evaluate_integer(ACPI_HANDLE(&slot->chip->pdev->dev),
> +                                      "MXFQ", NULL, &max_freq);
> +       if (ACPI_FAILURE(status)) {
> +               dev_info(&slot->chip->pdev->dev,
> +                       "MXFQ not found in acpi table\n");
> +               return -EINVAL;
> +       }
> +
> +       slot->host->mmc->f_max = max_freq * 1000000;
> +#endif
>         slot->host->mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_NONREMOVABLE |
>                                  MMC_CAP_WAIT_WHILE_BUSY;
>         return 0;
> --
> 2.7.4
>

Kind regards
Uffe

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

* Re: [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host
  2016-11-21 23:04 [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Zach Brown
  2016-11-21 23:04 ` [PATCH 1/2] mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller sub-vended by NI Zach Brown
  2016-11-21 23:04 ` [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio " Zach Brown
@ 2016-11-22  8:27 ` Ulf Hansson
  2016-11-22 16:37   ` Zach Brown
  2 siblings, 1 reply; 8+ messages in thread
From: Ulf Hansson @ 2016-11-22  8:27 UTC (permalink / raw)
  To: Zach Brown; +Cc: Adrian Hunter, linux-mmc, linux-kernel

On 22 November 2016 at 00:04, Zach Brown <zach.brown@ni.com> wrote:
> On some boards, max SDIO frequency is limited by trace lengths and other layout
> choices. We would like a way to specify this limitation so the driver can
> behave accordingly.
>
> This patch set assumes that the limitation has been reported in an ACPI table
> which the driver can check to get the max frequency.
>
> The first patch creates a PCI ID and support for the Intel byt sdio where NI is
> the subvendor.
>
> The second patch uses the ACPI table to set f_max during the new
> ni_byt_sdio_probe_slot.
>
>
> Zach Brown (2):
>   mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller
>     sub-vended by NI
>   mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio
>     controller sub-vended by NI
>
>  drivers/mmc/host/sdhci-pci-core.c | 39 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
>
> --
> 2.7.4
>

Please try to not forget to bump the version number and to provide a
history of the what changes between revisions. It makes life easier
when reviewing and when I am about to apply patches.

Kind regards
Uffe

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

* Re: [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host
  2016-11-22  8:27 ` [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Ulf Hansson
@ 2016-11-22 16:37   ` Zach Brown
  2016-11-22 17:30     ` Ulf Hansson
  0 siblings, 1 reply; 8+ messages in thread
From: Zach Brown @ 2016-11-22 16:37 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: Adrian Hunter, linux-mmc, linux-kernel

On Tue, Nov 22, 2016 at 09:27:29AM +0100, Ulf Hansson wrote:
>
> Please try to not forget to bump the version number and to provide a
> history of the what changes between revisions. It makes life easier
> when reviewing and when I am about to apply patches.
>

Sorry, I'll make sure to include a history.
When switching from RFC to PATCH should the version number of the PATCH
be 1 or the lastest RFC version plus 1? Or does it not matter either way
as long as the history is present?

--
Zach

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

* Re: [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host
  2016-11-22 16:37   ` Zach Brown
@ 2016-11-22 17:30     ` Ulf Hansson
  0 siblings, 0 replies; 8+ messages in thread
From: Ulf Hansson @ 2016-11-22 17:30 UTC (permalink / raw)
  To: Zach Brown; +Cc: Adrian Hunter, linux-mmc, linux-kernel

On 22 November 2016 at 17:37, Zach Brown <zach.brown@ni.com> wrote:
> On Tue, Nov 22, 2016 at 09:27:29AM +0100, Ulf Hansson wrote:
>>
>> Please try to not forget to bump the version number and to provide a
>> history of the what changes between revisions. It makes life easier
>> when reviewing and when I am about to apply patches.
>>
>
> Sorry, I'll make sure to include a history.
> When switching from RFC to PATCH should the version number of the PATCH
> be 1 or the lastest RFC version plus 1? Or does it not matter either way

RFC + 1, that would be best. Although it doesn't matter that much.

> as long as the history is present?

Yes, this is the most important part.

Kind regards
Uffe

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

end of thread, other threads:[~2016-11-22 17:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-21 23:04 [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Zach Brown
2016-11-21 23:04 ` [PATCH 1/2] mmc: sdhci-pci: Add PCI ID for Intel byt sdio host controller sub-vended by NI Zach Brown
2016-11-21 23:04 ` [PATCH 2/2] mmc: sdhci-pci: Use ACPI to get max frequency for Intel byt sdio " Zach Brown
2016-11-22  6:46   ` Adrian Hunter
2016-11-22  8:24   ` Ulf Hansson
2016-11-22  8:27 ` [PATCH 0/2] mmc: sdhci-pci: Use ACPI to set max frequency of sdio host Ulf Hansson
2016-11-22 16:37   ` Zach Brown
2016-11-22 17:30     ` Ulf Hansson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).