Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
netlogic
xlp
setup.c
Go to the documentation of this file.
1
/*
2
* Copyright 2003-2011 NetLogic Microsystems, Inc. (NetLogic). All rights
3
* reserved.
4
*
5
* This software is available to you under a choice of one of two
6
* licenses. You may choose to be licensed under the terms of the GNU
7
* General Public License (GPL) Version 2, available from the file
8
* COPYING in the main directory of this source tree, or the NetLogic
9
* license below:
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
*
15
* 1. Redistributions of source code must retain the above copyright
16
* notice, this list of conditions and the following disclaimer.
17
* 2. Redistributions in binary form must reproduce the above copyright
18
* notice, this list of conditions and the following disclaimer in
19
* the documentation and/or other materials provided with the
20
* distribution.
21
*
22
* THIS SOFTWARE IS PROVIDED BY NETLOGIC ``AS IS'' AND ANY EXPRESS OR
23
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
29
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
31
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
32
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#include <linux/kernel.h>
36
#include <
linux/serial_8250.h
>
37
#include <
linux/pm.h
>
38
#include <
linux/bootmem.h
>
39
40
#include <asm/reboot.h>
41
#include <asm/time.h>
42
#include <asm/bootinfo.h>
43
44
#include <
linux/of_fdt.h
>
45
#include <
linux/of_platform.h
>
46
#include <
linux/of_device.h
>
47
48
#include <
asm/netlogic/haldefs.h
>
49
#include <
asm/netlogic/common.h
>
50
51
#include <
asm/netlogic/xlp-hal/iomap.h
>
52
#include <
asm/netlogic/xlp-hal/xlp.h
>
53
#include <
asm/netlogic/xlp-hal/sys.h
>
54
55
unsigned
long
nlm_common_ebase
= 0x0;
56
57
/* default to uniprocessor */
58
uint32_t
nlm_coremask
= 1,
nlm_cpumask
= 1;
59
int
nlm_threads_per_core
= 1;
60
extern
u32
__dtb_start
[];
61
62
static
void
nlm_linux_exit(
void
)
63
{
64
nlm_write_sys_reg
(
nlm_sys_base
,
SYS_CHIP_RESET
, 1);
65
for
( ; ; )
66
cpu_wait
();
67
}
68
69
void
__init
plat_mem_setup
(
void
)
70
{
71
panic_timeout
= 5;
72
_machine_restart
= (
void
(*)(
char
*))nlm_linux_exit;
73
_machine_halt
= nlm_linux_exit;
74
pm_power_off
= nlm_linux_exit;
75
}
76
77
const
char
*
get_system_type
(
void
)
78
{
79
return
"Netlogic XLP Series"
;
80
}
81
82
void
__init
prom_free_prom_memory
(
void
)
83
{
84
/* Nothing yet */
85
}
86
87
void
xlp_mmu_init
(
void
)
88
{
89
/* enable extended TLB and Large Fixed TLB */
90
write_c0_config6
(
read_c0_config6
() | 0x24);
91
92
/* set page mask of Fixed TLB in config7 */
93
write_c0_config7
(PM_DEFAULT_MASK >>
94
(13 + (
ffz
(PM_DEFAULT_MASK >> 13) / 2)));
95
}
96
97
void
__init
prom_init
(
void
)
98
{
99
void
*fdtp;
100
101
xlp_mmu_init
();
102
nlm_hal_init
();
103
104
/*
105
* If no FDT pointer is passed in, use the built-in FDT.
106
* device_tree_init() does not handle CKSEG0 pointers in
107
* 64-bit, so convert pointer.
108
*/
109
fdtp = (
void
*)(
long
)
fw_arg0
;
110
if
(!fdtp)
111
fdtp =
__dtb_start
;
112
fdtp =
phys_to_virt
(
__pa
(fdtp));
113
early_init_devtree
(fdtp);
114
115
nlm_common_ebase
=
read_c0_ebase
() & (~((1 << 12) - 1));
116
#ifdef CONFIG_SMP
117
nlm_wakeup_secondary_cpus
(0xffffffff);
118
119
/* update TLB size after waking up threads */
120
current_cpu_data
.tlbsize = ((
read_c0_config6
() >> 16) & 0xffff) + 1;
121
122
register_smp_ops
(&
nlm_smp_ops
);
123
#endif
124
}
125
126
void
__init
device_tree_init
(
void
)
127
{
128
unsigned
long
base
,
size
;
129
130
if
(!
initial_boot_params
)
131
return
;
132
133
base =
virt_to_phys
((
void
*)
initial_boot_params
);
134
size =
be32_to_cpu
(
initial_boot_params
->totalsize);
135
136
/* Before we do anything, lets reserve the dt blob */
137
reserve_bootmem
(base, size,
BOOTMEM_DEFAULT
);
138
139
unflatten_device_tree();
140
141
/* free the space reserved for the dt blob */
142
free_bootmem
(base, size);
143
}
144
145
static
struct
of_device_id
__initdata
xlp_ids[] = {
146
{ .compatible =
"simple-bus"
, },
147
{},
148
};
149
150
int
__init
xlp8xx_ds_publish_devices
(
void
)
151
{
152
if
(!of_have_populated_dt())
153
return
0;
154
return
of_platform_bus_probe(
NULL
, xlp_ids,
NULL
);
155
}
156
157
device_initcall
(
xlp8xx_ds_publish_devices
);
Generated on Thu Jan 10 2013 12:52:49 for Linux Kernel by
1.8.2