1. 02 Jun, 2013 1 commit
    • 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: 's avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: 's avatarTejun Heo <tj@kernel.org>
      Cc: stable@vger.kernel.org
      52a2a108
  2. 21 May, 2013 1 commit
    • Sergei Shtylyov's avatar
      sata_rcar: clear STOP bit in bmdma_start() method · df7e131f
      Sergei Shtylyov authored
      Iff bmdma_setup() has to stop a DMA transfer before starting a new
      one, then the STOP bit in the ATAPI_CONTROL1 register will remain set
      (it's only cleared when setting the START bit to 1) and then
      bmdma_start() method will set both START and STOP bits simultaneously
      which should abort the transfer being just started.  Avoid that by
      explicitly clearing the STOP bit in bmdma_start() method (in this case
      it will be ignored on write).
      Signed-off-by: 's avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: 's avatarTejun Heo <tj@kernel.org>
      Cc: stable@vger.kernel.org
      df7e131f
  3. 11 Apr, 2013 1 commit
  4. 20 Feb, 2013 1 commit