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
This commit is contained in:
Aditya Kodukula
2021-01-14 18:06:25 -08:00
committed by snandini
parent 17660198d7
commit 20380cee21
2 changed files with 49 additions and 8 deletions

View File

@@ -1600,19 +1600,23 @@ int qdf_sprint_symbol(char *buffer, void *addr);
* @name: String to identify this entry
*/
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_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
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 */

View File

@@ -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
* any purpose with or without fee is hereby granted, provided that the
@@ -32,6 +32,9 @@
#ifdef CONFIG_QCA_MINIDUMP
#include <linux/minidump_tlv.h>
#endif
#ifdef CONFIG_QCOM_MINIDUMP
#include <soc/qcom/minidump.h>
#endif
#if !defined(__printf)
#define __printf(a, b)
@@ -468,14 +471,48 @@ __qdf_minidump_log(void *start_addr, size_t size, const char *name)
}
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);
}
#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
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
__qdf_minidump_remove(void *addr) {}
__qdf_minidump_remove(void *start_addr,
const size_t size, const char *name) {}
#endif
#endif /* __I_QDF_TRACE_H */