git: ahci - Implement FBS for port-multipliers

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Dec 19 10:20:53 PST 2016


commit 8119d5f597081d0e718c4fa67ac9e59304a2e062
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Dec 19 10:08:06 2016 -0800

    ahci - Implement FBS for port-multipliers
    
    * Implement FBS (FIS-Based Switching) for port-multipliers.  If the
      chipset supports it, the ahci driver now turns on FBS mode which
      allows us to queue concurrent requests to different targets.
    
      Most AHCI chipsets do not support FBS resulting in poor port-multiplier
      performance.
    
      - FBS is enabled in the PM probe.
    
      - FBS must be disabled when doing a hard reset.
    
      - In FBS mode commands must be queued to PREG_CI one at a time,
        and the target must be written to AHCI_PREG_FBS prior to activation
        via CI.
    
      - RFIS area is larger, and RFIS responses are copied from the
        appropriate target index instead of index 0.
    
      - Issue a COMRESET during the PM probe if a BSY status is
        recognized, which helps on chipsets which do not implement
        the SCLO cap.
    
    * Clean-up a little logic in ahci_port_stop().
    
    * Use the saved sc_cap to check for the SCLO capability instead of
      re-reading AHCI_REG_CAP in a few places.
    
    * Dump the RFIS data to the console on error.
    
    * Fixup sc_cap to directly incorporate quirks.

Summary of changes:
 sys/dev/disk/ahci/ahci.c        | 147 ++++++++++++++++++++++++++++++++++------
 sys/dev/disk/ahci/ahci.h        |   3 +
 sys/dev/disk/ahci/ahci_attach.c |   9 ++-
 sys/dev/disk/ahci/ahci_pm.c     | 110 ++++++++++++++++++++++++------
 4 files changed, 225 insertions(+), 44 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8119d5f597081d0e718c4fa67ac9e59304a2e062


-- 
DragonFly BSD source repository


More information about the Commits mailing list