ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / mc-timing-t12x.c
1 /*
2  * arch/arm/mach-tegra/mc-timing-t12x.c
3  *
4  * Copyright (c) 2013, NVIDIA Corporation. All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20
21 #include <linux/io.h>
22
23 #include <mach/mcerr.h>
24
25 #include "iomap.h"
26
27 #define MC_LA_REG(mod) MC_LATENCY_ALLOWANCE_ ## mod
28
29 static u32 mc_timing_reg_table[] = {
30         MC_LA_REG(AFI_0),
31         MC_LA_REG(AVPC_0),
32         MC_LA_REG(DC_0),
33         MC_LA_REG(DC_1),
34         MC_LA_REG(DC_2),
35         MC_LA_REG(DCB_0),
36         MC_LA_REG(DCB_1),
37         MC_LA_REG(DCB_2),
38         MC_LA_REG(HC_0),
39         MC_LA_REG(HC_1),
40         MC_LA_REG(HDA_0),
41         MC_LA_REG(MPCORE_0),
42         MC_LA_REG(MPCORELP_0),
43         MC_LA_REG(MSENC_0),
44         MC_LA_REG(PPCS_0),
45         MC_LA_REG(PPCS_1),
46         MC_LA_REG(PTC_0),
47         MC_LA_REG(SATA_0),
48         MC_LA_REG(VDE_0),
49         MC_LA_REG(VDE_1),
50         MC_LA_REG(VDE_2),
51         MC_LA_REG(VDE_3),
52         MC_LA_REG(ISP2_0),
53         MC_LA_REG(ISP2_1),
54         MC_LA_REG(XUSB_0),
55         MC_LA_REG(XUSB_1),
56         MC_LA_REG(ISP2B_0),
57         MC_LA_REG(ISP2B_1),
58         MC_LA_REG(TSEC_0),
59         MC_LA_REG(VIC_0),
60         MC_LA_REG(VI2_0),
61         MC_LA_REG(A9AVP_0),
62         MC_LA_REG(GPU_0),
63         MC_LA_REG(SDMMCA_0),
64         MC_LA_REG(SDMMCAA_0),
65         MC_LA_REG(SDMMC_0),
66         MC_LA_REG(SDMMCAB_0),
67         MC_LA_REG(DC_3)
68 };
69
70 #define NUM_LA_REGS ARRAY_SIZE(mc_timing_reg_table)
71
72 void tegra12_mc_latency_allowance_save(u32 **pctx)
73 {
74         u32 *ctx = *pctx;
75         u32 i;
76         for (i = 0; i < NUM_LA_REGS; ++i)
77                 *ctx++ = readl(IOMEM(mc +
78                         mc_timing_reg_table[i]));
79 }
80
81 void tegra12_mc_latency_allowance_restore(u32 **pctx)
82 {
83         u32 *ctx = *pctx;
84         u32 i;
85         for (i = 0; i < NUM_LA_REGS; ++i)
86                 __raw_writel(*ctx++, IOMEM(mc +
87                         mc_timing_reg_table[i]));
88 }