Ver Fonte

qcacld-3.0: Update latency flags to 64-bit configuration

Update latency flags inis to 64-bit configuration and use
lower 32-bit for firmware configuration and upper 32-bit
as host configuration. Also remove separate inis for host
latency flags.

Change-Id: Iff62b847f40ae7fa5f82948ec37d756144860474
CRs-Fixed: 3115853
Nirav Shah há 3 anos atrás
pai
commit
42853bf5eb

+ 55 - 12
components/mlme/core/src/wlan_mlme_main.c

@@ -2243,21 +2243,64 @@ mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
 static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
 				    struct wlan_mlme_fe_wlm *wlm_config)
 {
+	uint64_t flags = 0;
+	QDF_STATUS status;
+
 	wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
 	wlm_config->latency_reset = cfg_get(psoc, CFG_LATENCY_RESET);
 	wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
-	wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
-	wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
-	wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
-	wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
-	wlm_config->latency_host_flags[0] =
-		cfg_get(psoc, CFG_LATENCY_HOST_FLAGS_NORMAL);
-	wlm_config->latency_host_flags[1] =
-		cfg_get(psoc, CFG_LATENCY_HOST_FLAGS_MOD);
-	wlm_config->latency_host_flags[2] =
-		cfg_get(psoc, CFG_LATENCY_HOST_FLAGS_LOW);
-	wlm_config->latency_host_flags[3] =
-		cfg_get(psoc, CFG_LATENCY_HOST_FLAGS_ULTLOW);
+
+	status = qdf_uint64_parse(cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL),
+				  &flags);
+	if (status != QDF_STATUS_SUCCESS) {
+		flags = 0;
+		mlme_legacy_err("normal latency flags parsing failed");
+	}
+
+	wlm_config->latency_flags[0] = flags & 0xFFFFFFFF;
+	wlm_config->latency_host_flags[0] = flags >> 32;
+	mlme_legacy_debug("normal latency flags 0x%x host flags 0x%x",
+			  wlm_config->latency_flags[0],
+			  wlm_config->latency_host_flags[0]);
+
+	status = qdf_uint64_parse(cfg_get(psoc, CFG_LATENCY_FLAGS_MOD),
+				  &flags);
+	if (status != QDF_STATUS_SUCCESS) {
+		flags = 0;
+		mlme_legacy_err("moderate latency flags parsing failed");
+	}
+
+	wlm_config->latency_flags[1] = flags & 0xFFFFFFFF;
+	wlm_config->latency_host_flags[1] = flags >> 32;
+	mlme_legacy_debug("moderate latency flags 0x%x host flags 0x%x",
+			  wlm_config->latency_flags[1],
+			  wlm_config->latency_host_flags[1]);
+
+	status = qdf_uint64_parse(cfg_get(psoc, CFG_LATENCY_FLAGS_LOW),
+				  &flags);
+	if (status != QDF_STATUS_SUCCESS) {
+		flags = 0;
+		mlme_legacy_err("low latency flags parsing failed");
+	}
+
+	wlm_config->latency_flags[2] = flags & 0xFFFFFFFF;
+	wlm_config->latency_host_flags[2] = flags >> 32;
+	mlme_legacy_debug("low latency flags 0x%x host flags 0x%x",
+			  wlm_config->latency_flags[2],
+			  wlm_config->latency_host_flags[2]);
+
+	status = qdf_uint64_parse(cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW),
+				  &flags);
+	if (status != QDF_STATUS_SUCCESS) {
+		flags = 0;
+		mlme_legacy_err("ultra-low latency flags parsing failed");
+	}
+
+	wlm_config->latency_flags[3] = flags & 0xFFFFFFFF;
+	wlm_config->latency_host_flags[3] = flags >> 32;
+	mlme_legacy_debug("ultra-low latency flags 0x%x host flags 0x%x",
+			  wlm_config->latency_flags[3],
+			  wlm_config->latency_host_flags[3]);
 }
 
 /**

+ 105 - 194
components/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -24,16 +25,17 @@
 #define __CFG_MLME_FE_WLM_H
 
 /*
- * |31  18|  17  |  16    |15        8|7    2|    1     |     0     |
- * +------+------+--------+-----------+------+----------+-----------+
- * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | REO Ring | RX Thread |
- * +------+------+--------+-----------+------+----------+-----------+
- * |       common         |  TX Path  |        RX Path              |
+ * Flag definition of 32-bit host latency flags
+ *
+ * |31  18|  17  |  16    |15        8|7    1|     0     |
+ * +------+------+--------+-----------+------+-----------+
+ * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | RX Thread |
+ * +------+------+--------+-----------+------+-----------+
+ * |       common         |  TX Path  |    RX Path       |
  *
  * bit 0-7: Rx path related optimization
  * bit 0: disable rx_thread for vdev
- * bit 1: Reduce REO ring timer threshold to 32us(applicable for all REO ring)
- * bit 2-7: Reserved
+ * bit 1-7: Reserved
  * bit 8-15: Tx path related optimization
  * bit 8-15: Reserved
  * bit 16-31: common changes
@@ -42,10 +44,11 @@
  */
 
 #define WLM_HOST_RX_THREAD_FLAG         (1 << 0)
-#define WLM_HOST_REO_RING_FLAG          (1 << 1)
 #define WLM_HOST_PM_QOS_FLAG            (1 << 16)
 #define WLM_HOST_HBB_FLAG               (1 << 17)
 
+#define CFG_MAX_LATENCY_FLAGS "0xFFFFFFFFFFFFFFFF"
+
 /*
  * <ini>
  * wlm_latency_enable - WLM latency Enable
@@ -108,7 +111,7 @@
  * wlm_latency_flags_normal - WLM flags setting for normal level
  *
  * @min: 0x0
- * @max: 0xffffffff
+ * @max: 0xffffffffffffffff
  * @default: 0x0
  *
  * |31  12|  11  |  10  |9    8|7    6|5    4|3    2|  1  |  0  |
@@ -137,21 +140,38 @@
  * bit 11: Disable sys sleep if setting
  * bit 12-31: Reserve for future useage
  *
+ * |63  50|  49  |  48    |47        40|39   33|    32     |
+ * +------+------+--------+------------+-------+-----------+
+ * | RSVD | HBB  | PM-QOS |  RSVD      | RSVD  | RX Thread |
+ * +------+------+--------+------------+-------+-----------+
+ * |       common         |  TX Path   |     RX Path       |
+ *
+ * bit 39-32: Rx path related optimization
+ * bit 32: disable rx_thread for vdev
+ * bit 33-39: Reserved
+ * bit 40-47: Tx path related optimization
+ * bit 40-47: Reserved
+ * bit 48-63: common changes
+ * bit 48: Request for pm_qos vote
+ * bit 49: Request for high ddr bus bandwidth
+ *
  * </ini>
  */
-#define CFG_LATENCY_FLAGS_NORMAL CFG_INI_UINT("wlm_latency_flags_normal", \
-					      0, \
-					      0xffffffff, \
-					      0, \
-					      CFG_VALUE_OR_DEFAULT, \
-					      "WLM flag setting for normal lvl")
+#define CFG_DEFAULT_NORMAL_FLAGS "0x0"
+#define CFG_LATENCY_FLAGS_NORMAL \
+		CFG_INI_STRING("wlm_latency_flags_normal",\
+			       0, \
+			       sizeof(CFG_MAX_LATENCY_FLAGS) - 1,\
+			       CFG_DEFAULT_NORMAL_FLAGS, \
+			       "WLM flags for normal level")
+
 
 /*
  * <ini>
  * wlm_latency_flags_moderate - WLM flags setting for moderate level
  *
  * @min: 0x0
- * @max: 0xffffffff
+ * @max: 0xffffffffffffffff
  * @default: 0x8
  *
  * |31  12|  11  |  10  |9    8|7    6|5    4|3    2|  1  |  0  |
@@ -180,21 +200,38 @@
  * bit 11: Disable sys sleep if setting
  * bit 12-31: Reserve for future useage
  *
+ * |63  50|  49  |  48    |47        40|39   33|    32     |
+ * +------+------+--------+------------+-------+-----------+
+ * | RSVD | HBB  | PM-QOS |  RSVD      | RSVD  | RX Thread |
+ * +------+------+--------+------------+-------+-----------+
+ * |       common         |  TX Path   |     RX Path       |
+ *
+ * bit 39-32: Rx path related optimization
+ * bit 32: disable rx_thread for vdev
+ * bit 33-39: Reserved
+ * bit 40-47: Tx path related optimization
+ * bit 40-47: Reserved
+ * bit 48-63: common changes
+ * bit 48: Request for pm_qos vote
+ * bit 49: Request for high ddr bus bandwidth
+ *
  * </ini>
  */
-#define CFG_LATENCY_FLAGS_MOD CFG_INI_UINT("wlm_latency_flags_moderate", \
-					   0, \
-					   0xffffffff, \
-					   0x8, \
-					   CFG_VALUE_OR_DEFAULT, \
-					   "WLM flag setting for moderate lvl")
+#define CFG_DEFAULT_MODERATE_FLAGS "0x8"
+#define CFG_LATENCY_FLAGS_MOD \
+		CFG_INI_STRING("wlm_latency_flags_moderate",\
+			       0, \
+			       sizeof(CFG_MAX_LATENCY_FLAGS) - 1,\
+			       CFG_DEFAULT_MODERATE_FLAGS, \
+			       "WLM flags for moderate level")
+
 
 /*
  * <ini>
  * wlm_latency_flags_low - WLM flags setting for low level
  *
  * @min: 0x0
- * @max: 0xffffffff
+ * @max: 0xffffffffffffffff
  * @default: 0xa
  *
  * |31  12|  11  |  10  |9    8|7    6|5    4|3    2|  1  |  0  |
@@ -223,21 +260,37 @@
  * bit 11: Disable sys sleep if setting
  * bit 12-31: Reserve for future useage
  *
+ * |63  50|  49  |  48    |47        40|39   33|    32     |
+ * +------+------+--------+------------+-------+-----------+
+ * | RSVD | HBB  | PM-QOS |  RSVD      | RSVD  | RX Thread |
+ * +------+------+--------+------------+-------+-----------+
+ * |       common         |  TX Path   |     RX Path       |
+ *
+ * bit 39-32: Rx path related optimization
+ * bit 32: disable rx_thread for vdev
+ * bit 33-39: Reserved
+ * bit 40-47: Tx path related optimization
+ * bit 40-47: Reserved
+ * bit 48-63: common changes
+ * bit 48: Request for pm_qos vote
+ * bit 49: Request for high ddr bus bandwidth
+ *
  * </ini>
  */
-#define CFG_LATENCY_FLAGS_LOW CFG_INI_UINT("wlm_latency_flags_low", \
-					   0, \
-					   0xffffffff, \
-					   0xa, \
-					   CFG_VALUE_OR_DEFAULT, \
-					   "WLM flags setting for low level")
+#define CFG_DEFAULT_LOW_FLAGS "0xa"
+#define CFG_LATENCY_FLAGS_LOW \
+		CFG_INI_STRING("wlm_latency_flags_low",\
+			       0, \
+			       sizeof(CFG_MAX_LATENCY_FLAGS) - 1,\
+			       CFG_DEFAULT_LOW_FLAGS, \
+			       "WLM flags for low level")
 
 /*
  * <ini>
  * wlm_latency_flags_ultralow - WLM flags setting for ultralow level
  *
  * @min: 0x0
- * @max: 0xffffffff
+ * @max: 0xffffffffffffffff
  * @default: 0xc83
  *
  * |31  12|  11  |  10  |9    8|7    6|5    4|3    2|  1  |  0  |
@@ -266,168 +319,30 @@
  * bit 11: Disable sys sleep if setting
  * bit 12-31: Reserve for future useage
  *
- * </ini>
- */
-#define CFG_LATENCY_FLAGS_ULTLOW CFG_INI_UINT("wlm_latency_flags_ultralow",\
-					      0, \
-					      0xffffffff, \
-					      0xc83, \
-					      CFG_VALUE_OR_DEFAULT, \
-					      "WLM flags for ultralow level")
-
-/*
- * <ini>
- * wlm_latency_host_flags_normal - WLM Host flags setting for normal level
- *
- * @min: 0x0
- * @max: 0xffffffff
- * @default: 0x0
- *
- * This ini decides which host latency features gets enabled
- * in normal latency mode.
- *
- * Usage: External
- *
- * |31  18|  17  |  16    |15        8|7    2|    1     |     0     |
- * +------+------+--------+-----------+------+----------+-----------+
- * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | REO Ring | RX Thread |
- * +------+------+--------+-----------+------+----------+-----------+
- * |       common         |  TX Path  |        RX Path              |
- *
- * bit 0-7: Rx path related optimization
- * bit 0: disable rx_thread for vdev
- * bit 1: Reduce REO ring timer threshold to 32us(applicable for all REO ring)
- * bit 2-7: Reserved
- * bit 8-15: Tx path related optimization
- * bit 8-15: Reserved
- * bit 16-31: common changes
- * bit 16: Request for pm_qos vote
- * bit 17: Request for high ddr bus bandwidth
- *
- * </ini>
- */
-#define CFG_LATENCY_HOST_FLAGS_NORMAL \
-		CFG_INI_UINT("wlm_latency_host_flags_normal",\
-			     0, \
-			     0xffffffff, \
-			     0, \
-			     CFG_VALUE_OR_DEFAULT, \
-			     "WLM Host flags for normal level")
-
-/*
- * <ini>
- * wlm_latency_host_flags_moderate - WLM Host flags setting for moderate level
- *
- * @min: 0x0
- * @max: 0xffffffff
- * @default: 0x0
- *
- * This ini decides which host latency features gets enabled
- * in moderate latency mode.
- *
- * Usage: External
- *
- * |31  18|  17  |  16    |15        8|7    2|    1     |     0     |
- * +------+------+--------+-----------+------+----------+-----------+
- * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | REO Ring | RX Thread |
- * +------+------+--------+-----------+------+----------+-----------+
- * |       common         |  TX Path  |        RX Path              |
- *
- * bit 0-7: Rx path related optimization
- * bit 0: disable rx_thread for vdev
- * bit 1: Reduce REO ring timer threshold to 32us(applicable for all REO ring)
- * bit 2-7: Reserved
- * bit 8-15: Tx path related optimization
- * bit 8-15: Reserved
- * bit 16-31: common changes
- * bit 16: Request for pm_qos vote
- * bit 17: Request for high ddr bus bandwidth
- *
- * </ini>
- */
-#define CFG_LATENCY_HOST_FLAGS_MOD \
-		CFG_INI_UINT("wlm_latency_host_flags_moderate",\
-			     0, \
-			     0xffffffff, \
-			     0, \
-			     CFG_VALUE_OR_DEFAULT, \
-			     "WLM Host flags for moderate level")
-/*
- * <ini>
- * wlm_latency_host_flags_low - WLM Host flags setting for low level
- *
- * @min: 0x0
- * @max: 0xffffffff
- * @default: 0x0
- *
- * This ini decides which host latency features gets enabled
- * in low latency mode.
- *
- * Usage: External
- *
- * |31  18|  17  |  16    |15        8|7    2|    1     |     0     |
- * +------+------+--------+-----------+------+----------+-----------+
- * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | REO Ring | RX Thread |
- * +------+------+--------+-----------+------+----------+-----------+
- * |       common         |  TX Path  |        RX Path              |
- *
- * bit 0-7: Rx path related optimization
- * bit 0: disable rx_thread for vdev
- * bit 1: Reduce REO ring timer threshold to 32us(applicable for all REO ring)
- * bit 2-7: Reserved
- * bit 8-15: Tx path related optimization
- * bit 8-15: Reserved
- * bit 16-31: common changes
- * bit 16: Request for pm_qos vote
- * bit 17: Request for high ddr bus bandwidth
- *
- * </ini>
- */
-#define CFG_LATENCY_HOST_FLAGS_LOW CFG_INI_UINT("wlm_latency_host_flags_low",\
-						0, \
-						0xffffffff, \
-						0, \
-						CFG_VALUE_OR_DEFAULT, \
-						"WLM Host flags for low level")
-
-/*
- * <ini>
- * wlm_latency_host_flags_ultralow - WLM Host flags setting for ultralow level
- *
- * @min: 0x0
- * @max: 0xffffffff
- * @default: 0x0
- *
- * This ini decides which host latency features gets enabled
- * in ultra low latency mode.
- *
- * Usage: External
- *
- * |31  18|  17  |  16    |15        8|7    2|    1     |     0     |
- * +------+------+--------+-----------+------+----------+-----------+
- * | RSVD | HBB  | PM-QOS |  RSVD     | RSVD | REO Ring | RX Thread |
- * +------+------+--------+-----------+------+----------+-----------+
- * |       common         |  TX Path  |        RX Path              |
- *
- * bit 0-7: Rx path related optimization
- * bit 0: disable rx_thread for vdev
- * bit 1: Reduce REO ring timer threshold to 32us(applicable for all REO ring)
- * bit 2-7: Reserved
- * bit 8-15: Tx path related optimization
- * bit 8-15: Reserved
- * bit 16-31: common changes
- * bit 16: Request for pm_qos vote
- * bit 17: Request for high ddr bus bandwidth
+ * |63  50|  49  |  48    |47        40|39   33|    32     |
+ * +------+------+--------+------------+-------+-----------+
+ * | RSVD | HBB  | PM-QOS |  RSVD      | RSVD  | RX Thread |
+ * +------+------+--------+------------+-------+-----------+
+ * |       common         |  TX Path   |     RX Path       |
+ *
+ * bit 39-32: Rx path related optimization
+ * bit 32: disable rx_thread for vdev
+ * bit 33-39: Reserved
+ * bit 40-47: Tx path related optimization
+ * bit 40-47: Reserved
+ * bit 48-63: common changes
+ * bit 48: Request for pm_qos vote
+ * bit 49: Request for high ddr bus bandwidth
  *
  * </ini>
  */
-#define CFG_LATENCY_HOST_FLAGS_ULTLOW \
-		CFG_INI_UINT("wlm_latency_host_flags_ultralow",\
-			     0, \
-			     0xffffffff, \
-			     0, \
-			     CFG_VALUE_OR_DEFAULT, \
-			     "WLM Host flags for ultralow level")
+#define CFG_DEFAULT_ULTLOW_FLAGS "0xc83"
+#define CFG_LATENCY_FLAGS_ULTLOW \
+		CFG_INI_STRING("wlm_latency_flags_ultralow",\
+			       0, \
+			       sizeof(CFG_MAX_LATENCY_FLAGS) - 1,\
+			       CFG_DEFAULT_ULTLOW_FLAGS, \
+			       "WLM flags for ultralow level")
 
 #define CFG_FE_WLM_ALL \
 	CFG(CFG_LATENCY_ENABLE) \
@@ -436,10 +351,6 @@
 	CFG(CFG_LATENCY_FLAGS_NORMAL) \
 	CFG(CFG_LATENCY_FLAGS_MOD) \
 	CFG(CFG_LATENCY_FLAGS_LOW) \
-	CFG(CFG_LATENCY_FLAGS_ULTLOW) \
-	CFG(CFG_LATENCY_HOST_FLAGS_NORMAL) \
-	CFG(CFG_LATENCY_HOST_FLAGS_MOD) \
-	CFG(CFG_LATENCY_HOST_FLAGS_LOW) \
-	CFG(CFG_LATENCY_HOST_FLAGS_ULTLOW)
+	CFG(CFG_LATENCY_FLAGS_ULTLOW)
 
 #endif /* __CFG_MLME_FE_WLM_H */