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