• Tejun Heo's avatar
    libata-acpi: implement and use ata_acpi_init_gtm() · c05e6ff0
    Tejun Heo authored
    _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: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    c05e6ff0
libata-acpi.c 17.9 KB