powerpc/pseries/fadump: add support for multiple boot memory regions
Currently, fadump on pseries assumes a single boot memory region even though f/w supports more than one boot memory region. Add support for more boot memory regions to make the implementation flexible for any enhancements that introduce other region types. For this, rtas memory structure for fadump is updated to have multiple boot memory regions instead of just one. Additionally, methods responsible for creating the fadump memory structure during both the first and second kernel boot have been modified to take these multiple boot memory regions into account. Also, a new callback has been added to the fadump_ops structure to get the maximum boot memory regions supported by the platform. Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com> Signed-off-by: Hari Bathini <hbathini@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20240509115755.519982-2-hbathini@linux.ibm.com
This commit is contained in:
committed by
Michael Ellerman
parent
98ec6d38ee
commit
78d5cc15fb
@@ -220,28 +220,6 @@ static bool is_fadump_mem_area_contiguous(u64 d_start, u64 d_end)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true, if there are no holes in boot memory area,
|
||||
* false otherwise.
|
||||
*/
|
||||
bool is_fadump_boot_mem_contiguous(void)
|
||||
{
|
||||
unsigned long d_start, d_end;
|
||||
bool ret = false;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < fw_dump.boot_mem_regs_cnt; i++) {
|
||||
d_start = fw_dump.boot_mem_addr[i];
|
||||
d_end = d_start + fw_dump.boot_mem_sz[i];
|
||||
|
||||
ret = is_fadump_mem_area_contiguous(d_start, d_end);
|
||||
if (!ret)
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true, if there are no holes in reserved memory area,
|
||||
* false otherwise.
|
||||
@@ -381,10 +359,11 @@ static unsigned long __init get_fadump_area_size(void)
|
||||
static int __init add_boot_mem_region(unsigned long rstart,
|
||||
unsigned long rsize)
|
||||
{
|
||||
int max_boot_mem_rgns = fw_dump.ops->fadump_max_boot_mem_rgns();
|
||||
int i = fw_dump.boot_mem_regs_cnt++;
|
||||
|
||||
if (fw_dump.boot_mem_regs_cnt > FADUMP_MAX_MEM_REGS) {
|
||||
fw_dump.boot_mem_regs_cnt = FADUMP_MAX_MEM_REGS;
|
||||
if (fw_dump.boot_mem_regs_cnt > max_boot_mem_rgns) {
|
||||
fw_dump.boot_mem_regs_cnt = max_boot_mem_rgns;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user