Эх сурвалжийг харах

qcacmn: Make num REOs and rx_threads depend on dp_reo_rings_map

Make 1:1 dependency on num REOs and rx_thread. Keep num rx_thread
dependent on rx REO rings, 1 rx_thread for each rx REO ring.
Controlled via INI dp_reo_rings_map.

Change-Id: I7c199226cfa3f173ea328d71075816b8eb9ba91f
CRs-Fixed: 3048260
Prakash Manjunathappa 3 жил өмнө
parent
commit
61178a761e

+ 78 - 14
dp/wifi3.0/dp_main.c

@@ -455,6 +455,7 @@ dp_soc_get_mon_mask_for_interrupt_mode(struct dp_soc *soc, int intr_ctx_num)
 }
 #endif
 
+#ifdef IPA_OFFLOAD
 /**
  * dp_get_num_rx_contexts() - get number of RX contexts
  * @soc_hdl: cdp opaque soc handle
@@ -463,17 +464,51 @@ dp_soc_get_mon_mask_for_interrupt_mode(struct dp_soc *soc, int intr_ctx_num)
  */
 static int dp_get_num_rx_contexts(struct cdp_soc_t *soc_hdl)
 {
-	int i;
-	int num_rx_contexts = 0;
+	int num_rx_contexts;
+	uint32_t reo_ring_map;
+	struct dp_soc *soc = (struct dp_soc *)soc_hdl;
+
+	reo_ring_map = wlan_cfg_get_reo_rings_mapping(soc->wlan_cfg_ctx);
 
+	switch (soc->arch_id) {
+	case CDP_ARCH_TYPE_BE:
+		/* 2 REO rings are used for IPA */
+		reo_ring_map &=  ~(BIT(3) | BIT(7));
+
+		break;
+	case CDP_ARCH_TYPE_LI:
+		/* 1 REO ring is used for IPA */
+		reo_ring_map &=  ~BIT(3);
+		break;
+	default:
+		dp_err("unkonwn arch_id 0x%x", soc->arch_id);
+		QDF_BUG(0);
+	}
+	/*
+	 * qdf_get_hweight32 prefer over qdf_get_hweight8 in case map is scaled
+	 * in future
+	 */
+	num_rx_contexts = qdf_get_hweight32(reo_ring_map);
+
+	return num_rx_contexts;
+}
+#else
+static int dp_get_num_rx_contexts(struct cdp_soc_t *soc_hdl)
+{
+	int num_rx_contexts;
+	uint32_t reo_config;
 	struct dp_soc *soc = (struct dp_soc *)soc_hdl;
 
-	for (i = 0; i < wlan_cfg_get_num_contexts(soc->wlan_cfg_ctx); i++)
-		if (wlan_cfg_get_rx_ring_mask(soc->wlan_cfg_ctx, i))
-			num_rx_contexts++;
+	reo_config = wlan_cfg_get_reo_rings_mapping(soc->wlan_cfg_ctx);
+	/*
+	 * qdf_get_hweight32 prefer over qdf_get_hweight8 in case map is scaled
+	 * in future
+	 */
+	num_rx_contexts = qdf_get_hweight32(reo_config);
 
 	return num_rx_contexts;
 }
+#endif
 
 #else
 
