• Sergei Shtylyov's avatar
    sata_rcar: fix interrupt handling · 52a2a108
    Sergei Shtylyov authored
    The driver's interrupt handling code is too picky in deciding whether it should
    handle an interrupt or not which causes completely unneeded spurious interrupts.
    Thus make sata_rcar_{ata|serr}_interrupt() *void*; add ATA status register read
    to sata_rcar_ata_interrupt() to clear an unexpected ATA interrupt -- it doesn't
    get cleared by writing to the SATAINTSTAT register in the interrupt mode we use.
    
    Also, in sata_rcar_ata_interrupt() we should check SATAINTSTAT register only for
    enabled interrupts and we should clear  only those interrupts  that we have read
    as active first time around, because else we have  a  race and risk clearing  an
    interrupt that  can  occur between read  and write of the  SATAINTSTAT  register
    and never registering it...
    Signed-off-by: default avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: stable@vger.kernel.org
    52a2a108
sata_rcar.c 23.3 KB