Commit 66396583 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach
Browse files

iwlwifi: correctly set the NMI register



When we want to trigger an NMI in the device, we need to set
bit 7 and not bit 0. However, older firmwares don't register
to the interrupt issued by bit 7. Use bit 7 first so that
the correct interrupt will be issued hoping that the firmware
will react. To be on the safe side, set bit 0 in case the
firmware didn't register to the proper interrupt.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 04fd2c28
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -193,12 +193,16 @@ void iwl_force_nmi(struct iwl_trans *trans)
	 * DEVICE_SET_NMI_8000B_REG - is used.
	 */
	if ((trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) ||
	    (CSR_HW_REV_STEP(trans->hw_rev) == SILICON_A_STEP))
		iwl_write_prph(trans, DEVICE_SET_NMI_REG, DEVICE_SET_NMI_VAL);
	else
	    (CSR_HW_REV_STEP(trans->hw_rev) == SILICON_A_STEP)) {
		iwl_write_prph(trans, DEVICE_SET_NMI_REG,
			       DEVICE_SET_NMI_VAL_DRV);
		iwl_write_prph(trans, DEVICE_SET_NMI_REG,
			       DEVICE_SET_NMI_VAL_HW);
	} else {
		iwl_write_prph(trans, DEVICE_SET_NMI_8000B_REG,
			       DEVICE_SET_NMI_8000B_VAL);
	}
}
IWL_EXPORT_SYMBOL(iwl_force_nmi);

static const char *get_fh_string(int cmd)
+2 −1
Original line number Diff line number Diff line
@@ -108,7 +108,8 @@

/* Device NMI register */
#define DEVICE_SET_NMI_REG 0x00a01c30
#define DEVICE_SET_NMI_VAL 0x1
#define DEVICE_SET_NMI_VAL_HW BIT(0)
#define DEVICE_SET_NMI_VAL_DRV BIT(7)
#define DEVICE_SET_NMI_8000B_REG 0x00a01c24
#define DEVICE_SET_NMI_8000B_VAL 0x1000000