tmio_mmc: Make ack_mmc_irqs() write-only
Subsystems (2)
PATCH 1/1 tmio_mmc: Make ack_mmc_irqs() write-only
This patch updates ack_mmc_irqs() to acknowledge using write instead of read-modify-write. Without this fix the old read-modify-write implementation may acknowledge interrupt sources by mistake. The driver may if so lock-up waiting forever for an interrupt that will never come. Observed with the TMIO_STAT_RXRDY bit together with CMD53 on AR6002 and BCM4318 SDIO cards in polled mode.
--- drivers/mmc/host/tmio_mmc.h | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-)
drivers/mmc/host/tmio_mmc.h +1 -4
@@ -82,10 +82,7 @@#define ack_mmc_irqs (host, i) \ do { \ - u32 mask;\ - mask = sd_ctrl_read32((host), CTL_STATUS); \ - mask &= ~((i) & TMIO_MASK_IRQ); \ - sd_ctrl_write32((host), CTL_STATUS, mask); \ + sd_ctrl_write32((host), CTL_STATUS, ~(i)); \ } while (0)
Signature · 1 line
1.7.0
2010/7/20 Yusuke Goda <[email protected]>:
Quoted 8 lines
This patch updates
ack_mmc_irqs()to acknowledge using write instead of read-modify-write. Without this fix the old read-modify-write implementation may acknowledge interrupt sources by mistake. The driver may if so lock-up waiting forever for an interrupt that will never come. Observed with theTMIO_STAT_RXRDYbit together with CMD53 on AR6002 and BCM4318 SDIO cards in polled mode.Signed-off-by Yusuke Goda <[email protected]>
Simple testing with a BCM4318 card and a MMC card on sh7372 and SDHI shows no problems.
Am 20.07.2010 09:51, schrieb Yusuke Goda:
Quoted 8 lines
This patch updates
ack_mmc_irqs()to acknowledge using write instead of read-modify-write. Without this fix the old read-modify-write implementation may acknowledge interrupt sources by mistake. The driver may if so lock-up waiting forever for an interrupt that will never come. Observed with theTMIO_STAT_RXRDYbit together with CMD53 on AR6002 and BCM4318 SDIO cards in polled mode.Signed-off-by Yusuke Goda <[email protected]>
Tested on AP4EVB (sh7372) with SDHC and MMC cards - no regression.
Quoted 8 lines · Arnd Hannemann
Am 20.07.2010 09:51, schrieb Yusuke Goda:
Quoted 7 lines
This patch updates
ack_mmc_irqs()to acknowledge using write instead of read-modify-write. Without this fix the old read-modify-write implementation may acknowledge interrupt sources by mistake. The driver may if so lock-up waiting forever for an interrupt that will never come. Observed with theTMIO_STAT_RXRDYbit together with CMD53 on AR6002 and BCM4318 SDIO cards in polled mode.
Quoted 5 lines
Quoted 1 line
Signed-off-by Yusuke Goda <[email protected]>Tested on AP4EVB (sh7372) with SDHC and MMC cards - no regression.
Tested-by Arnd Hannemann <[email protected]>
Thanks, Arnd!
Andrew, is there anything you need to (re)pick-up this patch?
At the current point this patch has:
Ian Molton also gave his "Acked-by" in a different email thread, please see below:
Quoted 13 lines · Ian Molton
Right now, the docs in question are on my dead fileserver.
Given that, I'll say two things:
1) Its safe to assume anywhere that does a RMW does it because my original docs said so. I dont recall having ever "just done it because I had to" when I wrote this.
2) The code as is is clearly broken.I'm not really sure what to do about this. It got made 'doubly broken' when we added asic3 support because it was the first platform added where you couldnt just do a 32 bit RMW on the pair of registers.
Quoted 8 lines
I'm inclined to say "Go Go Go" and see if anything breaks on this one. I cant see why the docs want it to be RMW as theres nothing stopping the hardware asserting an IRQ even if the CPU disables IRQs / did the RMW as an atomic op.
This one therefore,
Acked-by Ian Molton <[email protected]>
Thanks for the help everyone and sorry about the confused state of things.
/ magnus