diff options
author | Woody Lin <woodylin@google.com> | 2023-10-13 16:45:56 +0800 |
---|---|---|
committer | Woody Lin <woodylin@google.com> | 2023-10-14 00:01:55 +0800 |
commit | 110b8f8c8c75db544af0ccf1d86c489740be4eee (patch) | |
tree | 64e875dcebea6b8cd99da65fbfad1700e0982a26 | |
parent | 3765eb7bf1ab09592d98a37c42a0d0f179224d14 (diff) | |
download | gs-android-gs-shusky-5.15-android14-qpr1-beta.tar.gz |
google/debug: ehld: print ALIVE FRC timestampsandroid-u-qpr1-beta-2.2_r0.7android-gs-shusky-5.15-android14-qpr1-beta
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.c | 22 |
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"); |