aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2019-10-11 15:27:41 +1100
committerOliver O'Halloran <oohall@gmail.com>2019-10-14 10:51:42 +1100
commita4e0f636ea8c179d68c14d96ca36e165406a452e (patch)
tree0c2a1bf5389411ee2bba4c1d0592f0e4b64e3db5
parent1785745d5a7eaefd7d0c135f2a3b0f5d86aefec5 (diff)
downloadskiboot-a4e0f636ea8c179d68c14d96ca36e165406a452e.zip
skiboot-a4e0f636ea8c179d68c14d96ca36e165406a452e.tar.gz
skiboot-a4e0f636ea8c179d68c14d96ca36e165406a452e.tar.bz2
core/init: Don't checksum MPIPL data areas
Right now the romem checksum runs from _start until the start of our data area. This spans the area used for the MPIPL data structures since they're included in the SPIRA-H data area. Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
-rw-r--r--core/init.c6
-rw-r--r--include/skiboot.h1
-rw-r--r--skiboot.lds.S9
3 files changed, 15 insertions, 1 deletions
diff --git a/core/init.c b/core/init.c
index 62d9c70..c2d7324 100644
--- a/core/init.c
+++ b/core/init.c
@@ -927,8 +927,12 @@ static void checksum_romem(void)
if (chip_quirk(QUIRK_SLOW_SIM))
return;
- csum = mem_csum(_start, _romem_end);
+ csum = mem_csum(_start, _head_end);
romem_csum ^= csum;
+
+ csum = mem_csum(_stext, _romem_end);
+ romem_csum ^= csum;
+
csum = mem_csum(__builtin_kernel_start, __builtin_kernel_end);
romem_csum ^= csum;
}
diff --git a/include/skiboot.h b/include/skiboot.h
index 686ba9d..10b43e8 100644
--- a/include/skiboot.h
+++ b/include/skiboot.h
@@ -37,6 +37,7 @@ extern struct mem_region *mem_region_next(struct mem_region *region);
/* Misc linker script symbols */
extern char _start[];
+extern char _head_end[];
extern char _stext[];
extern char _etext[];
extern char __sym_map_end[];
diff --git a/skiboot.lds.S b/skiboot.lds.S
index 8890d69..32139b2 100644
--- a/skiboot.lds.S
+++ b/skiboot.lds.S
@@ -69,6 +69,13 @@ SECTIONS
KEEP(*(.spirah.data))
}
+ _head_end = .;
+
+ /*
+ * The following sections are read-write at runtime. We need
+ * to skip over them when checksumming the skiboot images
+ * before a fast-reboot.
+ */
. = PROC_DUMP_AREA_OFF;
.procdump : {
KEEP(*(.procdump.data))
@@ -94,6 +101,8 @@ SECTIONS
KEEP(*(.cpuctrl.data))
}
+ /* ...and back to RO */
+
. = ALIGN(0x10);
_stext = .;
.text : {