It looks good to me.

Acked-by: Jaehoon Chung <jh80.ch...@samsung.com>

On 01/29/2013 11:47 PM, Lukasz Majewski wrote:
> Dear All,
> 
> Any feedback about this patch?
> 
>> This patch changes sdhci_init()'s behavior to NOT enable all interrupt
>> sources by default. Moreover interrupt signaling has been disabled.
>>
>> This patch do not enable interrupts which aren't served in u-boot
>> (they are defined at sdhci.h but NOT used elsewhere):
>> - SDHCI_INT_CARD_INSERT, SDHCI_INT_CARD_REMOVE, SDHCI_BUS_POWER,
>>   SDHCI_INT_CARD_REMOVE, SDHCI_INT_CARD_INT
>>
>> Special care shall be put on SDHCI_INT_CARD_INT, which indicates
>> interrupt generated by SD card.
>> According to "SD Host Controller Simplified Spec. ver 3.00" when bit 8
>> (Card Interrupt Status Enable) at "Normal Interrupt Status Enable
>> Register" (offset 0x34) is set, the card interrupt detection is
>> started. Then eMMC card may cause the SD controller to set this bit
>> and then this interrupt is passed to booted OS and might cause kernel
>> crash.
>>
>>
>> To sum up:
>> - Only enable interrupts, which are served at u-boot
>> - This cleanup as a side effect fixes SDHCI's CARD INTERRUPT problem
>> at Linux kernel (versions 3.6+, sdhci controller)
>> - Keep masked bits at "Normal Interrupt Signal Enable
>> Register" (0x38h)
>>
>> Signed-off-by: Lukasz Majewski <l.majew...@samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com>
>> Cc: Lei Wen <lei...@marvell.com>
>> Cc: Andy Fleming <aflem...@freescale.com>
>> ---
>>  drivers/mmc/sdhci.c |    8 +++++---
>>  1 files changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>> index 0fd1337..76c14fb 100644
>> --- a/drivers/mmc/sdhci.c
>> +++ b/drivers/mmc/sdhci.c
>> @@ -412,9 +412,11 @@ int sdhci_init(struct mmc *mmc)
>>                      status = sdhci_readl(host,
>> SDHCI_PRESENT_STATE); }
>>  
>> -    /* Eable all state */
>> -    sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_ENABLE);
>> -    sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_SIGNAL_ENABLE);
>> +    /* Enable only interrupts served by the SD controller */
>> +    sdhci_writel(host, SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK
>> +                 , SDHCI_INT_ENABLE);
>> +    /* Mask all sdhci interrupt sources */
>> +    sdhci_writel(host, 0x0, SDHCI_SIGNAL_ENABLE);
>>  
>>      return 0;
>>  }
> 
> 
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to