summaryrefslogtreecommitdiff
path: root/arch/arm/mach-omap2/omap_opp_data.h
blob: ec4880586974d35a17190e0c88a4eeb94e442955 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
 * OMAP SoC specific OPP Data helpers
 *
 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/
 *	Nishanth Menon
 *	Kevin Hilman
 * Copyright (C) 2010 Nokia Corporation.
 *      Eduardo Valentin
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
 * kind, whether express or implied; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
#ifndef __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
#define __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H

#include <plat/omap_hwmod.h>

#include "voltage.h"

/*
 * *BIG FAT WARNING*:
 * USE the following ONLY in opp data initialization common to an SoC.
 * DO NOT USE these in board files/pm core etc.
 */

/**
 * struct omap_opp_def - OMAP OPP Definition
 * @hwmod_name:	Name of the hwmod for this domain
 * @freq:	Frequency in hertz corresponding to this OPP
 * @u_volt:	Nominal voltage in microvolts corresponding to this OPP
 * @default_available:	True/false - is this OPP available by default
 *
 * OMAP SOCs have a standard set of tuples consisting of frequency and voltage
 * pairs that the device will support per voltage domain. This is called
 * Operating Points or OPP. The actual definitions of OMAP Operating Points
 * varies over silicon within the same family of devices. For a specific
 * domain, you can have a set of {frequency, voltage} pairs and this is denoted
 * by an array of omap_opp_def. As the kernel boots and more information is
 * available, a set of these are activated based on the precise nature of
 * device the kernel boots up on. It is interesting to remember that each IP
 * which belongs to a voltage domain may define their own set of OPPs on top
 * of this - but this is handled by the appropriate driver.
 */
struct omap_opp_def {
	char *hwmod_name;
	char *voltdm_name;
	char *clk_name;

	unsigned long freq;
	unsigned long u_volt;

	bool default_available;
};

/*
 * Initialization wrapper used to define an OPP for OMAP variants.
 */
#define OPP_INITIALIZER(_hwmod_name, _clk_name, _voltdm_name, _enabled, _freq, _uv)	\
{								\
	.hwmod_name	= _hwmod_name,				\
	.clk_name	= _clk_name,				\
	.voltdm_name	= _voltdm_name,				\
	.default_available	= _enabled,			\
	.freq		= _freq,				\
	.u_volt		= _uv,					\
}

/*
 * Initialization wrapper used to define SmartReflex process data
 * XXX Is this needed?  Just use C99 initializers in data files?
 */
#define VOLT_DATA_DEFINE(_v_nom, _v_margin, _efuse_offs, _errminlimit, _errgain, _opp_sel) \
{								       \
	.volt_nominal	= _v_nom,				       \
	.volt_margin	= _v_margin,				       \
	.sr_efuse_offs	= _efuse_offs,				       \
	.sr_errminlimit = _errminlimit,				       \
	.vp_errgain	= _errgain,				       \
	.opp_sel	= _opp_sel,				       \
}

#define OMAP5_VOLT_DATA_DEFINE(_v_nom, _efuse_offs, _lvt_efuse_offs, _errminlimit, _errgain, _opp_sel)  \
{								       \
	.volt_nominal	= _v_nom,				       \
	.volt_margin	= 0,				       \
	.sr_efuse_offs	= _efuse_offs,				       \
	.lvt_sr_efuse_offs	= _lvt_efuse_offs,				       \
	.sr_errminlimit = _errminlimit,				       \
	.vp_errgain	= _errgain,				       \
	.opp_sel	= _opp_sel,				       \
}

/* Use this to initialize the default table */
extern int __init omap_init_opp_table(struct omap_opp_def *opp_def,
		u32 opp_def_size);


extern struct omap_volt_data omap34xx_vddmpu_volt_data[];
extern struct omap_volt_data omap34xx_vddcore_volt_data[];
extern struct omap_vdd_dep_info omap34xx_vddmpu_dep_info[];
extern struct omap_vp_param omap34xx_mpu_vp_data;
extern struct omap_vp_param omap34xx_core_vp_data;
extern struct omap_vc_param omap34xx_mpu_vc_data;
extern struct omap_vc_param omap34xx_core_vc_data;

extern struct omap_volt_data omap36xx_vddmpu_volt_data[];
extern struct omap_volt_data omap36xx_vddcore_volt_data[];
extern struct omap_vdd_dep_info omap36xx_vddmpu_dep_info[];
extern struct omap_vp_param omap36xx_mpu_vp_data;
extern struct omap_vp_param omap36xx_core_vp_data;
extern struct omap_vc_param omap36xx_mpu_vc_data;
extern struct omap_vc_param omap36xx_core_vc_data;

extern struct omap_volt_data omap443x_vdd_mpu_volt_data[];
extern struct omap_volt_data omap443x_vdd_iva_volt_data[];
extern struct omap_volt_data omap443x_vdd_core_volt_data[];
extern struct omap_vp_param omap443x_mpu_vp_data;
extern struct omap_vp_param omap443x_iva_vp_data;
extern struct omap_vp_param omap443x_core_vp_data;
extern struct omap_vc_param omap44xx_mpu_vc_data;
extern struct omap_vc_param omap44xx_iva_vc_data;
extern struct omap_vc_param omap44xx_core_vc_data;
extern struct omap_vp_param omap446x_mpu_vp_data;
extern struct omap_vp_param omap446x_iva_vp_data;
extern struct omap_vp_param omap446x_core_vp_data;
extern struct omap_vc_param omap446x_core_vc_data;

extern struct omap_vdd_dep_info omap443x_vddmpu_dep_info[];
extern struct omap_vdd_dep_info omap443x_vddiva_dep_info[];

extern struct omap_volt_data omap446x_vdd_mpu_volt_data[];
extern struct omap_volt_data omap446x_vdd_iva_volt_data[];
extern struct omap_volt_data omap446x_vdd_core_volt_data[];

extern struct omap_vdd_dep_info omap446x_vddmpu_dep_info[];
extern struct omap_vdd_dep_info omap446x_vddiva_dep_info[];

extern struct omap_volt_data omap54xx_vdd_mpu_volt_data[];
extern struct omap_volt_data omap54xx_vdd_mm_volt_data[];
extern struct omap_volt_data omap54xx_vdd_core_volt_data[];
extern struct omap_vp_param omap54xx_mpu_vp_data;
extern struct omap_vp_param omap54xx_mm_vp_data;
extern struct omap_vp_param omap54xx_core_vp_data;
extern struct omap_vc_param omap54xx_mpu_vc_data;
extern struct omap_vc_param omap54xx_mm_vc_data;
extern struct omap_vc_param omap54xx_core_vc_data;

extern struct omap_vdd_dep_info omap54xx_vddmpu_dep_info[];
extern struct omap_vdd_dep_info omap54xx_vddmm_dep_info[];
#endif		/* __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H */