13 Oct, 2007

40 commits

  • On a cable there may be
    eighty wires or perhaps forty
    and we learn about its type
    In the world of ACPI

    So we call the GTM
    And we find the the timing rate
    And we look through it to see
    If eighty wire it must be

    Timing lives in ACPI routines
    ACPI routines, ACPI routines
    Timing lives in ACPI routines
    ACPI routes ACPI routines

    And the drivers last you see
    Picking up unknown pci ids
    and the code begins to work

    Timing lives in ACPI routines
    ACPI routines, ACPI routines
    Timing lives in ACPI routines
    ACPI routes ACPI routines

    [Full speed ahead, Mr Hacker, full speed ahead]
    Full speed over here sir!
    Checking Cable, checking cable
    Aye aye, 80 wire,
    Heaven heaven]

    If we use ACPI (ACPI)
    Every box (every box) has all we need (has all we need)
    Cable type (cable type) and mode timing (mode timing)
    In our ATA (in our ATA) subroutines (subroutines, ha ha)

    Timing lives in ACPI routines
    ACPI routines, ACPI routines
    Timing lives in ACPI routines
    ACPI routes ACPI routines
    Timing lives in ACPI routines
    ACPI routines, ACPI routines
    Timing lives in ACPI routines
    ACPI routes ACPI routines

    Signed-off-by: Alan Cox
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Talk to the dark side our driver has to, yes. Much misleading is the
    data. Store it in a structure we do so that it may be parsed.

    Signed-off-by: Alan Cox
    --
    Whats small, old and shouts phrases out of order across mountains ?
    Yodla..
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • HDT722516DLA380 does spurious completion of NCQ commands. Blacklist
    it.

    Signed-off-by: Tejun Heo
    Cc: Frans Pop
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • 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: Paolo Ornati
    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Paolo Ornati
     
  • Let's see what explodes.

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Some controller variants snoop the ATAPI length value for Packet
    transfers to do state machine and FIFO management. Thus we want to
    set it properly, even for cases where it is otherwise meaningless.

    Signed-off-by: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    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: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Modern laptops with hotswap bays still tend to utilise a PATA interface
    on a SATA bridge, generally with the host controller in some legacy
    emulation mode rather than AHCI. This means that the existing hotplug
    code in libata is unable to work. The ACPI specification states that
    these devices can send notifications when hotswapped, which avoids the
    need to obtain notification from the controller. This patch uses the
    existing libata-acpi code and simply registers a notification in order
    to trigger a rescan whenever the firmware signals an event.

    Signed-off-by: Matthew Garrett
    Signed-off-by: Jeff Garzik

    Matthew Garrett
     
  • 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: Alan Cox

    [edited to work on SATA too, changing name from 'pata_dma' to 'dma']
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Signed-off-by: Peer Chen
    Signed-off-by: Jeff Garzik

    Peer Chen
     
  • This adds human-readable decoding of the ATA status and error registers
    (similar to what drivers/ide does) as well as the SATA Serror register
    to libata error handling output. This prevents the need to pore
    through standards documents to figure out the meaning of the bits
    in these registers when looking at error reports. Some bits that
    drivers/ide decoded are not decoded here, since the bits are either
    command-dependent or obsolete, and properly parsing them would add
    too much complexity.

    Signed-off-by: Robert Hancock

    [edited slightly to make output a bit more symmetric]
    Signed-off-by: Jeff Garzik

    Robert Hancock
     
  • Of course some controllers lie about PMP support. Black list them.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Private pi.flags area is full and we need more private flags. Move
    host private flags over to pi.private_data. During initialization,
    these flags are copied to hpriv->flags.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Implement AHCI PMP support. ahci only supports command based
    switching. Also, for some reason, NCQ over PMP doesn't work now.
    Other than that, everything works.

    Tested on ICH9R, JMB360/363 + SIMG3726, 4726 and 5744.

    Signed-off-by: Tejun Heo
    Cc: Forrest Zhao
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • As DEV_RST (hardreset) sometimes fail to recover the controller
    (especially after PMP DMA CS errata). In such cases, perform PORT_RST
    prior to DEV_RST.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Implement PMP support. sil24 supports full FIS-switching. However,
    it has a PMP DMA CS errata which requires port-wide resetting if
    commands are outstanding to three or more devices when an error occurs
    on one of them.

    ATAPI commands often result in CHECK SENSE and it's crucial to not
    reset them before fetching sense data. Unfortunately, ATAPI CHECK
    SENSE causes a lot of problem if command is outstanding to any other
    device usually resulting in port-wide reset. So, sata_sil24
    implements sil24_qc_defer() which guarantees ATAPI command is run by
    itself.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Implement sata_pmp_qc_defer_cmd_switch() - standard qc_defer for
    command switching PMP support.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Extend ata_acpi_associate_sata_port() such that it can handle PMP and
    call it when PMP is attached and detached.

    Build breakage when !CONFIG_ATA_ACPI was spotted and fixed by Petr
    Vandrovec.

    Signed-off-by: Tejun Heo
    Cc: Petr Vandrovec
    Signed-off-by: Jeff Garzik

    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: Tejun Heo
    Signed-off-by: Jeff Garzik

    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: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • PMP always requires SRST to be enabled. Also, hardreset reports
    classification code from the first device when PMP is attached, not
    from the PMP. Update ata_eh_reset() such that followup softreset is
    performed if the controller is PMP capable and the host link is being
    reset.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • 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: Alan Cox
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Reported by Andreas Messer.

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Signed-off-by: Alan Cox
    [plus SuperIO fixes by Kyle McMartin]
    [plus a cleanup from me]
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Blacklist HITACHI HDS7250SASUN500G and HITACHI HDS7225SBSUN250G
    drives using wildcard matching.

    Signed-off-by David Milburn

    Signed-off-by: Jeff Garzik

    David Milburn
     
  • * The firmware version of ST3160812AS is "3.ADJ" no "3.AD".
    * Add several entries from various sources.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • 'noacpi' isn't a standalone parameter, give it its prefix.

    Signed-off-by: Dave Jones
    Signed-off-by: Jeff Garzik

    Dave Jones
     
  • I've been doing an audit of this driver to try and find out why we have
    problems with some Clevo boxes that use it. Didn't get anywhere other
    than to discover all the bug reporters I have use vmware, which may or
    may not be chance.

    In the process however I did find out our MWDMA2 performance was a bit
    low and code review showed the MWDMA0/2 timings are reversed due to a
    thinko in the table ordering

    Signed-off-by: Alan Cox
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Signed-off-by: Alan Cox
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • AHCI spec says host-reset bit may only be set when the ahci-enable bit
    is also set.

    Noticed by Peer Chen

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Little fixlets, that the build started erroring / warning about:

    drivers/ata/pata_scc.c: In function 'scc_bmdma_status':
    drivers/ata/pata_scc.c:734: error: structure has no member named 'active_tag'
    drivers/ata/pata_scc.c: In function 'scc_pata_prereset':
    drivers/ata/pata_scc.c:866: warning: passing arg 1 of 'ata_std_prereset' from incompatible pointer type
    drivers/ata/pata_scc.c: In function 'scc_error_handler':
    drivers/ata/pata_scc.c:908: warning: passing arg 2 of 'ata_bmdma_drive_eh' from incompatible pointer type
    drivers/ata/pata_scc.c:908: warning: passing arg 3 of 'ata_bmdma_drive_eh' from incompatible pointer type
    drivers/ata/pata_scc.c:908: warning: passing arg 5 of 'ata_bmdma_drive_eh' from incompatible pointer type
    make[2]: *** [drivers/ata/pata_scc.o] Error 1

    Signed-off-by: Satyam Sharma
    Cc: Alan Cox
    Cc: Mel Gorman
    Signed-off-by: Jeff Garzik

    Satyam Sharma
     
  • The SATA_PATA_SHARING register doesn't have anything to do with the
    SATA part of the controller. It indicates whether an extern SATA PHY
    is attached to the PATA part of the controller and if so how it is
    wired. As the PATA part is driven by pata_via, sata_via has no reason
    to care about that. Also, pata_via should work fine under all
    configurations.

    This patch removes unnecessary attach failures. It seems recent via
    chipsets are defaulting to different values or are actually connected
    to SATA PHY triggering this more often.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    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: Tejun Heo
    Signed-off-by: Jeff Garzik

    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: Tejun Heo
    Cc: Kriten Carlson Accardi
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Some pseudo devices fail PM commands unnecessarily aborting system
    suspend. Implement ATA_HORKAGE_SKIP_PM which makes libata skip PM
    commands for these devices.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • If PMP itself becomes inaccessible while trying to link a downstream
    link, spending time to recover the downstream link doesn't make any
    sense. Make EH skip retry and fail fast if -ERESTART is received.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Implement ATA_LFLAG_DISABLED. The flag indicates the link is disabled
    due to EH recovery failure. While a link is disabled, no EH action is
    taken on the link and suspend/resume become noop too.

    This will be used by PMP links to manage failed links.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Some PMP links are connected to internal pseudo devices which may come
    and go depending on situation. There's no reason to try hard to
    recover them. ATA_LFLAG_NO_RETRY tells EH to not retry if the device
    attached to the link fails.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Some links on some PMPs locks up on SRST and/or report incorrect
    device signature. Implement ATA_LFLAG_NO_SRST, ASSUME_ATA and
    ASSUME_SEMB to handle these quirky links. NO_SRST makes EH avoid
    SRST. ASSUME_ATA and SEMB forces class code to ATA and SEMB_UNSUP
    respectively. Note that SEMB isn't currently supported yet so the
    _UNSUP variant is used.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    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: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo