11 Jul, 2008

2 commits

  • The problem is introduced by commit
    664d080c41463570b95717b5ad86e79dc1be0877.

    acpi_evaluate_integer is a sleeping function,
    and it should not be called with spin_lock_irqsave.
    https://bugzilla.redhat.com/show_bug.cgi?id=451399

    Signed-off-by: Zhang Rui
    Signed-off-by: Jeff Garzik

    Zhang Rui
     
  • Some BIOSen enable DIPM via _GTF which causes command timeouts under
    certain configuration. This didn't occur on 2.6.25 because 2.6.25
    defaulted to SRST, so _GTF wasn't executed during boot probe, so ahci
    host reset disabled DIPM and as _GTF wasn't executed after SRST, DIPM
    wasn't enabled. On 2.6.26, hardreset is used during probe and after
    probe _GTF is executed enabling DIPM and thus the failures.

    This patch could theoretically disable DIPM on machines which used to
    have it enabled on 2.6.25 but AFAIK ahci is currently the only driver
    which uses SATA ACPI hierarchy (_SDD) and as the host reset would have
    always disabled DIPM, this shouldn't happen.

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

    Tejun Heo
     

04 Jun, 2008

1 commit

  • * Differentiate between bay devices in dock stations and others:

    - When an ACPI_NOTIFY_EJECT_REQUEST appears, just signal uevent to
    userspace (that is when the optional eject button on a bay device is
    pressed/pulled) giving the possibility to unmount file systems and to
    clean up. Also, only send uevent in case we get an EJECT_REQUEST
    without doing anything else. In other cases, you'll get an add/remove
    event because libata attaches/detaches the device.

    - In case of a dock event, which in turn signals an
    ACPI_NOTIFY_EJECT_REQUEST, immediately detach the device, because it
    may already have been gone

    * In case of an ACPI_NOTIFY_DEVICE/BUS_CHECK, evaluate _STA to check if
    the device has been plugged or unplugged. If plugged, hotplug it, if
    unplugged, just signal event to userspace
    (initial patch by Matthew Garrett )

    * Call ACPI _EJ0 for detached devices

    Signed-off-by: Holger Macht
    Signed-off-by: Jeff Garzik

    Holger Macht
     

20 May, 2008

2 commits

  • Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • The libata-acpi.c code currently accepts hotplug messages from both the
    port and the device. This does not match the behaviour of the bay
    driver, and may result in confusion when two hotplug requests are
    received for the same device. This patch limits the hotplug notification
    to removable ACPI devices, which in turn allows it to use the _STA
    method to determine whether the device has been removed or inserted.
    On removal, devices are marked as detached. On insertion, a hotplug scan
    is started. This should avoid lockups caused by the ata layer attempting
    to scan devices which have been removed. The uevent sending is moved
    outside the spinlock in order to avoid a warning generated by it firing
    when interrupts are disabled.

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

    Matthew Garrett
     

25 Apr, 2008

1 commit

  • These #if's are unneeded since they:
    - did anyway not handle the CONFIG_ACPI_DOCK_MODULE case correctly and
    - this is already handled in include/acpi/acpi_drivers.h and
    - it's now correctly handled in kconfig.

    Signed-off-by: Adrian Bunk
    Acked-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Adrian Bunk
     

18 Apr, 2008

2 commits

  • I got below log after a S3 resume in a ASUS A6VC laptop. The system has
    only one IDE drive. It appears there is no reason calling _GTF for
    disabled drive.

    ACPI Error (dsopcode-0483): Attempt to CreateField of length zero [20070126]
    ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.RATA] (Node df822a7c), AE_AML_OPERAND_VALUE
    ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.CHN1.DRV0._GTF] (Node df822bd0), AE_AML_OPERAND_VALUE
    ata2.00: _GTF evaluation failed (AE 0x3006)
    ACPI Error (dsopcode-0483): Attempt to CreateField of length zero [20070126]
    ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.RATA] (Node df822a7c), AE_AML_OPERAND_VALUE
    ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.CHN1.DRV1._GTF] (Node df822b94), AE_AML_OPERAND_VALUE
    ata2.01: _GTF evaluation failed (AE 0x3006)

    Signed-off-by: Shaohua Li
    Signed-off-by: Jeff Garzik

    Shaohua Li
     
  • Implement helpers to test whether PMP is supported, attached and
    determine pmp number to use when issuing SRST to a link. While at it,
    move ata_is_host_link() so that it's together with the two new PMP
    helpers.

    This change simplifies LLDs and helps making PMP support optional.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

17 Mar, 2008

1 commit

  • Improve ACPI hotplug handling such that dock event is handled properly.

    * Register handlers for dock events.

    * Directly detach device on EJECT_REQUEST instead of signaling hotplug
    event. This prevents libata from accessing severed controller
    and/or device.

    * While at it, use named constants for ACPI events and move uevent
    signaling inside host lock.

    Original patch and testing by Holger Macht.

    Signed-off-by: Tejun Heo
    Cc: Holger Macht
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

11 Mar, 2008

1 commit


23 Jan, 2008

5 commits

  • Reimplement ata_acpi_cbl_80wire() using ata_acpi_gtm_xfermask() and
    while at it relocate the function below ata_acpi_gtm_xfermask().

    New ata_acpi_cbl_80wire() implementation takes @gtm, in both pata_via
    and pata_amd, use the initial GTM value. Both are trying to peek
    initial BIOS configuration, so using initial caching value makes
    sense. This fixes ACPI part of cable detection in pata_amd which
    previously always returned 0 because configuring PIO0 during reset
    clears DMA configuration.

    Signed-off-by: Tejun Heo
    Cc: Alan Cox
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • libata-acpi is using separate timing tables for transfer modes
    although libata-core has the complete ata_timing table. Implement
    ata_timing_cycle2mode() to look for matching mode given transfer type
    and cycle duration and use it in libata-acpi and pata_acpi to replace
    private timing tables.

    Signed-off-by: Tejun Heo
    Cc: Alan Cox
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • ata_acpi_gtm_xfermask() as separated out from pacpi_discover_modes()
    has various bugs. Fix them.

    * The wrong comparison operator is used when finding for matching
    cycle resulting totally bogus result.

    * With the comparion operator fixed, boundary condtion handling is
    clumsy.

    * Setting of any DMA mask bit set all bits in PIO mask.

    * MWDMA and UDMA blocks are swapped.

    Signed-off-by: Tejun Heo
    Cc: Alan Cox
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Finding out matching transfer mode from ACPI GTM values is useful for
    other purposes too. Separate out the function and timing tables from
    pata_acpi::pacpi_discover_modes().

    Other than checking shared-configuration bit after doing
    ata_acpi_gtm() in pacpi_discover_modes() which should be safe, this
    patch doesn't introduce any behavior change.

    Signed-off-by: Tejun Heo
    Cc: Alan Cox
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • ACPI spec (ver 3.0a, p289) requires IDE power on/off executes ACPI _PSx
    methods. As recently most PATA drivers use libata, this patch adds _PSx
    method support in libata. ACPI spec doesn't mention if SATA requires the
    same _PSx method.

    Signed-off-by: Shaohua Li
    Acked-by: Len Brown
    Signed-off-by: Jeff Garzik

    Shaohua Li
     

18 Dec, 2007

