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-omap2
clockdomains2420_data.c
Go to the documentation of this file.
1
/*
2
* OMAP2420 clockdomains
3
*
4
* Copyright (C) 2008-2011 Texas Instruments, Inc.
5
* Copyright (C) 2008-2010 Nokia Corporation
6
*
7
* Paul Walmsley, Jouni Högander
8
*
9
* This file contains clockdomains and clockdomain wakeup dependencies
10
* for OMAP2420 chips. Some notes:
11
*
12
* A useful validation rule for struct clockdomain: Any clockdomain
13
* referenced by a wkdep_srcs must have a dep_bit assigned. So
14
* wkdep_srcs are really just software-controllable dependencies.
15
* Non-software-controllable dependencies do exist, but they are not
16
* encoded below (yet).
17
*
18
* 24xx does not support programmable sleep dependencies (SLEEPDEP)
19
*
20
* The overly-specific dep_bit names are due to a bit name collision
21
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
22
* value are the same for all powerdomains: 2
23
*
24
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
25
* sanity check?
26
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
27
*/
28
29
/*
30
* To-Do List
31
* -> Port the Sleep/Wakeup dependencies for the domains
32
* from the Power domain framework
33
*/
34
35
#include <linux/kernel.h>
36
#include <
linux/io.h
>
37
38
#include "
clockdomain.h
"
39
#include "
prm2xxx_3xxx.h
"
40
#include "
cm2xxx_3xxx.h
"
41
#include "
cm-regbits-24xx.h
"
42
#include "
prm-regbits-24xx.h
"
43
44
/*
45
* Clockdomain dependencies for wkdeps
46
*
47
* XXX Hardware dependencies (e.g., dependencies that cannot be
48
* changed in software) are not included here yet, but should be.
49
*/
50
51
/* Wakeup dependency source arrays */
52
53
/* 2420-specific possible wakeup dependencies */
54
55
/* 2420 PM_WKDEP_MPU: CORE, DSP, WKUP */
56
static
struct
clkdm_dep
mpu_2420_wkdeps[] = {
57
{ .clkdm_name =
"core_l3_clkdm"
},
58
{ .clkdm_name =
"core_l4_clkdm"
},
59
{ .clkdm_name =
"dsp_clkdm"
},
60
{ .clkdm_name =
"wkup_clkdm"
},
61
{
NULL
},
62
};
63
64
/* 2420 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP */
65
static
struct
clkdm_dep
core_2420_wkdeps[] = {
66
{ .clkdm_name =
"dsp_clkdm"
},
67
{ .clkdm_name =
"gfx_clkdm"
},
68
{ .clkdm_name =
"mpu_clkdm"
},
69
{ .clkdm_name =
"wkup_clkdm"
},
70
{
NULL
},
71
};
72
73
/*
74
* 2420-only clockdomains
75
*/
76
77
static
struct
clockdomain
mpu_2420_clkdm = {
78
.name =
"mpu_clkdm"
,
79
.pwrdm = { .name =
"mpu_pwrdm"
},
80
.flags =
CLKDM_CAN_HWSUP
,
81
.wkdep_srcs = mpu_2420_wkdeps,
82
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_MPU_MASK
,
83
};
84
85
static
struct
clockdomain
iva1_2420_clkdm = {
86
.name =
"iva1_clkdm"
,
87
.pwrdm = { .name =
"dsp_pwrdm"
},
88
.flags =
CLKDM_CAN_HWSUP_SWSUP
,
89
.dep_bit =
OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT
,
90
.wkdep_srcs =
dsp_24xx_wkdeps
,
91
.clktrctrl_mask =
OMAP2420_AUTOSTATE_IVA_MASK
,
92
};
93
94
static
struct
clockdomain
dsp_2420_clkdm = {
95
.name =
"dsp_clkdm"
,
96
.pwrdm = { .name =
"dsp_pwrdm"
},
97
.flags =
CLKDM_CAN_HWSUP_SWSUP
,
98
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_DSP_MASK
,
99
};
100
101
static
struct
clockdomain
gfx_2420_clkdm = {
102
.name =
"gfx_clkdm"
,
103
.pwrdm = { .name =
"gfx_pwrdm"
},
104
.flags =
CLKDM_CAN_HWSUP_SWSUP
,
105
.wkdep_srcs =
gfx_24xx_wkdeps
,
106
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_GFX_MASK
,
107
};
108
109
static
struct
clockdomain
core_l3_2420_clkdm = {
110
.name =
"core_l3_clkdm"
,
111
.pwrdm = { .name =
"core_pwrdm"
},
112
.flags =
CLKDM_CAN_HWSUP
,
113
.wkdep_srcs = core_2420_wkdeps,
114
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_L3_MASK
,
115
};
116
117
static
struct
clockdomain
core_l4_2420_clkdm = {
118
.name =
"core_l4_clkdm"
,
119
.pwrdm = { .name =
"core_pwrdm"
},
120
.flags =
CLKDM_CAN_HWSUP
,
121
.wkdep_srcs = core_2420_wkdeps,
122
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_L4_MASK
,
123
};
124
125
static
struct
clockdomain
dss_2420_clkdm = {
126
.name =
"dss_clkdm"
,
127
.pwrdm = { .name =
"core_pwrdm"
},
128
.flags =
CLKDM_CAN_HWSUP
,
129
.clktrctrl_mask =
OMAP24XX_AUTOSTATE_DSS_MASK
,
130
};
131
132
static
struct
clockdomain
*clockdomains_omap242x[]
__initdata
= {
133
&
wkup_common_clkdm
,
134
&mpu_2420_clkdm,
135
&iva1_2420_clkdm,
136
&dsp_2420_clkdm,
137
&gfx_2420_clkdm,
138
&core_l3_2420_clkdm,
139
&core_l4_2420_clkdm,
140
&dss_2420_clkdm,
141
NULL
,
142
};
143
144
void
__init
omap242x_clockdomains_init
(
void
)
145
{
146
if
(!
cpu_is_omap242x
())
147
return
;
148
149
clkdm_register_platform_funcs
(&
omap2_clkdm_operations
);
150
clkdm_register_clkdms
(clockdomains_omap242x);
151
clkdm_complete_init
();
152
}
Generated on Thu Jan 10 2013 13:00:31 for Linux Kernel by
1.8.2