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
arm
mach-spear3xx
spear3xx.c
Go to the documentation of this file.
1
/*
2
* arch/arm/mach-spear3xx/spear3xx.c
3
*
4
* SPEAr3XX machines common source file
5
*
6
* Copyright (C) 2009-2012 ST Microelectronics
7
* Viresh Kumar <viresh.linux@gmail.com>
8
*
9
* This file is licensed under the terms of the GNU General Public
10
* License version 2. This program is licensed "as is" without any
11
* warranty of any kind, whether express or implied.
12
*/
13
14
#define pr_fmt(fmt) "SPEAr3xx: " fmt
15
16
#include <
linux/amba/pl022.h
>
17
#include <
linux/amba/pl08x.h
>
18
#include <
linux/of_irq.h
>
19
#include <
linux/io.h
>
20
#include <
asm/hardware/pl080.h
>
21
#include <
asm/hardware/vic.h
>
22
#include <
plat/pl080.h
>
23
#include <mach/generic.h>
24
#include <mach/spear.h>
25
26
/* ssp device registration */
27
struct
pl022_ssp_controller
pl022_plat_data
= {
28
.bus_id = 0,
29
.enable_dma = 1,
30
.dma_filter =
pl08x_filter_id
,
31
.dma_tx_param =
"ssp0_tx"
,
32
.dma_rx_param =
"ssp0_rx"
,
33
/*
34
* This is number of spi devices that can be connected to spi. There are
35
* two type of chipselects on which slave devices can work. One is chip
36
* select provided by spi masters other is controlled through external
37
* gpio's. We can't use chipselect provided from spi master (because as
38
* soon as FIFO becomes empty, CS is disabled and transfer ends). So
39
* this number now depends on number of gpios available for spi. each
40
* slave on each master requires a separate gpio pin.
41
*/
42
.num_chipselect = 2,
43
};
44
45
/* dmac device registration */
46
struct
pl08x_platform_data
pl080_plat_data
= {
47
.memcpy_channel = {
48
.bus_id =
"memcpy"
,
49
.cctl_memcpy =
50
(
PL080_BSIZE_16
<<
PL080_CONTROL_SB_SIZE_SHIFT
| \
51
PL080_BSIZE_16 <<
PL080_CONTROL_DB_SIZE_SHIFT
| \
52
PL080_WIDTH_32BIT <<
PL080_CONTROL_SWIDTH_SHIFT
| \
53
PL080_WIDTH_32BIT <<
PL080_CONTROL_DWIDTH_SHIFT
| \
54
PL080_CONTROL_PROT_BUFF |
PL080_CONTROL_PROT_CACHE
| \
55
PL080_CONTROL_PROT_SYS),
56
},
57
.
lli_buses
=
PL08X_AHB1
,
58
.
mem_buses
=
PL08X_AHB1
,
59
.
get_signal
=
pl080_get_signal
,
60
.
put_signal
=
pl080_put_signal
,
61
};
62
63
/*
64
* Following will create 16MB static virtual/physical mappings
65
* PHYSICAL VIRTUAL
66
* 0xD0000000 0xFD000000
67
* 0xFC000000 0xFC000000
68
*/
69
struct
map_desc
spear3xx_io_desc[]
__initdata
= {
70
{
71
.virtual =
VA_SPEAR3XX_ICM1_2_BASE
,
72
.pfn =
__phys_to_pfn
(
SPEAR3XX_ICM1_2_BASE
),
73
.length =
SZ_16M
,
74
.type =
MT_DEVICE
75
}, {
76
.virtual =
VA_SPEAR3XX_ICM3_SMI_CTRL_BASE
,
77
.pfn =
__phys_to_pfn
(
SPEAR3XX_ICM3_SMI_CTRL_BASE
),
78
.length =
SZ_16M
,
79
.type =
MT_DEVICE
80
},
81
};
82
83
/* This will create static memory mapping for selected devices */
84
void
__init
spear3xx_map_io
(
void
)
85
{
86
iotable_init
(spear3xx_io_desc,
ARRAY_SIZE
(spear3xx_io_desc));
87
}
88
89
static
void
__init
spear3xx_timer_init(
void
)
90
{
91
char
pclk_name[] =
"pll3_clk"
;
92
struct
clk
*gpt_clk, *pclk;
93
94
spear3xx_clk_init
();
95
96
/* get the system timer clock */
97
gpt_clk =
clk_get_sys
(
"gpt0"
,
NULL
);
98
if
(IS_ERR(gpt_clk)) {
99
pr_err
(
"%s:couldn't get clk for gpt\n"
, __func__);
100
BUG
();
101
}
102
103
/* get the suitable parent clock for timer*/
104
pclk =
clk_get
(
NULL
, pclk_name);
105
if
(IS_ERR(pclk)) {
106
pr_err
(
"%s:couldn't get %s as parent for gpt\n"
,
107
__func__, pclk_name);
108
BUG
();
109
}
110
111
clk_set_parent
(gpt_clk, pclk);
112
clk_put
(gpt_clk);
113
clk_put
(pclk);
114
115
spear_setup_of_timer
();
116
}
117
118
struct
sys_timer
spear3xx_timer
= {
119
.init = spear3xx_timer_init,
120
};
121
122
static
const
struct
of_device_id
vic_of_match[]
__initconst
= {
123
{ .compatible =
"arm,pl190-vic"
, .data =
vic_of_init
, },
124
{
/* Sentinel */
}
125
};
126
127
void
__init
spear3xx_dt_init_irq
(
void
)
128
{
129
of_irq_init
(vic_of_match);
130
}
Generated on Thu Jan 10 2013 13:02:06 for Linux Kernel by
1.8.2