|
@@ -1000,9 +1000,25 @@ static void __init reserve_crashkernel(void)
|
|
|
(unsigned long)(crash_base >> 20),
|
|
|
(unsigned long)(total_mem >> 20));
|
|
|
|
|
|
+ /* The crashk resource must always be located in normal mem */
|
|
|
crashk_res.start = crash_base;
|
|
|
crashk_res.end = crash_base + crash_size - 1;
|
|
|
insert_resource(&iomem_resource, &crashk_res);
|
|
|
+
|
|
|
+ if (arm_has_idmap_alias()) {
|
|
|
+ /*
|
|
|
+ * If we have a special RAM alias for use at boot, we
|
|
|
+ * need to advertise to kexec tools where the alias is.
|
|
|
+ */
|
|
|
+ static struct resource crashk_boot_res = {
|
|
|
+ .name = "Crash kernel (boot alias)",
|
|
|
+ .flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
|
|
+ };
|
|
|
+
|
|
|
+ crashk_boot_res.start = phys_to_idmap(crash_base);
|
|
|
+ crashk_boot_res.end = crashk_boot_res.start + crash_size - 1;
|
|
|
+ insert_resource(&iomem_resource, &crashk_boot_res);
|
|
|
+ }
|
|
|
}
|
|
|
#else
|
|
|
static inline void reserve_crashkernel(void) {}
|