Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1513917 > unrolled thread

[PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt

Started byZach Brown <zach.brown@ni.com>
First post2016-11-02 16:30 +0100
Last post2016-11-07 13:50 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt Zach Brown <zach.brown@ni.com> - 2016-11-02 16:30 +0100
    [PATCH v2 2/2] mmc: sdhci: Use sdhci-caps-mask and sdhci-caps to change the caps read during __sdhci_read_caps Zach Brown <zach.brown@ni.com> - 2016-11-02 16:30 +0100
    Re: [PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with  corrections provided by dt Ulf Hansson <ulf.hansson@linaro.org> - 2016-11-07 13:50 +0100

#1513917 — [PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt

FromZach Brown <zach.brown@ni.com>
Date2016-11-02 16:30 +0100
Subject[PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt
Message-ID<sz5Ed-80I-1@gated-at.bofh.it>
For various reasons the sdhci caps register can be incorrect. This patch set
introduces a general way to correct the bits when they are read to accurately
reflect the capabilties of the controller/board combo.

The first patch creates sdhci-caps and sdhci-caps-mask dt properties that
combined represent the correction to the sdhci caps register.

The second patch uses the new dt properties to correct the caps from the
register as they read during __sdhci_read_caps.

Changes from RFC:
 * /s/registers/register
 * Moved sdhci dt properties into new documentation file sdhci.txt
v2:
 * Fixed style issue, all branches of 'if' should have {}


Zach Brown (2):
  mmc: sdhci: dt: Add device tree properties sdhci-caps and
    sdhci-caps-mask
  mmc: sdhci: Use sdhci-caps-mask and sdhci-caps to change the caps read
        during __sdhci_read_caps

 Documentation/devicetree/bindings/mmc/sdhci.txt | 14 ++++++++++++++
 drivers/mmc/host/sdhci.c                        | 24 ++++++++++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mmc/sdhci.txt

-- 
2.7.4

[toc] | [next] | [standalone]


#1513918 — [PATCH v2 2/2] mmc: sdhci: Use sdhci-caps-mask and sdhci-caps to change the caps read during __sdhci_read_caps

FromZach Brown <zach.brown@ni.com>
Date2016-11-02 16:30 +0100
Subject[PATCH v2 2/2] mmc: sdhci: Use sdhci-caps-mask and sdhci-caps to change the caps read during __sdhci_read_caps
Message-ID<sz5Ed-80I-5@gated-at.bofh.it>
In reply to#1513917
The sdhci capabilities register can be incorrect. The sdhci-caps-mask
and sdhci-caps dt properties specify which bits of the register are
incorrect and what their values should be. This patch makes the sdhci
driver use those properties to correct the caps during
__sdhci_read_caps.

During __sdhci_read_caps
Use the sdhci-caps-mask property to turn off the incorrect bits of the
sdhci register after reading them.
Use the sdhci-caps to turn on bits after using sdhci-caps-mask to turn
off the incorrect ones.

Signed-off-by: Zach Brown <zach.brown@ni.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
 drivers/mmc/host/sdhci.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 1e25b01..eba5f39 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -22,6 +22,7 @@
 #include <linux/scatterlist.h>
 #include <linux/regulator/consumer.h>
 #include <linux/pm_runtime.h>
+#include <linux/of.h>
 
 #include <linux/leds.h>
 
@@ -2991,6 +2992,8 @@ static int sdhci_set_dma_mask(struct sdhci_host *host)
 void __sdhci_read_caps(struct sdhci_host *host, u16 *ver, u32 *caps, u32 *caps1)
 {
 	u16 v;
+	u64 dt_caps_mask = 0;
+	u64 dt_caps = 0;
 
 	if (host->read_caps)
 		return;
@@ -3005,18 +3008,35 @@ void __sdhci_read_caps(struct sdhci_host *host, u16 *ver, u32 *caps, u32 *caps1)
 
 	sdhci_do_reset(host, SDHCI_RESET_ALL);
 
+	of_property_read_u64(mmc_dev(host->mmc)->of_node,
+			     "sdhci-caps-mask", &dt_caps_mask);
+	of_property_read_u64(mmc_dev(host->mmc)->of_node,
+			     "sdhci-caps", &dt_caps);
+
 	v = ver ? *ver : sdhci_readw(host, SDHCI_HOST_VERSION);
 	host->version = (v & SDHCI_SPEC_VER_MASK) >> SDHCI_SPEC_VER_SHIFT;
 
 	if (host->quirks & SDHCI_QUIRK_MISSING_CAPS)
 		return;
 
-	host->caps = caps ? *caps : sdhci_readl(host, SDHCI_CAPABILITIES);
+	if (caps) {
+		host->caps = *caps;
+	} else {
+		host->caps = sdhci_readl(host, SDHCI_CAPABILITIES);
+		host->caps &= ~lower_32_bits(dt_caps_mask);
+		host->caps |= lower_32_bits(dt_caps);
+	}
 
 	if (host->version < SDHCI_SPEC_300)
 		return;
 
-	host->caps1 = caps1 ? *caps1 : sdhci_readl(host, SDHCI_CAPABILITIES_1);
+	if (caps1) {
+		host->caps1 = *caps1;
+	} else {
+		host->caps1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
+		host->caps1 &= ~upper_32_bits(dt_caps_mask);
+		host->caps1 |= upper_32_bits(dt_caps);
+	}
 }
 EXPORT_SYMBOL_GPL(__sdhci_read_caps);
 
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1516082 — Re: [PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt

FromUlf Hansson <ulf.hansson@linaro.org>
Date2016-11-07 13:50 +0100
SubjectRe: [PATCH v2 0/2] mmc: sdhci: Fix sdhci caps register bits with corrections provided by dt
Message-ID<sARx8-3aL-35@gated-at.bofh.it>
In reply to#1513917
On 2 November 2016 at 16:26, Zach Brown <zach.brown@ni.com> wrote:
> For various reasons the sdhci caps register can be incorrect. This patch set
> introduces a general way to correct the bits when they are read to accurately
> reflect the capabilties of the controller/board combo.
>
> The first patch creates sdhci-caps and sdhci-caps-mask dt properties that
> combined represent the correction to the sdhci caps register.
>
> The second patch uses the new dt properties to correct the caps from the
> register as they read during __sdhci_read_caps.
>
> Changes from RFC:
>  * /s/registers/register
>  * Moved sdhci dt properties into new documentation file sdhci.txt
> v2:
>  * Fixed style issue, all branches of 'if' should have {}
>
>
> Zach Brown (2):
>   mmc: sdhci: dt: Add device tree properties sdhci-caps and
>     sdhci-caps-mask
>   mmc: sdhci: Use sdhci-caps-mask and sdhci-caps to change the caps read
>         during __sdhci_read_caps
>
>  Documentation/devicetree/bindings/mmc/sdhci.txt | 14 ++++++++++++++
>  drivers/mmc/host/sdhci.c                        | 24 ++++++++++++++++++++++--
>  2 files changed, 36 insertions(+), 2 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/mmc/sdhci.txt
>
> --
> 2.7.4
>

Thanks, applied for next!

Kind regards
Uffe

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web