From: Aaron Lu <aaron.lwe@gmail.com>
To: Arend van Spriel <arend@broadcom.com>
Cc: Philip Rakity <prakity@marvell.com>,
linux-mmc@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: v3.6-rc1: modprobe hangs with sdhci failure on dell e6410
Date: Thu, 23 Aug 2012 13:10:37 +0800 [thread overview]
Message-ID: <5035BB4D.4020900@gmail.com> (raw)
In-Reply-To: <5034E895.4050105@broadcom.com>
On 08/22/2012 10:11 PM, Arend van Spriel wrote:
> A quick search using google did not provide clues. Regardless if there
> is anything inserted the hang occurs.
your dmesg shows:
[ 241.908294] INFO: task modprobe:134 blocked for more than 120 seconds.
[ 241.908298] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 241.908301] modprobe D f48abbcc 0 134 98 0x00000000
[ 241.908307] f48abc3c 00000082 f59d0ebc f48abbcc c1289228 00000000 f4f3e480 c17b0380
[ 241.908313] c17b0380 c17b0380 1de51926 00000000 c17b0380 f59d5380 f4f3e480 f4853ed0
[ 241.908319] 00000000 00000001 f48abc28 00000000 f59d0eb0 f4df3131 c17abe80 00000003
[ 241.908326] Call Trace:
[ 241.908337] [<c1289228>] ? timerqueue_add+0x58/0xb0
[ 241.908345] [<c14ca103>] schedule+0x23/0x60
[ 241.908349] [<c14c8f5f>] schedule_hrtimeout_range_clock+0xaf/0x130
[ 241.908354] [<c105b4f0>] ? update_rmtp+0x80/0x80
[ 241.908359] [<c105c796>] ? hrtimer_start_range_ns+0x26/0x30
[ 241.908362] [<c14c8ff7>] schedule_hrtimeout_range+0x17/0x20
[ 241.908369] [<c10462c9>] usleep_range+0x39/0x40
[ 241.908384] [<f8030b39>] sdhci_do_start_signal_voltage_switch+0x59/0x150 [sdhci]
[ 241.908390] [<f8030c71>] sdhci_start_signal_voltage_switch+0x41/0x80 [sdhci]
[ 241.908401] [<f805ded8>] mmc_set_signal_voltage+0x58/0xb0 [mmc_core]
[ 241.908411] [<f805e105>] mmc_power_up+0x85/0xf0 [mmc_core]
[ 241.908420] [<f805e1a8>] mmc_start_host+0x38/0x50 [mmc_core]
[ 241.908430] [<f805f4b0>] mmc_add_host+0x50/0x90 [mmc_core]
[ 241.908436] [<f8031b37>] sdhci_add_host+0x837/0xbc0 [sdhci]
[ 241.908444] [<f807f10a>] sdhci_pci_probe+0x3fc/0x5f0 [sdhci_pci]
[ 241.908449] [<c14cac5f>] ? _raw_spin_lock_irqsave+0x2f/0x50
[ 241.908455] [<c12a5407>] local_pci_probe+0x47/0xb0
[ 241.908460] [<c12a6458>] pci_device_probe+0x68/0x90
[ 241.908467] [<c1337c48>] driver_probe_device+0x78/0x1f0
[ 241.908471] [<c12a5393>] ? pci_match_device+0xb3/0xc0
[ 241.908476] [<c1337e41>] __driver_attach+0x81/0x90
[ 241.908480] [<c1336613>] bus_for_each_dev+0x53/0x80
[ 241.908484] [<c1337abe>] driver_attach+0x1e/0x20
[ 241.908488] [<c1337dc0>] ? driver_probe_device+0x1f0/0x1f0
[ 241.908491] [<c1337512>] bus_add_driver+0xb2/0x230
[ 241.908495] [<c12a62d0>] ? pci_dev_put+0x20/0x20
[ 241.908499] [<c12a62d0>] ? pci_dev_put+0x20/0x20
[ 241.908502] [<c133841a>] driver_register+0x6a/0x140
[ 241.908509] [<c10be41b>] ? tracepoint_module_notify+0x12b/0x190
[ 241.908514] [<c12a6694>] __pci_register_driver+0x44/0xb0
[ 241.908522] [<f8086017>] sdhci_drv_init+0x17/0x19 [sdhci_pci]
[ 241.908526] [<c1001114>] do_one_initcall+0x34/0x170
[ 241.908532] [<f8086000>] ? 0xf8085fff
[ 241.908539] [<c1090c3e>] sys_init_module+0xee/0x1460
[ 241.908542] [<c108f620>] ? free_notes_attrs+0x50/0x50
[ 241.908549] [<f8073000>] ? 0xf8072fff
[ 241.908556] [<c14d175f>] sysenter_do_call+0x12/0x28
Looks like the usleep_range called in
sdhci_do_start_signal_voltage_switch blocked modprobe, maybe the timeout
never happens for whatever reason?
Can you please try the following patch:
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 8ac5246..30ce05d 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1212,6 +1212,9 @@ static void mmc_power_up(struct mmc_host *host)
host->ios.timing = MMC_TIMING_LEGACY;
mmc_set_ios(host);
+ /* debug */
+ usleep_range(5000, 5500);
+
/* Set signal voltage to 3.3V */
mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, false);
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 9a11dc3..a181c46 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1616,7 +1616,8 @@ static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host,
* to 3.3V. If so, we change the voltage to 3.3V and return quickly.
*/
ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
- if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
+ if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330 &&
+ (ctrl & SDHCI_CTRL_VDD_180)) {
/* Set 1.8V Signal Enable in the Host Control2 register to 0 */
ctrl &= ~SDHCI_CTRL_VDD_180;
sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
The above code did 2 things:
1 calling usleep_range in another place to see what happened;
2 avoid setting 3.3v signalling voltage if host is already at 3.3v
signalling voltage.
Thanks,
Aaron
next prev parent reply other threads:[~2012-08-23 5:11 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-22 14:11 v3.6-rc1: modprobe hangs with sdhci failure on dell e6410 Arend van Spriel
2012-08-23 5:10 ` Aaron Lu [this message]
2012-08-23 14:58 ` Aaron Lu
2012-08-24 8:24 ` Arend van Spriel
2012-08-24 19:58 ` Arend van Spriel
[not found] ` <35709C36-C251-4701-965A-D3B5DBD6B66A@marvell.com>
2012-08-26 8:03 ` Arend van Spriel
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=5035BB4D.4020900@gmail.com \
--to=aaron.lwe@gmail.com \
--cc=arend@broadcom.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=prakity@marvell.com \
/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.