7 commits

  • Implement _GTF command filtering which can be controlled by
    libata.acpi_filter kernel parameter. Currently SETXFER and LOCK
    commands are filtered.

    libata configures transfer mode by itself and _GTF SETXFER commands
    can potentially disrupt device configuration. _GTM/_STM mechanism
    can't handle hotplugging too well and when _GTF is executed,
    controller is in PIO0 rather than the mode _STM configured.

    Note that detecting SET MAX LOCK requires looking at the previous
    command. This adds a bit to code complexity.

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

    Tejun Heo
     
  • As _GTF commands can't transfer data, device error never signals
    transfer error. It indicates that the device vetoed the operation, so
    it's meaningless to retry.

    This patch makes libata-acpi to report and continue on device errors
    when executing _GTF commands. Also commands rejected by device don't
    contribute to the number of _GTF commands executed.

    While at it, update _GTF execution reporting such that all successful
    commands are logged at KERN_DEBUG and rename taskfile_load_raw() to
    ata_acpi_run_tf() for consistency.

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

    Tejun Heo
     
  • * If _GTF evalution fails, it's pointless to retry. If nothing else
    is wrong, just ignore the error.

    * After disabling ACPI, return success iff the number of executed _GTF
    command equals zero. Otherwise, tell EH to retry. This change
    fixes bogus 1 return bug where ata_acpi_on_devcfg() expects the
    caller to reload IDENTIFY data and continue but the caller
    interprets it as an error.

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

    Tejun Heo
     
  • On certain implementations, _GTF evaluation depends on preceding _STM
    and both can be pretty picky about the configuration. Using _GTM
    result cached during controller initialization satisfies the most
    neurotic _STM implementation. However, libata evaluates _GTF after
    reset during device configuration and the hardware state can be
    different from what _GTF expects and can cause evaluation failure.

    This patch adds dev->gtf_cache and updates ata_dev_get_GTF() such that
    it uses the cached value if available. Cache is cleared with a call
    to ata_acpi_clear_gtf().

    Because for SATA ACPI nodes _GTF must be evaluated after _SDD which
    can't be done till IDENTIFY is complete, _GTF caching from
    ata_acpi_on_resume() is used only for IDE ACPI nodes.

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

    Tejun Heo
     
  • _GTM fetches currently configured transfer mode while _STM configures
    controller according to _GTM parameter and prepares transfer mode
    configuration TFs for _GTF. In many cases _GTM and _STM
    implementations are quite brittle and can't cope with configuration
    changed by libata.

    libata does not depend on ATA ACPI to configure devices. The only
    reason libata performs _GTM and _STM are to make _GTF evaluation
    succeed and libata also doesn't care about how _GTF TFs configure
    transfer mode. It overrides that configuration anyway, so from
    libata's POV, it doesn't matter what value is feeded to _STM as long
    as evaluation succeeds for _STM and following _GTF.

    This patch adds dev->__acpi_init_gtm and store initial _GTM values on
    host initialization before modified by reset and mode configuration.
    If the field is valid, ata_acpi_init_gtm() returns pointer to the
    saved _GTM structure; otherwise, NULL.

    This saved value is used for _STM during resume and peek at
    BIOS/firmware programmed initial timing for later use. The accessor
    is there to make building w/o ACPI easy as dev->__acpi_init doesn't
    exist if ACPI is not enabled.

    On driver detach, the initial BIOS configuration is restored by
    executing _STM with the initial _GTM values such that the next driver
    can also use the initial BIOS configured values.

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

    Tejun Heo
     
  • Add two hooks - ata_acpi_dissociate() which is called during driver
    detach after the whole host is shutdown and ata_acpi_on_disable()
    which is called when a device is disabled.

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

    Tejun Heo
     
  • * No internal function uses const ata_port. Drop const from @ap.

    * Make ata_acpi_stm() copy @stm before using it and change @stm to
    const.

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

    Tejun Heo
     

10 Nov, 2007

1 commit


24 Oct, 2007

1 commit

  • Tackle the relatively sane complaints of checkpatch --file.

    The vast majority is indentation and whitespace changes, the rest are

    * #include fixes
    * printk KERN_xxx prefix addition
    * BSS/initializer cleanups

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     

13 Oct, 2007

7 commits

  • Add @timeout argument to ata_exec_internal[_sg](). If 0, default
    timeout ata_probe_timeout is used.

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

    Tejun Heo
     
  • 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
     
  • 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
     
  • 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
     
  • Combined from two Alan Cox patches:

    1) libata: ACPI checks for 80wire cable

    We can use the ACPI mode information with several drivers as a hint to
    cable type. If the ACPI mode set by the BIOS is faster than UDMA33 then
    we know the BIOS thinks there are 80wire cables. If it doesn't set such a
    mode or it has no ACPI method then we get no further information and can
    rely on existing approaches

    Introduce the function headers needed. Null it out for non ACPI boxes

    Signed-off-by: Alan Cox

    2) libata: ACPI checks for 80wire cable

    Provide actual methods for checking if the ACPI support thinks the cable
    is 80wire, or doesn't know

    Signed-off-by: Alan Cox

    Combined into a single changeset and
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • Multiple links and different number of devices per link should be
    considered to iterate over links and devices. This patch implements
    and uses link and device iterators - ata_port_for_each_link() and
    ata_link_for_each_dev() - and ata_link_max_devices().

    This change makes a lot of functions iterate over only possible
    devices instead of from dev 0 to dev ATA_MAX_DEVICES. All such
    changes have been examined and nothing should be broken.

    While at it, add a separating comment before device helpers to
    distinguish them better from link helpers and others.

    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
     

10 Jul, 2007

