From: Matthieu CASTET <matthieu.castet@parrot.com>
To: <pierre@ossman.eu>
Cc: <sdhci-devel@lists.ossman.eu>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: sdhci can turn off irq up to 200 ms
Date: Thu, 9 Jul 2009 12:28:01 +0200 [thread overview]
Message-ID: <4A55C631.7030103@parrot.com> (raw)
In-Reply-To: <4A4B6184.7000903@parrot.com>
[-- Attachment #1: Type: text/plain, Size: 733 bytes --]
Matthieu CASTET a écrit :
> Hi,
>
> sdhci code got tasklets (sdhci_tasklet_card and sdhci_tasklet_finish),
> that does :
> {
> spin_lock_irqsave
>
> if (cond) {
> sdhci_reset
> sdhci_reset
> }
>
> spin_unlock_irqrestore
> }
>
> The problem is that sdhci_reset [1] does busy pooling on a register up
> to a timeout of 100 ms.
> That's not low latency friendly.
>
> On our system, we saw that sdhci_reset take 1 ms. That should be because
> we enter in mdelay, even if the hardware clears the bit faster.
> I wonder why there is an mdelay(1). Using cpu_relax and
> time_is_after_jiffies should make sdhci_reset faster.
>
In case somebody cares, here a patch that reduce on our hardware
sdhci_reset from 1 ms to 30 us.
Matthieu
[-- Attachment #2: sdhci.diff --]
[-- Type: text/x-diff, Size: 763 bytes --]
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 6779b4e..3e199b6 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -156,18 +156,17 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
host->clock = 0;
/* Wait max 100 ms */
- timeout = 100;
+ timeout = jiffies + msecs_to_jiffies(100);
/* hw clears the bit when it's done */
while (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) {
- if (timeout == 0) {
+ if (time_is_before_jiffies(timeout)) {
printk(KERN_ERR "%s: Reset 0x%x never completed.\n",
mmc_hostname(host->mmc), (int)mask);
sdhci_dumpregs(host);
return;
}
- timeout--;
- mdelay(1);
+ cpu_relax();
}
if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
next prev parent reply other threads:[~2009-07-09 10:28 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-01 13:15 sdhci can turn off irq up to 200 ms Matthieu CASTET
2009-07-09 10:28 ` Matthieu CASTET [this message]
2009-09-06 13:25 ` Pierre Ossman
2009-09-07 9:56 ` Matthieu CASTET
2009-09-07 16:59 ` Pierre Ossman
2009-09-08 8:56 ` Matthieu CASTET
[not found] <cT8cF-7kN-7@gated-at.bofh.it>
[not found] ` <cVZ3a-71r-5@gated-at.bofh.it>
2009-09-07 19:47 ` Daniel J Blueman
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=4A55C631.7030103@parrot.com \
--to=matthieu.castet@parrot.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pierre@ossman.eu \
--cc=sdhci-devel@lists.ossman.eu \
/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.