All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicolas Escande" <nico.escande@gmail.com>
To: "Praneesh P" <quic_ppranees@quicinc.com>, <ath12k@lists.infradead.org>
Cc: <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH 3/3] wifi: ath12k: fix firmware crash during reo reinject
Date: Wed, 22 May 2024 09:28:05 +0200	[thread overview]
Message-ID: <D1FZV4IMV3FE.UZTMPWY3J3KB@gmail.com> (raw)
In-Reply-To: <e8e4a015-3610-4f12-9ed8-e8281af8bf4f@quicinc.com>

On Wed May 22, 2024 at 9:15 AM CEST, Praneesh P wrote:
>
>
> On 5/21/2024 2:20 PM, Nicolas Escande wrote:
> > On Mon May 20, 2024 at 9:00 AM CEST, P Praneesh wrote:
> >> When handling fragmented packets, the ath12k driver reassembles each
> >> fragment into a normal packet and then reinjects it into the HW ring.
> >> However, a firmware crash occurs during this reinjection process.
> >> The issue arises because the driver populates peer metadata in
> >> reo_ent_ring->queue_addr_lo, while the firmware expects the physical
> >> address obtained from the corresponding peer’s queue descriptor. Fix it
> >> by filling peer's queue descriptor's physical address in queue_addr_lo.
> >>
> >> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00209-QCAHKSWPL_SILICONZ-1
> >>
> >> Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
> >> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
> >> ---
> >>   drivers/net/wireless/ath/ath12k/dp_rx.c | 14 ++++++--------
> >>   1 file changed, 6 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
> >> index 2bfcc19d15ea..2adb6c7d4a42 100644
> >> --- a/drivers/net/wireless/ath/ath12k/dp_rx.c
> >> +++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
> >> @@ -2967,7 +2967,7 @@ static int ath12k_dp_rx_h_defrag_reo_reinject(struct ath12k *ar,
> >>   	struct hal_srng *srng;
> >>   	dma_addr_t link_paddr, buf_paddr;
> >>   	u32 desc_bank, msdu_info, msdu_ext_info, mpdu_info;
> >> -	u32 cookie, hal_rx_desc_sz, dest_ring_info0;
> >> +	u32 cookie, hal_rx_desc_sz, dest_ring_info0, queue_addr_hi;
> >>   	int ret;
> >>   	struct ath12k_rx_desc_info *desc_info;
> >>   	enum hal_rx_buf_return_buf_manager idle_link_rbm = dp->idle_link_rbm;
> >> @@ -3060,13 +3060,11 @@ static int ath12k_dp_rx_h_defrag_reo_reinject(struct ath12k *ar,
> >>   	reo_ent_ring->rx_mpdu_info.peer_meta_data =
> >>   		reo_dest_ring->rx_mpdu_info.peer_meta_data;
> >>   
> >> -	/* Firmware expects physical address to be filled in queue_addr_lo in
> >> -	 * the MLO scenario and in case of non MLO peer meta data needs to be
> >> -	 * filled.
> >> -	 * TODO: Need to handle for MLO scenario.
> >> -	 */
> >> -	reo_ent_ring->queue_addr_lo = reo_dest_ring->rx_mpdu_info.peer_meta_data;
> >> -	reo_ent_ring->info0 = le32_encode_bits(dst_ind,
> >> +	reo_ent_ring->queue_addr_lo = cpu_to_le32(lower_32_bits(rx_tid->paddr));
> >> +	queue_addr_hi = upper_32_bits(rx_tid->paddr);
> > Shouldn't there be a cpu_to_le32 somewhere here ? It just seems asymetrical
> > between the two values extracted from rx_tid->paddr
> le32_encode_bits of queue_addr_hi does that conversion, so there is no 
> need to explicitly convert cpu_to_le32 while fetching rx_tid->paddr's 
> upper 32 bits.
OK, got it,
> >> +	reo_ent_ring->info0 = le32_encode_bits(queue_addr_hi,
> >> +					       HAL_REO_ENTR_RING_INFO0_QUEUE_ADDR_HI) |
> >> +			      le32_encode_bits(dst_ind,
> >>   					       HAL_REO_ENTR_RING_INFO0_DEST_IND);
> >>   
> >>   	reo_ent_ring->info1 = le32_encode_bits(rx_tid->cur_sn,
> > 
Thanks


      reply	other threads:[~2024-05-22  7:28 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-20  7:00 [PATCH 0/3] wifi: ath12k: fix issues in rx fragmentation path P Praneesh
2024-05-20  7:00 ` [PATCH 1/3] wifi: ath12k: change DMA direction while mapping reinjected packets P Praneesh
2024-05-20 23:38   ` Jeff Johnson
2024-05-25  8:57   ` Kalle Valo
2024-05-20  7:00 ` [PATCH 2/3] wifi: ath12k: fix invalid memory access while processing fragmented packets P Praneesh
2024-05-20 23:38   ` Jeff Johnson
2024-05-20  7:00 ` [PATCH 3/3] wifi: ath12k: fix firmware crash during reo reinject P Praneesh
2024-05-20 23:38   ` Jeff Johnson
2024-05-21  8:50   ` Nicolas Escande
2024-05-22  6:59     ` Ping-Ke Shih
2024-05-22  7:15     ` Praneesh P
2024-05-22  7:28       ` Nicolas Escande [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D1FZV4IMV3FE.UZTMPWY3J3KB@gmail.com \
    --to=nico.escande@gmail.com \
    --cc=ath12k@lists.infradead.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=quic_ppranees@quicinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.