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
emma
markeins
setup.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) NEC Electronics Corporation 2004-2006
3
*
4
* This file is based on the arch/mips/ddb5xxx/ddb5477/setup.c.
5
*
6
* Copyright 2001 MontaVista Software Inc.
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
*/
22
#include <
linux/init.h
>
23
#include <linux/kernel.h>
24
#include <linux/types.h>
25
26
#include <asm/time.h>
27
#include <asm/reboot.h>
28
29
#include <
asm/emma/emma2rh.h
>
30
31
#define USE_CPU_COUNTER_TIMER
/* whether we use cpu counter */
32
33
extern
void
markeins_led
(
const
char
*);
34
35
static
int
bus_frequency;
36
37
static
void
markeins_machine_restart(
char
*
command
)
38
{
39
static
void
(*back_to_prom) (
void
) = (
void
(*)(
void
))0xbfc00000;
40
41
printk
(
"cannot EMMA2RH Mark-eins restart.\n"
);
42
markeins_led
(
"restart."
);
43
back_to_prom();
44
}
45
46
static
void
markeins_machine_halt(
void
)
47
{
48
printk
(
"EMMA2RH Mark-eins halted.\n"
);
49
markeins_led
(
"halted."
);
50
while
(1) ;
51
}
52
53
static
void
markeins_machine_power_off(
void
)
54
{
55
markeins_led
(
"poweroff."
);
56
while
(1) ;
57
}
58
59
static
unsigned
long
__initdata
emma2rh_clock[4] = {
60
166500000, 187312500, 199800000, 210600000
61
};
62
63
static
unsigned
int
__init
detect_bus_frequency(
unsigned
long
rtc_base)
64
{
65
u32
reg
;
66
67
/* detect from boot strap */
68
reg = emma2rh_in32(
EMMA2RH_BHIF_STRAP_0
);
69
reg = (reg >> 4) & 0x3;
70
71
return
emma2rh_clock[
reg
];
72
}
73
74
void
__init
plat_time_init
(
void
)
75
{
76
u32
reg
;
77
if
(bus_frequency == 0)
78
bus_frequency = detect_bus_frequency(0);
79
80
reg = emma2rh_in32(
EMMA2RH_BHIF_STRAP_0
);
81
if
((reg & 0x3) == 0)
82
reg = (reg >> 6) & 0x3;
83
else
{
84
reg = emma2rh_in32(
EMMA2RH_BHIF_MAIN_CTRL
);
85
reg = (reg >> 4) & 0x3;
86
}
87
mips_hpt_frequency
= (bus_frequency * (4 +
reg
)) / 4 / 2;
88
}
89
90
static
void
markeins_board_init(
void
);
91
extern
void
markeins_irq_setup
(
void
);
92
93
static
void
inline
__init
markeins_sio_setup(
void
)
94
{
95
}
96
97
void
__init
plat_mem_setup
(
void
)
98
{
99
/* initialize board - we don't trust the loader */
100
markeins_board_init();
101
102
set_io_port_base(
KSEG1ADDR
(
EMMA2RH_PCI_IO_BASE
));
103
104
_machine_restart
= markeins_machine_restart;
105
_machine_halt
= markeins_machine_halt;
106
pm_power_off
= markeins_machine_power_off;
107
108
/* setup resource limits */
109
ioport_resource
.start =
EMMA2RH_PCI_IO_BASE
;
110
ioport_resource
.end =
EMMA2RH_PCI_IO_BASE
+
EMMA2RH_PCI_IO_SIZE
- 1;
111
iomem_resource
.start =
EMMA2RH_IO_BASE
;
112
iomem_resource
.end =
EMMA2RH_ROM_BASE
- 1;
113
114
/* Reboot on panic */
115
panic_timeout
= 180;
116
117
markeins_sio_setup();
118
}
119
120
static
void
__init
markeins_board_init(
void
)
121
{
122
u32
val
;
123
124
val = emma2rh_in32(
EMMA2RH_PBRD_INT_EN
);
/* open serial interrupts. */
125
emma2rh_out32(
EMMA2RH_PBRD_INT_EN
, val | 0xaa);
126
val = emma2rh_in32(
EMMA2RH_PBRD_CLKSEL
);
/* set serial clocks. */
127
emma2rh_out32(
EMMA2RH_PBRD_CLKSEL
, val | 0x5);
/* 18MHz */
128
emma2rh_out32(
EMMA2RH_PCI_CONTROL
, 0);
129
130
markeins_led
(
"MVL E2RH"
);
131
}
Generated on Thu Jan 10 2013 12:52:49 for Linux Kernel by
1.8.2