xref: /OK3568_Linux_fs/kernel/arch/mips/netlogic/xlp/dt.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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