summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/tegra12_dvfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/tegra12_dvfs.c')
-rw-r--r--arch/arm/mach-tegra/tegra12_dvfs.c83
1 files changed, 22 insertions, 61 deletions
diff --git a/arch/arm/mach-tegra/tegra12_dvfs.c b/arch/arm/mach-tegra/tegra12_dvfs.c
index 2a03b7165bc5..d2fbb8de3c52 100644
--- a/arch/arm/mach-tegra/tegra12_dvfs.c
+++ b/arch/arm/mach-tegra/tegra12_dvfs.c
@@ -141,8 +141,8 @@ void __init tegra12x_vdd_cpu_align(int step_uv, int offset_uv)
/* CPU DVFS tables */
static unsigned long cpu_max_freq[] = {
-/* speedo_id 0 1 2 3 */
- 2014500, 2320500, 2116500, 2524500,
+/* speedo_id 0 1 2 3 4 5 */
+ 2014500, 2320500, 2116500, 2524500, 1500000, 2218500,
};
static struct cpu_cvb_dvfs cpu_cvb_dvfs_table[] = {
@@ -221,6 +221,19 @@ static const int core_millivolts[MAX_DVFS_FREQS] = {
.dvfs_rail = &tegra12_dvfs_rail_vdd_core, \
}
+#define OVRRD_DVFS(_clk_name, _speedo_id, _process_id, _auto, _mult, _freqs...) \
+ { \
+ .clk_name = _clk_name, \
+ .speedo_id = _speedo_id, \
+ .process_id = _process_id, \
+ .freqs = {_freqs}, \
+ .freqs_mult = _mult, \
+ .millivolts = core_millivolts, \
+ .auto_dvfs = _auto, \
+ .can_override = true, \
+ .dvfs_rail = &tegra12_dvfs_rail_vdd_core, \
+ }
+
static struct dvfs core_dvfs_table[] = {
/* Core voltages (mV): 800, 850, 900, 950, 1000, 1050, 1100, 1150 */
/* Clock limits for internal blocks, PLLs */
@@ -315,41 +328,19 @@ static struct dvfs core_dvfs_table[] = {
CORE_DVFS("hda", -1, -1, 1, KHZ, 1, 108000, 108000, 108000, 108000, 108000 , 108000, 108000),
CORE_DVFS("hda2codec_2x", -1, -1, 1, KHZ, 1, 48000, 48000, 48000, 48000, 48000 , 48000, 48000),
+
+ OVRRD_DVFS("sdmmc1", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 204000),
+ OVRRD_DVFS("sdmmc3", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 204000),
+ OVRRD_DVFS("sdmmc4", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 200000),
};
/*
- * Separate sdmmc and display dvfs table to handle dependency of sdmmc tuning
- * on display maximum rate.
- *
* Display peak voltage aggregation into override range floor is deferred until
* actual pixel clock for the particular platform is known. This would allow to
- * extend sdmmc tuning range on the platforms that do not excercise maximum
- * display clock capabilities specified in DVFS table.
+ * extend override range on the platforms that do not excercise maximum display
+ * clock capabilities specified in DVFS table.
*
- * Two SDMMC tables:
- * - "1-point tuning" table is applicable when override floor is equal to
- * nominal voltage (override range is zero). It is installed by default, while
- * display peak voltage is unknown. It is overwritten when display peak voltage
- * is aggregated, provided final override floor is below nominal.
- *
- * - "2-point tuning" table is applicable when override floor is below nominal
- * voltage (i.e., at least 2 tuning points in override range). It is installed
- * when display peak voltage is aggregated, provided final override floor is
- * below nominal.
*/
-#define OVRRD_DVFS(_clk_name, _speedo_id, _process_id, _auto, _mult, _freqs...) \
- { \
- .clk_name = _clk_name, \
- .speedo_id = _speedo_id, \
- .process_id = _process_id, \
- .freqs = {_freqs}, \
- .freqs_mult = _mult, \
- .millivolts = core_millivolts, \
- .auto_dvfs = _auto, \
- .can_override = true, \
- .dvfs_rail = &tegra12_dvfs_rail_vdd_core, \
- }
-
#define DEFER_DVFS(_clk_name, _speedo_id, _process_id, _auto, _mult, _freqs...) \
{ \
.clk_name = _clk_name, \
@@ -363,19 +354,6 @@ static struct dvfs core_dvfs_table[] = {
.dvfs_rail = &tegra12_dvfs_rail_vdd_core, \
}
- /* Core voltages (mV): 800, 850, 900, 950, 1000, 1050, 1100, 1150 */
-static struct dvfs sdmmc_dvfs_table[] = {
- OVRRD_DVFS("sdmmc1", -1, -1, 1, KHZ, 1, 1, 50000, 50000, 50000, 50000, 50000, 204000),
- OVRRD_DVFS("sdmmc3", -1, -1, 1, KHZ, 1, 1, 50000, 50000, 50000, 50000, 50000, 204000),
- OVRRD_DVFS("sdmmc4", -1, -1, 1, KHZ, 1, 1, 50000, 50000, 50000, 50000, 50000, 200000),
-};
-
-static struct dvfs sdmmc_tune2_dvfs_table[] = {
- OVRRD_DVFS("sdmmc1", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 204000),
- OVRRD_DVFS("sdmmc3", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 204000),
- OVRRD_DVFS("sdmmc4", -1, -1, 1, KHZ, 1, 1, 82000, 82000, 136000, 136000, 136000, 200000),
-};
-
static struct dvfs disp_dvfs_table[] = {
/*
* The clock rate for the display controllers that determines the
@@ -407,22 +385,7 @@ static struct dvfs disp_alt_dvfs_table[] = {
static int resolve_core_override(int min_override_mv)
{
- int i, j;
- struct dvfs *d = sdmmc_dvfs_table;
- struct dvfs *d_tune = sdmmc_tune2_dvfs_table;
-
- BUILD_BUG_ON(ARRAY_SIZE(sdmmc_dvfs_table) !=
- ARRAY_SIZE(sdmmc_tune2_dvfs_table));
-
- if (min_override_mv >=
- tegra12_dvfs_rail_vdd_core.nominal_millivolts)
- return 0;
-
- /* Override range is not 0: 2+ points for SDMMC tuning are available */
- for (i = 0; i < ARRAY_SIZE(sdmmc_dvfs_table); i++, d++, d_tune++) {
- for (j = 0; j < d->num_freqs; j++)
- d->freqs[j] = d_tune->freqs[j] * d_tune->freqs_mult;
- }
+ /* nothing to do -- always resolved */
return 0;
}
@@ -1173,8 +1136,6 @@ void __init tegra12x_init_dvfs(void)
if (!tegra_platform_is_linsim()) {
INIT_CORE_DVFS_TABLE(core_dvfs_table,
ARRAY_SIZE(core_dvfs_table));
- INIT_CORE_DVFS_TABLE(sdmmc_dvfs_table,
- ARRAY_SIZE(sdmmc_dvfs_table));
INIT_CORE_DVFS_TABLE(disp_dvfs_table,
ARRAY_SIZE(disp_dvfs_table));