• Tejun Heo's avatar
    [PATCH] libata: improve driver initialization and deinitialization · 0be0aa98
    Tejun Heo authored
    Implement ahci_[de]init_port() and use it during initialization and
    de-initialization.  ahci_[de]init_port() are supersets of what used to
    be done during driver [de-]initialization.  This patch makes the
    following behavior changes.
    
    * Per-port IRQ mask is cleared on driver load as done in other
      drivers.  The mask will be configured properly during probe.
    
    * During init_one(), HOST_IRQ_STAT is cleared after masking port IRQs
      such that there is no race window.
    
    * CMD_SPIN_UP is cleared during init_one() instead of being set.  It
      is set in port_start().  This is more consistent with overall
      structure of initialization.  Note that CMD_SPIN_UP simply controls
      PHY activation.
    
    * Slumber and staggered spin-up are handled properly.
    
    * All init/deinit operations are done in step-by-step manner as
      described in the spec instead of issued as single merged command.
    
    Original implementation is from Zhao, Forrest <forrest.zhao@intel.com>
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarZhao, Forrest <forrest.zhao@intel.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    0be0aa98
ahci.c 40.5 KB