summaryrefslogtreecommitdiff
path: root/drivers/soc/google/debug/exynos-ehld.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soc/google/debug/exynos-ehld.c')
-rw-r--r--drivers/soc/google/debug/exynos-ehld.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/soc/google/debug/exynos-ehld.c b/drivers/soc/google/debug/exynos-ehld.c
index 13ebace0e..f054327be 100644
--- a/drivers/soc/google/debug/exynos-ehld.c
+++ b/drivers/soc/google/debug/exynos-ehld.c
@@ -20,7 +20,9 @@
#include <linux/hrtimer.h>
#include <linux/reboot.h>
#include <linux/io.h>
+#include <linux/time64.h>
+#include <soc/google/acpm_ipc_ctrl.h>
#include <soc/google/exynos-ehld.h>
#include <soc/google/exynos-coresight.h>
#include <soc/google/debug-snapshot.h>
@@ -87,6 +89,7 @@ static struct exynos_ehld_main ehld_main = {
struct exynos_ehld_data {
unsigned long long time[NUM_TRACE];
+ unsigned long long alive_time[NUM_TRACE];
unsigned long long event[NUM_TRACE];
unsigned long long pmpcsr[NUM_TRACE];
unsigned long data_ptr;
@@ -413,6 +416,7 @@ void exynos_ehld_event_raw_update(unsigned int cpu, bool update_val)
data = &ctrl->data;
count = ++data->data_ptr & (NUM_TRACE - 1);
data->time[count] = cpu_clock(cpu);
+ data->alive_time[count] = get_frc_time() / NSEC_PER_MSEC;
if (sjtag_is_locked() || cpu_is_offline(cpu) || !ctrl->ehld_running ||
ctrl->ehld_cpupm) {
val = EHLD_VAL_PM;
@@ -444,8 +448,10 @@ void exynos_ehld_event_raw_update(unsigned int cpu, bool update_val)
cpu_is_offline(cpu));
raw_spin_unlock_irqrestore(&ctrl->lock, flags);
- ehld_info(0, "%s: cpu%u - time:%llu, event:%#llx\n",
- __func__, cpu, data->time[count], data->event[count]);
+ ehld_info(0, "%s: cpu%u - time:%llu(%llu.%03llu), event:%#llx\n",
+ __func__, cpu, data->time[count],
+ data->alive_time[count] / MSEC_PER_SEC, data->alive_time[count] % MSEC_PER_SEC,
+ data->event[count]);
}
void exynos_ehld_event_raw_update_allcpu(void)
@@ -458,9 +464,9 @@ void exynos_ehld_event_raw_update_allcpu(void)
static void print_ehld_header(void)
{
- ehld_err(1, "--------------------------------------------------------------------------\n");
+ ehld_err(1, "-------------------------------------------------------------------------------------------\n");
ehld_err(1, " Exynos Early Lockup Detector Information\n\n");
- ehld_err(1, " CPU NUM TIME Value PC\n\n");
+ ehld_err(1, " CPU NUM TIME:sys(alive) Value PC\n\n");
}
void exynos_ehld_event_raw_dump(unsigned int cpu, bool header)
@@ -490,9 +496,11 @@ void exynos_ehld_event_raw_dump(unsigned int cpu, bool header)
snprintf(buf, sizeof(buf), "%#016llx(%pS)",
data->pmpcsr[count], (void *)data->pmpcsr[count]);
}
- ehld_err(1, " %03u %03d %015llu %#015llx %s\n",
- cpu, i + 1, data->time[count], data->event[count],
- buf);
+ ehld_err(1, " %03u %03d %015llu(%010llu.%03llu) %#015llx %s\n",
+ cpu, i + 1, data->time[count],
+ data->alive_time[count] / MSEC_PER_SEC,
+ data->alive_time[count] % MSEC_PER_SEC,
+ data->event[count], buf);
}
raw_spin_unlock_irqrestore(&ctrl->lock, flags);
ehld_err(1, "--------------------------------------------------------------------------\n");