Re: [BUG] CMD52 sent as first command not CMD0

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

 



On Feb 6, 2011, at 3:13 AM, Albert Herranz wrote:

> Hi,
> 
> On 02/06/2011 02:35 AM, Philip Rakity wrote:
>> 
>> proposed solution:  I cannot verify this fix until Monday.
>> =====
>> 
>> CMD52 is a reset for SDIO cards.  CMD0 is not sufficient when
>> the card is being re-initialized.  Only send CMD52 if
>> a) doing a reinitialize
>> b) card is SDIO or SDIO_COMBO
>> 
>> Signed-off-by: Philip Rakity <prakity@xxxxxxxxxxx>
>> ---
>> drivers/mmc/core/core.c |    7 ++++++-
>> 1 files changed, 6 insertions(+), 1 deletions(-)
>> 
>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>> index 30d4da4..f0ce6f6 100644
>> --- a/drivers/mmc/core/core.c
>> +++ b/drivers/mmc/core/core.c
>> @@ -1521,7 +1521,12 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
>> 		mmc_hostname(host), __func__, host->f_init);
>> #endif
>> 	mmc_power_up(host);
>> -	sdio_reset(host);
>> +
>> +	/* reset sdio before CMD0 when card is being reinitialized */
>> +	if (host->card &&
>> +		(host->card->type == MMC_TYPE_SDIO ||
>> +		host->card->type == MMC_TYPE_SD_COMBO))
>> +			sdio_reset(host);
>> 	mmc_go_idle(host);
>> 	mmc_hwungate_clock(host);
>> 
> 
> At least on the Nintendo Wii, a platform reset _does not_ reset the SDIO hardware, and there is no known way to power-off/power-on it.
> So, in some cases like after a system reboot, we need to issue a CMD52 before a CMD0 (even if on that particular case host->card is NULL) to properly reset the Nintendo Wii SDIO-based Wireless LAN card from its previous state, otherwise the card is not detected.
> 
> The proposed fix breaks this and makes the card unavailable after a system reboot.
> 
> If you are concerned about unconditionally issuing a CMD52 then we can use a quirk to make sure that we always perform a SDIO reset at least for the Nintendo Wii.

Would be happy with either a quirk or comment in the code.   Comment seems easiest.

/* sdhci_reset will generate CMD52 to reset card.  SD/eMMC cards are ignore this */

or something like that.
> 
> Cheers,
> Albert



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