1. 24 10月, 2007 3 次提交
  2. 23 10月, 2007 1 次提交
  3. 20 10月, 2007 1 次提交
  4. 16 10月, 2007 4 次提交
  5. 13 10月, 2007 31 次提交
    • J
      [libata] struct pci_dev related cleanups · 2855568b
      Jeff Garzik 提交于
      * remove pointless pci_dev_to_dev() wrapper.  Just directly reference
        the embedded struct device like everyone else does.
      
      * pata_cs5520: delete cs5520_remove_one(), it was a duplicate of
        ata_pci_remove_one()
      
      * linux/libata.h: don't bother including linux/pci.h, we don't need it.
        Simply declare 'struct pci_dev' and assume interested parties will
        include the header, as they should be doing anyway.
      
      * linux/libata.h: consolidate all CONFIG_PCI declarations into a
        single location in the header.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      2855568b
    • T
      libata: use ata_exec_internal() for PMP register access · b06ce3e5
      Tejun Heo 提交于
      PMP registers used to be accessed with dedicated accessors ->pmp_read
      and ->pmp_write.  During reset, those callbacks are called with the
      port frozen so they should be able to run without depending on
      interrupt delivery.  To achieve this, they were implemented polling.
      
      However, as resetting the host port makes the PMP to isolate fan-out
      ports until SError.X is cleared, resetting fan-out ports while port is
      frozen doesn't buy much additional safety.
      
      This patch updates libata PMP support such that PMP registers are
      accessed using regular ata_exec_internal() mechanism and kills
      ->pmp_read/write() callbacks.  The following changes are made.
      
      * PMP access helpers - sata_pmp_read_init_tf(), sata_pmp_read_val(),
        sata_pmp_write_init_tf() are folded into sata_pmp_read/write() which
        are now standalone PMP register access functions.
      
      * sata_pmp_read/write() returns err_mask instead of rc.  This is
        consistent with other functions which issue internal commands and
        allows more detailed error reporting.
      
      * ahci interrupt handler is modified to ignore BAD_PMP and
        spurious/illegal completion IRQs while reset is in progress.  These
        conditions are expected during reset.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      b06ce3e5
    • T
      libata: add @timeout to ata_exec_internal[_sg]() · 2b789108
      Tejun Heo 提交于
      Add @timeout argument to ata_exec_internal[_sg]().  If 0, default
      timeout ata_probe_timeout is used.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      2b789108
    • T
      libata: clear ehi description after initial host report · abf6e8ed
      Tejun Heo 提交于
      ehi description field is used to carry LLD specific controller
      description.  Sometimes, it's used without clearing before and LLD
      description gets printed with exception information one more time.
      Clear after printing.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      abf6e8ed
    • T
      libata: add ST9160821AS / 3.ALD to NCQ blacklist · 954bb005
      Tejun Heo 提交于
      ST9160821AS / 3.ALD also does spurious NCQ completions.  Disable NCQ.
      Signed-off-by: NTejun Heo <teheo@suse.de>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      954bb005
    • T
      libata: add HDT722516DLA380 to NCQ blacklist · 70edb185
      Tejun Heo 提交于
      HDT722516DLA380 does spurious completion of NCQ commands.  Blacklist
      it.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Frans Pop <elendil@planet.nl>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      70edb185
    • P
      libata: blacklist NCQ on Seagate Barracuda ST380817AS · da6f0ec2
      Paolo Ornati 提交于
      Seagate Barracuda ST380817AS has troubles with NCQ. For example,
      unpacking a tarball on an XFS filesystem gives this:
      
      ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x2 frozen
      ata1.00: cmd 61/40:00:29:a3:98/00:00:00:00:00/40 tag 0 cdb 0x0 data 32768 out
               res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
      
      More info here:
      http://lkml.org/lkml/2007/1/21/76
      
      Blacklist it!
      Signed-off-by: NPaolo Ornati <ornati@fastwebnet.it>
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      da6f0ec2
    • J
      [libata] Turn on ACPI by default · 6ebe9d86
      Jeff Garzik 提交于
      Let's see what explodes.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      6ebe9d86
    • A
      libata: correct handling of SRST reset sequences · 681c80b5
      Alan Cox 提交于
      Correct handling of SRST reset sequences.  After an SRST it is undefined
      whether the drive has gone back to PIO0.  In order to talk safely we should
      talk slowly and carefully until we know.
      
      Thus when we do the reset if the controller has a pio setup method we call it
      to flip back to PIO 0 and a known state.  After the reset completes the
      identify will then be done at the safe speed and the drive/controller will
      pick suitable faster modes and reconfigure the controller to these timings.
      
      As a side effect it means we force the controller to PIO 0 as we bring it up
      which fixes funnies on a few systems where the BIOS firmware leaves us in an
      interesting choice of modes, or embedded boxes with no firmware which come up
      in random states.
      
      For smart controllers there is nothing to do - they know about this
      internally.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      681c80b5
    • A
      libata: Add a drivers/ide style DMA disable · b3a70601
      Alan Cox 提交于
      This is useful when debugging, handling problem systems, or for
      distributions just to get the system installed so it can be sorted
      out later.
      
      This is a bit smarter than the old IDE one and lets you do
      
      libata.dma=0	Disable all PATA DMA like old IDE
      libata.dma=1	Disk DMA only
      libata.dma=2	ATAPI DMA only
      libata.dma=4	CF DMA only
      
      (or combinations thereof - 0,1,3 being the useful ones I suspect)
      
      (I've split CF as it seems to be a seperate case of pain and suffering
      different to the others and caused by assorted PIO wired adapters etc)
      Signed-off-by: NAlan Cox <alan@redhat.com>
      
      [edited to work on SATA too, changing name from 'pata_dma' to 'dma']
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      b3a70601
    • T
      libata-pmp: implement qc_defer for command switching PMP support · 31f88384
      Tejun Heo 提交于
      Implement sata_pmp_qc_defer_cmd_switch() - standard qc_defer for
      command switching PMP support.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      31f88384
    • T
      libata-pmp: hook PMP support and enable it · 633273a3
      Tejun Heo 提交于
      Hook PMP support into libata and enable it.  Connect SCR and probing
      functions, and update ata_dev_classify() to detect PMP.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      633273a3
    • T
      libata-pmp: implement Port Multiplier support · 3af9a77a
      Tejun Heo 提交于
      Implement Port Multiplier support.  To support PMP, a LLDD has to
      supply ops->pmp_read() and pmp_write().  If non-null, ->pmp_attach and
      ->pmp_detach are called on PMP attach and detach, respectively.
      
      ->pmp_read/write() can be called while the port is frozen, so they
      must be implemented by polling.  This patch supplies several helpers
      to ease ->pmp_read/write() implementation.
      
      Also, irq_handler and error_handler must be PMP aware.  Most of PMP
      aware EH can be done by calling ata_pmp_do_eh() with appropriate
      methods.  PMP EH uses separate set of reset methods and this patch
      implements standard prereset, hardreset and postreset methods.
      
      This patch only implements PMP support.  The next patch will integrate
      PMP into the reset of libata and thus enable PMP support.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      3af9a77a
    • A
      [PATCH] libata: Fix HPA handling regression · 93328e11
      Alan Cox 提交于
      Restore the support for handling drives that report one sector too many
      (ie SCSI not ATA style). This worked before the HPA update but was
      removed in that process.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      93328e11
    • D
      libata-core: blacklist HITACHI HDS drives using wildcard blacklist matching · 0b0a43e0
      David Milburn 提交于
      Blacklist HITACHI HDS7250SASUN500G and HITACHI HDS7225SBSUN250G
      drives using wildcard matching.
      
      Signed-off-by David Milburn <dmilburn@redhat.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      0b0a43e0
    • T
      libata: update spurious NCQ completion blacklist · 7f567620
      Tejun Heo 提交于
      * The firmware version of ST3160812AS is "3.ADJ" no "3.AD".
      * Add several entries from various sources.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      7f567620
    • T
      libata: fix ata_set_max_sectors() · 1e582ba4
      Tejun Heo 提交于
      In ata_set_max_sectors(), the highest nibble in LBA28 mode was
      missing.  This made drives sized between 8G and 128G with HPA turned
      on to be resized to under 8G.  Fix it.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      1e582ba4
    • T
      libata-pmp-prep: implement sata_async_notification() · 7d77b247
      Tejun Heo 提交于
      AN serves multiple purposes.  For ATAPI, it's used for media change
      notification.  For PMP, for downstream PHY status change notification.
      Implement sata_async_notification() which demultiplexes AN.
      
      To avoid unnecessary port events, ATAPI AN is not enabled if PMP is
      attached but SNTF is not available.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Kriten Carlson Accardi <kristen.c.accardi@intel.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      7d77b247
    • T
      libata-pmp-prep: implement qc_defer helpers · da917d69
      Tejun Heo 提交于
      Implement ap->nr_active_links (the number of links with active qcs),
      ap->excl_link (pointer to link which can be used by ->qc_defer and is
      cleared when a qc with ATA_QCFLAG_CLEAR_EXCL completes), and
      ata_link_active().
      
      These can be used by ->qc_defer() to implement proper command
      exclusion.  This set of helpers seem enough for both sil24 (ATAPI
      exclusion needed) and cmd-switching PMP.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      da917d69
    • T
      libata-pmp-prep: implement ops->qc_defer() · 31cc23b3
      Tejun Heo 提交于
      Controllers which support PMP have various restrictions on which
      combinations of commands are allowed to what number of devices
      concurrently.  This patch implements ops->qc_defer() which determines
      whether a qc can be issued at the moment or should be deferred.
      
      If the function returns ATA_DEFER_LINK, the qc will be deferred until
      a qc completes on the link.  If ATA_DEFER_PORT, until a qc completes
      on any link.  The defer conditions are advisory and in general
      ATA_DEFER_LINK can be considered as lower priority deferring than
      ATA_DEFER_PORT.
      
      ops->qc_defer() replaces fixed ata_scmd_need_defer().  For standard
      NCQ/non-NCQ exclusion, ata_std_qc_defer() is implemented.  ahci and
      sata_sil24 are converted to use ata_std_qc_defer().
      
      ops->qc_defer() is heavier than the original mechanism because full qc
      is prepped before determining to defer it, but various information is
      needed to determine defer conditinos and fully translating a qc is the
      only way to supply such information in generic manner.
      
      IMHO, this shouldn't cause any noticeable performance issues as
      
      * for most cases deferring occurs rarely (except for NCQ-aware
        cmd-switching PMP)
      * translation itself isn't that expensive
      * once deferred the command won't be repeated until another command
        completes which usually is a very long time cpu-wise.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      31cc23b3
    • T
      libata-pmp-prep: make a number of functions global to libata · fb7fd614
      Tejun Heo 提交于
      Make a number of functions from libata-core.c and libata-eh.c global
      to libata (drivers/ata/libata.h).  These will be used by PMP.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      fb7fd614
    • T
      libata-pmp-prep: add @new_class to ata_dev_revalidate() · 422c9daa
      Tejun Heo 提交于
      Consider newly found class code while revalidating.  PMP resetting
      always results in valid class code and issuing PMP commands to
      ATA/ATAPI device isn't very attractive.  Add @new_class to
      ata_dev_revalidate() and check class code for revalidation.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      422c9daa
    • T
      libata: misc updates for AN · 854c73a2
      Tejun Heo 提交于
      Update AN support in preparation of PMP support.
      
      * s/ata_id_has_AN/ata_id_has_atapi_AN/
      * add AN enabled reporting during configuration
      * add err_mask to AN configuration failure reporting
      * update LOCKING comment for ata_scsi_media_change_notify()
      * check whether ATA dev is attached to SCSI dev ata_scsi_media_change_notify()
      * set ATA_FLAG_AN in ahci and sata_sil24
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Kriten Carlson Accardi <kristen.c.accardi@intel.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      854c73a2
    • J
      c78968bb
    • T
      libata: assume ATA_DEV_ATA on diagnostic failure · d7fbee05
      Tejun Heo 提交于
      Certain device which reports diagnostic failure also reports invalid
      device signature.  Assume ATA_DEV_ATA on diagnostic failure if reset
      indicates device presence.
      
      This is fix for bugzilla bug 8784.
      
        http://bugzilla.kernel.org/show_bug.cgi?id=8784Signed-off-by: NTejun Heo <htejun@gmail.com>
      Acked-by: NAlan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Edward Amsden <amsden_linux@earthlink.net>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      d7fbee05
    • T
      libata: update ata_dev_try_classify() arguments · 3f19859e
      Tejun Heo 提交于
      Make ata_dev_try_classify() take a pointer to ata_device instead of
      ata_port/port_number combination for consistency and add @present
      argument.  @present indicates whether the device seems present during
      reset.  It's the result of TF access during softreset and link
      onlineness during hardreset.  @present will be used to improve
      diagnostic failure handling.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      3f19859e
    • T
      libata: remiplement ata_hpa_resize() · 05027adc
      Tejun Heo 提交于
      This patch reimplement ata_hpa_resize() such that...
      
      * All HPA related decisions are made inside ata_hpa_resize() proper.
        ata_hpa_resize() returns 0 if configuration can proceed, -errno if
        device needs to be reset and reconfigured.
      
      * All errors are handled properly.  If HPA unlocking isn't requested,
        HPA handling is disabled automatically to avoid unnecessary device
        detection failure.
      
      * Messages are trimmed.  HPA detection message is printed only during
        initial configuration.  HPA unlocked message is printed only during
        initial configuration or unlocking results in different size.
      
      * Instead of using sectors returned in TF of SET_MAX, re-read IDENTIFY
        data as that's the value the device is going to use.
      
      * It's called early during ata_dev_configure() as IDENTIFY data might
        change after resizing.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      05027adc
    • T
      libata: clean up read/set native_max address functions · c728a914
      Tejun Heo 提交于
      Merge ata_read_native_max_addres_ext() into ata_read_native_max_address()
      and combine ata_set_native_max_address_ext() and
      ata_set_native_max_address() into ata_set_max_sectors().
      
      * reduce duplicate code
      * return 0 or -errno depending on error conditions
      * report if command fails
      * use ATA_LBA instead of 0x40
      
      This is in preparation of ata_hpa_resize() update.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      c728a914
    • T
      libata: move ata_id_n_sectors() upward · db6f8759
      Tejun Heo 提交于
      Move ata_id_n_sectors() upward right below ata_id_c_string().  This is
      to accomodate later changes.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      db6f8759
    • J
      [libata] blacklist Maxtor*BANC* using new wildcard blacklist matching · 539cc7c7
      Jeff Garzik 提交于
      Support the use of '*' in model_num and model_rev entries
      in ata_device_blacklist[].
      
      Based largely on David Milburn's "libata-core: support wildcard matching
      in ata_blacklist_entry" patch.
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      539cc7c7
    • T
      libata: implement and use ata_port_desc() to report port configuration · cbcdd875
      Tejun Heo 提交于
      Currently, port configuration reporting has the following problems.
      
      * iomapped address is reported instead of raw address
      * report contains irrelevant fields or lacks necessary fields for
        non-SFF controllers.
      * host->irq/irq2 are there just for reporting and hacky.
      
      This patch implements and uses ata_port_desc() and
      ata_port_pbar_desc().  ata_port_desc() is almost identical to
      ata_ehi_push_desc() except that it takes @ap instead of @ehi, has no
      locking requirement, can only be used during host initialization and "
      " is used as separator instead of ", ".  ata_port_pbar_desc() is a
      helper to ease reporting of a PCI BAR or an offsetted address into it.
      
      LLD pushes whatever description it wants using the above two
      functions.  The accumulated description is printed on host
      registration after "[S/P]ATA max MAX_XFERMODE ".
      
      SFF init helpers and ata_host_activate() automatically add
      descriptions for addresses and irq respectively, so only LLDs which
      isn't standard SFF need to add custom descriptions.  In many cases,
      such controllers need to report different things anyway.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      cbcdd875