@@ -4195,25 +4230,28 @@ static void dp_soc_reset_intr_mask(struct dp_soc *soc)
 bool dp_reo_remap_config(struct dp_soc *soc, uint32_t *remap0,
 			 uint32_t *remap1, uint32_t *remap2)
 {
-	uint32_t ring[8] = {REO_REMAP_SW1, REO_REMAP_SW2, REO_REMAP_SW3};
-	int target_type;
+	uint32_t ring[WLAN_CFG_NUM_REO_DEST_RING_MAX] = {
+				REO_REMAP_SW1, REO_REMAP_SW2, REO_REMAP_SW3,
+				REO_REMAP_SW5, REO_REMAP_SW6, REO_REMAP_SW7};
 
-	target_type = hal_get_target_type(soc->hal_soc);
-
-	switch (target_type) {
-	case TARGET_TYPE_KIWI:
+	switch (soc->arch_id) {
+	case CDP_ARCH_TYPE_BE:
 		hal_compute_reo_remap_ix2_ix3(soc->hal_soc, ring,
 					      soc->num_reo_dest_rings -
 					      USE_2_IPA_RX_REO_RINGS, remap1,
 					      remap2);
 		break;
 
-	default:
+	case CDP_ARCH_TYPE_LI:
 		hal_compute_reo_remap_ix2_ix3(soc->hal_soc, ring,
 					      soc->num_reo_dest_rings -
 					      USE_1_IPA_RX_REO_RING, remap1,
 					      remap2);
 		break;
+	default:
+		dp_err("unkonwn arch_id 0x%x", soc->arch_id);
+		QDF_BUG(0);
+
 	}
 
 	dp_debug("remap1 %x remap2 %x", *remap1, *remap2);
@@ -4293,6 +4331,29 @@ static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring)
 	uint8_t num = 0;
 
 	switch (value) {
+	/* should we have all the different possible ring configs */
+	case 0xFF:
+		num = 8;
+		ring[0] = REO_REMAP_SW1;
+		ring[1] = REO_REMAP_SW2;
+		ring[2] = REO_REMAP_SW3;
+		ring[3] = REO_REMAP_SW4;
+		ring[4] = REO_REMAP_SW5;
+		ring[5] = REO_REMAP_SW6;
+		ring[6] = REO_REMAP_SW7;
+		ring[7] = REO_REMAP_SW8;
+		break;
+
+	case 0x3F:
+		num = 6;
+		ring[0] = REO_REMAP_SW1;
+		ring[1] = REO_REMAP_SW2;
+		ring[2] = REO_REMAP_SW3;
+		ring[3] = REO_REMAP_SW4;
+		ring[4] = REO_REMAP_SW5;
+		ring[5] = REO_REMAP_SW6;
+		break;
+
 	case 0xF:
 		num = 4;
 		ring[0] = REO_REMAP_SW1;
@@ -4370,6 +4431,9 @@ static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring)
 		num = 1;
 		ring[0] = REO_REMAP_SW1;
 		break;
+	default:
+		dp_err("unkonwn reo ring map 0x%x", value);
+		QDF_BUG(0);
 	}
 	return num;
 }
@@ -4382,14 +4446,14 @@ bool dp_reo_remap_config(struct dp_soc *soc,
 	uint8_t offload_radio = wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx);
 	uint32_t reo_config = wlan_cfg_get_reo_rings_mapping(soc->wlan_cfg_ctx);
 	uint8_t target_type, num;
-	uint32_t ring[4];
+	uint32_t ring[WLAN_CFG_NUM_REO_DEST_RING_MAX];
 	uint32_t value;
 
 	target_type = hal_get_target_type(soc->hal_soc);
 
 	switch (offload_radio) {
 	case dp_nss_cfg_default:
-		value = reo_config & 0xF;
+		value = reo_config & WLAN_CFG_NUM_REO_RINGS_MAP_MAX;
 		num = dp_reo_ring_selection(value, ring);
 		hal_compute_reo_remap_ix2_ix3(soc->hal_soc, ring,
 					      num, remap1, remap2);

+ 69 - 78
hal/wifi3.0/kiwi/hal_kiwi.c

@@ -1480,94 +1480,85 @@ void hal_compute_reo_remap_ix2_ix3_kiwi(uint32_t *ring_map,
 					uint32_t num_rings, uint32_t *remap1,
 					uint32_t *remap2)
 {
-	/*
-	 * The 4 bits REO destination ring value is defined as: 0: TCL
-	 * 1:SW1  2:SW2  3:SW3  4:SW4  5:Release  6:FW(WIFI)  7:SW5
-	 * 8:SW6 9:SW7  10:SW8  11: NOT_USED.
-	 *
-	 */
-	uint32_t reo_dest_ring_map[] = {REO_REMAP_SW1, REO_REMAP_SW2,
-					REO_REMAP_SW3, REO_REMAP_SW4,
-					REO_REMAP_SW5, REO_REMAP_SW6,
-					REO_REMAP_SW7, REO_REMAP_SW8};
 
 	switch (num_rings) {
+	/* should we have all the different possible ring configs */
 	default:
 	case 3:
-		*remap1 = HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 16) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 17) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 18) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 19) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 20) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 21) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 22) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 23);
-
-		*remap2 = HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 24) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 25) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 26) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 27) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 28) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 29) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 30) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 31);
+		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
+			  HAL_REO_REMAP_IX2(ring_map[0], 19) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 20) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 21) |
+			  HAL_REO_REMAP_IX2(ring_map[0], 22) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 23);
+
+		*remap2 = HAL_REO_REMAP_IX3(ring_map[2], 24) |
+			  HAL_REO_REMAP_IX3(ring_map[0], 25) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 26) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 27) |
+			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
+			  HAL_REO_REMAP_IX3(ring_map[0], 31);
 		break;
 	case 4:
-		*remap1 = HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 16) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 17) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 18) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[3], 19) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 20) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 21) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 22) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[3], 23);
-
-		*remap2 = HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 24) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 25) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 26) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[3], 27) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 28) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 29) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 30) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[3], 31);
+		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
+			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
+			  HAL_REO_REMAP_IX2(ring_map[0], 20) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 21) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 22) |
+			  HAL_REO_REMAP_IX2(ring_map[3], 23);
+
+		*remap2 = HAL_REO_REMAP_IX3(ring_map[0], 24) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 25) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 26) |
+			  HAL_REO_REMAP_IX3(ring_map[3], 27) |
+			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
+			  HAL_REO_REMAP_IX3(ring_map[3], 31);
 		break;
 	case 6:
-		*remap1 = HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 16) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 17) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 18) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[4], 19) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[5], 20) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[6], 21) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 22) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 23);
-
-		*remap2 = HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 24) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[4], 25) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[5], 26) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[6], 27) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 28) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 29) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 30) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[4], 31);
+		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
+			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
+			  HAL_REO_REMAP_IX2(ring_map[4], 20) |
+			  HAL_REO_REMAP_IX2(ring_map[5], 21) |
+			  HAL_REO_REMAP_IX2(ring_map[0], 22) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 23);
+
+		*remap2 = HAL_REO_REMAP_IX3(ring_map[2], 24) |
+			  HAL_REO_REMAP_IX3(ring_map[3], 25) |
+			  HAL_REO_REMAP_IX3(ring_map[4], 26) |
+			  HAL_REO_REMAP_IX3(ring_map[5], 27) |
+			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
+			  HAL_REO_REMAP_IX3(ring_map[3], 31);
 		break;
 	case 8:
-		*remap1 = HAL_REO_REMAP_IX2(reo_dest_ring_map[0], 16) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[1], 17) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[2], 18) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[3], 19) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[4], 20) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[5], 21) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[6], 22) |
-			  HAL_REO_REMAP_IX2(reo_dest_ring_map[7], 23);
-
-		*remap2 = HAL_REO_REMAP_IX3(reo_dest_ring_map[0], 24) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[1], 25) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[2], 26) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[3], 27) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[4], 28) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[5], 29) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[6], 30) |
-			  HAL_REO_REMAP_IX3(reo_dest_ring_map[7], 31);
+		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
+			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
+			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
+			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
+			  HAL_REO_REMAP_IX2(ring_map[4], 20) |
+			  HAL_REO_REMAP_IX2(ring_map[5], 21) |
+			  HAL_REO_REMAP_IX2(ring_map[6], 22) |
+			  HAL_REO_REMAP_IX2(ring_map[7], 23);
+
+		*remap2 = HAL_REO_REMAP_IX3(ring_map[0], 24) |
+			  HAL_REO_REMAP_IX3(ring_map[1], 25) |
+			  HAL_REO_REMAP_IX3(ring_map[2], 26) |
+			  HAL_REO_REMAP_IX3(ring_map[3], 27) |
+			  HAL_REO_REMAP_IX3(ring_map[4], 28) |
+			  HAL_REO_REMAP_IX3(ring_map[5], 29) |
+			  HAL_REO_REMAP_IX3(ring_map[6], 30) |
+			  HAL_REO_REMAP_IX3(ring_map[7], 31);
 		break;
 	}
 }

+ 5 - 1
wlan_cfg/cfg_dp.h

@@ -422,13 +422,17 @@
 #define WLAN_CFG_PKTLOG_MIN_BUFFER_SIZE 1
 #define WLAN_CFG_PKTLOG_MAX_BUFFER_SIZE 10
 
-#ifdef QCA_WIFI_KIWI
+#ifdef IPA_OFFLOAD
 #define WLAN_CFG_NUM_REO_RINGS_MAP 0x7
 #else
 #define WLAN_CFG_NUM_REO_RINGS_MAP 0xF
 #endif
 #define WLAN_CFG_NUM_REO_RINGS_MAP_MIN 0x1
+#if defined(CONFIG_BERYLLIUM)
+#define WLAN_CFG_NUM_REO_RINGS_MAP_MAX 0xFF
+#else
 #define WLAN_CFG_NUM_REO_RINGS_MAP_MAX 0xF
+#endif
 
 #define WLAN_CFG_RADIO_0_DEFAULT_REO 0x1
 #define WLAN_CFG_RADIO_1_DEFAULT_REO 0x2