소스 검색

qcacmn: add hif_event_desc_history to ssr driver dump

Current code doesn't have hif_event_desc_history in ssr driver dump.
Fix this by adding hif_event_desc_history and hif_event_hist_max to
the ssr driver dump regions.

And add more parameters for parsing hif_ce_desc_history_buff.

Change-Id: I02cbfc7b9ea0c53d31ad351377d4644f1ad189d1
CRs-Fixed: 3469140
Zhiwei Yang 2 년 전
부모
커밋
7709435525
5개의 변경된 파일79개의 추가작업 그리고 11개의 파일을 삭제
  1. 21 0
      hif/inc/hif.h
  2. 2 1
      hif/src/ce/ce_api.h
  3. 34 10
      hif/src/ce/ce_main.c
  4. 18 0
      hif/src/hif_exec.c
  5. 4 0
      hif/src/hif_main.c

+ 21 - 0
hif/inc/hif.h

@@ -664,6 +664,20 @@ struct hif_event_history {
 	struct hif_event_record event[HIF_EVENT_HIST_MAX];
 };
 
+/**
+ * hif_desc_history_log_register() - Register hif_event_desc_history buffers
+ *
+ * Return: None
+ */
+void hif_desc_history_log_register(void);
+
+/**
+ * hif_desc_history_log_unregister() - Unregister hif_event_desc_history
+ *
+ * Return: None
+ */
+void hif_desc_history_log_unregister(void);
+
 /**
  * hif_hist_record_event() - Record one datapath event in history
  * @hif_ctx: HIF opaque context
@@ -725,6 +739,13 @@ static inline void hif_record_event(struct hif_opaque_softc *hif_ctx,
 }
 
 #else
+static inline void hif_desc_history_log_register(void)
+{
+}
+
+static inline void hif_desc_history_log_unregister(void)
+{
+}
 
 static inline void hif_record_event(struct hif_opaque_softc *hif_ctx,
 				    uint8_t intr_grp_id,

+ 2 - 1
hif/src/ce/ce_api.h

@@ -438,10 +438,11 @@ struct CE_handle *ce_init(struct hif_softc *scn,
 /*
  * hif_ce_desc_history_log_register() - Register hif_ce_desc_history buffers
  * to SSR driver dump.
+ * @scn: HIF context
  *
  * Return: None
  */
-void hif_ce_desc_history_log_register(void);
+void hif_ce_desc_history_log_register(struct hif_softc *scn);
 
 /*==================CE Engine Shutdown=======================================*/
 /*

+ 34 - 10
hif/src/ce/ce_main.c

@@ -2255,6 +2255,7 @@ void free_mem_ce_debug_hist_data(struct hif_softc *scn, uint32_t ce_id)
 /* define below variables for crashscope parse */
 struct hif_ce_desc_event *hif_ce_desc_history[CE_COUNT_MAX];
 uint32_t hif_ce_history_max = HIF_CE_HISTORY_MAX;
