qcacmn: Fix hal_get_srng_ring_id() for Beryllium LMAC rings

For Beryllium LMAC rings, hal_get_srng_ring_id() provides the ring IDs
separately per each LMAC only if that LMAC ring is a destination ring
(This is done to use a common source ring for the DMAC rings).
But the ring IDs for LMAC source rings like DIR_BUF_RX_SRC_DMA_RING are not
being provided separately per LMAC. As a result, these ring IDs in
split-PHY mode are colliding for the 2 LMACs.
Fix this by doing the following.
 - Mark the DMAC common rings within the LMAC rings.
 - Provide ring ID separately per each LMAC if the ring is an LMAC ring
   but not a DMAC common ring.

Change-Id: Ifdae085b5784a03763abfc4edb42d94593e3ea21
CRs-Fixed: 3282702
This commit is contained in:
Shiva Krishna Pittala
2022-09-03 22:33:20 +05:30
committed by Madan Koyyalamudi
parent ffec5f3f9e
commit 527b0343a3
5 changed files with 8 additions and 6 deletions

View File

@@ -132,13 +132,11 @@ static int hal_get_srng_ring_id(struct hal_soc *hal, int ring_type,
return -EINVAL;
}
/*
* For BE, dmac_cmn_src_rxbuf_ring is set. If this is set
* and ring is dst and also lmac ring then provide ring id per lmac
/**
* Some DMAC rings share a common source ring, hence don't provide them
* with separate ring IDs per LMAC.
*/
if (ring_config->lmac_ring &&
(!hal->dmac_cmn_src_rxbuf_ring ||
ring_config->ring_dir == HAL_SRNG_DST_RING)) {
if (ring_config->lmac_ring && !ring_config->dmac_cmn_ring) {
ring_id = (ring_config->start_ring_id + ring_num +
(mac_id * HAL_MAX_RINGS_PER_LMAC));
} else {