arm: tegra: la: la and ptsa updates for t14x.
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / mc.h
1 /*
2  * arch/arm/mach-tegra/include/mach/mc.h
3  *
4  * Copyright (C) 2010-2012 Google, Inc.
5  *
6  * Author:
7  *      Erik Gilling <konkers@google.com>
8  *
9  * This software is licensed under the terms of the GNU General Public
10  * License version 2, as published by the Free Software Foundation, and
11  * may be copied, distributed, and modified under those terms.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  */
19
20 #ifndef __MACH_TEGRA_MC_H
21 #define __MACH_TEGRA_MC_H
22
23 #if defined(CONFIG_ARCH_TEGRA_2x_SOC)
24 #define TEGRA_MC_FPRI_CTRL_AVPC         0x17c
25 #define TEGRA_MC_FPRI_CTRL_DC           0x180
26 #define TEGRA_MC_FPRI_CTRL_DCB          0x184
27 #define TEGRA_MC_FPRI_CTRL_EPP          0x188
28 #define TEGRA_MC_FPRI_CTRL_G2           0x18c
29 #define TEGRA_MC_FPRI_CTRL_HC           0x190
30 #define TEGRA_MC_FPRI_CTRL_ISP          0x194
31 #define TEGRA_MC_FPRI_CTRL_MPCORE       0x198
32 #define TEGRA_MC_FPRI_CTRL_MPEA         0x19c
33 #define TEGRA_MC_FPRI_CTRL_MPEB         0x1a0
34 #define TEGRA_MC_FPRI_CTRL_MPEC         0x1a4
35 #define TEGRA_MC_FPRI_CTRL_NV           0x1a8
36 #define TEGRA_MC_FPRI_CTRL_PPCS         0x1ac
37 #define TEGRA_MC_FPRI_CTRL_VDE          0x1b0
38 #define TEGRA_MC_FPRI_CTRL_VI           0x1b4
39
40 #define TEGRA_MC_CLIENT_AVPCARM7R       ((TEGRA_MC_FPRI_CTRL_AVPC << 8) | 0)
41 #define TEGRA_MC_CLIENT_AVPCARM7W       ((TEGRA_MC_FPRI_CTRL_AVPC << 8) | 2)
42 #define TEGRA_MC_CLIENT_DISPLAY0A       ((TEGRA_MC_FPRI_CTRL_DC << 8) | 0)
43 #define TEGRA_MC_CLIENT_DISPLAY0B       ((TEGRA_MC_FPRI_CTRL_DC << 8) | 2)
44 #define TEGRA_MC_CLIENT_DISPLAY0C       ((TEGRA_MC_FPRI_CTRL_DC << 8) | 4)
45 #define TEGRA_MC_CLIENT_DISPLAY1B       ((TEGRA_MC_FPRI_CTRL_DC << 8) | 6)
46 #define TEGRA_MC_CLIENT_DISPLAYHC       ((TEGRA_MC_FPRI_CTRL_DC << 8) | 8)
47 #define TEGRA_MC_CLIENT_DISPLAY0AB      ((TEGRA_MC_FPRI_CTRL_DCB << 8) | 0)
48 #define TEGRA_MC_CLIENT_DISPLAY0BB      ((TEGRA_MC_FPRI_CTRL_DCB << 8) | 2)
49 #define TEGRA_MC_CLIENT_DISPLAY0CB      ((TEGRA_MC_FPRI_CTRL_DCB << 8) | 4)
50 #define TEGRA_MC_CLIENT_DISPLAY1BB      ((TEGRA_MC_FPRI_CTRL_DCB << 8) | 6)
51 #define TEGRA_MC_CLIENT_DISPLAYHCB      ((TEGRA_MC_FPRI_CTRL_DCB << 8) | 8)
52 #define TEGRA_MC_CLIENT_EPPUP           ((TEGRA_MC_FPRI_CTRL_EPP << 8) | 0)
53 #define TEGRA_MC_CLIENT_EPPU            ((TEGRA_MC_FPRI_CTRL_EPP << 8) | 2)
54 #define TEGRA_MC_CLIENT_EPPV            ((TEGRA_MC_FPRI_CTRL_EPP << 8) | 4)
55 #define TEGRA_MC_CLIENT_EPPY            ((TEGRA_MC_FPRI_CTRL_EPP << 8) | 6)
56 #define TEGRA_MC_CLIENT_G2PR            ((TEGRA_MC_FPRI_CTRL_G2 << 8) | 0)
57 #define TEGRA_MC_CLIENT_G2SR            ((TEGRA_MC_FPRI_CTRL_G2 << 8) | 2)
58 #define TEGRA_MC_CLIENT_G2DR            ((TEGRA_MC_FPRI_CTRL_G2 << 8) | 4)
59 #define TEGRA_MC_CLIENT_G2DW            ((TEGRA_MC_FPRI_CTRL_G2 << 8) | 6)
60 #define TEGRA_MC_CLIENT_HOST1XDMAR      ((TEGRA_MC_FPRI_CTRL_HC << 8) | 0)
61 #define TEGRA_MC_CLIENT_HOST1XR         ((TEGRA_MC_FPRI_CTRL_HC << 8) | 2)
62 #define TEGRA_MC_CLIENT_HOST1XW         ((TEGRA_MC_FPRI_CTRL_HC << 8) | 4)
63 #define TEGRA_MC_CLIENT_ISPW            ((TEGRA_MC_FPRI_CTRL_ISP << 8) | 0)
64 #define TEGRA_MC_CLIENT_MPCORER         ((TEGRA_MC_FPRI_CTRL_MPCORE << 8) | 0)
65 #define TEGRA_MC_CLIENT_MPCOREW         ((TEGRA_MC_FPRI_CTRL_MPCORE << 8) | 2)
66 #define TEGRA_MC_CLIENT_MPEAMEMRD       ((TEGRA_MC_FPRI_CTRL_MPEA << 8) | 0)
67 #define TEGRA_MC_CLIENT_MPEUNIFBR       ((TEGRA_MC_FPRI_CTRL_MPEB << 8) | 0)
68 #define TEGRA_MC_CLIENT_MPE_IPRED       ((TEGRA_MC_FPRI_CTRL_MPEB << 8) | 2)
69 #define TEGRA_MC_CLIENT_MPEUNIFBW       ((TEGRA_MC_FPRI_CTRL_MPEB << 8) | 4)
70 #define TEGRA_MC_CLIENT_MPECSRD         ((TEGRA_MC_FPRI_CTRL_MPEC << 8) | 0)
71 #define TEGRA_MC_CLIENT_MPECSWR         ((TEGRA_MC_FPRI_CTRL_MPEC << 8) | 2)
72 #define TEGRA_MC_CLIENT_FDCDRD          ((TEGRA_MC_FPRI_CTRL_NV << 8) | 0)
73 #define TEGRA_MC_CLIENT_IDXSRD          ((TEGRA_MC_FPRI_CTRL_NV << 8) | 2)
74 #define TEGRA_MC_CLIENT_TEXSRD          ((TEGRA_MC_FPRI_CTRL_NV << 8) | 4)
75 #define TEGRA_MC_CLIENT_FDCDWR          ((TEGRA_MC_FPRI_CTRL_NV << 8) | 6)
76 #define TEGRA_MC_CLIENT_PPCSAHBDMAR     ((TEGRA_MC_FPRI_CTRL_PPCS << 8) | 0)
77 #define TEGRA_MC_CLIENT_PPCSAHBSLVR     ((TEGRA_MC_FPRI_CTRL_PPCS << 8) | 2)
78 #define TEGRA_MC_CLIENT_PPCSAHBDMAW     ((TEGRA_MC_FPRI_CTRL_PPCS << 8) | 4)
79 #define TEGRA_MC_CLIENT_PPCSAHBSLVW     ((TEGRA_MC_FPRI_CTRL_PPCS << 8) | 6)
80 #define TEGRA_MC_CLIENT_VDEBSEVR        ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 0)
81 #define TEGRA_MC_CLIENT_VDEMBER         ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 2)
82 #define TEGRA_MC_CLIENT_VDEMCER         ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 4)
83 #define TEGRA_MC_CLIENT_VDETPER         ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 6)
84 #define TEGRA_MC_CLIENT_VDEBSEVW        ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 8)
85 #define TEGRA_MC_CLIENT_VDEMBEW         ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 10)
86 #define TEGRA_MC_CLIENT_VDETPMW         ((TEGRA_MC_FPRI_CTRL_VDE << 8) | 12)
87 #define TEGRA_MC_CLIENT_VIRUV           ((TEGRA_MC_FPRI_CTRL_VI << 8) | 0)
88 #define TEGRA_MC_CLIENT_VIWSB           ((TEGRA_MC_FPRI_CTRL_VI << 8) | 2)
89 #define TEGRA_MC_CLIENT_VIWU            ((TEGRA_MC_FPRI_CTRL_VI << 8) | 4)
90 #define TEGRA_MC_CLIENT_VIWV            ((TEGRA_MC_FPRI_CTRL_VI << 8) | 6)
91 #define TEGRA_MC_CLIENT_VIWY            ((TEGRA_MC_FPRI_CTRL_VI << 8) | 8)
92
93 #define TEGRA_MC_PRIO_LOWEST            0
94 #define TEGRA_MC_PRIO_LOW               1
95 #define TEGRA_MC_PRIO_MED               2
96 #define TEGRA_MC_PRIO_HIGH              3
97 #define TEGRA_MC_PRIO_MASK              3
98
99 void tegra_mc_set_priority(unsigned long client, unsigned long prio);
100
101 #else
102         /* !!!FIXME!!! IMPLEMENT ME */
103 #define tegra_mc_set_priority(client, prio) \
104         do { /* nothing for now */ } while (0)
105 #endif
106
107 int tegra_mc_get_tiled_memory_bandwidth_multiplier(void);
108
109 /*
110  * On Tegra11 dual channel MC effectively operates as 64-bit bus
111  */
112 static inline int tegra_mc_get_effective_bytes_width(void)
113 {
114 #if defined(CONFIG_ARCH_TEGRA_11x_SOC)
115         return 8;
116 #else
117         return 4;
118 #endif
119 }
120
121 unsigned int tegra_emc_bw_to_freq_req(unsigned int bw_kbps);
122
123 unsigned int tegra_emc_freq_req_to_bw(unsigned int freq_kbps);
124
125 /* API to get freqency switch latency at given MC freq.
126  * freq_khz: Frequncy in KHz.
127  * retruns latency in microseconds.
128  */
129 static inline unsigned tegra_emc_dvfs_latency(unsigned int freq_khz)
130 {
131         /* The latency data is not available based on freq.
132          * H/W expects it to be around 3 to 4us.
133          */
134         return 4;
135 }
136
137 #endif