mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	Build system: x86_64 Build-tested: generic, smp Run-tested: generic/AR-5387un, smp/VR-3032u Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
		
			
				
	
	
		
			120 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 26546e5499d98616322fb3472b977e2e86603f3a Mon Sep 17 00:00:00 2001
 | |
| From: Jonas Gorski <jogo@openwrt.org>
 | |
| Date: Tue, 24 Jun 2014 10:57:51 +0200
 | |
| Subject: [PATCH 45/48] MIPS: BCM63XX: add support for loading DTB
 | |
| 
 | |
| Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | |
| ---
 | |
|  arch/mips/bcm63xx/boards/Kconfig        |    4 ++++
 | |
|  arch/mips/bcm63xx/boards/board_common.c |   34 +++++++++++++++++++++++++++++++
 | |
|  arch/mips/bcm63xx/prom.c                |    6 ++++++
 | |
|  3 files changed, 44 insertions(+)
 | |
| 
 | |
| --- a/arch/mips/bcm63xx/boards/Kconfig
 | |
| +++ b/arch/mips/bcm63xx/boards/Kconfig
 | |
| @@ -2,6 +2,10 @@
 | |
|  menu "Board support"
 | |
|  	depends on BCM63XX
 | |
|  
 | |
| +config BOARD_BCM63XX_DT
 | |
| +	bool "Device Tree boards (experimential)"
 | |
| +	select USE_OF
 | |
| +
 | |
|  config BOARD_BCM963XX
 | |
|  	bool "Generic Broadcom 963xx boards"
 | |
|  	select SSB
 | |
| --- a/arch/mips/bcm63xx/boards/board_common.c
 | |
| +++ b/arch/mips/bcm63xx/boards/board_common.c
 | |
| @@ -10,11 +10,14 @@
 | |
|  #include <linux/init.h>
 | |
|  #include <linux/kernel.h>
 | |
|  #include <linux/string.h>
 | |
| +#include <linux/of_fdt.h>
 | |
| +#include <linux/of_platform.h>
 | |
|  #include <linux/platform_device.h>
 | |
|  #include <linux/ssb/ssb.h>
 | |
|  #include <asm/addrspace.h>
 | |
|  #include <asm/bootinfo.h>
 | |
|  #include <asm/fw/cfe/cfe_api.h>
 | |
| +#include <asm/prom.h>
 | |
|  #include <bcm63xx_board.h>
 | |
|  #include <bcm63xx_cpu.h>
 | |
|  #include <bcm63xx_dev_uart.h>
 | |
| @@ -125,8 +128,23 @@ void __init board_setup(void)
 | |
|  	/* make sure we're running on expected cpu */
 | |
|  	if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
 | |
|  		panic("unexpected CPU for bcm963xx board");
 | |
| +
 | |
| +#if CONFIG_OF
 | |
| +	if (initial_boot_params)
 | |
| +		__dt_setup_arch(initial_boot_params);
 | |
| +#endif
 | |
|  }
 | |
|  
 | |
| +#if CONFIG_OF
 | |
| +void __init device_tree_init(void)
 | |
| +{
 | |
| +	if (!initial_boot_params)
 | |
| +		return;
 | |
| +
 | |
| +	unflatten_and_copy_device_tree();
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
|  static struct gpio_led_platform_data bcm63xx_led_data;
 | |
|  
 | |
|  static struct platform_device bcm63xx_gpio_leds = {
 | |
| @@ -135,6 +153,13 @@ static struct platform_device bcm63xx_gp
 | |
|  	.dev.platform_data	= &bcm63xx_led_data,
 | |
|  };
 | |
|  
 | |
| +#if CONFIG_OF
 | |
| +static struct of_device_id of_ids[] = {
 | |
| +	{ /* filled at runtime */ },
 | |
| +	{ .compatible = "simple-bus" },
 | |
| +	{ },
 | |
| +};
 | |
| +#endif
 | |
|  /*
 | |
|   * third stage init callback, register all board devices.
 | |
|   */
 | |
| @@ -142,6 +167,15 @@ int __init board_register_devices(void)
 | |
|  {
 | |
|  	int usbh_ports = 0;
 | |
|  
 | |
| +#if CONFIG_OF
 | |
| +	if (of_have_populated_dt()) {
 | |
| +		snprintf(of_ids[0].compatible, sizeof(of_ids[0].compatible),
 | |
| +			 "brcm,bcm%x", bcm63xx_get_cpu_id());
 | |
| +
 | |
| +		of_platform_populate(NULL, of_ids, NULL, NULL);
 | |
| +	}
 | |
| +#endif
 | |
| +
 | |
|  	if (board.has_uart0)
 | |
|  		bcm63xx_uart_register(0);
 | |
|  
 | |
| --- a/arch/mips/bcm63xx/prom.c
 | |
| +++ b/arch/mips/bcm63xx/prom.c
 | |
| @@ -8,6 +8,7 @@
 | |
|  
 | |
|  #include <linux/init.h>
 | |
|  #include <linux/memblock.h>
 | |
| +#include <linux/of_fdt.h>
 | |
|  #include <linux/smp.h>
 | |
|  #include <asm/bootinfo.h>
 | |
|  #include <asm/bmips.h>
 | |
| @@ -22,6 +23,12 @@
 | |
|  void __init prom_init(void)
 | |
|  {
 | |
|  	u32 reg, mask;
 | |
| +	void *fdt = get_fdt();
 | |
| +
 | |
| +#if CONFIG_OF
 | |
| +	if (fdt)
 | |
| +		early_init_dt_verify(fdt);
 | |
| +#endif
 | |
|  
 | |
|  	bcm63xx_cpu_init();
 | |
|  
 |