openwrt/target/linux/bcm63xx/patches-4.19/367-MIPS-BCM63XX-add-support-for-loading-DTB.patch
Adrian Schmutzler e7bfda2c24 brcm63xx: rename target to bcm63xx
This change makes the names of Broadcom targets consistent by using
the common notation based on SoC/CPU ID (which is used internally
anyway), bcmXXXX instead of brcmXXXX.
This is even used for target TITLE in make menuconfig already,
only the short target name used brcm so far.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-02-14 14:10:51 +01:00

119 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/bootmem.h>
+#include <linux/of_fdt.h>
#include <linux/smp.h>
#include <asm/bootinfo.h>
#include <asm/bmips.h>
@@ -23,6 +24,11 @@ void __init prom_init(void)
{
u32 reg, mask;
+#if CONFIG_OF
+ if (fw_passed_dtb)
+ early_init_dt_verify((void *)fw_passed_dtb);
+#endif
+
bcm63xx_cpu_init();
/* stop any running watchdog */