iwm: Sync device initialization and reset code with iwlwifi.
MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
c7fe11ddde
commit
3539374da9
@ -1353,6 +1353,8 @@ iwm_stop_device(struct iwm_softc *sc)
|
||||
*/
|
||||
iwm_enable_rfkill_int(sc);
|
||||
iwm_check_rfkill(sc);
|
||||
|
||||
iwm_prepare_card_hw(sc);
|
||||
}
|
||||
|
||||
/* iwlwifi: mvm/ops.c */
|
||||
@ -1381,7 +1383,15 @@ iwm_mvm_nic_config(struct iwm_softc *sc)
|
||||
reg_val |= radio_cfg_step << IWM_CSR_HW_IF_CONFIG_REG_POS_PHY_STEP;
|
||||
reg_val |= radio_cfg_dash << IWM_CSR_HW_IF_CONFIG_REG_POS_PHY_DASH;
|
||||
|
||||
IWM_WRITE(sc, IWM_CSR_HW_IF_CONFIG_REG, reg_val);
|
||||
IWM_WRITE(sc, IWM_CSR_HW_IF_CONFIG_REG,
|
||||
IWM_CSR_HW_IF_CONFIG_REG_MSK_MAC_DASH |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_MSK_MAC_STEP |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_MSK_PHY_STEP |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_MSK_PHY_DASH |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_MSK_PHY_TYPE |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_BIT_MAC_SI |
|
||||
reg_val);
|
||||
|
||||
IWM_DPRINTF(sc, IWM_DEBUG_RESET,
|
||||
"Radio type=0x%x-0x%x-0x%x\n", radio_cfg_type,
|
||||
|
@ -346,6 +346,8 @@ iwm_enable_rfkill_int(struct iwm_softc *sc)
|
||||
{
|
||||
sc->sc_intmask = IWM_CSR_INT_BIT_RF_KILL;
|
||||
IWM_WRITE(sc, IWM_CSR_INT_MASK, sc->sc_intmask);
|
||||
IWM_SETBITS(sc, IWM_CSR_GP_CNTRL,
|
||||
IWM_CSR_GP_CNTRL_REG_FLAG_RFKILL_WAKE_L1A_EN);
|
||||
}
|
||||
|
||||
int
|
||||
@ -404,7 +406,9 @@ iwm_prepare_card_hw(struct iwm_softc *sc)
|
||||
if (iwm_set_hw_ready(sc))
|
||||
goto out;
|
||||
|
||||
DELAY(100);
|
||||
IWM_SETBITS(sc, IWM_CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
IWM_CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
DELAY(1000);
|
||||
|
||||
/* If HW is not ready, prepare the conditions to check again */
|
||||
IWM_SETBITS(sc, IWM_CSR_HW_IF_CONFIG_REG,
|
||||
@ -590,6 +594,16 @@ iwm_apm_init(struct iwm_softc *sc)
|
||||
void
|
||||
iwm_apm_stop(struct iwm_softc *sc)
|
||||
{
|
||||
IWM_SETBITS(sc, IWM_CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
IWM_CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
IWM_SETBITS(sc, IWM_CSR_HW_IF_CONFIG_REG,
|
||||
IWM_CSR_HW_IF_CONFIG_REG_PREPARE |
|
||||
IWM_CSR_HW_IF_CONFIG_REG_ENABLE_PME);
|
||||
DELAY(1000);
|
||||
IWM_CLRBITS(sc, IWM_CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
IWM_CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
DELAY(5000);
|
||||
|
||||
/* stop device's busmaster DMA activity */
|
||||
IWM_SETBITS(sc, IWM_CSR_RESET, IWM_CSR_RESET_REG_FLAG_STOP_MASTER);
|
||||
|
||||
@ -597,6 +611,14 @@ iwm_apm_stop(struct iwm_softc *sc)
|
||||
IWM_CSR_RESET_REG_FLAG_MASTER_DISABLED,
|
||||
IWM_CSR_RESET_REG_FLAG_MASTER_DISABLED, 100))
|
||||
device_printf(sc->sc_dev, "timeout waiting for master\n");
|
||||
|
||||
/*
|
||||
* Clear "initialization complete" bit to move adapter from
|
||||
* D0A* (powered-up Active) --> D0U* (Uninitialized) state.
|
||||
*/
|
||||
IWM_CLRBITS(sc, IWM_CSR_GP_CNTRL,
|
||||
IWM_CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
|
||||
|
||||
IWM_DPRINTF(sc, IWM_DEBUG_TRANS, "%s: iwm apm stop\n", __func__);
|
||||
}
|
||||
|
||||
|
@ -289,7 +289,7 @@
|
||||
#define IWM_CSR_GP_CNTRL_REG_VAL_MAC_ACCESS_EN (0x00000001)
|
||||
|
||||
#define IWM_CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE (0x07000000)
|
||||
#define IWM_CSR_GP_CNTRL_REG_FLAG_MAC_POWER_SAVE (0x04000000)
|
||||
#define IWM_CSR_GP_CNTRL_REG_FLAG_RFKILL_WAKE_L1A_EN (0x04000000)
|
||||
#define IWM_CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW (0x08000000)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user