Re: [PATCH] mmc: core: Use maximum timeout values in case TACC field is zero

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

 



Hi Ulf,

Am 02.04.2014 13:25, schrieb Ulf Hansson:
> On 27 March 2014 16:32, Stefan Wahren <stefan.wahren@xxxxxxxx> wrote:
>> When plugging a specific micro SD card at MMC socket of a custom i.MX28 board,
>> we get the following kernel warning:
>>
>> WARNING: CPU: 0 PID: 30 at drivers/mmc/host/mxs-mmc.c:342 mxs_mmc_start_cmd+0x34c/0x378()
>> Modules linked in:
>> CPU: 0 PID: 30 Comm: kworker/u2:1 Not tainted 3.14.0-rc5 #8
>> Workqueue: kmmcd mmc_rescan
>> [<c0015420>] (unwind_backtrace) from [<c0012cb0>] (show_stack+0x10/0x14)
>> [<c0012cb0>] (show_stack) from [<c001daf8>] (warn_slowpath_common+0x6c/0x8c)
>> [<c001daf8>] (warn_slowpath_common) from [<c001db34>] (warn_slowpath_null+0x1c/0x24)
>> [<c001db34>] (warn_slowpath_null) from [<c0349478>] (mxs_mmc_start_cmd+0x34c/0x378)
>> [<c0349478>] (mxs_mmc_start_cmd) from [<c0338fa0>] (mmc_start_request+0xc4/0xf4)
>> [<c0338fa0>] (mmc_start_request) from [<c03390b4>] (mmc_wait_for_req+0x50/0x164)
>> [<c03390b4>] (mmc_wait_for_req) from [<c03405b8>] (mmc_app_send_scr+0x158/0x1c8)
>> [<c03405b8>] (mmc_app_send_scr) from [<c033ee1c>] (mmc_sd_setup_card+0x80/0x3c8)
>> [<c033ee1c>] (mmc_sd_setup_card) from [<c033f788>] (mmc_sd_init_card+0x124/0x66c)
>> [<c033f788>] (mmc_sd_init_card) from [<c033fd7c>] (mmc_attach_sd+0xac/0x174)
>> [<c033fd7c>] (mmc_attach_sd) from [<c033a658>] (mmc_rescan+0x25c/0x2d8)
>> [<c033a658>] (mmc_rescan) from [<c003597c>] (process_one_work+0x1b4/0x4ec)
>> [<c003597c>] (process_one_work) from [<c0035de4>] (worker_thread+0x130/0x464)
>> [<c0035de4>] (worker_thread) from [<c003c824>] (kthread+0xb4/0xd0)
>> [<c003c824>] (kthread) from [<c000f420>] (ret_from_fork+0x14/0x34)
>>
>> The error is due to an invalid value in CSD register of a specific 2GB micro
>> SD card. The CSD version of this card is 1.0 but the TACC field has the invalid
>> value 0. Since the kernel is making use of this TACC field to calculate the
>> SD card timeout, an invalid value 0 leads to a warning at mxs_ns_to_ssp_ticks()
>> and later the following misleading error messages appears in a loop:
>>
>> mxs-mmc 80010000.ssp: card claims to support voltages below defined range
>> mxs-mmc 80010000.ssp: no support for card's volts
>> mmc0: error -22 whilst initialising MMC card
>>
>> This error is only found on this 2GB SD card on mxs platform.
>> On x86 this card works without any problems.
>>
>> The following patch based on the work of Peter Chen and Otavio Salvador. It
>> catches the case that the determined timeout is still 0 and set it's to a
>> valid value.
>>
>> Successful tested on a i.MX28 board.
>>
>> Signed-off-by: Stefan Wahren <stefan.wahren@xxxxxxxx>
>> ---
>>  drivers/mmc/core/core.c |    4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>> index 098374b..a9cd996 100644
>> --- a/drivers/mmc/core/core.c
>> +++ b/drivers/mmc/core/core.c
>> @@ -815,6 +815,10 @@ void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card)
>>                         data->timeout_ns = limit_us * 1000;
>>                         data->timeout_clks = 0;
>>                 }
>> +
>> +               /* assign limit value if invalid */
>> +               if (data->timeout_ns == 0)
> Shouldn't you be checking the local variable "timeout_us" instead?

you're right.

> Or are you saying that tacc_clks is correct for this SD card but not tacc_ns?

No, like many other of the fields they are zero (here is a dump with
this specific sd card):

root@duckbill:/sys/class/block/mmcblk0/device# grep "" * 2>/dev/null
cid:0000005553442020000000000000583f
csd:00000032535a83bfedb7ffbf1680003f
date:08/2005
erase_size:512
fwrev:0x0
hwrev:0x0
manfid:0x000000
name:USD
oemid:0x0000
preferred_erase_size:4194304
scr:0225000000000000
serial:0x00000000
type:SD
uevent:DRIVER=mmcblk
uevent:MMC_TYPE=SD
uevent:MMC_NAME=USD
uevent:MODALIAS=mmc:block

May be this has an influence on your preferred option.

Thanks for your feedback.

Best regards
Stefan Wahren

>
> We also have MMC_QUIRK_LONG_READ_TIME. Inventing one for WRITE as well
> and then add this card for both quirks is another option to solve the
> problem. Not sure which one I prefer yet. :-)
>
> Kind regards
> Ulf Hansson
>
>> +                       data->timeout_ns = limit_us * 1000;
>>         }
>>
>>         /*
>> --
>> 1.7.10.4
>>
>> --
>> 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
> --
> 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


-- 
Software-Entwickler / software developer

I2SE GmbH                           Tel: +49 (0) 341 355667-00
Friedrich-Ebert-Str. 61             Fax: +49 (0) 341 355667-02
04109 Leipzig
Germany
Web: http://www.i2se.com/           Mail: info@xxxxxxxx
VAT No.: DE 811528334
Amtsgericht Leipzig HRB 23784
Geschäftsführer/CEO: Carsten Ziermann

*** Diese E-Mail ist allein für den bezeichneten Adressaten bestimmt. Sie kann rechtlich vertrauliche Informationen enthalten. Wenn Sie diese E-Mail irrtümlich erhalten haben, informieren Sie bitte unverzüglich den Absender per E-Mail und löschen Sie diese E-Mail von Ihrem Computer, ohne Kopien anzufertigen.
Vielen Dank. ***

*** This email is for the exclusive use of the addressee. It may contain legally privileged information. If you have received this message in error, please notify the sender by email immediately and delete the message from your computer without making any copies.
Thank you. ***

--
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