devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Zach Brown <zach.brown@ni.com>
To: Haibo Chen <haibo.chen@nxp.com>
Cc: "adrian.hunter@intel.com" <adrian.hunter@intel.com>,
	"ulf.hansson@linaro.org" <ulf.hansson@linaro.org>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] sdhci: Add quirk and device tree parameter to force SD test mode
Date: Tue, 23 Aug 2016 17:04:43 -0500	[thread overview]
Message-ID: <20160823220442.GA20351@zach-desktop> (raw)
In-Reply-To: <AM4PR0401MB2324D95AB7382C828BF8E5CE90EB0@AM4PR0401MB2324.eurprd04.prod.outlook.com>

On Tue, Aug 23, 2016 at 01:34:20AM +0000, Haibo Chen wrote:
> > -----Original Message-----
> > From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-
> > owner@vger.kernel.org] On Behalf Of Zach Brown
> > Sent: Tuesday, August 23, 2016 6:56 AM
> > To: adrian.hunter@intel.com
> > Cc: ulf.hansson@linaro.org; mark.rutland@arm.com; robh+dt@kernel.org;
> > linux-mmc@vger.kernel.org; devicetree@vger.kernel.org; linux-
> > kernel@vger.kernel.org
> > Subject: [PATCH] sdhci: Add quirk and device tree parameter to force SD test
> > mode
> > 
> > From: Jaeden Amero <jaeden.amero@ni.com>
> > 
> > On some devices, CD is broken so that we must force the SDHCI into test mode
> > and set CD, so that it always detects an SD card as present.
> > 
> > In order to get a device with broken CD working, we had previously always set
> > the SDHCI into test mode. Unfortunately, this had the side effect of making all
> > SD cards used with our Linux kernels undetectable and non-removable.
> 
> Why not use the poll mode? You can set the flag MMC_CAP_NEEDS_POLL, then 
> the mmc core will detect the card every second.
> 

We're using a Xilinx Zynq device. In an AR they state:
"Signals card detect (CDn) and write protect (WPn) are required for the Zynq SD
card interface to work." http://www.xilinx.com/support/answers/61064.html
So polling won't work, since the interface itself won't work unless CDn is on.
Test mode allows us to get the interface working with no CDn signal.


> > 
> > By making this "SD test mode" setting optional via a quirk, we can avoid this
> > side effect for devices other than the device with broken CD.
> > Additionally, we add a device parameter to sdhci-pltfm to allow all SDHCI
> > drivers to enable this quirk.
> > 
> > Signed-off-by: Jaeden Amero <jaeden.amero@ni.com>
> > Signed-off-by: Zach Brown <zach.brown@ni.com>
> > ---
> >  Documentation/devicetree/bindings/mmc/mmc.txt | 2 ++
> >  drivers/mmc/host/sdhci-pltfm.c                | 4 ++++
> >  drivers/mmc/host/sdhci.c                      | 9 +++++++++
> >  drivers/mmc/host/sdhci.h                      | 4 ++++
> >  4 files changed, 19 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt
> > b/Documentation/devicetree/bindings/mmc/mmc.txt
> > index 22d1e1f..3a9be41 100644
> > --- a/Documentation/devicetree/bindings/mmc/mmc.txt
> > +++ b/Documentation/devicetree/bindings/mmc/mmc.txt
> > @@ -52,6 +52,8 @@ Optional properties:
> >  - no-sdio: controller is limited to send sdio cmd during initialization
> >  - no-sd: controller is limited to send sd cmd during initialization
> >  - no-mmc: controller is limited to send mmc cmd during initialization
> > +- force-sd-cd-test-mode: card detection is broken on device, force cd
> > +test
> > +  enable and cd test inserted so host will always detect a card.
> > 
> >  *NOTE* on CD and WP polarity. To use common for all SD/MMC host
> > controllers line  polarity properties, we have to fix the meaning of the "normal"
> > and "inverted"
> > diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
> > index 1d17dcf..056d101 100644
> > --- a/drivers/mmc/host/sdhci-pltfm.c
> > +++ b/drivers/mmc/host/sdhci-pltfm.c
> > @@ -87,6 +87,10 @@ void sdhci_get_of_property(struct platform_device
> > *pdev)
> >  	if (of_get_property(np, "broken-cd", NULL))
> >  		host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
> > 
> > +	if (of_get_property(np, "force-sd-cd-test-mode", NULL))
> > +		host->quirks2 |=
> > +			SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE;
> > +
> >  	if (of_get_property(np, "no-1-8-v", NULL))
> >  		host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V;
> > 
> > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index
> > cd65d47..2f4c6f9 100644
> > --- a/drivers/mmc/host/sdhci.c
> > +++ b/drivers/mmc/host/sdhci.c
> > @@ -117,6 +117,15 @@ static inline bool sdhci_data_line_cmd(struct
> > mmc_command *cmd)  static void sdhci_set_card_detection(struct sdhci_host
> > *host, bool enable)  {
> >  	u32 present;
> > +	u8  ctrl;
> > +
> > +	if (host->quirks2 & SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE)
> > {
> > +		/* Put the card in test mode, with card inserted */
> > +		ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
> > +		ctrl |= SDHCI_CTRL_CD_TEST_INSERTED |
> > +			SDHCI_CTRL_CD_TEST_ENABLE;
> > +		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
> > +	}
> > 
> >  	if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
> >  	    !mmc_card_is_removable(host->mmc))
> > diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index
> > 0411c9f..dd609b2 100644
> > --- a/drivers/mmc/host/sdhci.h
> > +++ b/drivers/mmc/host/sdhci.h
> > @@ -84,6 +84,8 @@
> >  #define   SDHCI_CTRL_ADMA32	0x10
> >  #define   SDHCI_CTRL_ADMA64	0x18
> >  #define   SDHCI_CTRL_8BITBUS	0x20
> > +#define  SDHCI_CTRL_CD_TEST_INSERTED	0x40
> > +#define  SDHCI_CTRL_CD_TEST_ENABLE	0x80
> > 
> >  #define SDHCI_POWER_CONTROL	0x29
> >  #define  SDHCI_POWER_ON		0x01
> > @@ -422,6 +424,8 @@ struct sdhci_host {
> >  #define SDHCI_QUIRK2_ACMD23_BROKEN			(1<<14)
> >  /* Broken Clock divider zero in controller */
> >  #define SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN		(1<<15)
> > +/* Controller must support device with broken CD */
> > +#define SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE		(1<<16)
> > 
> >  	int irq;		/* Device IRQ */
> >  	void __iomem *ioaddr;	/* Mapped address */
> > --
> > 2.7.4
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the
> > body of a message to majordomo@vger.kernel.org More majordomo info at
> > http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-08-23 22:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-22 22:55 [PATCH] sdhci: Add quirk and device tree parameter to force SD test mode Zach Brown
     [not found] ` <1471906531-28668-1-git-send-email-zach.brown-acOepvfBmUk@public.gmane.org>
2016-08-23  1:34   ` Haibo Chen
2016-08-23 22:04     ` Zach Brown [this message]
2016-08-23  6:22   ` Adrian Hunter
2016-08-23 22:14     ` Zach Brown
2016-08-24  6:16       ` Adrian Hunter
2016-08-23  2:46 ` Frank Rowand
2016-08-23 22:19   ` Zach Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160823220442.GA20351@zach-desktop \
    --to=zach.brown@ni.com \
    --cc=adrian.hunter@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=haibo.chen@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).