summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Iacobucci <alexiacobucci@google.com>2023-05-22 15:43:23 +0000
committerAlex Iacobucci <alexiacobucci@google.com>2023-05-22 15:50:17 +0000
commit3adff1d33db80114b8b69b147345f09d972ce927 (patch)
tree94b03f370fc9229882a4624f30edefb44a1424df
parentc526ebdb5ad73c2cc10d3908b09f4319384af6cd (diff)
downloadaoc-3adff1d33db80114b8b69b147345f09d972ce927.tar.gz
aoc: dynamically compute ramdump offsets
Bug: 283492323 Test: tested on device Change-Id: I1cbbe5aca89a1420841f50362783e001a22fc1d7 Signed-off-by: Alex Iacobucci <alexiacobucci@google.com>
-rw-r--r--aoc.c16
-rw-r--r--aoc_ramdump_regions.h63
2 files changed, 14 insertions, 65 deletions
diff --git a/aoc.c b/aoc.c
index 235b4ee..c304dc4 100644
--- a/aoc.c
+++ b/aoc.c
@@ -2554,6 +2554,16 @@ static irqreturn_t watchdog_int_handler(int irq, void *dev)
return IRQ_HANDLED;
}
+static int compute_section_offset(struct aoc_ramdump_header *ramdump_header, int section_index)
+{
+ int i, crash_info_section_offset = RAMDUMP_SECTION_SRAM_OFFSET;
+
+ for (i = 0; i < section_index; i++)
+ crash_info_section_offset += ramdump_header->sections[i].size;
+
+ return crash_info_section_offset;
+}
+
static void aoc_watchdog(struct work_struct *work)
{
struct aoc_prvdata *prvdata =
@@ -2578,6 +2588,8 @@ static void aoc_watchdog(struct work_struct *work)
int restart_rc;
u32 section_flags;
bool ap_reset = false;
+ int crash_info_section_offset = compute_section_offset(ramdump_header,
+ RAMDUMP_SECTION_CRASH_INFO_INDEX);
prvdata->total_restarts++;
@@ -2633,7 +2645,7 @@ static void aoc_watchdog(struct work_struct *work)
if (!ramdump_header->valid) {
const char *crash_reason = (const char *)ramdump_header +
- RAMDUMP_SECTION_CRASH_INFO_OFFSET;
+ crash_info_section_offset;
bool crash_reason_valid = (strnlen(crash_reason,
sizeof(crash_info)) != 0);
@@ -2670,7 +2682,7 @@ static void aoc_watchdog(struct work_struct *work)
if (ramdump_header->valid) {
const char *crash_reason = (const char *)ramdump_header +
- RAMDUMP_SECTION_CRASH_INFO_OFFSET;
+ crash_info_section_offset;
section_flags = ramdump_header->sections[RAMDUMP_SECTION_CRASH_INFO_INDEX].flags;
if (section_flags & RAMDUMP_FLAG_VALID) {
diff --git a/aoc_ramdump_regions.h b/aoc_ramdump_regions.h
index c419f70..b2a8688 100644
--- a/aoc_ramdump_regions.h
+++ b/aoc_ramdump_regions.h
@@ -100,71 +100,8 @@ struct aoc_ramdump_header {
#else
#define RAMDUMP_SECTION_SRAM_SIZE 0x800000
#endif
-#define RAMDUMP_SECTION_SRAM_NAME "SRAM"
-#define RAMDUMP_SECTION_SFR_OFFSET (RAMDUMP_SECTION_SRAM_OFFSET + RAMDUMP_SECTION_SRAM_SIZE)
-#define RAMDUMP_SECTION_SFR_SIZE (0x100000)
-#define RAMDUMP_SECTION_SFR_NAME "SFRs"
-
-#define RAMDUMP_SECTION_A32_REGISTER_OFFSET (RAMDUMP_SECTION_SFR_OFFSET + RAMDUMP_SECTION_SFR_SIZE)
-#define RAMDUMP_SECTION_A32_REGISTER_SIZE 0x1000
-#define RAMDUMP_SECTION_A32_REGISTER_NAME "A32 registers"
-
-#define RAMDUMP_SECTION_A32_DCACHE_OFFSET (RAMDUMP_SECTION_A32_REGISTER_OFFSET + RAMDUMP_SECTION_A32_REGISTER_SIZE)
-#define RAMDUMP_SECTION_A32_DCACHE_SIZE (16 * 1024 * 2)
-#define RAMDUMP_SECTION_A32_DCACHE_NAME "A32 D-cache"
-
-#define RAMDUMP_SECTION_A32_ICACHE_OFFSET (RAMDUMP_SECTION_A32_DCACHE_OFFSET + RAMDUMP_SECTION_A32_DCACHE_SIZE)
-#define RAMDUMP_SECTION_A32_ICACHE_SIZE (16 * 1024 * 2)
-#define RAMDUMP_SECTION_A32_ICACHE_NAME "A32 I-cache"
-
-#define RAMDUMP_SECTION_A32_TLB_OFFSET (RAMDUMP_SECTION_A32_ICACHE_OFFSET + RAMDUMP_SECTION_A32_ICACHE_SIZE)
-#define RAMDUMP_SECTION_A32_TLB_SIZE (320 * 2 * 4 * 4)
-#define RAMDUMP_SECTION_A32_TLB_NAME "A32 TLB"
-
-#define RAMDUMP_SECTION_F1_REGISTER_OFFSET (RAMDUMP_SECTION_A32_TLB_OFFSET + RAMDUMP_SECTION_A32_TLB_SIZE)
-#define RAMDUMP_SECTION_F1_REGISTER_SIZE 0x1000
-#define RAMDUMP_SECTION_F1_REGISTER_NAME "F1 registers"
-
-#define RAMDUMP_SECTION_F1_DCACHE_OFFSET (RAMDUMP_SECTION_F1_REGISTER_OFFSET + RAMDUMP_SECTION_F1_REGISTER_SIZE)
-#define RAMDUMP_SECTION_F1_DCACHE_SIZE (64 * 1024 * 2)
-#define RAMDUMP_SECTION_F1_DCACHE_NAME "F1 D-cache"
-
-#define RAMDUMP_SECTION_F1_ICACHE_OFFSET (RAMDUMP_SECTION_F1_DCACHE_OFFSET + RAMDUMP_SECTION_F1_DCACHE_SIZE)
-#define RAMDUMP_SECTION_F1_ICACHE_SIZE (64 * 1024 * 2)
-#define RAMDUMP_SECTION_F1_ICACHE_NAME "F1 I-cache"
-
-#define RAMDUMP_SECTION_HF0_REGISTER_OFFSET (RAMDUMP_SECTION_F1_ICACHE_OFFSET + RAMDUMP_SECTION_F1_ICACHE_SIZE)
-#define RAMDUMP_SECTION_HF0_REGISTER_SIZE 0x1000
-#define RAMDUMP_SECTION_HF0_REGISTER_NAME "HF0 registers"
-
-#define RAMDUMP_SECTION_HF0_DCACHE_OFFSET (RAMDUMP_SECTION_HF0_REGISTER_OFFSET + RAMDUMP_SECTION_HF0_REGISTER_SIZE)
-#define RAMDUMP_SECTION_HF0_DCACHE_SIZE (128 * 1024 * 2)
-#define RAMDUMP_SECTION_HF0_DCACHE_NAME "HF0 D-cache"
-
-#define RAMDUMP_SECTION_HF0_ICACHE_OFFSET (RAMDUMP_SECTION_HF0_DCACHE_OFFSET + RAMDUMP_SECTION_HF0_DCACHE_SIZE)
-#define RAMDUMP_SECTION_HF0_ICACHE_SIZE (32 * 1024 * 2)
-#define RAMDUMP_SECTION_HF0_ICACHE_NAME "HF0 I-cache"
-
-#define RAMDUMP_SECTION_HF1_REGISTER_OFFSET (RAMDUMP_SECTION_HF0_ICACHE_OFFSET + RAMDUMP_SECTION_HF0_ICACHE_SIZE)
-#define RAMDUMP_SECTION_HF1_REGISTER_SIZE 0x1000
-#define RAMDUMP_SECTION_HF1_REGISTER_NAME "HF1 registers"
-
-#define RAMDUMP_SECTION_HF1_DCACHE_OFFSET (RAMDUMP_SECTION_HF1_REGISTER_OFFSET + RAMDUMP_SECTION_HF1_REGISTER_SIZE)
-#define RAMDUMP_SECTION_HF1_DCACHE_SIZE (128 * 1024 * 2)
-#define RAMDUMP_SECTION_HF1_DCACHE_NAME "HF1 D-cache"
-
-#define RAMDUMP_SECTION_HF1_ICACHE_OFFSET (RAMDUMP_SECTION_HF1_DCACHE_OFFSET + RAMDUMP_SECTION_HF1_DCACHE_SIZE)
-#define RAMDUMP_SECTION_HF1_ICACHE_SIZE (32 * 1024 * 2)
-#define RAMDUMP_SECTION_HF1_ICACHE_NAME "HF1 I-cache"
-
-#define RAMDUMP_SECTION_A32_TRACE_OFFSET (RAMDUMP_SECTION_HF1_ICACHE_OFFSET + RAMDUMP_SECTION_HF1_ICACHE_SIZE)
-#define RAMDUMP_SECTION_A32_TRACE_SIZE (64 * 1024)
-#define RAMDUMP_SECTION_A32_TRACE_NAME "A32 trace"
-
-#define RAMDUMP_SECTION_CRASH_INFO_OFFSET (RAMDUMP_SECTION_A32_TRACE_OFFSET + RAMDUMP_SECTION_A32_TRACE_SIZE)
#define RAMDUMP_SECTION_CRASH_INFO_SIZE 256
-#define RAMDUMP_SECTION_CRASH_INFO_NAME "Crash info"
#endif /* RAMDUMP_REGIONS_H_ */