|
21 | 21 | #include <linux/memblock.h>
|
22 | 22 | #include <linux/slab.h>
|
23 | 23 | #include <linux/vmalloc.h>
|
| 24 | +#include <asm/setup.h> |
24 | 25 | #include <asm/drmem.h>
|
25 | 26 | #include <asm/kexec_ranges.h>
|
26 | 27 | #include <asm/crashdump-ppc64.h>
|
@@ -925,6 +926,40 @@ int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
|
925 | 926 | return ret;
|
926 | 927 | }
|
927 | 928 |
|
| 929 | +/** |
| 930 | + * kexec_fdt_totalsize_ppc64 - Return the estimated size needed to setup FDT |
| 931 | + * for kexec/kdump kernel. |
| 932 | + * @image: kexec image being loaded. |
| 933 | + * |
| 934 | + * Returns the estimated size needed for kexec/kdump kernel FDT. |
| 935 | + */ |
| 936 | +unsigned int kexec_fdt_totalsize_ppc64(struct kimage *image) |
| 937 | +{ |
| 938 | + unsigned int fdt_size; |
| 939 | + u64 usm_entries; |
| 940 | + |
| 941 | + /* |
| 942 | + * The below estimate more than accounts for a typical kexec case where |
| 943 | + * the additional space is to accommodate things like kexec cmdline, |
| 944 | + * chosen node with properties for initrd start & end addresses and |
| 945 | + * a property to indicate kexec boot.. |
| 946 | + */ |
| 947 | + fdt_size = fdt_totalsize(initial_boot_params) + (2 * COMMAND_LINE_SIZE); |
| 948 | + if (image->type != KEXEC_TYPE_CRASH) |
| 949 | + return fdt_size; |
| 950 | + |
| 951 | + /* |
| 952 | + * For kdump kernel, also account for linux,usable-memory and |
| 953 | + * linux,drconf-usable-memory properties. Get an approximate on the |
| 954 | + * number of usable memory entries and use for FDT size estimation. |
| 955 | + */ |
| 956 | + usm_entries = ((memblock_end_of_DRAM() / drmem_lmb_size()) + |
| 957 | + (2 * (resource_size(&crashk_res) / drmem_lmb_size()))); |
| 958 | + fdt_size += (unsigned int)(usm_entries * sizeof(u64)); |
| 959 | + |
| 960 | + return fdt_size; |
| 961 | +} |
| 962 | + |
928 | 963 | /**
|
929 | 964 | * setup_new_fdt_ppc64 - Update the flattend device-tree of the kernel
|
930 | 965 | * being loaded.
|
|
0 commit comments