On Fri, 2022-04-29 at 22:34 +0530, Manikanta Pubbisetty wrote: Hello Manikanta, > Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01100- > QCAHKSWPL_SILICONZ-1 Nope your patch breaks QCN9074: [ 13.660963] ath11k_pci 0000:03:00.0: failed to set pcie link register 0x01e0e0a8: 0xffffffff != 0x00000010 [ 13.675994] ath11k_pci 0000:03:00.0: failed to set sysclk: -110 device still seem to work though > @@ -134,16 +134,13 @@ EXPORT_SYMBOL(ath11k_pcic_init_msi_config); > static inline u32 ath11k_pcic_get_window_start(struct ath11k_base *ab, > u32 offset) > { > - u32 window_start; > + u32 window_start = 0; > > - /* If offset lies within DP register range, use 3rd window */ > if ((offset ^ HAL_SEQ_WCSS_UMAC_OFFSET) < ATH11K_PCI_WINDOW_RANGE_MASK) > - window_start = 3 * ATH11K_PCI_WINDOW_START; > - /* If offset lies within CE register range, use 2nd window */ > - else if ((offset ^ HAL_CE_WFSS_CE_REG_BASE) < ATH11K_PCI_WINDOW_RANGE_MASK) > - window_start = 2 * ATH11K_PCI_WINDOW_START; > - else > - window_start = ATH11K_PCI_WINDOW_START; > + window_start = ab->hw_params.dp_window_idx * ATH11K_PCI_WINDOW_START; > + else if ((offset ^ HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab)) < > + ATH11K_PCI_WINDOW_RANGE_MASK) > + window_start = ab->hw_params.ce_window_idx * ATH11K_PCI_WINDOW_START; > > return window_start; > } for some offsets, previous code could return ATH11K_PCI_WINDOW_START, whereas new code now returns 0 > @@ -162,19 +159,12 @@ void ath11k_pcic_write32(struct ath11k_base *ab, u32 offset, u32 value) > > if (offset < ATH11K_PCI_WINDOW_START) { > iowrite32(value, ab->mem + offset); > - } else { > - if (ab->hw_params.static_window_map) > - window_start = ath11k_pcic_get_window_start(ab, offset); > - else > - window_start = ATH11K_PCI_WINDOW_START; > - > - if (window_start == ATH11K_PCI_WINDOW_START && > - ab->pci.ops->window_write32) { > - ab->pci.ops->window_write32(ab, offset, value); > - } else { > - iowrite32(value, ab->mem + window_start + > - (offset & ATH11K_PCI_WINDOW_RANGE_MASK)); > - } > + } else if (ab->hw_params.static_window_map) { > + window_start = ath11k_pcic_get_window_start(ab, offset); > + iowrite32(value, ab->mem + window_start + > + (offset & ATH11K_PCI_WINDOW_RANGE_MASK)); > + } else if (ab->pci.ops->window_write32) { > + ab->pci.ops->window_write32(ab, offset, value); > } > with previous code on QCN9074, when ath11k_pcic_get_window_start() returned ATH11K_PCI_WINDOW_START, then it would call window_write32() with new code on QCN9074, static_window_map is true, so window_write32 will never be called. > u32 ath11k_pcic_read32(struct ath11k_base *ab, u32 offset) ditto here -- Maxime