Kaynağa Gözat

qcacmn: Add QDF infra for the minidump feature

Add QDF infra for minidump feature and define the
minidump_log and minidump_remove functions.

Change-Id: I875b991b7a7d9295f8b2acd95a7551a747ec962c
CRs-Fixed: 2856193
Aditya Kodukula 4 yıl önce
ebeveyn
işleme
20380cee21
2 değiştirilmiş dosya ile 49 ekleme ve 8 silme
  1. 8 4
      qdf/inc/qdf_trace.h
  2. 41 4
      qdf/linux/src/i_qdf_trace.h

+ 8 - 4
qdf/inc/qdf_trace.h

@@ -1600,19 +1600,23 @@ int qdf_sprint_symbol(char *buffer, void *addr);
  * @name: String to identify this entry
  * @name: String to identify this entry
  */
  */
 static inline
 static inline
-void qdf_minidump_log(void *start_addr, size_t size, const char *name)
+void qdf_minidump_log(void *start_addr,
+		      const size_t size, const char *name)
 {
 {
 	__qdf_minidump_log(start_addr, size, name);
 	__qdf_minidump_log(start_addr, size, name);
 }
 }
 
 
 /**
 /**
  * qdf_minidump_remove() - Remove memory address from minidump
  * qdf_minidump_remove() - Remove memory address from minidump
- * @addr: Start address of the memory previously added
+ * @start_addr: Start address of the memory previously added
+ * @size: Size in bytes
+ * @name: String to identify this entry
  */
  */
 static inline
 static inline
-void qdf_minidump_remove(void *addr)
+void qdf_minidump_remove(void *start_addr,
+			 const size_t size, const char *name)
 {
 {
-	__qdf_minidump_remove(addr);
+	__qdf_minidump_remove(start_addr, size, name);
 }
 }
 
 
 #endif /* __QDF_TRACE_H */
 #endif /* __QDF_TRACE_H */

+ 41 - 4
qdf/linux/src/i_qdf_trace.h

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
  *
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * any purpose with or without fee is hereby granted, provided that the
@@ -32,6 +32,9 @@
 #ifdef CONFIG_QCA_MINIDUMP
 #ifdef CONFIG_QCA_MINIDUMP
 #include <linux/minidump_tlv.h>
 #include <linux/minidump_tlv.h>
 #endif
 #endif
+#ifdef CONFIG_QCOM_MINIDUMP
+#include <soc/qcom/minidump.h>
+#endif
 
 
 #if !defined(__printf)
 #if !defined(__printf)
 #define __printf(a, b)
 #define __printf(a, b)
@@ -468,14 +471,48 @@ __qdf_minidump_log(void *start_addr, size_t size, const char *name)
 }
 }
 
 
 static inline void
 static inline void
-__qdf_minidump_remove(void *addr)
+__qdf_minidump_remove(void *addr, size_t size, const char *name)
 {
 {
 	minidump_remove_segments((const uintptr_t)addr);
 	minidump_remove_segments((const uintptr_t)addr);
 }
 }
+#elif defined(CONFIG_QCOM_MINIDUMP)
+static inline void
+__qdf_minidump_log(void *start_addr, const size_t size,
+		   const char *name)
+{
+	struct md_region md_entry;
+	int ret;
+
+	snprintf(md_entry.name, sizeof(md_entry.name), name);
+	md_entry.virt_addr = (uintptr_t)start_addr;
+	md_entry.phys_addr = virt_to_phys(start_addr);
+	md_entry.size = size;
+	ret = msm_minidump_add_region(&md_entry);
+	if (ret < 0) {
+		QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_QDF,
+				      "%s: failed to log %pK (%s)\n",
+				      __func__, start_addr, name);
+	}
+}
+
+static inline void
+__qdf_minidump_remove(void *start_addr, const size_t size,
+		      const char *name)
+{
+	struct md_region md_entry;
+
+	snprintf(md_entry.name, sizeof(md_entry.name), name);
+	md_entry.virt_addr = (uintptr_t)start_addr;
+	md_entry.phys_addr = virt_to_phys(start_addr);
+	md_entry.size = size;
+	msm_minidump_remove_region(&md_entry);
+}
 #else
 #else
 static inline void
 static inline void
-__qdf_minidump_log(void *start_addr, size_t size, const char *name) {}
+__qdf_minidump_log(void *start_addr,
+		   const size_t size, const char *name) {}
 static inline void
 static inline void
-__qdf_minidump_remove(void *addr) {}
+__qdf_minidump_remove(void *start_addr,
+		      const size_t size, const char *name) {}
 #endif
 #endif
 #endif /* __I_QDF_TRACE_H */
 #endif /* __I_QDF_TRACE_H */