git: ed92055cb8e7 - main - iwm: bring IWM_CSR_HW_IF_CONFIG_REG programming in line with openbsd
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 15 Oct 2026 02:19:05 UTC
The branch main has been updated by adrian:
URL: https://cgit.FreeBSD.org/src/commit/?id=ed92055cb8e72d0a2055dc3e2f8fa96853c71d50
commit ed92055cb8e72d0a2055dc3e2f8fa96853c71d50
Author: Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2026-10-15 01:49:16 +0000
Commit: Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2026-10-15 01:49:18 +0000
iwm: bring IWM_CSR_HW_IF_CONFIG_REG programming in line with openbsd
bring the iwm_nic_config() / IWM_CSR_HW_IF_CONFIG_REG programming
in line with openbsd.
Locally tested:
* 3160 STA mode
* 7260 STA mode
* 8260 STA mode
* 9260 STA mode
Obtained from: OpenBSD a6e25c727a2214219715b51ba6af2221d7e0d674
Differential Revision: https://reviews.freebsd.org/D60081
---
sys/dev/iwm/if_iwm.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c
index 610156681272..dd154e44aa8f 100644
--- a/sys/dev/iwm/if_iwm.c
+++ b/sys/dev/iwm/if_iwm.c
@@ -1469,7 +1469,7 @@ static void
iwm_nic_config(struct iwm_softc *sc)
{
uint8_t radio_cfg_type, radio_cfg_step, radio_cfg_dash;
- uint32_t reg_val = 0;
+ uint32_t mask, val, reg_val = 0;
uint32_t phy_config = iwm_get_phy_config(sc);
radio_cfg_type = (phy_config & IWM_FW_PHY_CFG_RADIO_TYPE) >>
@@ -1490,15 +1490,18 @@ iwm_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,
- IWM_CSR_HW_IF_CONFIG_REG_MSK_MAC_DASH |
+ mask = 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_CSR_HW_IF_CONFIG_REG_BIT_MAC_SI;
+
+ val = IWM_READ(sc, IWM_CSR_HW_IF_CONFIG_REG);
+ val &= ~mask;
+ val |= reg_val;
+ IWM_WRITE(sc, IWM_CSR_HW_IF_CONFIG_REG, val);
IWM_DPRINTF(sc, IWM_DEBUG_RESET,
"Radio type=0x%x-0x%x-0x%x\n", radio_cfg_type,