Skip to content

Commit

Permalink
MIPS: Netlogic: Support for multiple built-in device trees
Browse files Browse the repository at this point in the history
This enables us to have a default device tree per SoC family to be built
into the kernel. The default device tree for XLP3xx has been added as part
of this change. Later this can be used to provide support default boards
for XLP2xx and XLP9xx SoCs.

Kconfig options are provided for each default device tree so that just the
needed ones can be selected to be built into the kernel.

Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Patchwork: http://patchwork.linux-mips.org/patch/5023/
Acked-by: John Crispin <blogic@openwrt.org>
  • Loading branch information
Jayachandran C authored and Ralf Baechle committed May 7, 2013
1 parent 033e6f2 commit 035114f
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 8 deletions.
17 changes: 13 additions & 4 deletions arch/mips/netlogic/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@ if NLM_XLP_BOARD || NLM_XLR_BOARD

if NLM_XLP_BOARD
config DT_XLP_EVP
bool "Built-in device tree for XLP EVP/SVP boards"
bool "Built-in device tree for XLP EVP boards"
default y
help
Add an FDT blob for XLP EVP and SVP boards into the kernel.
Add an FDT blob for XLP EVP boards into the kernel.
This DTB will be used if the firmware does not pass in a DTB
pointer to the kernel. The corresponding DTS file is at
arch/mips/netlogic/dts/xlp_evp.dts
pointer to the kernel. The corresponding DTS file is at
arch/mips/netlogic/dts/xlp_evp.dts

config DT_XLP_SVP
bool "Built-in device tree for XLP SVP boards"
default y
help
Add an FDT blob for XLP VP boards into the kernel.
This DTB will be used if the firmware does not pass in a DTB
pointer to the kernel. The corresponding DTS file is at
arch/mips/netlogic/dts/xlp_svp.dts

config NLM_MULTINODE
bool "Support for multi-chip boards"
Expand Down
1 change: 1 addition & 0 deletions arch/mips/netlogic/dts/Makefile
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
obj-$(CONFIG_DT_XLP_EVP) := xlp_evp.dtb.o
obj-$(CONFIG_DT_XLP_SVP) += xlp_svp.dtb.o
2 changes: 1 addition & 1 deletion arch/mips/netlogic/dts/xlp_evp.dts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#address-cells = <2>;
#size-cells = <1>;
compatible = "simple-bus";
ranges = <0 0 0 0x18000000 0x04000000 // PCIe CFG
ranges = <0 0 0 0x18000000 0x04000000 // PCIe CFG
1 0 0 0x16000000 0x01000000>; // GBU chipselects

serial0: serial@30000 {
Expand Down
124 changes: 124 additions & 0 deletions arch/mips/netlogic/dts/xlp_svp.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*
* XLP3XX Device Tree Source for SVP boards
*/

/dts-v1/;
/ {
model = "netlogic,XLP-SVP";
compatible = "netlogic,xlp";
#address-cells = <2>;
#size-cells = <2>;

memory {
device_type = "memory";
reg = <0 0x00100000 0 0x0FF00000 // 255M at 1M
0 0x20000000 0 0xa0000000 // 2560M at 512M
0 0xe0000000 0 0x40000000>;
};

soc {
#address-cells = <2>;
#size-cells = <1>;
compatible = "simple-bus";
ranges = <0 0 0 0x18000000 0x04000000 // PCIe CFG
1 0 0 0x16000000 0x01000000>; // GBU chipselects

serial0: serial@30000 {
device_type = "serial";
compatible = "ns16550";
reg = <0 0x30100 0xa00>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <133333333>;
interrupt-parent = <&pic>;
interrupts = <17>;
};
serial1: serial@31000 {
device_type = "serial";
compatible = "ns16550";
reg = <0 0x31100 0xa00>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <133333333>;
interrupt-parent = <&pic>;
interrupts = <18>;
};
i2c0: ocores@32000 {
compatible = "opencores,i2c-ocores";
#address-cells = <1>;
#size-cells = <0>;
reg = <0 0x32100 0xa00>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <32000000>;
interrupt-parent = <&pic>;
interrupts = <30>;
};
i2c1: ocores@33000 {
compatible = "opencores,i2c-ocores";
#address-cells = <1>;
#size-cells = <0>;
reg = <0 0x33100 0xa00>;
reg-shift = <2>;
reg-io-width = <4>;
clock-frequency = <32000000>;
interrupt-parent = <&pic>;
interrupts = <31>;

rtc@68 {
compatible = "dallas,ds1374";
reg = <0x68>;
};

dtt@4c {
compatible = "national,lm90";
reg = <0x4c>;
};
};
pic: pic@4000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <1>;
reg = <0 0x4000 0x200>;
};

nor_flash@1,0 {
compatible = "cfi-flash";
#address-cells = <1>;
#size-cells = <1>;
bank-width = <2>;
reg = <1 0 0x1000000>;

partition@0 {
label = "x-loader";
reg = <0x0 0x100000>; /* 1M */
read-only;
};

partition@100000 {
label = "u-boot";
reg = <0x100000 0x100000>; /* 1M */
};

partition@200000 {
label = "kernel";
reg = <0x200000 0x500000>; /* 5M */
};

partition@700000 {
label = "rootfs";
reg = <0x700000 0x800000>; /* 8M */
};

partition@f00000 {
label = "env";
reg = <0xf00000 0x100000>; /* 1M */
read-only;
};
};
};

chosen {
bootargs = "console=ttyS0,115200 rdinit=/sbin/init";
};
};
22 changes: 19 additions & 3 deletions arch/mips/netlogic/xlp/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ uint64_t nlm_io_base;
struct nlm_soc_info nlm_nodes[NLM_NR_NODES];
cpumask_t nlm_cpumask = CPU_MASK_CPU0;
unsigned int nlm_threads_per_core;
extern u32 __dtb_start[];
extern u32 __dtb_xlp_evp_begin[], __dtb_xlp_svp_begin[], __dtb_start[];

static void nlm_linux_exit(void)
{
Expand All @@ -82,8 +82,24 @@ void __init plat_mem_setup(void)
* 64-bit, so convert pointer.
*/
fdtp = (void *)(long)fw_arg0;
if (!fdtp)
fdtp = __dtb_start;
if (!fdtp) {
switch (current_cpu_data.processor_id & 0xff00) {
#ifdef CONFIG_DT_XLP_SVP
case PRID_IMP_NETLOGIC_XLP3XX:
fdtp = __dtb_xlp_svp_begin;
break;
#endif
#ifdef CONFIG_DT_XLP_EVP
case PRID_IMP_NETLOGIC_XLP8XX:
fdtp = __dtb_xlp_evp_begin;
break;
#endif
default:
/* Pick a built-in if any, and hope for the best */
fdtp = __dtb_start;
break;
}
}
fdtp = phys_to_virt(__pa(fdtp));
early_init_devtree(fdtp);
}
Expand Down

0 comments on commit 035114f

Please sign in to comment.