6 commits

  • Implement _GTM/_STM support. acpi_gtm is added to ata_port which
    stores _GTM parameters over suspend/resume cycle. A new hook
    ata_acpi_on_suspend() is responsible for storing _GTM parameters
    during suspend. _STM is executed in ata_acpi_on_resume(). With this
    change, invoking _GTF is safe on IDE hierarchy and acpi_sata check
    before _GTF is removed.

    ata_acpi_gtm() and ata_acpi_stm() implementation is taken from Alan
    Cox's pata_acpi implementation. ata_acpi_gtm() is fixed such that the
    result parameter is not shifted by sizeof(union acpi_object).

    Signed-off-by: Tejun Heo
    Cc: Alan Cox
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Remove remaining unnecessary feature and status checks.

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

    Tejun Heo
     
  • This patch reimplements ACPI invocation such that, instead of
    exporting ACPI details to the rest of libata, ACPI event handlers -
    ata_acpi_on_resume() and ata_acpi_on_devcfg() - are used. These two
    functions are responsible for determining whether specific ACPI method
    is used and when.

    On resume, _GTF is scheduled by setting ATA_DFLAG_ACPI_PENDING device
    flag. This is done this way to avoid performing the action on wrong
    device device (device swapping while suspended).

    On every ata_dev_configure(), ata_acpi_on_devcfg() is called, which
    performs _SDD and _GTF. _GTF is performed only after resuming and, if
    SATA, hardreset as the ACPI spec specifies. As _GTF may contain
    arbitrary commands, IDENTIFY page is re-read after _GTF taskfiles are
    executed.

    If one of ACPI methods fails, ata_acpi_on_devcfg() retries on the
    first failure. If it fails again on the second try, ACPI is disabled
    on the device. Note that successful configuration clears ACPI failed
    status.

    With all feature checks moved to the above two functions,
    do_drive_set_taskfiles() is trivial and thus collapsed into
    ata_acpi_exec_tfs(), which is now static and converted to return the
    number of executed taskfiles to be used by ata_acpi_on_resume(). As
    failures are handled properly, ata_acpi_push_id() now returns -errno
    on errors instead of unconditional zero.

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

    Tejun Heo
     
  • * Add missing LOCKING: and RETURNS: to function comment.

    * Don't conditionalize warning messages with ata_msg_probe(). Print
    directly with KERN_WARNING.

    * Drop duplicate debug messages.

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

    Tejun Heo
     
  • This patch cleans up ata_acpi_exec_tfs() and its friends.

    * Rename taskfile_array to ata_acpi_gtf and make it __packed as it's
    used as argument to ACPI method, and use pointer to ata_acpi_gtf and
    number of taskfiles to represent _GTF taskfiles instead of a pointer
    casted into unsigned long and byte count. This makes argument
    re-checking in do_drive_set_taskfiles() unnecessary.

    * Pointer in void * not in unsigned long.

    * Clean up do_drive_get_GTF() error handling and make
    do_drive_get_GTF() return number of taskfiles on success, 0 if _GTF
    doesn't exist or doesn't contain valid ata. -errno on other errors.

    * Remove superflous check for acpi->buffer.pointer.

    * Update taskfile_load_raw() such that printed messages look similar
    to the messages printed by ata_eh_report().

    * s/do_drive_get_GTF/ata_dev_get_GTF/
    s/do_drive_set_taskfiles/ata_dev_set_taskfiles/

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

    Tejun Heo
     
  • * Add acpi_handle to ata_host and ata_port. Rename
    ata_device->obj_handle to ->acpi_handle and move it above such that
    it doesn't get cleared on reconfiguration.

    * Replace ACPI node association which ata_acpi_associate() which is
    called once during host initialization. Unlike the previous
    implementation, ata_acpi_associate() uses ATA_FLAG_ACPI_SATA to
    choose between IDE or SATA ACPI hierarchy and uses simple child look
    up instead of recursive walk to match the nodes. This is way safer
    and simpler. Please read the following message for more info.

    http://article.gmane.org/gmane.linux.ide/17554

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

    Tejun Heo
     

16 May, 2007

1 commit

  • Whether a controller needs IDE or SATA ACPI hierarchy is determined by
    the programming interface of the controller not by whether the
    controller is SATA or PATA, or it supports slave device or not. This
    patch adds ATA_FLAG_ACPI_SATA port flags which tells libata-acpi that
    the port needs SATA ACPI nodes, and sets the flag for ahci and
    sata_sil24.

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

    Tejun Heo
     

12 May, 2007

1 commit

  • This patch cleans up libata-acpi such that it looks similar to other
    libata files. This patch doesn't introuce any behavior changes.

    * make libata-acpi functions take ata_device instead of ata_port +
    device index
    * s/atadev/dev/
    * de-indent local variable declarations

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

    Tejun Heo
     

10 May, 2007

1 commit