arm: tegra: ardbeg: add initial board file
[linux-3.10.git] / arch / arm / mach-tegra / tegra12_speedo.c
1 /*
2  * arch/arm/mach-tegra/tegra12_speedo.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; version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  *
19  */
20
21 #include <linux/kernel.h>
22 #include <linux/io.h>
23 #include <linux/err.h>
24 #include <linux/bug.h>                  /* For BUG_ON.  */
25
26 #include <mach/tegra_fuse.h>
27 #include <mach/hardware.h>
28 #include <linux/module.h>
29 #include <linux/moduleparam.h>
30
31 #include "fuse.h"
32 #include "iomap.h"
33
34 #define TEGRA124_CPU_SPEEDO 17777 /* FIXME: Get Correct Value */
35
36 static int threshold_index;
37
38 static int cpu_process_id;
39 static int core_process_id;
40 static int cpu_speedo_id;
41 static int cpu_speedo_value;
42 static int soc_speedo_id;
43 static int package_id;
44 static int cpu_iddq_value;
45
46 static int enable_app_profiles;
47
48 void tegra_init_speedo_data(void)
49 {
50         cpu_speedo_value = TEGRA124_CPU_SPEEDO;
51
52         pr_info("Tegra12: CPU Speedo ID %d, Soc Speedo ID %d",
53                 cpu_speedo_id, soc_speedo_id);
54 }
55
56 int tegra_cpu_process_id(void)
57 {
58         return cpu_process_id;
59 }
60
61 int tegra_core_process_id(void)
62 {
63         return core_process_id;
64 }
65
66 int tegra_cpu_speedo_id(void)
67 {
68         return cpu_speedo_id;
69 }
70
71 int tegra_soc_speedo_id(void)
72 {
73         return soc_speedo_id;
74 }
75
76 int tegra_package_id(void)
77 {
78         return package_id;
79 }
80
81 int tegra_cpu_speedo_value(void)
82 {
83         return cpu_speedo_value;
84 }
85
86 /*
87  * CPU and core nominal voltage levels as determined by chip SKU and speedo
88  * (not final - can be lowered by dvfs tables and rail dependencies; the
89  * latter is resolved by the dvfs code)
90  */
91 int tegra_cpu_speedo_mv(void)
92 {
93         /* Not applicable on Tegra12 */
94         return -ENOSYS;
95 }
96
97 int tegra_core_speedo_mv(void)
98 {
99         switch (soc_speedo_id) {
100         case 0:
101                 return 1100;
102         default:
103                 BUG();
104         }
105 }
106
107 int tegra_get_cpu_iddq_value()
108 {
109         return cpu_iddq_value;
110 }
111
112 static int get_enable_app_profiles(char *val, const struct kernel_param *kp)
113 {
114         return param_get_uint(val, kp);
115 }
116
117 static struct kernel_param_ops tegra_profiles_ops = {
118         .get = get_enable_app_profiles,
119 };
120
121 module_param_cb(tegra_enable_app_profiles,
122         &tegra_profiles_ops, &enable_app_profiles, 0444);