NULL
 };
 
-/**
- * get_exclude_memory_ranges - Get exclude memory ranges. This list includes
- *                             regions like opal/rtas, tce-table, initrd,
- *                             kernel, htab which should be avoided while
- *                             setting up kexec load segments.
- * @mem_ranges:                Range list to add the memory ranges to.
- *
- * Returns 0 on success, negative errno on error.
- */
-static int get_exclude_memory_ranges(struct crash_mem **mem_ranges)
-{
-       int ret;
-
-       ret = add_tce_mem_ranges(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_initrd_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_htab_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_kernel_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_rtas_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_opal_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_reserved_mem_ranges(mem_ranges);
-       if (ret)
-               goto out;
-
-       /* exclude memory ranges should be sorted for easy lookup */
-       sort_memory_ranges(*mem_ranges, true);
-out:
-       if (ret)
-               pr_err("Failed to setup exclude memory ranges\n");
-       return ret;
-}
-
-/**
- * get_reserved_memory_ranges - Get reserve memory ranges. This list includes
- *                              memory regions that should be added to the
- *                              memory reserve map to ensure the region is
- *                              protected from any mischief.
- * @mem_ranges:                 Range list to add the memory ranges to.
- *
- * Returns 0 on success, negative errno on error.
- */
-static int get_reserved_memory_ranges(struct crash_mem **mem_ranges)
-{
-       int ret;
-
-       ret = add_rtas_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_tce_mem_ranges(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_reserved_mem_ranges(mem_ranges);
-out:
-       if (ret)
-               pr_err("Failed to setup reserved memory ranges\n");
-       return ret;
-}
-
 /**
  * __locate_mem_hole_top_down - Looks top down for a large enough memory hole
  *                              in the memory regions between buf_min & buf_max
 }
 
 #ifdef CONFIG_CRASH_DUMP
-/**
- * get_usable_memory_ranges - Get usable memory ranges. This list includes
- *                            regions like crashkernel, opal/rtas & tce-table,
- *                            that kdump kernel could use.
- * @mem_ranges:               Range list to add the memory ranges to.
- *
- * Returns 0 on success, negative errno on error.
- */
-static int get_usable_memory_ranges(struct crash_mem **mem_ranges)
-{
-       int ret;
-
-       /*
-        * Early boot failure observed on guests when low memory (first memory
-        * block?) is not added to usable memory. So, add [0, crashk_res.end]
-        * instead of [crashk_res.start, crashk_res.end] to workaround it.
-        * Also, crashed kernel's memory must be added to reserve map to
-        * avoid kdump kernel from using it.
-        */
-       ret = add_mem_range(mem_ranges, 0, crashk_res.end + 1);
-       if (ret)
-               goto out;
-
-       ret = add_rtas_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_opal_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_tce_mem_ranges(mem_ranges);
-out:
-       if (ret)
-               pr_err("Failed to setup usable memory ranges\n");
-       return ret;
-}
-
-/**
- * get_crash_memory_ranges - Get crash memory ranges. This list includes
- *                           first/crashing kernel's memory regions that
- *                           would be exported via an elfcore.
- * @mem_ranges:              Range list to add the memory ranges to.
- *
- * Returns 0 on success, negative errno on error.
- */
-static int get_crash_memory_ranges(struct crash_mem **mem_ranges)
-{
-       phys_addr_t base, end;
-       struct crash_mem *tmem;
-       u64 i;
-       int ret;
-
-       for_each_mem_range(i, &base, &end) {
-               u64 size = end - base;
-
-               /* Skip backup memory region, which needs a separate entry */
-               if (base == BACKUP_SRC_START) {
-                       if (size > BACKUP_SRC_SIZE) {
-                               base = BACKUP_SRC_END + 1;
-                               size -= BACKUP_SRC_SIZE;
-                       } else
-                               continue;
-               }
-
-               ret = add_mem_range(mem_ranges, base, size);
-               if (ret)
-                       goto out;
-
-               /* Try merging adjacent ranges before reallocation attempt */
-               if ((*mem_ranges)->nr_ranges == (*mem_ranges)->max_nr_ranges)
-                       sort_memory_ranges(*mem_ranges, true);
-       }
-
-       /* Reallocate memory ranges if there is no space to split ranges */
-       tmem = *mem_ranges;
-       if (tmem && (tmem->nr_ranges == tmem->max_nr_ranges)) {
-               tmem = realloc_mem_ranges(mem_ranges);
-               if (!tmem)
-                       goto out;
-       }
-
-       /* Exclude crashkernel region */
-       ret = crash_exclude_mem_range(tmem, crashk_res.start, crashk_res.end);
-       if (ret)
-               goto out;
-
-       /*
-        * FIXME: For now, stay in parity with kexec-tools but if RTAS/OPAL
-        *        regions are exported to save their context at the time of
-        *        crash, they should actually be backed up just like the
-        *        first 64K bytes of memory.
-        */
-       ret = add_rtas_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       ret = add_opal_mem_range(mem_ranges);
-       if (ret)
-               goto out;
-
-       /* create a separate program header for the backup region */
-       ret = add_mem_range(mem_ranges, BACKUP_SRC_START, BACKUP_SRC_SIZE);
-       if (ret)
-               goto out;
-
-       sort_memory_ranges(*mem_ranges, false);
-out:
-       if (ret)
-               pr_err("Failed to setup crash memory ranges\n");
-       return ret;
-}
-
 /**
  * check_realloc_usable_mem - Reallocate buffer if it can't accommodate entries
  * @um_info:                  Usable memory buffer and ranges info.
 
 #include <linux/kexec.h>
 #include <linux/of.h>
 #include <linux/slab.h>
+#include <linux/memblock.h>
+#include <linux/crash_core.h>
 #include <asm/sections.h>
 #include <asm/kexec_ranges.h>
+#include <asm/crashdump-ppc64.h>
 
+#if defined(CONFIG_KEXEC_FILE) || defined(CONFIG_CRASH_DUMP)
 /**
  * get_max_nr_ranges - Get the max no. of ranges crash_mem structure
  *                     could hold, given the size allocated for it.
        return __add_mem_range(mem_ranges, base, size);
 }
 
+#endif /* CONFIG_KEXEC_FILE || CONFIG_CRASH_DUMP */
+
+#ifdef CONFIG_KEXEC_FILE
 /**
  * add_tce_mem_ranges - Adds tce-table range to the given memory ranges list.
  * @mem_ranges:         Range list to add the memory range(s) to.
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_tce_mem_ranges(struct crash_mem **mem_ranges)
+static int add_tce_mem_ranges(struct crash_mem **mem_ranges)
 {
        struct device_node *dn = NULL;
        int ret = 0;
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_initrd_mem_range(struct crash_mem **mem_ranges)
+static int add_initrd_mem_range(struct crash_mem **mem_ranges)
 {
        u64 base, end;
        int ret;
        return ret;
 }
 
-#ifdef CONFIG_PPC_64S_HASH_MMU
 /**
  * add_htab_mem_range - Adds htab range to the given memory ranges list,
  *                      if it exists
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_htab_mem_range(struct crash_mem **mem_ranges)
+static int add_htab_mem_range(struct crash_mem **mem_ranges)
 {
+
+#ifdef CONFIG_PPC_64S_HASH_MMU
        if (!htab_address)
                return 0;
 
        return add_mem_range(mem_ranges, __pa(htab_address), htab_size_bytes);
-}
+#else
+       return 0;
 #endif
+}
 
 /**
  * add_kernel_mem_range - Adds kernel text region to the given
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_kernel_mem_range(struct crash_mem **mem_ranges)
+static int add_kernel_mem_range(struct crash_mem **mem_ranges)
 {
        return add_mem_range(mem_ranges, 0, __pa(_end));
 }
+#endif /* CONFIG_KEXEC_FILE */
 
+#if defined(CONFIG_KEXEC_FILE) || defined(CONFIG_CRASH_DUMP)
 /**
  * add_rtas_mem_range - Adds RTAS region to the given memory ranges list.
  * @mem_ranges:         Range list to add the memory range to.
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_rtas_mem_range(struct crash_mem **mem_ranges)
+static int add_rtas_mem_range(struct crash_mem **mem_ranges)
 {
        struct device_node *dn;
        u32 base, size;
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_opal_mem_range(struct crash_mem **mem_ranges)
+static int add_opal_mem_range(struct crash_mem **mem_ranges)
 {
        struct device_node *dn;
        u64 base, size;
        of_node_put(dn);
        return ret;
 }
+#endif /* CONFIG_KEXEC_FILE || CONFIG_CRASH_DUMP */
 
+#ifdef CONFIG_KEXEC_FILE
 /**
  * add_reserved_mem_ranges - Adds "/reserved-ranges" regions exported by f/w
  *                           to the given memory ranges list.
  *
  * Returns 0 on success, negative errno on error.
  */
-int add_reserved_mem_ranges(struct crash_mem **mem_ranges)
+static int add_reserved_mem_ranges(struct crash_mem **mem_ranges)
 {
        int n_mem_addr_cells, n_mem_size_cells, i, len, cells, ret = 0;
        struct device_node *root = of_find_node_by_path("/");
 
        return ret;
 }
+
+/**
+ * get_reserved_memory_ranges - Get reserve memory ranges. This list includes
+ *                              memory regions that should be added to the
+ *                              memory reserve map to ensure the region is
+ *                              protected from any mischief.
+ * @mem_ranges:                 Range list to add the memory ranges to.
+ *
+ * Returns 0 on success, negative errno on error.
+ */
+int get_reserved_memory_ranges(struct crash_mem **mem_ranges)
+{
+       int ret;
+
+       ret = add_rtas_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_tce_mem_ranges(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_reserved_mem_ranges(mem_ranges);
+out:
+       if (ret)
+               pr_err("Failed to setup reserved memory ranges\n");
+       return ret;
+}
+
+/**
+ * get_exclude_memory_ranges - Get exclude memory ranges. This list includes
+ *                             regions like opal/rtas, tce-table, initrd,
+ *                             kernel, htab which should be avoided while
+ *                             setting up kexec load segments.
+ * @mem_ranges:                Range list to add the memory ranges to.
+ *
+ * Returns 0 on success, negative errno on error.
+ */
+int get_exclude_memory_ranges(struct crash_mem **mem_ranges)
+{
+       int ret;
+
+       ret = add_tce_mem_ranges(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_initrd_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_htab_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_kernel_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_rtas_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_opal_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_reserved_mem_ranges(mem_ranges);
+       if (ret)
+               goto out;
+
+       /* exclude memory ranges should be sorted for easy lookup */
+       sort_memory_ranges(*mem_ranges, true);
+out:
+       if (ret)
+               pr_err("Failed to setup exclude memory ranges\n");
+       return ret;
+}
+
+#ifdef CONFIG_CRASH_DUMP
+/**
+ * get_usable_memory_ranges - Get usable memory ranges. This list includes
+ *                            regions like crashkernel, opal/rtas & tce-table,
+ *                            that kdump kernel could use.
+ * @mem_ranges:               Range list to add the memory ranges to.
+ *
+ * Returns 0 on success, negative errno on error.
+ */
+int get_usable_memory_ranges(struct crash_mem **mem_ranges)
+{
+       int ret;
+
+       /*
+        * Early boot failure observed on guests when low memory (first memory
+        * block?) is not added to usable memory. So, add [0, crashk_res.end]
+        * instead of [crashk_res.start, crashk_res.end] to workaround it.
+        * Also, crashed kernel's memory must be added to reserve map to
+        * avoid kdump kernel from using it.
+        */
+       ret = add_mem_range(mem_ranges, 0, crashk_res.end + 1);
+       if (ret)
+               goto out;
+
+       ret = add_rtas_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_opal_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_tce_mem_ranges(mem_ranges);
+out:
+       if (ret)
+               pr_err("Failed to setup usable memory ranges\n");
+       return ret;
+}
+#endif /* CONFIG_CRASH_DUMP */
+#endif /* CONFIG_KEXEC_FILE */
+
+#ifdef CONFIG_CRASH_DUMP
+/**
+ * get_crash_memory_ranges - Get crash memory ranges. This list includes
+ *                           first/crashing kernel's memory regions that
+ *                           would be exported via an elfcore.
+ * @mem_ranges:              Range list to add the memory ranges to.
+ *
+ * Returns 0 on success, negative errno on error.
+ */
+int get_crash_memory_ranges(struct crash_mem **mem_ranges)
+{
+       phys_addr_t base, end;
+       struct crash_mem *tmem;
+       u64 i;
+       int ret;
+
+       for_each_mem_range(i, &base, &end) {
+               u64 size = end - base;
+
+               /* Skip backup memory region, which needs a separate entry */
+               if (base == BACKUP_SRC_START) {
+                       if (size > BACKUP_SRC_SIZE) {
+                               base = BACKUP_SRC_END + 1;
+                               size -= BACKUP_SRC_SIZE;
+                       } else
+                               continue;
+               }
+
+               ret = add_mem_range(mem_ranges, base, size);
+               if (ret)
+                       goto out;
+
+               /* Try merging adjacent ranges before reallocation attempt */
+               if ((*mem_ranges)->nr_ranges == (*mem_ranges)->max_nr_ranges)
+                       sort_memory_ranges(*mem_ranges, true);
+       }
+
+       /* Reallocate memory ranges if there is no space to split ranges */
+       tmem = *mem_ranges;
+       if (tmem && (tmem->nr_ranges == tmem->max_nr_ranges)) {
+               tmem = realloc_mem_ranges(mem_ranges);
+               if (!tmem)
+                       goto out;
+       }
+
+       /* Exclude crashkernel region */
+       ret = crash_exclude_mem_range(tmem, crashk_res.start, crashk_res.end);
+       if (ret)
+               goto out;
+
+       /*
+        * FIXME: For now, stay in parity with kexec-tools but if RTAS/OPAL
+        *        regions are exported to save their context at the time of
+        *        crash, they should actually be backed up just like the
+        *        first 64K bytes of memory.
+        */
+       ret = add_rtas_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       ret = add_opal_mem_range(mem_ranges);
+       if (ret)
+               goto out;
+
+       /* create a separate program header for the backup region */
+       ret = add_mem_range(mem_ranges, BACKUP_SRC_START, BACKUP_SRC_SIZE);
+       if (ret)
+               goto out;
+
+       sort_memory_ranges(*mem_ranges, false);
+out:
+       if (ret)
+               pr_err("Failed to setup crash memory ranges\n");
+       return ret;
+}
+#endif /* CONFIG_CRASH_DUMP */