1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright 2003-2013 Broadcom Corporation.
3*4882a593Smuzhiyun * All Rights Reserved.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * This software is available to you under a choice of one of two
6*4882a593Smuzhiyun * licenses. You may choose to be licensed under the terms of the GNU
7*4882a593Smuzhiyun * General Public License (GPL) Version 2, available from the file
8*4882a593Smuzhiyun * COPYING in the main directory of this source tree, or the Broadcom
9*4882a593Smuzhiyun * license below:
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without
12*4882a593Smuzhiyun * modification, are permitted provided that the following conditions
13*4882a593Smuzhiyun * are met:
14*4882a593Smuzhiyun *
15*4882a593Smuzhiyun * 1. Redistributions of source code must retain the above copyright
16*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer.
17*4882a593Smuzhiyun * 2. Redistributions in binary form must reproduce the above copyright
18*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in
19*4882a593Smuzhiyun * the documentation and/or other materials provided with the
20*4882a593Smuzhiyun * distribution.
21*4882a593Smuzhiyun *
22*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY BROADCOM ``AS IS'' AND ANY EXPRESS OR
23*4882a593Smuzhiyun * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24*4882a593Smuzhiyun * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*4882a593Smuzhiyun * ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM OR CONTRIBUTORS BE LIABLE
26*4882a593Smuzhiyun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27*4882a593Smuzhiyun * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28*4882a593Smuzhiyun * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
29*4882a593Smuzhiyun * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30*4882a593Smuzhiyun * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
31*4882a593Smuzhiyun * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
32*4882a593Smuzhiyun * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33*4882a593Smuzhiyun */
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun #include <linux/kernel.h>
36*4882a593Smuzhiyun #include <linux/memblock.h>
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun #include <linux/of_fdt.h>
39*4882a593Smuzhiyun #include <linux/of_platform.h>
40*4882a593Smuzhiyun #include <linux/of_device.h>
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun #include <asm/prom.h>
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun extern u32 __dtb_xlp_evp_begin[], __dtb_xlp_svp_begin[], __dtb_xlp_fvp_begin[],
45*4882a593Smuzhiyun __dtb_xlp_gvp_begin[], __dtb_xlp_rvp_begin[];
46*4882a593Smuzhiyun static void *xlp_fdt_blob;
47*4882a593Smuzhiyun
xlp_dt_init(void * fdtp)48*4882a593Smuzhiyun void __init *xlp_dt_init(void *fdtp)
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun if (!fdtp) {
51*4882a593Smuzhiyun switch (current_cpu_data.processor_id & PRID_IMP_MASK) {
52*4882a593Smuzhiyun #ifdef CONFIG_DT_XLP_RVP
53*4882a593Smuzhiyun case PRID_IMP_NETLOGIC_XLP5XX:
54*4882a593Smuzhiyun fdtp = __dtb_xlp_rvp_begin;
55*4882a593Smuzhiyun break;
56*4882a593Smuzhiyun #endif
57*4882a593Smuzhiyun #ifdef CONFIG_DT_XLP_GVP
58*4882a593Smuzhiyun case PRID_IMP_NETLOGIC_XLP9XX:
59*4882a593Smuzhiyun fdtp = __dtb_xlp_gvp_begin;
60*4882a593Smuzhiyun break;
61*4882a593Smuzhiyun #endif
62*4882a593Smuzhiyun #ifdef CONFIG_DT_XLP_FVP
63*4882a593Smuzhiyun case PRID_IMP_NETLOGIC_XLP2XX:
64*4882a593Smuzhiyun fdtp = __dtb_xlp_fvp_begin;
65*4882a593Smuzhiyun break;
66*4882a593Smuzhiyun #endif
67*4882a593Smuzhiyun #ifdef CONFIG_DT_XLP_SVP
68*4882a593Smuzhiyun case PRID_IMP_NETLOGIC_XLP3XX:
69*4882a593Smuzhiyun fdtp = __dtb_xlp_svp_begin;
70*4882a593Smuzhiyun break;
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun #ifdef CONFIG_DT_XLP_EVP
73*4882a593Smuzhiyun case PRID_IMP_NETLOGIC_XLP8XX:
74*4882a593Smuzhiyun fdtp = __dtb_xlp_evp_begin;
75*4882a593Smuzhiyun break;
76*4882a593Smuzhiyun #endif
77*4882a593Smuzhiyun default:
78*4882a593Smuzhiyun /* Pick a built-in if any, and hope for the best */
79*4882a593Smuzhiyun fdtp = __dtb_start;
80*4882a593Smuzhiyun break;
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun }
83*4882a593Smuzhiyun xlp_fdt_blob = fdtp;
84*4882a593Smuzhiyun return fdtp;
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun
xlp_early_init_devtree(void)87*4882a593Smuzhiyun void __init xlp_early_init_devtree(void)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun __dt_setup_arch(xlp_fdt_blob);
90*4882a593Smuzhiyun }
91*4882a593Smuzhiyun
device_tree_init(void)92*4882a593Smuzhiyun void __init device_tree_init(void)
93*4882a593Smuzhiyun {
94*4882a593Smuzhiyun unflatten_and_copy_device_tree();
95*4882a593Smuzhiyun }
96