summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWoody Lin <woodylin@google.com>2023-10-13 16:45:56 +0800
committerWoody Lin <woodylin@google.com>2023-10-14 00:01:55 +0800
commit110b8f8c8c75db544af0ccf1d86c489740be4eee (patch)
tree64e875dcebea6b8cd99da65fbfad1700e0982a26
parent3765eb7bf1ab09592d98a37c42a0d0f179224d14 (diff)
downloadgs-android-gs-shusky-5.15-android14-qpr1-beta.tar.gz
Prints ALIVE FRC clock counters as timestamps. DebugCore will also use it as a system-wide global clock. Bug: 292361589 Change-Id: I8bed03b8b3e7f0a5e7fabb4f04a928163cbc2528 Signed-off-by: Woody Lin <woodylin@google.com>
-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");