summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShashank Mittal <mittals@codeaurora.org>2016-02-25 11:24:09 -0800
committerJeevan Shriram <jshriram@codeaurora.org>2016-05-16 20:10:44 -0700
commit90fb2251c8c0aea0e2546d953e07d288451a9265 (patch)
treead425229fcd0c75e808bd602209b0493dd4d40a3
parent273d5bfab1f6e8536437f79795b30d2dcba1b261 (diff)
memory-dump: add support to allocate memory for scan dumps
Add support to allocate memory for CPU scan dumps. This momeory can be used to save CPU scan dumps at the time of a crash. Change-Id: I9d644f18882729d187075e885bc2e8c02c5caf36 Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
-rw-r--r--drivers/soc/qcom/common_log.c40
-rw-r--r--include/soc/qcom/memory_dump.h3
2 files changed, 38 insertions, 5 deletions
diff --git a/drivers/soc/qcom/common_log.c b/drivers/soc/qcom/common_log.c
index 556b832c529d..d2d877ef427b 100644
--- a/drivers/soc/qcom/common_log.c
+++ b/drivers/soc/qcom/common_log.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -23,6 +23,7 @@
#define PMIC_DUMP_DATA_LEN 4096
#define VSENSE_DUMP_DATA_LEN 4096
#define RPM_DUMP_DATA_LEN (160 * 1024)
+#define SCAN_DUMP_DATA_LEN (256 * 1024)
void register_misc_dump(void)
{
@@ -130,10 +131,8 @@ void register_rpm_dump(void)
if (MSM_DUMP_MAJOR(msm_dump_table_version()) > 1) {
dump_data = kzalloc(sizeof(struct msm_dump_data), GFP_KERNEL);
- if (!dump_data) {
- pr_err("rpm dump data structure allocation failed\n");
+ if (!dump_data)
return;
- }
dump_addr = kzalloc(RPM_DUMP_DATA_LEN, GFP_KERNEL);
if (!dump_addr)
goto err0;
@@ -155,6 +154,38 @@ err0:
}
}
+void register_scan_dump(void)
+{
+ static void *dump_addr;
+ int ret;
+ struct msm_dump_entry dump_entry;
+ struct msm_dump_data *dump_data;
+
+ if (MSM_DUMP_MAJOR(msm_dump_table_version()) > 1) {
+ dump_data = kzalloc(sizeof(struct msm_dump_data), GFP_KERNEL);
+ if (!dump_data)
+ return;
+ dump_addr = kzalloc(SCAN_DUMP_DATA_LEN, GFP_KERNEL);
+ if (!dump_addr)
+ goto err0;
+
+ dump_data->addr = virt_to_phys(dump_addr);
+ dump_data->len = SCAN_DUMP_DATA_LEN;
+ dump_entry.id = MSM_DUMP_DATA_SCANDUMP;
+ dump_entry.addr = virt_to_phys(dump_data);
+ ret = msm_dump_data_register(MSM_DUMP_TABLE_APPS, &dump_entry);
+ if (ret) {
+ pr_err("Registering scandump region failed\n");
+ goto err1;
+ }
+ return;
+err1:
+ kfree(dump_addr);
+err0:
+ kfree(dump_data);
+ }
+}
+
static void __init common_log_register_log_buf(void)
{
char **log_bufp;
@@ -226,6 +257,7 @@ static int __init msm_common_log_init(void)
register_pmic_dump();
register_vsense_dump();
register_rpm_dump();
+ register_scan_dump();
return 0;
}
late_initcall(msm_common_log_init);
diff --git a/include/soc/qcom/memory_dump.h b/include/soc/qcom/memory_dump.h
index 63e1bc770f53..f1170dbb3569 100644
--- a/include/soc/qcom/memory_dump.h
+++ b/include/soc/qcom/memory_dump.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012, 2014-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -81,6 +81,7 @@ enum msm_dump_data_ids {
MSM_DUMP_DATA_MISC = 0xE8,
MSM_DUMP_DATA_VSENSE = 0xE9,
MSM_DUMP_DATA_RPM = 0xEA,
+ MSM_DUMP_DATA_SCANDUMP = 0xEB,
MSM_DUMP_DATA_TMC_ETF = 0xF0,
MSM_DUMP_DATA_TMC_REG = 0x100,
MSM_DUMP_DATA_LOG_BUF = 0x110,