+uint32_t hif_ce_count_max = CE_COUNT_MAX;
 
 /*
  * for debug build, it will enable ce history for all ce, but for
@@ -2269,23 +2270,37 @@ uint32_t hif_ce_history_max = HIF_CE_HISTORY_MAX;
 #define CE_DESC_HISTORY_BUFF_CNT  3
 #define IS_CE_DEBUG_ONLY_FOR_CRIT_CE (BIT(2) | BIT(3) | BIT(7))
 #endif
+bool hif_ce_only_for_crit = IS_CE_DEBUG_ONLY_FOR_CRIT_CE;
 struct hif_ce_desc_event
 	hif_ce_desc_history_buff[CE_DESC_HISTORY_BUFF_CNT][HIF_CE_HISTORY_MAX];
 
-static void __hif_ce_desc_history_log_register(void)
+static void
+__hif_ce_desc_history_log_register(struct hif_softc *scn)
 {
-	qdf_ssr_driver_dump_register_region("hif_ce_desc_history",
-					    hif_ce_desc_history,
-					    sizeof(hif_ce_desc_history));
 	qdf_ssr_driver_dump_register_region("hif_ce_desc_history_buff",
 					    hif_ce_desc_history_buff,
 					    sizeof(hif_ce_desc_history_buff));
+	qdf_ssr_driver_dump_register_region("hif_ce_desc_hist",
+					    &scn->hif_ce_desc_hist,
+					    sizeof(scn->hif_ce_desc_hist));
+	qdf_ssr_driver_dump_register_region("hif_ce_count_max",
+					    &hif_ce_count_max,
+					    sizeof(hif_ce_count_max));
+	qdf_ssr_driver_dump_register_region("hif_ce_history_max",
+					    &hif_ce_history_max,
+					    sizeof(hif_ce_history_max));
+	qdf_ssr_driver_dump_register_region("hif_ce_only_for_crit",
+					    &hif_ce_only_for_crit,
+					    sizeof(hif_ce_only_for_crit));
 }
 
 static void __hif_ce_desc_history_log_unregister(void)
 {
+	qdf_ssr_driver_dump_unregister_region("hif_ce_only_for_crit");
+	qdf_ssr_driver_dump_unregister_region("hif_ce_history_max");
+	qdf_ssr_driver_dump_unregister_region("hif_ce_count_max");
+	qdf_ssr_driver_dump_unregister_region("hif_ce_desc_hist");
 	qdf_ssr_driver_dump_unregister_region("hif_ce_desc_history_buff");
-	qdf_ssr_driver_dump_unregister_region("hif_ce_desc_history");
 }
 
 static struct hif_ce_desc_event *
@@ -2373,7 +2388,10 @@ static void free_mem_ce_debug_history(struct hif_softc *scn, unsigned int ce_id)
 }
 #else
 
-static void __hif_ce_desc_history_log_register(void) { }
+static void
+__hif_ce_desc_history_log_register(struct hif_softc *scn)
+{
+}
 
 static void __hif_ce_desc_history_log_unregister(void) { }
 
@@ -2390,7 +2408,10 @@ free_mem_ce_debug_history(struct hif_softc *scn, unsigned int CE_id) { }
 #else
 #if defined(HIF_CE_DEBUG_DATA_BUF)
 
-static void __hif_ce_desc_history_log_register(void) { }
+static void
+__hif_ce_desc_history_log_register(struct hif_softc *scn)
+{
+}
 
 static void __hif_ce_desc_history_log_unregister(void) { }
 
@@ -2430,7 +2451,10 @@ static void free_mem_ce_debug_history(struct hif_softc *scn, unsigned int CE_id)
 
 #else
 
-static void __hif_ce_desc_history_log_register(void) { }
+static void
+__hif_ce_desc_history_log_register(struct hif_softc *scn)
+{
+}
 
 static void __hif_ce_desc_history_log_unregister(void) { }
 
@@ -2720,9 +2744,9 @@ error_no_dma_mem:
 	return NULL;
 }
 
-void hif_ce_desc_history_log_register(void)
+void hif_ce_desc_history_log_register(struct hif_softc *scn)
 {
-	__hif_ce_desc_history_log_register();
+	__hif_ce_desc_history_log_register(scn);
 }
 
 /**

+ 18 - 0
hif/src/hif_exec.c

@@ -25,6 +25,7 @@
 #ifdef DP_UMAC_HW_RESET_SUPPORT
 #include "if_pci.h"
 #endif
+#include "qdf_ssr_driver_dump.h"
 
 /* mapping NAPI budget 0 to internal budget 0
  * NAPI budget 1 to internal budget [1,scaler -1]
@@ -39,6 +40,23 @@ static struct hif_exec_context *hif_exec_tasklet_create(void);
 
 #ifdef WLAN_FEATURE_DP_EVENT_HISTORY
 struct hif_event_history hif_event_desc_history[HIF_NUM_INT_CONTEXTS];
+uint32_t hif_event_hist_max = HIF_EVENT_HIST_MAX;
+
+void hif_desc_history_log_register(void)
+{
+	qdf_ssr_driver_dump_register_region("hif_event_history",
+					    hif_event_desc_history,
+					    sizeof(hif_event_desc_history));
+	qdf_ssr_driver_dump_register_region("hif_event_hist_max",
+					    &hif_event_hist_max,
+					    sizeof(hif_event_hist_max));
+}
+
+void hif_desc_history_log_unregister(void)
+{
+	qdf_ssr_driver_dump_unregister_region("hif_event_hist_max");
+	qdf_ssr_driver_dump_unregister_region("hif_event_history");
+}
 
 static inline
 int hif_get_next_record_index(qdf_atomic_t *table_index,

+ 4 - 0
hif/src/hif_main.c

@@ -1307,6 +1307,8 @@ struct hif_opaque_softc *hif_open(qdf_device_t qdf_ctx,
 	hif_latency_detect_init(scn);
 	hif_affinity_mgr_init(scn, psoc);
 	hif_init_direct_link_rcv_pipe_num(scn);
+	hif_ce_desc_history_log_register(scn);
+	hif_desc_history_log_register();
 
 out:
 	return GET_HIF_OPAQUE_HDL(scn);
@@ -1345,6 +1347,8 @@ void hif_close(struct hif_opaque_softc *hif_ctx)
 		return;
 	}
 
+	hif_desc_history_log_unregister();
+	hif_ce_desc_history_log_unregister();
 	hif_latency_detect_deinit(scn);
 
 	if (scn->athdiag_procfs_inited) {