1. 03 2月, 2009 1 次提交
  2. 26 1月, 2009 5 次提交
    • M
      sata_mv: msi masking fix (v2) · 6d3c30ef
      Mark Lord 提交于
      Enable reliable use of Message-Signaled Interrupts (MSI) in sata_mv
      by masking further chip interrupts within the main interrupt handler.
      
      Based upon a suggestion by Grant Grundler.
      MSI is working reliably in all of my test systems here now.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Reviewed-by: NGrant Grundler <grundler@google.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      6d3c30ef
    • T
      sata_mv: Properly initialize main irq mask · 5d0fb2e7
      Thomas Reitmayr 提交于
      I noticed that during initialization sata_mv.c assumes that the main
      interrupt mask has its default value of 0. The function
      mv_platform_probe(..) initializes a shadow irq mask with 0 assuming
      that's the value of the controller's register. Now
      mv_set_main_irq_mask(..) only writes the controller's register if the
      new value differs from the "shadowed" value. This is fatal when trying
      to disable all interrupts in mv_init_host(..), i.e. the following
      function call does not write anything to the main irq mask register:
      
        mv_set_main_irq_mask(host, ~0, 0);
      
      The effect I see on my machine (QNAP TS-109 II) with booting via kexec
      (with Linux as a 2nd-stage boot loader) is that if the sata_mv module
      was still loaded when performing kexec, then the new kernel's sata_mv
      module starts up with interrupts enabled. This results in an unhandled
      IRQ and breaks the boot process.
      
      The unhandled interrupt itself might also be fixed by Lennert's patch
      proposed at http://markmail.org/message/kwvzxstnlsa3s26w which I did not
      try yet.
      
      However I still propose to additionally initialize the shadow variable
      with the current contents of the main irq mask register to get both in
      sync and allow proper disabling the main irq mask. This fixes the
      unhandled irq on my machine.
      Signed-off-by: NThomas Reitmayr <treitmayr@devbase.at>
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      5d0fb2e7
    • M
      sata_mv: remove bogus nsect restriction · cd12e1f7
      Mark Lord 提交于
      Remove unneeded nsect restriction from GenII NCQ path,
      and improve comments to explain why this is not a problem.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      cd12e1f7
    • M
      sata_mv: don't read hc_irq_cause · cae6edc3
      Mark Lord 提交于
      Remove silly read-modify-write sequences when clearing interrupts
      in hc_irq_cause.  This gets rid of unneeded MMIO reads, resulting in
      a slight performance boost when switching between EDMA and non-EDMA
      modes (eg. for cache flushes).
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      cae6edc3
    • M
      sata_mv: fix 8-port timeouts on 508x/6081 chips · b0bccb18
      Mark Lord 提交于
      Fix a longstanding bug for the 8-port Marvell Sata controllers (508x/6081),
      where accesses to the upper 4 ports would cause lost-interrupts / timeouts
      for the lower 4-ports.  With this patch, the 6081 boards should finally be
      reliable enough for mainstream use with Linux.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      b0bccb18
  3. 29 12月, 2008 1 次提交
  4. 29 9月, 2008 1 次提交
    • T
      libata: make SCR access ops per-link · 82ef04fb
      Tejun Heo 提交于
      Logically, SCR access ops should take @link; however, there was no
      compelling reason to convert all SCR access ops when adding @link
      abstraction as there's one-to-one mapping between a port and a non-PMP
      link.  However, that assumption won't hold anymore with the scheduled
      addition of slave link.
      
      Make SCR access ops per-link.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      82ef04fb
  5. 09 9月, 2008 1 次提交
  6. 22 8月, 2008 2 次提交
  7. 04 7月, 2008 1 次提交
  8. 19 6月, 2008 2 次提交
    • M
      sata_mv: warn on PIO with multiple DRQs · c6112bd8
      Mark Lord 提交于
      Chip errata sometimes prevents reliable use of PIO commands which involve
      more than a single DRQ (data request).  In normal operation, libata should
      not generate such PIO commands (uses DMA instead), but they could be sent
      in via SG_IO from userspace.
      
      A full workaround might be to break up such commands into sequences
      of single DRQ ones, but that's just way too complex for something
      that doesn't normally happen in real life.
      
      So, allow the attempt (it often works, despite the errata),
      but log the event for reference when somebody screams.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c6112bd8
    • M
      sata_mv: enable async_notify for 60x1 Rev.C0 and higher · 3bd0a70e
      Mark Lord 提交于
      The early chipsets cannot safely handle Async Notification (AN),
      but 6041/6081 chip revision "C0" (and newer) can handle it.
      
      So allow AN for "C0" and higher.
      
      This enables use of hotplug on PMP ports for the 6041/6081 PCI Rev.9 chips.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      3bd0a70e
  9. 04 6月, 2008 1 次提交
  10. 31 5月, 2008 5 次提交
  11. 20 5月, 2008 10 次提交
  12. 06 5月, 2008 10 次提交
    • M
      sata_mv use hweight16() for bit counting (V2) · c46938cc
      Mark Lord 提交于
      Some tidying as suggested by Grant Grundler.
      
      Nuke local bit-counting function from sata_mv in favour of using hweight16().
      Also add a short explanation for the 15msec timeout used when waiting for empty/idle.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c46938cc
    • M
      sata_mv NCQ-EH for FIS-based switching · 4c299ca3
      Mark Lord 提交于
      Convert sata_mv's EH for FIS-based switching (FBS) over to the
      sequence recommended by Marvell.  This enables us to catch/analyze
      multiple failed links on a port-multiplier when using NCQ.
      
      To do this, we clear the ERR_DEV bit in the EDMA Halt-Conditions register,
      so that the EDMA engine doesn't self-disable on the first NCQ error.
      
      Our EH code sets the MV_PP_FLAG_DELAYED_EH flag to prevent new commands
      being queued while we await completion of all outstanding NCQ commands
      on all links of the failed PM.
      
      The SATA Test Control register tells us which links have failed,
      so we must only wait for any other active links to finish up
      before we stop the EDMA and run the .error_handler afterward.
      
      The patch also includes skeleton code for handling of non-NCQ FBS operation.
      This is more for documentation purposes right now, as that mode is not yet
      enabled in sata_mv.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      4c299ca3
    • M
      sata_mv delayed eh handling · 29d187bb
      Mark Lord 提交于
      Introduce a new "delayed error handling" mechanism in sata_mv,
      to enable us to eventually deal with multiple simultaneous NCQ
      failures on a single host link when a PM is present.
      
      This involves a port flag (MV_PP_FLAG_DELAYED_EH) to prevent new
      commands being queued, and a pmp bitmap to indicate which pmp links
      had NCQ errors.
      
      The new mv_pmp_error_handler() uses those values to invoke
      ata_eh_analyze_ncq_error() on each failed link, prior to freezing
      the port and passing control to sata_pmp_error_handler().
      
      This is based upon a strategy suggested by Tejun.
      
      For now, we just implement the delayed mechanism.
      The next patch in this series will add the multiple-NCQ EH code
      to take advantage of it.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      29d187bb
    • M
      sata_mv new mv_port_intr function · a9010329
      Mark Lord 提交于
      Separate out the inner loop body of mv_host_intr()
      into it's own function called mv_port_intr().
      
      This should help maintainabilty.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      a9010329
    • M
      sata_mv fix mv_host_intr bug for hc_irq_cause · eabd5eb1
      Mark Lord 提交于
      Remove the unwanted reads of hc_irq_cause from mv_host_intr(),
      thereby removing a bug whereby we were not always reading it when needed..
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      eabd5eb1
    • M
      sata_mv NCQ and SError fixes for mv_err_intr · 37b9046a
      Mark Lord 提交于
      Sigh.  Undo some earlier changes to mv_port_intr(),
      so that we now read/clear SError again in all cases.
      
      Arrange the top of the function to be as close as possible
      to what we need for a later update (in this series) for ERR_DEV handling.
      
      Fix things so that libata-eh can attempt a READ_LOG_EXT_10H
      in response to a failed NCQ command, by just doing a local
      mv_eh_freeze() rather than ata_port_freeze().
      
      This will now fully handle NCQ errors much of the time,
      but more fixes are needed for FBS/PMP, and for certain chip errata.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      37b9046a
    • M
      sata_mv rearrange mv_config_fbs · 00f42eab
      Mark Lord 提交于
      Rearrange mv_config_fbs() to more closely follow the (corrected) datasheet
      recommendations for NCQ and FIS-based switching (FBS).
      
      Also, maintain a port flag to let us know when FBS is enabled.
      We will make more use of that flag later in this patch series.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      00f42eab
    • M
      sata_mv errata workaround for sata25 part 1 · dd2890f6
      Mark Lord 提交于
      Part 1 of workaround for errata "sata#25" for the 60x1 series
      (the second half of this errata workaround is still in development.
      
      Bit22 of the GPIO port has to be set "on" when in NCQ mode.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      dd2890f6
    • M
      sata_mv new mv_qc_defer method · 3e4a1391
      Mark Lord 提交于
      The EDMA engine cannot tolerate a mix of NCQ/non-NCQ commands,
      and cannot be used for PIO at all.  So we need to prevent libata
      from trying to feed us such mixtures.
      
      Introduce mv_qc_defer() for this purpose, and use it for all chip versions.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      3e4a1391
    • M
      sata_mv wait for empty+idle · 9b2c4e0b
      Mark Lord 提交于
      When performing EH, it is recommended to wait for the EDMA engine
      to empty out requests-in-progress before disabling EDMA.
      
      Introduce code to poll the EDMA_STATUS register for idle/empty bits
      before disabling EDMA.  For non-EH operation, this will normally exit
      without delay, other than the register read.
      
      A later series of patches may focus on eliminating this and various
      other register reads (when possible) throughout the driver,
      but for now we're focussing on solid reliablity.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      9b2c4e0b