Commit 03c8c407 authored by Alban Bedel's avatar Alban Bedel Committed by Ralf Baechle

MIPS: ath79: Add basic device tree support

Add the bare minimum to load a device tree.
Signed-off-by: default avatarAlban Bedel <albeu@free.fr>
Cc: linux-mips@linux-mips.org
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent fe41b466
...@@ -134,6 +134,7 @@ config ATH79 ...@@ -134,6 +134,7 @@ config ATH79
select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN
select SYS_SUPPORTS_MIPS16 select SYS_SUPPORTS_MIPS16
select SYS_SUPPORTS_ZBOOT select SYS_SUPPORTS_ZBOOT
select USE_OF
help help
Support for the Atheros AR71XX/AR724X/AR913X SoCs. Support for the Atheros AR71XX/AR724X/AR913X SoCs.
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <asm/mips_machine.h> #include <asm/mips_machine.h>
enum ath79_mach_type { enum ath79_mach_type {
ATH79_MACH_GENERIC_OF = -1, /* Device tree board */
ATH79_MACH_GENERIC = 0, ATH79_MACH_GENERIC = 0,
ATH79_MACH_AP121, /* Atheros AP121 reference board */ ATH79_MACH_AP121, /* Atheros AP121 reference board */
ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */ ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */
......
...@@ -17,12 +17,16 @@ ...@@ -17,12 +17,16 @@
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/of_platform.h>
#include <linux/of_fdt.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/idle.h> #include <asm/idle.h>
#include <asm/time.h> /* for mips_hpt_frequency */ #include <asm/time.h> /* for mips_hpt_frequency */
#include <asm/reboot.h> /* for _machine_{restart,halt} */ #include <asm/reboot.h> /* for _machine_{restart,halt} */
#include <asm/mips_machine.h> #include <asm/mips_machine.h>
#include <asm/prom.h>
#include <asm/fw/fw.h>
#include <asm/mach-ath79/ath79.h> #include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h> #include <asm/mach-ath79/ar71xx_regs.h>
...@@ -194,8 +198,19 @@ unsigned int get_c0_compare_int(void) ...@@ -194,8 +198,19 @@ unsigned int get_c0_compare_int(void)
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
unsigned long fdt_start;
set_io_port_base(KSEG1); set_io_port_base(KSEG1);
/* Get the position of the FDT passed by the bootloader */
fdt_start = fw_getenvl("fdt_start");
if (fdt_start)
__dt_setup_arch((void *)KSEG0ADDR(fdt_start));
#ifdef CONFIG_BUILTIN_DTB
else
__dt_setup_arch(__dtb_start);
#endif
ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE, ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE,
AR71XX_RESET_SIZE); AR71XX_RESET_SIZE);
ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE, ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
...@@ -203,7 +218,8 @@ void __init plat_mem_setup(void) ...@@ -203,7 +218,8 @@ void __init plat_mem_setup(void)
ath79_ddr_ctrl_init(); ath79_ddr_ctrl_init();
ath79_detect_sys_type(); ath79_detect_sys_type();
detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX); if (mips_machtype != ATH79_MACH_GENERIC_OF)
detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
_machine_restart = ath79_restart; _machine_restart = ath79_restart;
_machine_halt = ath79_halt; _machine_halt = ath79_halt;
...@@ -235,6 +251,10 @@ void __init plat_time_init(void) ...@@ -235,6 +251,10 @@ void __init plat_time_init(void)
static int __init ath79_setup(void) static int __init ath79_setup(void)
{ {
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
if (mips_machtype == ATH79_MACH_GENERIC_OF)
return 0;
ath79_gpio_init(); ath79_gpio_init();
ath79_register_uart(); ath79_register_uart();
ath79_register_wdt(); ath79_register_wdt();
...@@ -246,6 +266,11 @@ static int __init ath79_setup(void) ...@@ -246,6 +266,11 @@ static int __init ath79_setup(void)
arch_initcall(ath79_setup); arch_initcall(ath79_setup);
void __init device_tree_init(void)
{
unflatten_and_copy_device_tree();
}
static void __init ath79_generic_init(void) static void __init ath79_generic_init(void)
{ {
/* Nothing to do */ /* Nothing to do */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment