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
next prev parent reply other threads:[~2016-08-23 22:04 UTC|newest]
Thread overview: 13+ 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
2016-08-23 2:46 ` Frank Rowand
2016-08-23 22:19 ` Zach Brown
2016-08-23 22:19 ` 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 1:34 ` Haibo Chen
2016-08-23 22:04 ` Zach Brown [this message]
2016-08-23 6:22 ` Adrian Hunter
2016-08-23 6:22 ` Adrian Hunter
2016-08-23 22:14 ` Zach Brown
2016-08-23 22:14 ` Zach Brown
2016-08-24 6:16 ` Adrian Hunter
2016-08-24 6:16 ` Adrian Hunter
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 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.