Tamizh Chelvam Raja <quic_tamizhr@xxxxxxxxxxx> wrote: > If STATUS_BUFFER_DONE is not set for a monitor status ring entry, > we don't process the status ring until STATUS_BUFFER_DONE set > for that status ring entry. > > During LMAC reset it may happen that hardware will not write > STATUS_BUFFER_DONE tlv in status buffer, in that case we end up > waiting for STATUS_BUFFER_DONE leading to backpressure on monitor > status ring. > > To fix the issue, when HP (Head Pointer) + 1 entry is peeked and if DMA is not > done and if HP + 2 entry's DMA done is set, replenish HP + 1 entry and start > processing in next interrupt. If HP + 2 entry's DMA done is not set, poll onto > HP + 1 entry DMA done to be set. > > Also, during monitor attach HP points to the end of the ring and TP (Tail > Pointer) points to the start of the ring. Using ath11k_hal_srng_src_peek() may > result in processing invalid buffer for the very first interrupt. Since, HW > starts writing buffer from TP. > > To avoid this issue call ath11k_hal_srng_src_next_peek() instead of > calling ath11k_hal_srng_src_peek(). > > Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Venkateswara Naralasetty <quic_vnaralas@xxxxxxxxxxx> > Co-developed-by: Tamizh Chelvam Raja <quic_tamizhr@xxxxxxxxxxx> > Signed-off-by: Tamizh Chelvam Raja <quic_tamizhr@xxxxxxxxxxx> > Signed-off-by: Kalle Valo <quic_kvalo@xxxxxxxxxxx> Patch applied to ath-next branch of ath.git, thanks. 4c2b796be3a1 wifi: ath11k: skip status ring entry processing -- https://patchwork.kernel.org/project/linux-wireless/patch/20240429073624.736147-1-quic_tamizhr@xxxxxxxxxxx/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches