forked from luck/tmp_suning_uos_patched
9b9a59db84
It might be necessary to prevent the virtual mapping creation for a requested memory region. For instance there is a "no-map" property indicating exactly this feature. In this case we need to not only reserve the specified region by pretending it doesn't exist in the memory space, but completely remove the range from system just by removing it from memblock. The same way it's done in default early_init_dt_reserve_memory_arch() method. Signed-off-by: Serge Semin <fancer.lancer@gmail.com> Signed-off-by: Paul Burton <paul.burton@mips.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: James Hogan <jhogan@kernel.org> Cc: Matt Redfearn <matt.redfearn@mips.com> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Thomas Bogendoerfer <tbogendoerfer@suse.de> Cc: Huacai Chen <chenhc@lemote.com> Cc: Stefan Agner <stefan@agner.ch> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Juergen Gross <jgross@suse.com> Cc: linux-mips@vger.kernel.org Cc: linux-kernel@vger.kernel.org
84 lines
1.8 KiB
C
84 lines
1.8 KiB
C
/*
|
|
* MIPS support for CONFIG_OF device tree support
|
|
*
|
|
* Copyright (C) 2010 Cisco Systems Inc. <dediao@cisco.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/export.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/types.h>
|
|
#include <linux/memblock.h>
|
|
#include <linux/debugfs.h>
|
|
#include <linux/of.h>
|
|
#include <linux/of_fdt.h>
|
|
#include <linux/of_platform.h>
|
|
|
|
#include <asm/bootinfo.h>
|
|
#include <asm/page.h>
|
|
#include <asm/prom.h>
|
|
|
|
static char mips_machine_name[64] = "Unknown";
|
|
|
|
__init void mips_set_machine_name(const char *name)
|
|
{
|
|
if (name == NULL)
|
|
return;
|
|
|
|
strlcpy(mips_machine_name, name, sizeof(mips_machine_name));
|
|
pr_info("MIPS: machine is %s\n", mips_get_machine_name());
|
|
}
|
|
|
|
char *mips_get_machine_name(void)
|
|
{
|
|
return mips_machine_name;
|
|
}
|
|
|
|
#ifdef CONFIG_USE_OF
|
|
void __init early_init_dt_add_memory_arch(u64 base, u64 size)
|
|
{
|
|
return add_memory_region(base, size, BOOT_MEM_RAM);
|
|
}
|
|
|
|
int __init early_init_dt_reserve_memory_arch(phys_addr_t base,
|
|
phys_addr_t size, bool nomap)
|
|
{
|
|
add_memory_region(base, size,
|
|
nomap ? BOOT_MEM_NOMAP : BOOT_MEM_RESERVED);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void __init __dt_setup_arch(void *bph)
|
|
{
|
|
if (!early_init_dt_scan(bph))
|
|
return;
|
|
|
|
mips_set_machine_name(of_flat_dt_get_machine_name());
|
|
}
|
|
|
|
int __init __dt_register_buses(const char *bus0, const char *bus1)
|
|
{
|
|
static struct of_device_id of_ids[3];
|
|
|
|
if (!of_have_populated_dt())
|
|
panic("device tree not present");
|
|
|
|
strlcpy(of_ids[0].compatible, bus0, sizeof(of_ids[0].compatible));
|
|
if (bus1) {
|
|
strlcpy(of_ids[1].compatible, bus1,
|
|
sizeof(of_ids[1].compatible));
|
|
}
|
|
|
|
if (of_platform_populate(NULL, of_ids, NULL, NULL))
|
|
panic("failed to populate DT");
|
|
|
|
return 0;
|
|
}
|
|
|
|
#endif
|