summaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/pseries/rtas-fadump.c
diff options
context:
space:
mode:
authorHari Bathini <hbathini@linux.ibm.com>2019-09-11 17:57:39 +0300
committerMichael Ellerman <mpe@ellerman.id.au>2019-09-13 17:04:46 +0300
commit7dee93a9a8808b3d8595e1cc79ccb8b1a7bc7a77 (patch)
treed1771d9e4267150a0a7bfbaa71a278ad2c2fd817 /arch/powerpc/platforms/pseries/rtas-fadump.c
parentbecd91d9c5467160984a0380df72fdf71fee82f6 (diff)
downloadlinux-7dee93a9a8808b3d8595e1cc79ccb8b1a7bc7a77.tar.xz
powerpc/fadump: support holes in kernel boot memory area
With support to copy multiple kernel boot memory regions owing to copy size limitation, also handle holes in the memory area to be preserved. Support as many as 128 kernel boot memory regions. This allows having an adequate FADump capture kernel size for different scenarios. Signed-off-by: Hari Bathini <hbathini@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/156821385448.5656.6124791213910877759.stgit@hbathini.in.ibm.com
Diffstat (limited to 'arch/powerpc/platforms/pseries/rtas-fadump.c')
-rw-r--r--arch/powerpc/platforms/pseries/rtas-fadump.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/pseries/rtas-fadump.c b/arch/powerpc/platforms/pseries/rtas-fadump.c
index a525180c1f0f..70c3013fdd07 100644
--- a/arch/powerpc/platforms/pseries/rtas-fadump.c
+++ b/arch/powerpc/platforms/pseries/rtas-fadump.c
@@ -42,7 +42,13 @@ static void rtas_fadump_update_config(struct fw_dump *fadump_conf,
static void rtas_fadump_get_config(struct fw_dump *fadump_conf,
const struct rtas_fadump_mem_struct *fdm)
{
- fadump_conf->boot_memory_size = be64_to_cpu(fdm->rmr_region.source_len);
+ fadump_conf->boot_mem_addr[0] =
+ be64_to_cpu(fdm->rmr_region.source_address);
+ fadump_conf->boot_mem_sz[0] = be64_to_cpu(fdm->rmr_region.source_len);
+ fadump_conf->boot_memory_size = fadump_conf->boot_mem_sz[0];
+
+ fadump_conf->boot_mem_top = fadump_conf->boot_memory_size;
+ fadump_conf->boot_mem_regs_cnt = 1;
/*
* Start address of reserve dump area (permanent reservation) for
@@ -499,6 +505,9 @@ void __init rtas_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
fadump_conf->ops = &rtas_fadump_ops;
fadump_conf->fadump_supported = 1;
+ /* Firmware supports 64-bit value for size, align it to pagesize. */
+ fadump_conf->max_copy_size = _ALIGN_DOWN(U64_MAX, PAGE_SIZE);
+
/*
* The 'ibm,kernel-dump' rtas node is present only if there is
* dump data waiting for us.