13 Oct, 2007

5 commits

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

    Tejun Heo
     
  • It was always set to ata_port_disable(). Removed the hook, and replaced
    the very few ap->ops->port_disable() callsites with direct calls to
    ata_port_disable().

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • * ->irq_ack() is redundant to what the irq handler already
    performs... chk-status + irq-clear. Furthermore, it is only
    called in one place, when screaming-irq-debugging is enabled,
    so we don't want to bother with a hook just for that.

    * ata_dummy_irq_on() is only ever used in drivers that have
    no callpath reaching ->irq_on(). Remove .irq_on hook from
    those drivers, and the now-unused ata_dummy_irq_on()

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Make the following PHY-related functions to deal with ata_link instead
    of ata_port.

    * sata_print_link_status()
    * sata_down_spd_limit()
    * ata_set_sata_spd_limit() and friends
    * sata_link_debounce/resume()
    * sata_scr_valid/read/write/write_flush()
    * ata_link_on/offline()

    This patch introduces no behavior change.

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

    Tejun Heo
     
  • Introduce ata_link. It abstracts PHY and sits between ata_port and
    ata_device. This new level of abstraction is necessary to support
    SATA Port Multiplier, which basically adds a bunch of links (PHYs) to
    a ATA host port. Fields related to command execution, spd_limit and
    EH are per-link and thus moved to ata_link.

    This patch only defines the host link. Multiple link handling will be
    added later. Also, a lot of ap->link derefences are added but many of
    them will be removed as each part is converted to deal directly with
    ata_link instead of ata_port.

    This patch introduces no behavior change.

    Signed-off-by: Tejun Heo
    Cc: James Bottomley
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

31 Aug, 2007

1 commit

  • This patch corrects sata_promise to classify FastTrack TX4200
    (DID 3515/3519) as a second-generation chip. Promise's partial-
    source FT TX4200 driver confirms this classification.

    Treating it as a first-generation chip causes several problems:
    1. Detection failures. This is a recent regression triggered by
    the hotplug-enabling changes in 2.6.23-rc1.
    2. Various "failed to resume link for reset" warnings.

    This patch fixes .

    Thanks to Stephen Ziemba for reporting the bug and for testing the fix.

    Signed-off-by: Mikael Pettersson
    Tested-by: Stephen Ziemba
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

20 Jul, 2007

1 commit


11 Jul, 2007

1 commit

  • This patch enables hotplugging of SATA devices in the
    sata_promise driver. It's been tested successfully on
    both first- and second-generation Promise SATA chips:
    SATA150 TX2plus, SATAII150 TX2plus, SATAII150 TX4,
    SATA300 TX2plus, and SATA300 TX4.

    The only quirk I've seen is that hotplugging (insertion)
    on the first-generation SATA150 TX2plus requires a lengthier
    EH sequence than on the second-generation chips.
    On the second-generation chips a simple soft reset seems
    to suffice, but on the first-generation chip there's a
    "port is slow to respond" after the initial soft reset,
    after which libata issues a hard reset, and then the
    device is recognised.

    The hotplug checks are high up in the interrupt handling
    path, not deep down in error_intr as in ahci/sata_sil24.
    That's because the chip doesn't signal hotplug status changes
    in the per-port status register: instead a global register
    contains hotplug control and status flags for all ports.
    I considered following the ahci/sata_sil24 structure, but
    that would have required non-trivial changes to the interrupt
    handling path, so I chose to keep the hotplug changes simple
    and unobtrusive.

    Signed-off-by: Mikael Pettersson
    --
    This patch depends on the "sata_promise: cleanups" patch.

    Changes since the previous version (posted June 19):
    - Correct pdc_interrupt() to increment 'handled' also in
    the hotplug case. This prevents IRQ_NONE from being
    returned when an interrupt only has hotplug events to
    handle, which could confuse the kernel's IRQ machinery.
    - Added testing on the SATAII150 TX4.

    drivers/ata/sata_promise.c | 41 ++++++++++++++++++++++++++++++++++++-----
    1 files changed, 36 insertions(+), 5 deletions(-)
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

10 Jul, 2007

3 commits


09 Jun, 2007

1 commit

  • sata_promise uses two different command modes - packet and TF. Packet mode
    is intelligent low-overhead mode while TF is the same old taskfile
    interface. As with other advanced interface (ahci/sil24),
    ATA_TFLAG_POLLING has no effect in packet mode. However, PIO commands are
    issued using TF interface in polling mode, so pdc_interrupt() considers
    interrupts spurious if ATA_TFLAG_POLLING is set.

    This is broken for polling NODATA commands because command is issued using
    packet mode but the interrupt handler ignores it due to ATA_TFLAG_POLLING.
    Fix pdc_qc_issue_prot() such that ATA/ATAPI NODATA commands are issued
    using TF interface if ATA_TFLAG_POLLING is set.

    This patch fixes detection failure introduced by polling SETXFERMODE.

    Signed-off-by: Tejun Heo
    Acked-by: Mikael Pettersson
    Acked-by: Jeff Garzik
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tejun Heo
     

25 May, 2007

1 commit


10 May, 2007

2 commits

  • There is a known problem with sata_promise on SATAII-150/300 TX4
    controller cards: it enumerates drives in an order that differs
    from the port numbers printed on the controller cards. However,
    Promise's BIOS and Linux driver both get the order right.

    I investigated Promise's Linux driver (v1.01.0.23), and found
    that it explicitly changes the mapping from logical port number
    to ATA engine MMIO address on the SATAII TX4 cards. It does this
    on all SATAII TX4 cards, without inspecting revision etc. The
    SATAII TX2plus cards continue to use the same mapping that was
    used for the first-generation chips.

    This patch updates sata_promise to use the new port number to
    ATA engine mapping on SATAII TX4 cards, which fixes the drive
    enumeration order problem on those cards. Tested on several
    1st and 2nd generation TX2plus and TX4 chips.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • The sata_promise error decode update changed pdc_host_intr()
    to return and not complete the qc after detecting an error.
    Unfortunately not completing the qc:s causes them to always
    time out on error, which is wrong and has nasty side-effects.

    This patch updates pdc_error_intr() to call ata_port_abort(),
    similar to ahci and sata_sil24. Doing this is important as it
    makes EH see the original error and not a bogus timeout.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

29 Apr, 2007

7 commits

  • Convert sata_via and sata_promise to new init model. Both controllers
    can have combined configuration (SATA + PATA) and used twisted
    initialization method (modifying port in ->port_start) to overcome
    probe_ent limitations.

    This patch converts both drivers to new init model in which such
    configuration is natively supported.

    * promise: Combined pata port now uses separate port_info entry right
    after the sata counterpart entry.

    * promise: Controller configuration is discerned using ap->flags.
    This simplifies init path and makes it look more like other LLDs.

    * via: Both SATA and PATA ports in vt6421 are represented in their
    own port_info structure.

    Tested on PDC20375 (SATA150 TX2plus) [105a:3375] and PDC40775 (SATA
    300 TX2plus) [105a:3d73]. Couldn't test via cuz my c3 won't boot the
    current kernel.

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

    Tejun Heo
     
  • ->post_internal_cmd is simplified EH for internal commands. Its
    primary mission is to stop the controller such that no rogue memory
    access or other activities occur after the internal command is
    released. It may provide error diagnostics by setting qc->err_mask
    but this hasn't been a requirement.

    To ignore SETXFER failure for CFA devices, libata needs to know
    whether a command was failed by the device or for any other reason.
    ie. internal command needs to get AC_ERR_DEV right.

    This patch makes the following changes to AC_ERR_DEV handling and
    ->post_internal_cmd semantics to accomodate this need and simplify
    callback implementation.

    1. As long as the correct bits in the result TF registers are set,
    there is no need to set AC_ERR_DEV explicitly. libata EH core
    takes care of that for both normal and internal commands.

    2. The only requirement for ->post_internal_cmd() is to put the
    controller into quiescent state. It needs not to set any err_mask.

    3. ata_exec_internal_sg() performs minimal error analysis such that
    AC_ERR_DEV is automatically set as long as result_tf is filled
    correctly.

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

    Tejun Heo
     
  • Promise ATA ports should always be reset by pdc_reset_port()
    when errors are detected, but the recent error reason decoding
    update to sata_promise replaced that reset with a freeze.

    This patch changes the error detection to do a reset again.
    This makes the error decoding update safer, as it now only
    adds error decoding without changing any other behaviour.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch adds much needed error reason decoding and
    reporting to sata_promise. It's simplistic but should
    log all relevant error info the controller provides.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch changes sata_promise so that the PATA ports
    on TX2plus chips are bound to the pdc_pata_ops structure.
    This means that operations called from the SATA ops
    structures don't need any SATA-vs-PATA tests any more.
    Instead, operations that depend on a port being SATA or
    PATA are separated into different procedures.

    * pdc_cable_type() is split into a PATA version and a
    SATA version
    * pdc_error_handler() is split into a PATA version and a
    SATA version, that both call a common version after
    setting up the `hardreset' function pointer
    * pdc_old_check_atapi_dma() is now only used for SATAI
    ports, so is renamed to pdc_old_sata_check_atapi_dma()
    and simplified
    * pdc_sata_scr_{read,write}() are now only used for SATA
    ports, so their is-not-SATA tests are removed
    * pdc_port_start() is split into three procedures: a wrapper
    which performs the ->ops adjustment on TX2plus PATA ports,
    a procedure with the common code, and a procedure with
    the SATA-specific code (this bit might be cleaned up by
    Tejun's new init model)

    Tested on 20619, 20575, and 20775 chips.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • The recent change which moved cable detection from
    pdc_pre_reset() to the new ->cable_detect hook only
    added the hook for SATAII chips, leaving SATAI chips
    and the 20619 without the hook. Fixed by this patch.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

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

    Alan Cox
     

26 Feb, 2007

3 commits

  • Bump versions based on changes submitted during 2.6.21 merge window.

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Each place in pdc_ata_init_one() that initialises a SATA
    port first calls pdc_ata_setup_port(), and then manually
    assigns the port's ->scr_addr. Simplify the code by extending
    pdc_ata_setup_port() to also handle scr_addr initialisation;
    for PATA ports we pass NULL as scr_addr.

    The initialisation of the PATA-only 20619 redundantly set
    up scr_addr for the ports. Remove this.

    Tested on 20619, 20575, and 20775 chips.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • When I merged my 20619 new EH conversion with #libata-upstream
    I had to manually resolve a conflict, and inadvertently lost
    pdc_pata_ops' ->post_internal_cmd binding. Corrected by this patch.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

16 Feb, 2007

2 commits

  • This patch updates the sata_promise driver to use new-style
    libata error handling for 20619 (TX4000) chips. sata_promise
    already uses new EH for the other chips it supports, so the
    patch is quite simple:

    * remove ->phy_reset and ->eng_timeout ops from pdc_pata_ops,
    and instead bind ->freeze, ->thaw, ->error_handler, and
    ->post_internal_cmd to existing new EH functions
    * drop ATA_FLAG_SRST from board_20619's flags
    * remove now unused pdc_pata_phy_reset() and pdc_eng_timeout()

    Tested on a TX4000 with both modern working disks and old/quirky
    disks. Also used a CD-RW drive to test reading and writing CDs.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch fixes an oversight which caused sata_promise to
    not perform cable detection on the TX2plus chips' PATA ports.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

15 Feb, 2007

1 commit

  • After Al Viro (finally) succeeded in removing the sched.h #include in module.h
    recently, it makes sense again to remove other superfluous sched.h includes.
    There are quite a lot of files which include it but don't actually need
    anything defined in there. Presumably these includes were once needed for
    macros that used to live in sched.h, but moved to other header files in the
    course of cleaning it up.

    To ease the pain, this time I did not fiddle with any header files and only
    removed #includes from .c-files, which tend to cause less trouble.

    Compile tested against 2.6.20-rc2 and 2.6.20-rc2-mm2 (with offsets) on alpha,
    arm, i386, ia64, mips, powerpc, and x86_64 with allnoconfig, defconfig,
    allmodconfig, and allyesconfig as well as a few randconfigs on x86_64 and all
    configs in arch/arm/configs on arm. I also checked that no new warnings were
    introduced by the patch (actually, some warnings are removed that were emitted
    by unnecessarily included header files).

    Signed-off-by: Tim Schmielau
    Acked-by: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tim Schmielau
     

10 Feb, 2007

9 commits

  • This patch is against each libata driver.

    Two IRQ calls are added in ata_port_operations.
    - irq_on() is used to enable interrupts.
    - irq_ack() is used to acknowledge a device interrupt.

    In most drivers, ata_irq_on() and ata_irq_ack() are used for
    irq_on and irq_ack respectively.

    In some drivers (ex: ahci, sata_sil24) which cannot use them
    as is, ata_dummy_irq_on() and ata_dummy_irq_ack() are used.

    Signed-off-by: Kou Ishizaki
    Signed-off-by: Akira Iguchi
    Signed-off-by: Jeff Garzik

    Akira Iguchi
     
  • Convert libata core layer and LLDs to use iomap.

    * managed iomap is used. Pointer to pcim_iomap_table() is cached at
    host->iomap and used through out LLDs. This basically replaces
    host->mmio_base.

    * if possible, pcim_iomap_regions() is used

    Most iomap operation conversions are taken from Jeff Garzik
    's iomap branch.

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

    Tejun Heo
     
  • Update libata LLDs to use devres. Core layer is already converted to
    support managed LLDs. This patch simplifies initialization and fixes
    many resource related bugs in init failure and detach path. For
    example, all converted drivers now handle ata_device_add() failure
    gracefully without excessive resource rollback code.

    As most resources are released automatically on driver detach, many
    drivers don't need or can do with much simpler ->{port|host}_stop().
    In general, stop callbacks are need iff port or host needs to be given
    commands to shut it down. Note that freezing is enough in many cases
    and ports are automatically frozen before being detached.

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

    Tejun Heo
     
  • Merge order left qc->nsect usage in sata_promise dangling. Kill it.

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

    Tejun Heo
     
  • This patch extends sata_promise to handle ATAPI_NODATA
    commands internally. However, commands destined to
    ATA_DFLAG_CDB_INTR devices are excluded from this and
    continue to be returned to libata.

    Concrete changes:
    - pdc_atapi_dma_pkt() is renamed to pdc_atapi_pkt(), and is
    extended to set up correct headers for NODATA packets
    - pdc_qc_prep() calls pdc_atapi_pkt() for ATAPI_NODATA
    - pdc_host_intr() handles ATAPI_NODATA
    - pdc_qc_issue_prot() sends ATAPI_NODATA packets via the
    chip's packet mechanism, except for CDB_INTR devices

    Tested on first- and second-generation chips, SATAPI and PATAPI,
    with no observable regressions.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch (against libata #upstream + the ATAPI cleanup patch)
    reimplements sata_promise's ATAPI support to format ATAPI DMA
    commands as normal packets, and to issue them via the hardware's
    normal packet machinery.

    It turns out that the only reason for issuing ATAPI DMA
    commands via the pdc_issue_atapi_pkt_cmd() procedure was to
    perform two interrupt-fiddling steps for ATA_DFLAG_CDB_INTR
    devices. But these steps aren't needed because sata_promise
    sets ATA_FLAG_PIO_POLLING, which disables DMA for those devices.
    The remaining steps can easily be done in ATA taskfile packets.

    Concrete changes:
    - pdc_atapi_dma_pkt() is extended to program all packet setup
    steps, and not just contain the CDB; the sequence of steps
    exactly mirrors what pdc_issue_atapi_pkt_cmd() did
    - pdc_atapi_dma_pkt() needed more parameters: simplify it by
    just passing 'qc' and having it extract the data it needs
    - pdc_issue_atai_pkt_cmd() and its two helper procedures
    pdc_wait_for_drq() and pdc_wait_on_busy() are removed

    Tested on first- and second-generation chips, SATAPI and PATAPI,
    with no observable regressions.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • Here's a cleanup for yesterday's sata_promise ATAPI patch:
    - add and use a symbolic constant for the altstatus register
    - check return status from ata_busy_wait()
    - add missing newline in a warning printk()
    - update comment in pdc_issue_atapi_pkt_cmd() to clarify
    that the maybe-wait-for-INT issue cannot occur in the
    current driver, but may occur if the driver starts issuing
    ATAPI non-DMA commands as PDC packets

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch adds ATAPI support to the sata_promise driver.
    This has been tested on both first- and second-generation
    chips (20378 and 20575), and with both SATAPI and PATAPI
    devices. CD-writing works.

    SATAPI DMA works on second-generation chips, but on
    first-generation chips SATAPI is limited to PIO due
    to what appears to be HW limitations.
    PATAPI DMA works on both first- and second-generation
    chips, but requires the separate PATA support patch
    before it can be used on TX2plus chips.

    The functional changes to the driver are:
    - remove ATA_FLAG_NO_ATAPI from PDC_COMMON_FLAGS
    - add ->check_atapi_dma() operation to enable DMA for bulk data
    transfers but force PIO for other ATAPI commands; this filter
    is from Promise's driver and largely matches pata_pdc207x.c
    - use a more restrictive ->check_atapi_dma() on first-generation
    chips to force SATAPI to always use PIO
    - add handling of ATAPI protocols to pdc_qc_prep(), pdc_host_intr(),
    and pdc_qc_issue_prot(): ATAPI_DMA is handled by the driver
    while non-DMA protocols are handed over to libata generic code
    - add pdc_issue_atapi_pkt_cmd() to handle the initial steps in
    issuing ATAPI DMA commands before sending the actual CDB;
    this procedure was ported from Promise's driver

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch implements a simple way of setting up per-port
    flags on the SATA+PATA Promise TX2plus chips, which is a
    prerequisite for supporting the PATA port on those chips.

    It is based on the observation that ap->flags isn't really
    used until after ->port_start() has been invoked. So it
    places the "exceptional" per-port flags array in the driver's
    private host structure, and uses it in ->port_start() to
    finalise the port's flags.

    This patch obsoletes the #promise-sata-pata branch included
    in the #all branch.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

07 Dec, 2006

2 commits

  • This patch converts sata_promise to use new-style libata error
    handling on Promise SATA chips, for both SATA and PATA ports.

    * ATA_FLAG_SRST is no longer set
    * ->phy_reset is no longer set as it is unused when ->error_handler
    is present, and pdc_sata_phy_reset() has been removed
    * pdc_freeze() masks interrupts and halts DMA via PDC_CTLSTAT
    * pdc_thaw() clears interrupt status in PDC_INT_SEQMASK and then
    unmasks interrupts in PDC_CTLSTAT
    * pdc_error_handler() reinitialises the port if it isn't frozen,
    and then invokes ata_do_eh() with standard {s,}ata reset methods
    * pdc_post_internal_cmd() resets the port in case of errors
    * the PATA-only 20619 chip continues to use old-style EH:
    not by necessity but simply because I don't have documentation
    for it or any way to test it

    Since the previous version pdc_error_handler() has been rewritten
    and it now mostly matches ahci and sata_sil24. In case anyone
    wonders: the call to pdc_reset_port() isn't a heavy-duty reset,
    it's a light-weight reset to quickly put a port into a sane state.

    The discussion about the PCI flushes in pdc_freeze() and pdc_thaw()
    seemed to end with a consensus that the flushes are OK and not
    obviously redundant, so I decided to keep them for now.

    This patch was prepared against 2.6.19-git7, but it also applies
    to 2.6.19 + libata #upstream, with or without the revised sata_promise
    cleanup patch I recently submitted.

    This patch does conflict with the #promise-sata-pata patch:
    this patch removes pdc_sata_phy_reset() while #promise-sata-pata
    modifies it. The correct patch resolution is to remove the function.

    Tested on 2037x and 2057x chips, with PATA patches on top and disks
    on both SATA and PATA ports.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     
  • This patch performs two simple cleanups of sata_promise.

    * Remove board_20771 and map device id 0x3577 to board_2057x.
    After the recent corrections for SATAII chips, board_20771 and
    board_2057x were equivalent in the driver.

    * Remove hp->hotplug_offset and use hp->flags & PDC_FLAG_GEN_II
    to compute hotplug_offset in pdc_host_init(). hp->hotplug_offset
    was used to distinguish 1st and 2nd generation chips in one
    particular case, but now we have that information in a more
    general form in hp->flags, so hp->hotplug_offset is redundant.

    Changes since previous submission: rebased on libata-dev #upstream,
    cleaned up hotplug_offset computation based on Tejun's comments,
    expanded hotplug_offset removal rationale.

    This patch does not depend on the pending new EH conversion patch.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson
     

03 Dec, 2006

1 commit

  • This patch adds code to fix up the PHYMODE4 "align timing"
    register value on second-generation Promise SATA chips.
    Failure to correct this value on non-x86 machines makes
    drive detection prone to failure due to timeouts. (I've
    observed about 50% detection failure rates on SPARC64.)

    The HW boots with a bad value in this register, but on x86
    machines the Promise BIOS corrects it to the value recommended
    by the manual, so most people have been unaffected by this issue.

    After developing the patch I checked Promise's SATAII driver,
    and discovered that it also corrects PHYMODE4 just like this
    patch does.

    This patch depends on the sata_promise SATAII updates
    patch I sent recently.

    Signed-off-by: Mikael Pettersson
    Signed-off-by: Jeff Garzik

    Mikael Pettersson