Merge branch '3.4-rc1' into android-tegra-nv-3.3-rebased
[linux-2.6.git] / arch / arm / mach-tegra / fuse.h
1 /*
2  * arch/arm/mach-tegra/fuse.h
3  *
4  * Copyright (C) 2010 Google, Inc.
5  * Copyright (C) 2010-2011 NVIDIA Corp.
6  *
7  * Author:
8  *      Colin Cross <ccross@android.com>
9  *
10  * This software is licensed under the terms of the GNU General Public
11  * License version 2, as published by the Free Software Foundation, and
12  * may be copied, distributed, and modified under those terms.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  */
20
21 #ifndef __MACH_TEGRA_FUSE_H
22 #define __MACH_TEGRA_FUSE_H
23
24 #include <mach/hardware.h>
25
26 enum tegra_revision {
27         TEGRA_REVISION_UNKNOWN = 0,
28         TEGRA_REVISION_A01,
29         TEGRA_REVISION_A02,
30         TEGRA_REVISION_A03,
31         TEGRA_REVISION_A03p,
32         TEGRA_REVISION_A04,
33         TEGRA_REVISION_MAX,
34 };
35
36 #define SKU_ID_T20      8
37 #define SKU_ID_T25SE    20
38 #define SKU_ID_AP25     23
39 #define SKU_ID_T25      24
40 #define SKU_ID_AP25E    27
41 #define SKU_ID_T25E     28
42
43 #define TEGRA20         0x20
44 #define TEGRA30         0x30
45
46 #define INVALID_PROCESS_ID      99 /* don't expect to have 100 process id's */
47
48 extern int tegra_sku_id;
49 extern int tegra_cpu_process_id;
50 extern int tegra_core_process_id;
51 extern int tegra_chip_id;
52 extern enum tegra_revision tegra_revision;
53
54 extern int tegra_bct_strapping;
55
56 unsigned long long tegra_chip_uid(void);
57 unsigned int tegra_spare_fuse(int bit);
58 int tegra_sku_id(void);
59 void tegra_init_fuse(void);
60 u32 tegra_fuse_readl(unsigned long offset);
61 void tegra_fuse_writel(u32 value, unsigned long offset);
62 const char *tegra_get_revision_name(void);
63
64 #ifdef CONFIG_TEGRA_SILICON_PLATFORM
65
66 int tegra_cpu_process_id(void);
67 int tegra_core_process_id(void);
68 int tegra_soc_speedo_id(void);
69 void tegra_init_speedo_data(void);
70
71 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
72 int tegra_package_id(void);
73 int tegra_cpu_speedo_id(void);
74 int tegra_cpu_speedo_mv(void);
75 int tegra_core_speedo_mv(void);
76 #else
77 static inline int tegra_package_id(void) { return -1; }
78 static inline int tegra_cpu_speedo_id(void) { return 0; }
79 static inline int tegra_cpu_speedo_mv(void) { return 1000; }
80 static inline int tegra_core_speedo_mv(void) { return 1200; }
81 #endif /* CONFIG_ARCH_TEGRA_2x_SOC */
82
83 #else
84
85 static inline int tegra_cpu_process_id(void) { return 0; }
86 static inline int tegra_core_process_id(void) { return 0; }
87 static inline int tegra_cpu_speedo_id(void) { return 0; }
88 static inline int tegra_soc_speedo_id(void) { return 0; }
89 static inline int tegra_package_id(void) { return -1; }
90 static inline int tegra_cpu_speedo_mv(void) { return 1000; }
91 static inline int tegra_core_speedo_mv(void) { return 1200; }
92 static inline void tegra_init_speedo_data(void) { }
93
94 #endif /* CONFIG_TEGRA_SILICON_PLATFORM */
95
96 #endif /* MACH_TEGRA_FUSE_H */