93c02ab40a
If a dtb is passed to the kernel then the kernel needs to iterate through compiled-in mdescs looking for one that matches and move the dtb data to a safe location before it gets accidentally overwritten by the kernel. This patch creates a new function, setup_machine_fdt() which is analogous to the setup_machine_atags() created in the previous patch. It does all the early setup needed to use a device tree machine description. v5: - Print warning with neither dtb nor atags are passed to the kernel - Fix bug in setting of __machine_arch_type to the selected machine, not just the last machine in the list. Reported-by: Tixy <tixy@yxit.co.uk> - Copy command line directly into boot_command_line instead of cmd_line v4: - Dump some output when a matching machine_desc cannot be found v3: - Added processing of reserved list. - Backed out the v2 change that copied instead of reserved the dtb. dtb is reserved again and the real problem was fixed by using alloc_bootmem_align() for early allocation of RAM for unflattening the tree. - Moved cmd_line and initrd changes to earlier patch to make series bisectable. v2: Changed to save the dtb by copying into an allocated buffer. - Since the dtb will very likely be passed in the first 16k of ram where the interrupt vectors live, memblock_reserve() is insufficient to protect the dtb data. [based on work originally written by Jeremy Kerr <jeremy.kerr@canonical.com>] Tested-by: Tony Lindgren <tony@atomide.com> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
37 lines
819 B
C
37 lines
819 B
C
/*
|
|
* arch/arm/include/asm/prom.h
|
|
*
|
|
* Copyright (C) 2009 Canonical Ltd. <jeremy.kerr@canonical.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.
|
|
*
|
|
*/
|
|
#ifndef __ASMARM_PROM_H
|
|
#define __ASMARM_PROM_H
|
|
|
|
#ifdef CONFIG_OF
|
|
|
|
#include <asm/setup.h>
|
|
#include <asm/irq.h>
|
|
|
|
static inline void irq_dispose_mapping(unsigned int virq)
|
|
{
|
|
return;
|
|
}
|
|
|
|
extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys);
|
|
extern void arm_dt_memblock_reserve(void);
|
|
|
|
#else /* CONFIG_OF */
|
|
|
|
static inline struct machine_desc *setup_machine_fdt(unsigned int dt_phys)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void arm_dt_memblock_reserve(void) { }
|
|
|
|
#endif /* CONFIG_OF */
|
|
#endif /* ASMARM_PROM_H */
|