ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / tegra_usb_pmc.h
1 /*
2  * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  */
14
15 #ifndef _TEGRA_USB_PMC_INTERFACE_H_
16 #define _TEGRA_USB_PMC_INTERFACE_H_
17
18 #define UHSIC_INST(inst, x, y)  ((inst == 1) ? x : y)
19
20 #define USB_PORTSC              0x174
21 #define USB_PORTSC_PHCD (1 << 23)
22 #define USB_PORTSC_WKOC (1 << 22)
23 #define USB_PORTSC_WKDS (1 << 21)
24 #define USB_PORTSC_WKCN (1 << 20)
25 #define USB_PORTSC_PTC(x)       (((x) & 0xf) << 16)
26 #define USB_PORTSC_PP   (1 << 12)
27 #define USB_PORTSC_LS(x) (((x) & 0x3) << 10)
28 #define USB_PORTSC_SUSP (1 << 7)
29 #define USB_PORTSC_RESUME       (1 << 6)
30 #define USB_PORTSC_OCC  (1 << 5)
31 #define USB_PORTSC_PEC  (1 << 3)
32 #define USB_PORTSC_PE           (1 << 2)
33 #define USB_PORTSC_CSC  (1 << 1)
34 #define USB_PORTSC_CCS  (1 << 0)
35 #define USB_PORTSC_RWC_BITS (USB_PORTSC_CSC | USB_PORTSC_PEC | USB_PORTSC_OCC)
36 #define USB_PORTSC_PSPD_MASK    3
37 #define USB_PORTSC_LINE_STATE(x) (((x) & (0x3 << 10)) >> 10)
38 #define USB_PORTSC_LINE_DM_SET (1 << 0)
39 #define USB_PORTSC_LINE_DP_SET (1 << 1)
40
41 #define USB_USBCMD              0x130
42 #define   USB_USBCMD_RS         (1 << 0)
43 #define   USB_CMD_RESET (1<<1)
44
45 #define HOSTPC1_DEVLC           0x1b4
46 #define HOSTPC1_DEVLC_PHCD              (1 << 22)
47 #define HOSTPC1_DEVLC_PTS(x)            (((x) & 0x7) << 29)
48 #define HOSTPC1_DEVLC_PTS_MASK  7
49 #define HOSTPC1_DEVLC_PTS_HSIC  4
50 #define HOSTPC1_DEVLC_STS               (1 << 28)
51 #define HOSTPC1_DEVLC_PSPD(x)           (((x) & 0x3) << 25)
52 #define HOSTPC1_DEVLC_PSPD_MASK 3
53 #define HOSTPC1_DEVLC_PSPD_HIGH_SPEED 2
54 #define HOSTPC1_DEVLC_NYT_ASUS  1
55
56 #define PMC_UHSIC_SLEEP_CFG(inst)       UHSIC_INST(inst, 0x1fc, 0x284)
57 #define UHSIC_MASTER_ENABLE(inst)       (1 << UHSIC_INST(inst, 24, 0))
58 #define UHSIC_WAKE_VAL(inst, x) (((x) & 0xf) << UHSIC_INST(inst, 28, 4))
59 #define WAKE_VAL_SD10                   0x2
60 #define UTMIP_PMC_WAKEUP0               0x84c
61 #define UHSIC_PMC_WAKEUP0               0xc34
62 #define EVENT_INT_ENB                   (1 << 0)
63 #define PMC_UHSIC_TRIGGERS(inst)        UHSIC_INST(inst, 0x1ec, 0x27c)
64 #define UHSIC_CLR_WALK_PTR(inst)        (1 << UHSIC_INST(inst, 3, 0))
65 #define UHSIC_CLR_WAKE_ALARM(inst)      (1 << UHSIC_INST(inst, 15, 3))
66
67 #define PMC_UHSIC_SLEEPWALK_CFG(inst)   UHSIC_INST(inst, 0x200, 0x288)
68 #define UHSIC_LINEVAL_WALK_EN(inst)     (1 << UHSIC_INST(inst, 31, 7))
69 #define PMC_UHSIC_MASTER_CONFIG(inst)   UHSIC_INST(inst, 0x274, 0x29c)
70 #define UHSIC_PWR(inst)         (1 << UHSIC_INST(inst, 3, 0))
71
72 #define PMC_UHSIC_FAKE(inst)            UHSIC_INST(inst, 0x218, 0x294)
73 #define UHSIC_FAKE_STROBE_VAL(inst)             (1 << UHSIC_INST(inst, 12, 0))
74 #define UHSIC_FAKE_DATA_VAL(inst)               (1 << UHSIC_INST(inst, 13, 1))
75
76 #define PMC_SLEEPWALK_UHSIC(inst)       UHSIC_INST(inst, 0x210, 0x28c)
77 #define UHSIC_STROBE_RPD_A                              (1 << 0)
78 #define UHSIC_DATA_RPD_A                                (1 << 1)
79 #define UHSIC_STROBE_RPU_A                              (1 << 2)
80 #define UHSIC_DATA_RPU_A                                (1 << 3)
81 #define UHSIC_STROBE_RPD_B                              (1 << 8)
82 #define UHSIC_DATA_RPD_B                                (1 << 9)
83 #define UHSIC_STROBE_RPU_B                              (1 << 10)
84 #define UHSIC_DATA_RPU_B                                (1 << 11)
85 #define UHSIC_STROBE_RPD_C                              (1 << 16)
86 #define UHSIC_DATA_RPD_C                                (1 << 17)
87 #define UHSIC_STROBE_RPU_C                              (1 << 18)
88 #define UHSIC_DATA_RPU_C                                (1 << 19)
89 #define UHSIC_STROBE_RPD_D                              (1 << 24)
90 #define UHSIC_DATA_RPD_D                                (1 << 25)
91 #define UHSIC_STROBE_RPU_D                              (1 << 26)
92 #define UHSIC_DATA_RPU_D                                (1 << 27)
93 #define UHSIC_LINE_DEB_CNT(x)                   (((x) & 0xf) << 20)
94
95 #define PMC_USB_DEBOUNCE                        0xec
96 #define UTMIP_LINE_DEB_CNT(x)                   (((x) & 0xf) << 16)
97 #define PMC_USB_DEBOUNCE_VAL(x)         ((x) & 0xffff)
98
99 #define PMC_USB_AO                              0xf0
100 #define HSIC_RESERVED(inst)                     (3 << UHSIC_INST(inst, 14, 18))
101 #define STROBE_VAL_PD(inst)                     (1 << UHSIC_INST(inst, 12, 16))
102 #define DATA_VAL_PD(inst)                       (1 << UHSIC_INST(inst, 13, 17))
103 #define PMC_POWER_DOWN_MASK                     0xffff
104 #define USB_ID_PD(inst)                         (1 << ((4*(inst))+3))
105 #define VBUS_WAKEUP_PD(inst)                    (1 << ((4*(inst))+2))
106 #define USBON_VAL_PD(inst)                      (1 << ((4*(inst))+1))
107 #define USBON_VAL_PD_P2                 (1 << 9)
108 #define USBON_VAL_PD_P1                 (1 << 5)
109 #define USBON_VAL_PD_P0                 (1 << 1)
110 #define USBOP_VAL_PD(inst)                      (1 << (4*(inst)))
111 #define USBOP_VAL_PD_P2                 (1 << 8)
112 #define USBOP_VAL_PD_P1                 (1 << 4)
113 #define USBOP_VAL_PD_P0                 (1 << 0)
114 #define PMC_USB_AO_PD_P2                        (0xf << 8)
115 #define PMC_USB_AO_ID_PD_P0                     (1 << 3)
116 #define PMC_USB_AO_VBUS_WAKEUP_PD_P0    (1 << 2)
117
118 #define PMC_TRIGGERS                    0x1ec
119 #define UTMIP_CLR_WALK_PTR(inst)        (1 << (inst))
120 #define UTMIP_CLR_WALK_PTR_P2           (1 << 2)
121 #define UTMIP_CLR_WALK_PTR_P1           (1 << 1)
122 #define UTMIP_CLR_WALK_PTR_P0           (1 << 0)
123 #define UTMIP_CAP_CFG(inst)     (1 << ((inst)+4))
124 #define UTMIP_CAP_CFG_P2                (1 << 6)
125 #define UTMIP_CAP_CFG_P1                (1 << 5)
126 #define UTMIP_CAP_CFG_P0                (1 << 4)
127 #define UTMIP_CLR_WAKE_ALARM(inst)              (1 << ((inst)+12))
128 #define UTMIP_CLR_WAKE_ALARM_P2 (1 << 14)
129
130 #define PMC_PAD_CFG             (0x1f4)
131
132 #define PMC_UTMIP_TERM_PAD_CFG  0x1f8
133 #define PMC_TCTRL_VAL(x)        (((x) & 0x1f) << 5)
134 #define PMC_RCTRL_VAL(x)        (((x) & 0x1f) << 0)
135
136 #define PMC_SLEEP_CFG                   0x1fc
137 #define UTMIP_TCTRL_USE_PMC(inst) (1 << ((8*(inst))+3))
138 #define UTMIP_TCTRL_USE_PMC_P2          (1 << 19)
139 #define UTMIP_TCTRL_USE_PMC_P1          (1 << 11)
140 #define UTMIP_TCTRL_USE_PMC_P0          (1 << 3)
141 #define UTMIP_RCTRL_USE_PMC(inst) (1 << ((8*(inst))+2))
142 #define UTMIP_RCTRL_USE_PMC_P2          (1 << 18)
143 #define UTMIP_RCTRL_USE_PMC_P1          (1 << 10)
144 #define UTMIP_RCTRL_USE_PMC_P0          (1 << 2)
145 #define UTMIP_FSLS_USE_PMC(inst)        (1 << ((8*(inst))+1))
146 #define UTMIP_FSLS_USE_PMC_P2           (1 << 17)
147 #define UTMIP_FSLS_USE_PMC_P1           (1 << 9)
148 #define UTMIP_FSLS_USE_PMC_P0           (1 << 1)
149 #define UTMIP_MASTER_ENABLE(inst) (1 << (8*(inst)))
150 #define UTMIP_MASTER_ENABLE_P2          (1 << 16)
151 #define UTMIP_MASTER_ENABLE_P1          (1 << 8)
152 #define UTMIP_MASTER_ENABLE_P0          (1 << 0)
153
154 #define PMC_SLEEPWALK_CFG               0x200
155 #define UTMIP_LINEVAL_WALK_EN(inst) (1 << ((8*(inst))+7))
156 #define UTMIP_LINEVAL_WALK_EN_P2        (1 << 23)
157 #define UTMIP_LINEVAL_WALK_EN_P1        (1 << 15)
158 #define UTMIP_LINEVAL_WALK_EN_P0        (1 << 7)
159 #define UTMIP_WAKE_VAL(inst, x) (((x) & 0xf) << ((8*(inst))+4))
160 #define UTMIP_WAKE_VAL_P2(x)            (((x) & 0xf) << 20)
161 #define UTMIP_WAKE_VAL_P1(x)            (((x) & 0xf) << 12)
162 #define UTMIP_WAKE_VAL_P0(x)            (((x) & 0xf) << 4)
163 #define WAKE_VAL_NONE           0xc
164 #define WAKE_VAL_ANY                    0xF
165 #define WAKE_VAL_FSJ                    0x2
166 #define WAKE_VAL_FSK                    0x1
167 #define WAKE_VAL_SE0                    0x0
168
169 #define PMC_SLEEPWALK_REG(inst)         (0x204 + (4*(inst)))
170 #define UTMIP_USBOP_RPD_A       (1 << 0)
171 #define UTMIP_USBON_RPD_A       (1 << 1)
172 #define UTMIP_AP_A                      (1 << 4)
173 #define UTMIP_AN_A                      (1 << 5)
174 #define UTMIP_HIGHZ_A           (1 << 6)
175 #define UTMIP_USBOP_RPD_B       (1 << 8)
176 #define UTMIP_USBON_RPD_B       (1 << 9)
177 #define UTMIP_AP_B                      (1 << 12)
178 #define UTMIP_AN_B                      (1 << 13)
179 #define UTMIP_HIGHZ_B           (1 << 14)
180 #define UTMIP_USBOP_RPD_C       (1 << 16)
181 #define UTMIP_USBON_RPD_C       (1 << 17)
182 #define UTMIP_AP_C              (1 << 20)
183 #define UTMIP_AN_C              (1 << 21)
184 #define UTMIP_HIGHZ_C           (1 << 22)
185 #define UTMIP_USBOP_RPD_D       (1 << 24)
186 #define UTMIP_USBON_RPD_D       (1 << 25)
187 #define UTMIP_AP_D              (1 << 28)
188 #define UTMIP_AN_D              (1 << 29)
189 #define UTMIP_HIGHZ_D           (1 << 30)
190
191 #define PMC_UTMIP_FAKE          0x218
192 #define USBON_VAL(inst) (1 << ((4*(inst))+1))
193 #define USBON_VAL_P2                    (1 << 9)
194 #define USBON_VAL_P1                    (1 << 5)
195 #define USBON_VAL_P0                    (1 << 1)
196 #define USBOP_VAL(inst) (1 << (4*(inst)))
197 #define USBOP_VAL_P2                    (1 << 8)
198 #define USBOP_VAL_P1                    (1 << 4)
199 #define USBOP_VAL_P0                    (1 << 0)
200
201 #define PMC_UTMIP_BIAS_MASTER_CNTRL 0x270
202 #define BIAS_MASTER_PROG_VAL            (1 << 1)
203
204 #define UTMIP_BIAS_CFG1         0x83c
205 #define   UTMIP_BIAS_PDTRK_COUNT(x) (((x) & 0x1f) << 3)
206 #define   UTMIP_BIAS_PDTRK_POWERDOWN    (1 << 0)
207 #define   UTMIP_BIAS_PDTRK_POWERUP      (1 << 1)
208
209 #define UTMIP_BIAS_STS0                 0x840
210 #define   UTMIP_RCTRL_VAL(x)            (((x) & 0xffff) << 0)
211 #define   UTMIP_TCTRL_VAL(x)            (((x) & (0xffff << 16)) >> 16)
212
213 #define PMC_UTMIP_MASTER_CONFIG         0x274
214 #define UTMIP_PWR(inst)         (1 << (inst))
215
216 #ifdef DEBUG
217 #define DBG(stuff...)   pr_info("\n"stuff)
218 #else
219 #define DBG(stuff...)   do {} while (0)
220 #endif
221
222 #if 0
223 #define PHY_DBG(stuff...)       pr_info("\n" stuff)
224 #else
225 #define PHY_DBG(stuff...)       do {} while (0)
226 #endif
227
228 /**
229  * defines USB controller type
230  */
231 enum tegra_usb_controller_type {
232         TEGRA_USB_2_0 = 0,
233         TEGRA_USB_3_0,
234 };
235
236 /**
237  * defines USB port speeds
238  */
239 enum tegra_usb_port_speed {
240         USB_PMC_PORT_SPEED_FULL = 0,
241         USB_PMC_PORT_SPEED_LOW,
242         USB_PMC_PORT_SPEED_HIGH,
243         USB_PMC_PORT_SPEED_UNKNOWN,
244         USB_PMC_PORT_SPEED_SUPER,
245 };
246
247 struct tegra_usb_pmc_data;
248
249 /**
250  * defines function pointers used for differnt pmc operations
251  */
252 struct tegra_usb_pmc_ops {
253         void (*setup_pmc_wake_detect)(struct tegra_usb_pmc_data *pmc_data);
254         void (*powerup_pmc_wake_detect)(struct tegra_usb_pmc_data *pmc_data);
255         void (*powerdown_pmc_wake_detect)(struct tegra_usb_pmc_data *pmc_data);
256         void (*disable_pmc_bus_ctrl)(struct tegra_usb_pmc_data *pmc_data,
257                   int enable_sof);
258         void (*power_down_pmc)(struct tegra_usb_pmc_data *pmc_data);
259 };
260
261 /**
262  * defines a structure that can be used by USB and XUSB for handing PMC ops.
263  */
264 struct tegra_usb_pmc_data {
265         u8 instance;
266         enum tegra_usb_controller_type controller_type;
267         enum tegra_usb_phy_interface phy_type;
268         enum tegra_usb_port_speed port_speed;
269         struct tegra_usb_pmc_ops *pmc_ops;
270         bool is_xhci;
271         void __iomem *usb_base;
272 };
273
274 void tegra_usb_pmc_init(struct tegra_usb_pmc_data *pmc_data);
275 int utmi_phy_set_snps_trking_data(void);
276 void utmi_phy_update_trking_data(u32 tctrl, u32 rctrl);
277 void tegra_usb_pmc_reg_update(u32 reg_offset, u32 mask, u32 val);
278 u32 tegra_usb_pmc_reg_read(u32 reg_offset);
279 void tegra_usb_pmc_reg_write(u32 reg_offset, u32 val);
280
281 #endif