Re: [PATCH] mmc: core: Fix bug on signal voltage switch failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 1, 2016 at 12:59 PM, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
> On 31/03/16 17:17, Naveen Kumar Parna wrote:
>> When switching SD and SDIO cards from 3.3V to 1.8V signal level fails, a bug in sdhci_set_power() will trigger.
>> To fix the kernel crash during recovery from signal voltage switch failure, OCR should be reset to avail voltage mask before power-cycle the card.
>>
>> Signed-off-by: Naveen Kumar Parna <naveenkumar.parna@xxxxxxxxx>
>> ---
>>  drivers/mmc/core/core.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>> index f26a5f1..e7eb427 100644
>> --- a/drivers/mmc/core/core.c
>> +++ b/drivers/mmc/core/core.c
>> @@ -1477,6 +1477,8 @@ power_cycle:
>>       if (err) {
>>               pr_debug("%s: Signal voltage switch failed, "
>>                       "power cycling card\n", mmc_hostname(host));
>> +             /* Reset OCR mask */
>> +             ocr =  host->ocr_avail;
>>               mmc_power_cycle(host, ocr);
>>       }
>>
>>
>
>
> Is this the same as the following?
>
>
> commit d9bfbb95ed598a09cf336adb0f190ee0ff802f0d
> Author: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Date:   Thu Nov 26 14:00:47 2015 +0200
>
>     mmc: sdio: Fix invalid vdd in voltage switch power cycle
>
>     The 'ocr' parameter passed to mmc_set_signal_voltage()
>     defines the power-on voltage used when power cycling
>     after a failure to set the voltage.  However, in the
>     case of mmc_sdio_init_card(), the value passed has the
>     R4_18V_PRESENT flag set which is not valid for power-on
>     and results in an invalid vdd.  Fix by passing the card's
>     ocr value which does not have the flag.
>
>     Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
>     Cc: stable@xxxxxxxxxxxxxxx # v3.13+
>     Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
>


Yes, it is the same.

 [77342.349520] mmc0: clock 0Hz busmode 2 powermode 1 cs 0 Vdd 24
width 0 timing 0
 [77342.349561] ------------[ cut here ]------------
 [77342.349634] kernel BUG at
/build/buildd/linux-lts-utopic-3.16.0/drivers/mmc/host/sdhci.c:1242!
 [77342.349742] invalid opcode: 0000 [#1] SMP
 [77342.350677] CPU: 1 PID: 7673 Comm: kworker/u4:3 Tainted: G
W IOE 3.16.0-30-generic
 [77342.350968] Workqueue: kmmcd mmc_rescan
 [77342.351023] task: ffff8800b78b7010 ti: ffff8800b82fc000 task.ti:
ffff8800b82fc000
 [77342.351115] RIP: 0010:[<ffffffffc011ada8>]  [<ffffffffc011ada8>]
sdhci_do_set_ios+0x478/0x590 [sdhci]
 [77342.351242] RSP: 0018:ffff8800b82ffbd8  EFLAGS: 00010006
 [77342.351312] RAX: 0000000001000000 RBX: ffff8800b78ad500 RCX:
0000000000000018
 [77342.351400] RDX: ffffc9001074c000 RSI: 0000000000000000 RDI:
ffff8800b78ad500
 [77342.351488] RBP: ffff8800b82ffc08 R08: 0000000000000296 R09:
000000000005082c
 [77342.351576] R10: 0000000000000000 R11: ffff8800b82ff8a6 R12:
ffff8800b78ad33c
 [77342.351663] R13: ffff8800b78ad698 R14: 0000000000000296 R15:
0000000000000000
 [77342.351752] FS:  0000000000000000(0000) GS:ffff88013fd00000(0000)
knlGS:0000000000000000
 [77342.351853] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
 [77342.351925] CR2: 00000000017ca008 CR3: 0000000001c13000 CR4:
00000000000407e0
 [77342.352012] Stack:
 [77342.352013]  00188800b82ffc08 ffff8800b78ad000 ffff8800b78ad33c
0000000000000001
 [77342.352013]  0000000001200000 0000000000000000 ffff8800b82ffc28
ffffffffc011aef5
 [77342.352013]  ffff8800b78ad000 ffff8800b78ad33c ffff8800b82ffc70
ffffffff816001af
 [77342.352013] Call Trace:
 [77342.352013]  [<ffffffffc011aef5>] sdhci_set_ios+0x35/0x50 [sdhci]
 [77342.352013]  [<ffffffff816001af>] mmc_power_up+0x7f/0x2b0
 [77342.352013]  [<ffffffff8160055a>] mmc_power_cycle+0x3a/0x40
 [77342.352013]  [<ffffffff81600797>] mmc_set_signal_voltage+0x157/0x350
 [77342.352013]  [<ffffffff810b4e22>] ? complete_all+0x42/0x50
 [77342.352013]  [<ffffffff81607feb>] mmc_sdio_init_card+0x12b/0xbb0
 [77342.352013]  [<ffffffff81608f30>] mmc_attach_sdio+0x90/0x3e0
 [77342.352013]  [<ffffffff816010ab>] mmc_rescan+0x29b/0x320
 [77342.352013]  [<ffffffff81089ef2>] process_one_work+0x182/0x450
 [77342.352013]  [<ffffffff8108a663>] worker_thread+0x123/0x5a0
 [77342.352013]  [<ffffffff8108a540>] ? rescuer_thread+0x380/0x380
 [77342.352013]  [<ffffffff810912c2>] kthread+0xd2/0xf0
 [77342.352013]  [<ffffffff810911f0>] ? kthread_create_on_node+0x1c0/0x1c0
 [77342.352013]  [<ffffffff8176ac3c>] ret_from_fork+0x7c/0xb0
 [77342.352013]  [<ffffffff810911f0>] ? kthread_create_on_node+0x1c0/0x1c0
 [77342.352013] Code: 80 bb b6 01 00 00 00 0f 85 a2 fe ff ff 48 8b 43
38 c6 83 b6 01 00 00 01 48 8b 00 f0 ff 80 88 01 00 00 e9 88 fe ff ff
0f 1f 40 00 <0f> 0b 66 0f 1f 44 00 00 66 8b 52 2c 83 e2 fb 48 8b 4b 18
66 89
 [77342.352013] RIP  [<ffffffffc011ada8>] sdhci_do_set_ios+0x478/0x590 [sdhci]
 [77342.352013]  RSP <ffff8800b82ffbd8>
 [77342.397966] ---[ end trace 18d8c79ccd8e4e11 ]---

Thanks,
Naveen
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux