• Emmanuel Grumbach's avatar
    iwlwifi: pcie: don't access periphery registers when not available · f98ad635
    Emmanuel Grumbach authored
    The periphery can't be accessed before we set the
    INIT_DONE bit which initializes the device.
    
    A previous patch added a reconfiguration of the MSI-X
    tables upon resume, but at that point in the flow,
    INIT_DONE wasn't set. Since the reconfiguration of the
    MSI-X tables require periphery access, it failed.
    
    The difference between WoWLAN and without WoWLAN is that
    in WoWLAN, iwl_trans_pcie_d3_suspend clears the INIT_DONE
    without clearing the STATUS_DEVICE_ENABLED bit in the
    software status. Because of that, the resume code thinks
    that the device is enabled, but the INIT_DONE bit has been
    cleared.
    
    To fix this, don't reconfigure the MSI-X tables in case
    WoWLAN is enabled. It will be done in
    iwl_trans_pcie_d3_resume anyway.
    
    Fixes: 52848a79 ("iwlwifi: pcie: reconfigure MSI-X HW on resume")
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
    f98ad635
drv.c 51.2 KB