-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
of/mips: Add device tree support to MIPS
Add the ability to enable CONFIG_OF on the MIPS architecture. Signed-off-by: Dezhong Diao <dediao@cisco.com> [grant.likely@secretlab.ca: cleared out obsolete hooks, removed ARCH_HAS_DEVTREE_MEM, remove __init tags from header file, removed debugfs support hunk] [ddaney@linux-mips.org: backed out over aggressive trimming of hooks] Acked-by: Ralf Baechle <ralf@linux-mips.org> Tested-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
- Loading branch information
Dezhong Diao
authored and
Grant Likely
committed
Oct 21, 2010
1 parent
32c9768
commit f2ffa5a
Showing
6 changed files
with
163 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/* | ||
* arch/mips/include/asm/prom.h | ||
* | ||
* 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. | ||
* | ||
*/ | ||
#ifndef __ASM_MIPS_PROM_H | ||
#define __ASM_MIPS_PROM_H | ||
|
||
#ifdef CONFIG_OF | ||
#include <linux/init.h> | ||
|
||
#include <asm/setup.h> | ||
#include <asm/irq.h> | ||
#include <asm/bootinfo.h> | ||
|
||
/* which is compatible with the flattened device tree (FDT) */ | ||
#define cmd_line arcs_cmdline | ||
|
||
extern int early_init_dt_scan_memory_arch(unsigned long node, | ||
const char *uname, int depth, void *data); | ||
|
||
extern int reserve_mem_mach(unsigned long addr, unsigned long size); | ||
extern void free_mem_mach(unsigned long addr, unsigned long size); | ||
|
||
extern void __init device_tree_init(void); | ||
#else /* CONFIG_OF */ | ||
static inline void __init device_tree_init(void) { } | ||
#endif /* CONFIG_OF */ | ||
|
||
#endif /* _ASM_MIPS_PROM_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
/* | ||
* 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/module.h> | ||
#include <linux/errno.h> | ||
#include <linux/types.h> | ||
#include <linux/bootmem.h> | ||
#include <linux/initrd.h> | ||
#include <linux/debugfs.h> | ||
#include <linux/of.h> | ||
#include <linux/of_fdt.h> | ||
#include <linux/of_irq.h> | ||
#include <linux/of_platform.h> | ||
|
||
#include <asm/page.h> | ||
#include <asm/prom.h> | ||
|
||
int __init early_init_dt_scan_memory_arch(unsigned long node, | ||
const char *uname, int depth, | ||
void *data) | ||
{ | ||
return early_init_dt_scan_memory(node, uname, depth, data); | ||
} | ||
|
||
void __init early_init_dt_add_memory_arch(u64 base, u64 size) | ||
{ | ||
return add_memory_region(base, size, BOOT_MEM_RAM); | ||
} | ||
|
||
int __init reserve_mem_mach(unsigned long addr, unsigned long size) | ||
{ | ||
return reserve_bootmem(addr, size, BOOTMEM_DEFAULT); | ||
} | ||
|
||
void __init free_mem_mach(unsigned long addr, unsigned long size) | ||
{ | ||
return free_bootmem(addr, size); | ||
} | ||
|
||
u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align) | ||
{ | ||
return virt_to_phys( | ||
__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS)) | ||
); | ||
} | ||
|
||
#ifdef CONFIG_BLK_DEV_INITRD | ||
void __init early_init_dt_setup_initrd_arch(unsigned long start, | ||
unsigned long end) | ||
{ | ||
initrd_start = (unsigned long)__va(start); | ||
initrd_end = (unsigned long)__va(end); | ||
initrd_below_start_ok = 1; | ||
} | ||
#endif | ||
|
||
/* | ||
* irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq# | ||
* | ||
* Currently the mapping mechanism is trivial; simple flat hwirq numbers are | ||
* mapped 1:1 onto Linux irq numbers. Cascaded irq controllers are not | ||
* supported. | ||
*/ | ||
unsigned int irq_create_of_mapping(struct device_node *controller, | ||
const u32 *intspec, unsigned int intsize) | ||
{ | ||
return intspec[0]; | ||
} | ||
EXPORT_SYMBOL_GPL(irq_create_of_mapping); | ||
|
||
void __init early_init_devtree(void *params) | ||
{ | ||
/* Setup flat device-tree pointer */ | ||
initial_boot_params = params; | ||
|
||
/* Retrieve various informations from the /chosen node of the | ||
* device-tree, including the platform type, initrd location and | ||
* size, and more ... | ||
*/ | ||
of_scan_flat_dt(early_init_dt_scan_chosen, NULL); | ||
|
||
/* Scan memory nodes */ | ||
of_scan_flat_dt(early_init_dt_scan_root, NULL); | ||
of_scan_flat_dt(early_init_dt_scan_memory_arch, NULL); | ||
} | ||
|
||
void __init device_tree_init(void) | ||
{ | ||
unsigned long base, size; | ||
|
||
if (!initial_boot_params) | ||
return; | ||
|
||
base = virt_to_phys((void *)initial_boot_params); | ||
size = initial_boot_params->totalsize; | ||
|
||
/* Before we do anything, lets reserve the dt blob */ | ||
reserve_mem_mach(base, size); | ||
|
||
unflatten_device_tree(); | ||
|
||
/* free the space reserved for the dt blob */ | ||
free_mem_mach(base, size); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters