void __init msm_8974_reserve(void)
{
#ifdef CONFIG_KEXEC_HARDBOOT
        int ret;
        phys_addr_t start;
	struct membank* bank;
#endif
#if defined(CONFIG_RAMDUMP_TAGS) || defined(CONFIG_CRASH_LAST_LOGS)
	reserve_debug_memory();
#endif
#ifdef CONFIG_ANDROID_PERSISTENT_RAM
	reserve_persistent_ram();
#endif
	reserve_info = &msm8974_reserve_info;
	of_scan_flat_dt(dt_scan_for_memory_reserve, msm8974_reserve_table);
#ifdef CONFIG_KEXEC_HARDBOOT
        // Reserve space for hardboot page - just after ram_console,
        // at the start of second memory bank

        if (meminfo.nr_banks < 2) {
                pr_err("%s: not enough membank\n", __func__);
                return;
        }

	bank = &meminfo.bank[1];
	start = bank->start + bank->size - SZ_1M + KEXEC_HB_OFFSET;
	ret = memblock_remove(start, SZ_1M);
        if(!ret)
                pr_info("Hardboot page reserved at 0x%X\n", start);
        else
                pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
#endif

	msm_reserve();
}
void __init msm_8974_reserve(void)
{
#if defined(CONFIG_RAMDUMP_TAGS) || defined(CONFIG_CRASH_LAST_LOGS)
	reserve_debug_memory();
#endif
	reserve_info = &msm8974_reserve_info;
	of_scan_flat_dt(dt_scan_for_memory_reserve, msm8974_reserve_table);
	msm_reserve();
}
void __init msm_8974_reserve(void)
{
#if defined(CONFIG_RAMDUMP_TAGS) || defined(CONFIG_CRASH_LAST_LOGS)
	reserve_debug_memory();
#endif
#ifdef CONFIG_ANDROID_PERSISTENT_RAM
	reserve_persistent_ram();
#endif
	reserve_info = &msm8974_reserve_info;
	of_scan_flat_dt(dt_scan_for_memory_reserve, msm8974_reserve_table);
	msm_reserve();
}