Selaa lähdekoodia

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
Shiva Krishna Pittala 2 vuotta sitten
vanhempi
sitoutus
527b0343a3

+ 1 - 0
hal/wifi3.0/hal_internal.h

@@ -728,6 +728,7 @@ struct hal_hw_srng_config {
 	enum hal_srng_dir ring_dir;
 	uint32_t max_size;
 	bool nf_irq_support;
+	bool dmac_cmn_ring;
 };
 
 #define MAX_SHADOW_REGISTERS 40

+ 4 - 6
hal/wifi3.0/hal_srng.c

@@ -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 {

+ 1 - 0
hal/wifi3.0/qca5332/hal_5332.c

@@ -2406,6 +2406,7 @@ struct hal_hw_srng_config hw_srng_table_5332[] = {
 		.reg_start = {},
 		.reg_size = {},
 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
+		.dmac_cmn_ring = TRUE,
 	},
 };
 

+ 1 - 0
hal/wifi3.0/qcn9224/v1/hal_9224v1.c

@@ -543,6 +543,7 @@ struct hal_hw_srng_config hw_srng_table_9224v1[] = {
 		.reg_start = {},
 		.reg_size = {},
 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
+		.dmac_cmn_ring = TRUE,
 	},
 };
 

+ 1 - 0
hal/wifi3.0/qcn9224/v2/hal_9224v2.c

@@ -543,6 +543,7 @@ struct hal_hw_srng_config hw_srng_table_9224v2[] = {
 		.reg_start = {},
 		.reg_size = {},
 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
+		.dmac_cmn_ring = TRUE,
 	},
 };