Browse Source

qcacld-3.0: add SSR host log collection API usage

Current code does not use the SSR host log collection API.
Fix this by adding SSR host log collection API usage.

Change-Id: I364bd6281e886e8c50dfd6f45f78fb98e822f962
CRs-Fixed: 3339953
Mohammed Ahmed 2 years ago
parent
commit
776c4cc10e
5 changed files with 70 additions and 3 deletions
  1. 7 0
      Kbuild
  2. 20 1
      core/hdd/src/wlan_hdd_driver_ops.c
  3. 3 0
      core/hdd/src/wlan_hdd_main.c
  4. 14 1
      core/pld/inc/pld_common.h
  5. 26 1
      core/pld/src/pld_pcie.c

+ 7 - 0
Kbuild

@@ -972,6 +972,10 @@ QDF_OBJS := \
 	$(QDF_OBJ_DIR)/qdf_talloc.o \
 	$(QDF_OBJ_DIR)/qdf_types.o \
 
+ifeq ($(CONFIG_CNSS2_SSR_DRIVER_DUMP), y)
+QDF_OBJS += $(QDF_LINUX_OBJ_DIR)/qdf_ssr_driver_dump.o
+endif
+
 ifeq ($(CONFIG_WLAN_DEBUGFS), y)
 QDF_OBJS += $(QDF_LINUX_OBJ_DIR)/qdf_debugfs.o
 endif
@@ -4684,6 +4688,9 @@ endif
 # Flag to enable Constrained Application Protocol feature
 cppflags-$(CONFIG_WLAN_FEATURE_COAP) += -DWLAN_FEATURE_COAP
 
+# SSR driver dump config
+cppflags-$(CONFIG_CNSS2_SSR_DRIVER_DUMP) += -DWLAN_FEATURE_SSR_DRIVER_DUMP
+
 KBUILD_CPPFLAGS += $(cppflags-y)
 
 # Currently, for versions of gcc which support it, the kernel Makefile

+ 20 - 1
core/hdd/src/wlan_hdd_driver_ops.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2015-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved
+ * Copyright (c) 2021-2023 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
@@ -49,6 +49,7 @@
 #include <qdf_hang_event_notifier.h>
 #include "wlan_hdd_thermal.h"
 #include "wlan_dp_ucfg_api.h"
+#include "qdf_ssr_driver_dump.h"
 
 #ifdef MODULE
 #ifdef WLAN_WEAR_CHIPSET
@@ -2167,6 +2168,21 @@ wlan_hdd_pld_uevent(struct device *dev, struct pld_uevent_data *event_data)
 
 }
 
+#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
+static int
+wlan_hdd_pld_collect_driver_dump(struct device *dev,
+				 enum pld_bus_type bus_type,
+				 struct cnss_ssr_driver_dump_entry *input_array,
+				 size_t *num_entries_loaded)
+{
+	QDF_STATUS status;
+
+	status =  qdf_ssr_driver_dump_retrieve_regions(input_array,
+						       num_entries_loaded);
+	return qdf_status_to_os_return(status);
+}
+#endif
+
 #ifdef FEATURE_RUNTIME_PM
 /**
  * wlan_hdd_pld_runtime_suspend() - runtime suspend function registered to PLD
@@ -2233,6 +2249,9 @@ struct pld_driver_ops wlan_drv_ops = {
 	.reset_resume = wlan_hdd_pld_reset_resume,
 	.modem_status = wlan_hdd_pld_notify_handler,
 	.uevent = wlan_hdd_pld_uevent,
+#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
+	.collect_driver_dump = wlan_hdd_pld_collect_driver_dump,
+#endif
 #ifdef FEATURE_RUNTIME_PM
 	.runtime_suspend = wlan_hdd_pld_runtime_suspend,
 	.runtime_resume = wlan_hdd_pld_runtime_resume,

+ 3 - 0
core/hdd/src/wlan_hdd_main.c

@@ -69,6 +69,7 @@
 #include <cdp_txrx_misc.h>
 #include <cdp_txrx_stats.h>
 #include "cdp_txrx_flow_ctrl_legacy.h"
+#include "qdf_ssr_driver_dump.h"
 
 #include <net/addrconf.h>
 #include <linux/wireless.h>
@@ -17777,6 +17778,7 @@ static QDF_STATUS hdd_qdf_init(void)
 
 	qdf_trace_init();
 	qdf_minidump_init();
+	qdf_ssr_driver_dump_init();
 	qdf_register_debugcb_init();
 
 	return QDF_STATUS_SUCCESS;
@@ -17804,6 +17806,7 @@ exit:
 static void hdd_qdf_deinit(void)
 {
 	/* currently, no debugcb deinit */
+	qdf_ssr_driver_dump_deinit();
 	qdf_minidump_deinit();
 	qdf_trace_deinit();
 

+ 14 - 1
core/pld/inc/pld_common.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 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
@@ -25,6 +25,12 @@
 #include <linux/pm.h>
 #include <osapi_linux.h>
 
+#ifdef CONFIG_CNSS_OUT_OF_TREE
+#include "cnss2.h"
+#else
+#include <net/cnss2.h>
+#endif
+
 #ifdef CNSS_UTILS
 #ifdef CONFIG_CNSS_OUT_OF_TREE
 #include "cnss_utils.h"
@@ -549,6 +555,13 @@ struct pld_driver_ops {
 			     enum pld_bus_type bus_type,
 			     int state);
 	void (*uevent)(struct device *dev, struct pld_uevent_data *uevent);
+#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
+	int (*collect_driver_dump)(struct device *dev,
+				   enum pld_bus_type bus_type,
+				   struct cnss_ssr_driver_dump_entry
+				   *input_array,
+				   size_t *num_entries_loaded);
+#endif
 	int (*runtime_suspend)(struct device *dev,
 			       enum pld_bus_type bus_type);
 	int (*runtime_resume)(struct device *dev,

+ 26 - 1
core/pld/src/pld_pcie.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 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
@@ -278,6 +278,28 @@ out:
 	return;
 }
 
+#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
+static int
+pld_pcie_collect_driver_dump(struct pci_dev *pdev,
+			     struct cnss_ssr_driver_dump_entry *input_array,
+			     size_t *num_entries)
+{
+	struct pld_context *pld_context;
+	struct pld_driver_ops *ops;
+	int ret = -EINVAL;
+
+	pld_context = pld_get_global_context();
+	ops = pld_context->ops;
+	if (ops->collect_driver_dump) {
+		ret =  ops->collect_driver_dump(&pdev->dev,
+						PLD_BUS_TYPE_PCIE,
+						input_array,
+						num_entries);
+	}
+	return ret;
+}
+#endif
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
 /**
  * pld_bus_event_type_convert() - Convert enum cnss_bus_event_type
@@ -683,6 +705,9 @@ struct cnss_wlan_driver pld_pcie_ops = {
 	.crash_shutdown = pld_pcie_crash_shutdown,
 	.modem_status   = pld_pcie_notify_handler,
 	.update_status  = pld_pcie_uevent,
+#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
+	.collect_driver_dump = pld_pcie_collect_driver_dump,
+#endif
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
 	.update_event = pld_pcie_update_event,
 #endif