1. 29 12月, 2008 7 次提交
    • R
      sata_sil: add Large Block Transfer support · c7e324f1
      Robert Hancock 提交于
      This implements support for the Large Block Transfer feature found in Silicon
      Image 311x controllers. This allows transferring bigger contiguous chunks of
      data from system memory and avoids the 64KB boundary restriction of standard
      SFF controllers.
      
      This is based on a patch from Jeff Garzik (from the sii-lbt branch of
      libata-dev) but includes a few bug fixes: Since the bmdma2 register does not
      implement the status bits, the original bmdma register must be used except
      where the bmdma2 register is required. As well the DMA boundary should be
      31-bit instead of 32-bit since the top bit of the length field is still
      required for the PRD end-of-table flag.
      Signed-off-by: NRobert Hancock <hancockr@shaw.ca>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c7e324f1
    • J
      [libata] ata_piix: cleanup dmi strings checking · 3c387730
      Jiri Slaby 提交于
      Commit
      	ATA: piix, fix pointer deref on suspend
      fixed a possible oops in an ugly manner. Use newly introduced dmi_match()
      to make the code pretty again.
      Signed-off-by: NJiri Slaby <jirislaby@gmail.com>
      Cc: Alexandru Romanescu <a_romanescu@yahoo.co.uk>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      3c387730
    • L
      libata: blacklist NCQ on OCZ CORE 2 SSD (resend) · 5ccfca97
      Lubomir Bulej 提交于
      The patchlet below blacklists NCQ on OCZ CORE v2 SSD drive(s). Even
      though the drive advertises NCQ support with queue depth 1, it responds
      with all-zeroes FIS to NCQ commands which triggers ata error handling
      several times before the kernel decides to disable NCQ on the drive.
      Signed-off-by: NLubomir Bulej <lubomir.bulej@dsrg.mff.cuni.cz>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      5ccfca97
    • Q
      bd353ffd
    • T
      libata: perform port detach in EH · ece180d1
      Tejun Heo 提交于
      ata_port_detach() first made sure EH saw ATA_PFLAG_UNLOADING and then
      assumed EH context belongs to it and performed detach operation
      itself.  However, UNLOADING doesn't disable all of EH and this could
      lead to problems including triggering WARN_ON()'s in EH path.
      
      This patch makes port detach behave more like other EH actions such
      that ata_port_detach() requests EH to detach and waits for completion.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      ece180d1
    • T
      libata: when restoring SControl during detach do the PMP links first · ad74e4c1
      Tejun Heo 提交于
      When restoring SControl during detach, PMP links should be handled
      first as changing SControl of the host link can affect SCR access of
      PMP links.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      ad74e4c1
    • T
      libata: beef up iterators · 1eca4365
      Tejun Heo 提交于
      There currently are the following looping constructs.
      
      * __ata_port_for_each_link() for all available links
      * ata_port_for_each_link() for edge links
      * ata_link_for_each_dev() for all devices
      * ata_link_for_each_dev_reverse() for all devices in reverse order
      
      Now there's a need for looping construct which is similar to
      __ata_port_for_each_link() but iterates over PMP links before the host
      link.  Instead of adding another one with long name, do the following
      cleanup.
      
      * Implement and export ata_link_next() and ata_dev_next() which take
        @mode parameter and can be used to build custom loop.
      * Implement ata_for_each_link() and ata_for_each_dev() which take
        looping mode explicitly.
      
      The following iteration modes are implemented.
      
      * ATA_LITER_EDGE		: loop over edge links
      * ATA_LITER_HOST_FIRST		: loop over all links, host link first
      * ATA_LITER_PMP_FIRST		: loop over all links, PMP links first
      
      * ATA_DITER_ENABLED		: loop over enabled devices
      * ATA_DITER_ENABLED_REVERSE	: loop over enabled devices in reverse order
      * ATA_DITER_ALL			: loop over all devices
      * ATA_DITER_ALL_REVERSE		: loop over all devices in reverse order
      
      This change removes exlicit device enabledness checks from many loops
      and makes it clear which ones are iterated over in which direction.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      1eca4365
  2. 21 12月, 2008 1 次提交
  3. 16 12月, 2008 3 次提交
  4. 09 12月, 2008 5 次提交
  5. 02 12月, 2008 4 次提交
  6. 15 11月, 2008 1 次提交
    • T
      libata: improve phantom device detection · 6a6b97d3
      Tejun Heo 提交于
      Currently libata uses four methods to detect device presence.
      
      1. PHY status if available.
      2. TF register R/W test (only promotes presence, never demotes)
      3. device signature after reset
      4. IDENTIFY failure detection in SFF state machine
      
      Combination of the above works well in most cases but recently there
      have been a few reports where a phantom device causes unnecessary
      delay during probe.  In both cases, PHY status wasn't available.  In
      one case, it passed #2 and #3 and failed IDENTIFY with ATA_ERR which
      didn't qualify as #4.  The other failed #2 but as it passed #3 and #4,
      it still caused failure.
      
      In both cases, phantom device reported diagnostic failure, so these
      cases can be safely worked around by considering any !ATA_DRQ IDENTIFY
      failure as NODEV_HINT if diagnostic failure is set.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      6a6b97d3
  7. 11 11月, 2008 6 次提交
  8. 10 11月, 2008 1 次提交
  9. 04 11月, 2008 6 次提交
  10. 31 10月, 2008 4 次提交
    • J
      libata: add whitelist for devices with known good pata-sata bridges · 9ce8e307
      Jens Axboe 提交于
      libata currently imposes a UDMA5 max transfer rate and 200 sector max
      transfer size for SATA devices that sit behind a pata-sata bridge. Lots
      of devices have known good bridges that don't need this limit applied.
      The MTRON SSD disks are such devices. Transfer rates are increased by
      20-30% with the restriction removed.
      
      So add a "blacklist" entry for the MTRON devices, with a flag indicating
      that the bridge is known good.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      9ce8e307
    • T
      sata_via: fix support for 5287 · b9d5b89b
      Tejun Heo 提交于
      5287 used to be treated as vt6420 but it didn't work.  It's new family
      of controllers called vt8251 which hosts four SATA ports as M/S of the
      two ATA ports.  This configuration is rather peculiar in that although
      the M/S devices are on the same port, each have its own SCR (or
      equivalent link status/control) registers which screws up the
      port-link-device hierarchy assumed by libata.  Another controller
      which falls into this category is ata_piix w/ SIDPR access.
      
      libata now has facility to deal with this class of controllers named
      slave_link.  A low level driver for such controllers can just call
      ata_slave_link_init() on the respective ports and libata will handle
      all the difficult parts like following up with single SRST after
      hardresetting both ports.
      
      This patch creates new controller class vt8251, implements slave_link
      aware init sequence and config space based SCR access for it and moves
      5287 to the new class.
      
      This patch is based on Joseph Chan's larger patch which was created
      before slave_link was implemented in libata.
      
        http://thread.gmane.org/gmane.linux.kernel.commits.mm/40640Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: Joseph Chan <JosephChan@via.com.tw>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      b9d5b89b
    • R
      libata: Avoid overflow in ata_tf_to_lba48() when tf->hba_lbal > 127 · ba14a9c2
      Roland Dreier 提交于
      In ata_tf_to_lba48(), when evaluating
      
      	(tf->hob_lbal & 0xff) << 24
      
      the expression is promoted to signed int (since int can hold all values
      of u8).  However, if hob_lbal is 128 or more, then it is treated as a
      negative signed value and sign-extended when promoted to u64 to | into
      sectors, which leads to the MSB 32 bits of section getting set
      incorrectly.
      
      For example, Phillip O'Donnell <phillip.odonnell@gmail.com> reported
      that a 1.5GB drive caused:
      
          ata3.00: HPA detected: current 2930277168, native 18446744072344861488
      
      where 2930277168 == 0xAEA87B30 and 18446744072344861488 == 0xffffffffaea87b30
      which shows the problem when hob_lbal is 0xae.
      
      Fix this by adding a cast to u64, just as is used by for hob_lbah and
      hob_lbam in the function.
      Reported-by: NPhillip O'Donnell <phillip.odonnell@gmail.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      ba14a9c2
    • R
      ATA: remove excess kernel-doc notation · 5b97fbd0
      Randy Dunlap 提交于
      Remove excess kernel-doc function parameter notation from drivers/ata/:
      
      Warning(drivers/ata/libata-core.c:1622): Excess function parameter or struct member 'fn' description in 'ata_pio_queue_task'
      Warning(drivers/ata/libata-core.c:4655): Excess function parameter or struct member 'err_mask' description in 'ata_qc_complete'
      Warning(drivers/ata/ata_piix.c:751): Excess function parameter or struct member 'udma' description in 'do_pata_set_dmamode'
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      5b97fbd0
  11. 28 10月, 2008 2 次提交