blob: 652c8e8c6f2c453008a23f5d42e14d9e500a5299 [file] [log] [blame]
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07001/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#include <linux/kernel.h>
15#include <linux/list.h>
16#include <linux/platform_device.h>
17#include <linux/msm_rotator.h>
Deepak Kotur12301a72011-11-09 18:30:29 -080018#include <linux/ion.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070019#include <linux/gpio.h>
Pratik Patel1746b8f2012-06-02 21:11:41 -070020#include <linux/coresight.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070021#include <asm/clkdev.h>
Jordan Crouse914de9b2012-07-09 13:49:46 -060022#include <mach/kgsl.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070023#include <linux/android_pmem.h>
24#include <mach/irqs-8960.h>
Mayank Rana9f51f582011-08-04 18:35:59 +053025#include <mach/dma.h>
26#include <linux/dma-mapping.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070027#include <mach/board.h>
28#include <mach/msm_iomap.h>
29#include <mach/msm_hsusb.h>
30#include <mach/msm_sps.h>
31#include <mach/rpm.h>
32#include <mach/msm_bus_board.h>
33#include <mach/msm_memtypes.h>
Eric Holmberg023d25c2012-03-01 12:27:55 -070034#include <mach/msm_smd.h>
Lucille Sylvester6e362412011-12-09 16:21:42 -070035#include <mach/msm_dcvs.h>
Laura Abbott532b2df2012-04-12 10:53:48 -070036#include <mach/msm_rtb.h>
Laura Abbott2ae8f362012-04-12 11:03:04 -070037#include <mach/msm_cache_dump.h>
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -070038#include <sound/msm-dai-q6.h>
39#include <sound/apr_audio.h>
Joel Nidera1261942011-09-12 16:30:09 +030040#include <mach/msm_tsif.h>
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -070041#include <mach/msm_serial_hs_lite.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070042#include "clock.h"
43#include "devices.h"
44#include "devices-msm8x60.h"
45#include "footswitch.h"
Jeff Ohlstein7e668552011-10-06 16:17:25 -070046#include "msm_watchdog.h"
Praveen Chidambaram78499012011-11-01 17:15:17 -060047#include "rpm_log.h"
Praveen Chidambaram7a712232011-10-28 13:39:45 -060048#include "rpm_stats.h"
Stephen Boydeb819882011-08-29 14:46:30 -070049#include "pil-q6v4.h"
50#include "scm-pas.h"
Praveen Chidambaram5c8adf22012-02-23 18:44:37 -070051#include <mach/msm_dcvs.h>
Laura Abbott0577d7b2012-04-17 11:14:30 -070052#include <mach/iommu_domains.h>
Arun Menond4837f62012-08-20 15:25:50 -070053#include <mach/socinfo.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070054
55#ifdef CONFIG_MSM_MPM
Subhash Jadavani909e04f2012-04-12 10:52:50 +053056#include <mach/mpm.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070057#endif
58#ifdef CONFIG_MSM_DSPS
59#include <mach/msm_dsps.h>
60#endif
61
62
63/* Address of GSBI blocks */
64#define MSM_GSBI1_PHYS 0x16000000
65#define MSM_GSBI2_PHYS 0x16100000
66#define MSM_GSBI3_PHYS 0x16200000
67#define MSM_GSBI4_PHYS 0x16300000
68#define MSM_GSBI5_PHYS 0x16400000
69#define MSM_GSBI6_PHYS 0x16500000
70#define MSM_GSBI7_PHYS 0x16600000
71#define MSM_GSBI8_PHYS 0x1A000000
72#define MSM_GSBI9_PHYS 0x1A100000
73#define MSM_GSBI10_PHYS 0x1A200000
74#define MSM_GSBI11_PHYS 0x12440000
75#define MSM_GSBI12_PHYS 0x12480000
76
77#define MSM_UART2DM_PHYS (MSM_GSBI2_PHYS + 0x40000)
78#define MSM_UART5DM_PHYS (MSM_GSBI5_PHYS + 0x40000)
Mayank Rana9f51f582011-08-04 18:35:59 +053079#define MSM_UART6DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -070080#define MSM_UART8DM_PHYS (MSM_GSBI8_PHYS + 0x40000)
Mayank Ranae009c922012-03-22 03:02:06 +053081#define MSM_UART9DM_PHYS (MSM_GSBI9_PHYS + 0x40000)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070082
83/* GSBI QUP devices */
84#define MSM_GSBI1_QUP_PHYS (MSM_GSBI1_PHYS + 0x80000)
85#define MSM_GSBI2_QUP_PHYS (MSM_GSBI2_PHYS + 0x80000)
86#define MSM_GSBI3_QUP_PHYS (MSM_GSBI3_PHYS + 0x80000)
87#define MSM_GSBI4_QUP_PHYS (MSM_GSBI4_PHYS + 0x80000)
88#define MSM_GSBI5_QUP_PHYS (MSM_GSBI5_PHYS + 0x80000)
89#define MSM_GSBI6_QUP_PHYS (MSM_GSBI6_PHYS + 0x80000)
90#define MSM_GSBI7_QUP_PHYS (MSM_GSBI7_PHYS + 0x80000)
91#define MSM_GSBI8_QUP_PHYS (MSM_GSBI8_PHYS + 0x80000)
92#define MSM_GSBI9_QUP_PHYS (MSM_GSBI9_PHYS + 0x80000)
93#define MSM_GSBI10_QUP_PHYS (MSM_GSBI10_PHYS + 0x80000)
94#define MSM_GSBI11_QUP_PHYS (MSM_GSBI11_PHYS + 0x20000)
95#define MSM_GSBI12_QUP_PHYS (MSM_GSBI12_PHYS + 0x20000)
96#define MSM_QUP_SIZE SZ_4K
97
98#define MSM_PMIC1_SSBI_CMD_PHYS 0x00500000
99#define MSM_PMIC2_SSBI_CMD_PHYS 0x00C00000
100#define MSM_PMIC_SSBI_SIZE SZ_4K
101
Stepan Moskovchenkobe5b45a2011-10-17 19:33:34 -0700102#define MSM8960_HSUSB_PHYS 0x12500000
103#define MSM8960_HSUSB_SIZE SZ_4K
Anji Jonnala2a8bd312012-11-01 13:11:42 +0530104#define MSM8960_RPM_MASTER_STATS_BASE 0x10BB00
Stepan Moskovchenkobe5b45a2011-10-17 19:33:34 -0700105
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700106static struct resource resources_otg[] = {
107 {
108 .start = MSM8960_HSUSB_PHYS,
109 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE,
110 .flags = IORESOURCE_MEM,
111 },
112 {
113 .start = USB1_HS_IRQ,
114 .end = USB1_HS_IRQ,
115 .flags = IORESOURCE_IRQ,
116 },
117};
118
Stepan Moskovchenko14aa6492011-08-08 15:15:01 -0700119struct platform_device msm8960_device_otg = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700120 .name = "msm_otg",
121 .id = -1,
122 .num_resources = ARRAY_SIZE(resources_otg),
123 .resource = resources_otg,
124 .dev = {
125 .coherent_dma_mask = 0xffffffff,
126 },
127};
128
129static struct resource resources_hsusb[] = {
130 {
131 .start = MSM8960_HSUSB_PHYS,
132 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE,
133 .flags = IORESOURCE_MEM,
134 },
135 {
136 .start = USB1_HS_IRQ,
137 .end = USB1_HS_IRQ,
138 .flags = IORESOURCE_IRQ,
139 },
140};
141
Stepan Moskovchenko14aa6492011-08-08 15:15:01 -0700142struct platform_device msm8960_device_gadget_peripheral = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700143 .name = "msm_hsusb",
144 .id = -1,
145 .num_resources = ARRAY_SIZE(resources_hsusb),
146 .resource = resources_hsusb,
147 .dev = {
148 .coherent_dma_mask = 0xffffffff,
149 },
150};
151
152static struct resource resources_hsusb_host[] = {
153 {
154 .start = MSM8960_HSUSB_PHYS,
155 .end = MSM8960_HSUSB_PHYS + MSM8960_HSUSB_SIZE - 1,
156 .flags = IORESOURCE_MEM,
157 },
158 {
159 .start = USB1_HS_IRQ,
160 .end = USB1_HS_IRQ,
161 .flags = IORESOURCE_IRQ,
162 },
163};
164
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530165static u64 dma_mask = DMA_BIT_MASK(32);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700166struct platform_device msm_device_hsusb_host = {
167 .name = "msm_hsusb_host",
168 .id = -1,
169 .num_resources = ARRAY_SIZE(resources_hsusb_host),
170 .resource = resources_hsusb_host,
171 .dev = {
172 .dma_mask = &dma_mask,
173 .coherent_dma_mask = 0xffffffff,
174 },
175};
176
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530177static struct resource resources_hsic_host[] = {
178 {
Stepan Moskovchenko8e06ae62011-10-17 18:01:29 -0700179 .start = 0x12520000,
180 .end = 0x12520000 + SZ_4K - 1,
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530181 .flags = IORESOURCE_MEM,
182 },
183 {
184 .start = USB_HSIC_IRQ,
185 .end = USB_HSIC_IRQ,
186 .flags = IORESOURCE_IRQ,
187 },
Vamsi Krishna34f01582011-12-14 19:54:42 -0800188 {
189 .start = MSM_GPIO_TO_INT(69),
190 .end = MSM_GPIO_TO_INT(69),
191 .name = "peripheral_status_irq",
192 .flags = IORESOURCE_IRQ,
193 },
Vijayavardhan Vennapusaeb566482011-09-18 07:48:37 +0530194};
195
196struct platform_device msm_device_hsic_host = {
197 .name = "msm_hsic_host",
198 .id = -1,
199 .num_resources = ARRAY_SIZE(resources_hsic_host),
200 .resource = resources_hsic_host,
201 .dev = {
202 .dma_mask = &dma_mask,
203 .coherent_dma_mask = DMA_BIT_MASK(32),
204 },
205};
206
Matt Wagantallbf430eb2012-03-22 11:45:49 -0700207struct platform_device msm8960_device_acpuclk = {
208 .name = "acpuclk-8960",
209 .id = -1,
210};
211
Patrick Daly6578e0c2012-07-19 18:50:02 -0700212struct platform_device msm8960ab_device_acpuclk = {
213 .name = "acpuclk-8960ab",
214 .id = -1,
215};
216
Mona Hossain11c03ac2011-10-26 12:42:10 -0700217#define SHARED_IMEM_TZ_BASE 0x2a03f720
218static struct resource tzlog_resources[] = {
219 {
220 .start = SHARED_IMEM_TZ_BASE,
221 .end = SHARED_IMEM_TZ_BASE + SZ_4K - 1,
222 .flags = IORESOURCE_MEM,
223 },
224};
225
226struct platform_device msm_device_tz_log = {
227 .name = "tz_log",
228 .id = 0,
229 .num_resources = ARRAY_SIZE(tzlog_resources),
230 .resource = tzlog_resources,
231};
232
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700233static struct resource resources_uart_gsbi2[] = {
234 {
235 .start = MSM8960_GSBI2_UARTDM_IRQ,
236 .end = MSM8960_GSBI2_UARTDM_IRQ,
237 .flags = IORESOURCE_IRQ,
238 },
239 {
240 .start = MSM_UART2DM_PHYS,
241 .end = MSM_UART2DM_PHYS + PAGE_SIZE - 1,
242 .name = "uartdm_resource",
243 .flags = IORESOURCE_MEM,
244 },
245 {
246 .start = MSM_GSBI2_PHYS,
247 .end = MSM_GSBI2_PHYS + PAGE_SIZE - 1,
248 .name = "gsbi_resource",
249 .flags = IORESOURCE_MEM,
250 },
251};
252
253struct platform_device msm8960_device_uart_gsbi2 = {
254 .name = "msm_serial_hsl",
255 .id = 0,
256 .num_resources = ARRAY_SIZE(resources_uart_gsbi2),
257 .resource = resources_uart_gsbi2,
258};
Mayank Rana9f51f582011-08-04 18:35:59 +0530259/* GSBI 6 used into UARTDM Mode */
260static struct resource msm_uart_dm6_resources[] = {
261 {
262 .start = MSM_UART6DM_PHYS,
263 .end = MSM_UART6DM_PHYS + PAGE_SIZE - 1,
264 .name = "uartdm_resource",
265 .flags = IORESOURCE_MEM,
266 },
267 {
268 .start = GSBI6_UARTDM_IRQ,
269 .end = GSBI6_UARTDM_IRQ,
270 .flags = IORESOURCE_IRQ,
271 },
272 {
273 .start = MSM_GSBI6_PHYS,
274 .end = MSM_GSBI6_PHYS + 4 - 1,
275 .name = "gsbi_resource",
276 .flags = IORESOURCE_MEM,
277 },
278 {
279 .start = DMOV_HSUART_GSBI6_TX_CHAN,
280 .end = DMOV_HSUART_GSBI6_RX_CHAN,
281 .name = "uartdm_channels",
282 .flags = IORESOURCE_DMA,
283 },
284 {
285 .start = DMOV_HSUART_GSBI6_TX_CRCI,
286 .end = DMOV_HSUART_GSBI6_RX_CRCI,
287 .name = "uartdm_crci",
288 .flags = IORESOURCE_DMA,
289 },
290};
291static u64 msm_uart_dm6_dma_mask = DMA_BIT_MASK(32);
292struct platform_device msm_device_uart_dm6 = {
293 .name = "msm_serial_hs",
294 .id = 0,
295 .num_resources = ARRAY_SIZE(msm_uart_dm6_resources),
296 .resource = msm_uart_dm6_resources,
297 .dev = {
298 .dma_mask = &msm_uart_dm6_dma_mask,
299 .coherent_dma_mask = DMA_BIT_MASK(32),
300 },
301};
Mayank Rana1f02d952012-07-04 19:11:20 +0530302
303/* GSBI 8 used into UARTDM Mode */
304static struct resource msm_uart_dm8_resources[] = {
305 {
306 .start = MSM_UART8DM_PHYS,
307 .end = MSM_UART8DM_PHYS + PAGE_SIZE - 1,
308 .name = "uartdm_resource",
309 .flags = IORESOURCE_MEM,
310 },
311 {
312 .start = GSBI8_UARTDM_IRQ,
313 .end = GSBI8_UARTDM_IRQ,
314 .flags = IORESOURCE_IRQ,
315 },
316 {
317 .start = MSM_GSBI8_PHYS,
318 .end = MSM_GSBI8_PHYS + 4 - 1,
319 .name = "gsbi_resource",
320 .flags = IORESOURCE_MEM,
321 },
322 {
323 .start = DMOV_HSUART_GSBI8_TX_CHAN,
324 .end = DMOV_HSUART_GSBI8_RX_CHAN,
325 .name = "uartdm_channels",
326 .flags = IORESOURCE_DMA,
327 },
328 {
329 .start = DMOV_HSUART_GSBI8_TX_CRCI,
330 .end = DMOV_HSUART_GSBI8_RX_CRCI,
331 .name = "uartdm_crci",
332 .flags = IORESOURCE_DMA,
333 },
334};
335
336static u64 msm_uart_dm8_dma_mask = DMA_BIT_MASK(32);
337struct platform_device msm_device_uart_dm8 = {
338 .name = "msm_serial_hs",
339 .id = 2,
340 .num_resources = ARRAY_SIZE(msm_uart_dm8_resources),
341 .resource = msm_uart_dm8_resources,
342 .dev = {
343 .dma_mask = &msm_uart_dm8_dma_mask,
344 .coherent_dma_mask = DMA_BIT_MASK(32),
345 },
346};
347
Mayank Ranae009c922012-03-22 03:02:06 +0530348/*
349 * GSBI 9 used into UARTDM Mode
350 * For 8960 Fusion 2.2 Primary IPC
351 */
352static struct resource msm_uart_dm9_resources[] = {
353 {
354 .start = MSM_UART9DM_PHYS,
355 .end = MSM_UART9DM_PHYS + PAGE_SIZE - 1,
356 .name = "uartdm_resource",
357 .flags = IORESOURCE_MEM,
358 },
359 {
360 .start = GSBI9_UARTDM_IRQ,
361 .end = GSBI9_UARTDM_IRQ,
362 .flags = IORESOURCE_IRQ,
363 },
364 {
365 .start = MSM_GSBI9_PHYS,
366 .end = MSM_GSBI9_PHYS + 4 - 1,
367 .name = "gsbi_resource",
368 .flags = IORESOURCE_MEM,
369 },
370 {
371 .start = DMOV_HSUART_GSBI9_TX_CHAN,
372 .end = DMOV_HSUART_GSBI9_RX_CHAN,
373 .name = "uartdm_channels",
374 .flags = IORESOURCE_DMA,
375 },
376 {
377 .start = DMOV_HSUART_GSBI9_TX_CRCI,
378 .end = DMOV_HSUART_GSBI9_RX_CRCI,
379 .name = "uartdm_crci",
380 .flags = IORESOURCE_DMA,
381 },
382};
383static u64 msm_uart_dm9_dma_mask = DMA_BIT_MASK(32);
384struct platform_device msm_device_uart_dm9 = {
385 .name = "msm_serial_hs",
386 .id = 1,
387 .num_resources = ARRAY_SIZE(msm_uart_dm9_resources),
388 .resource = msm_uart_dm9_resources,
389 .dev = {
390 .dma_mask = &msm_uart_dm9_dma_mask,
391 .coherent_dma_mask = DMA_BIT_MASK(32),
392 },
393};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700394
395static struct resource resources_uart_gsbi5[] = {
396 {
397 .start = GSBI5_UARTDM_IRQ,
398 .end = GSBI5_UARTDM_IRQ,
399 .flags = IORESOURCE_IRQ,
400 },
401 {
402 .start = MSM_UART5DM_PHYS,
403 .end = MSM_UART5DM_PHYS + PAGE_SIZE - 1,
404 .name = "uartdm_resource",
405 .flags = IORESOURCE_MEM,
406 },
407 {
408 .start = MSM_GSBI5_PHYS,
409 .end = MSM_GSBI5_PHYS + PAGE_SIZE - 1,
410 .name = "gsbi_resource",
411 .flags = IORESOURCE_MEM,
412 },
413};
414
415struct platform_device msm8960_device_uart_gsbi5 = {
416 .name = "msm_serial_hsl",
417 .id = 0,
418 .num_resources = ARRAY_SIZE(resources_uart_gsbi5),
419 .resource = resources_uart_gsbi5,
420};
Stepan Moskovchenko2b4b1cd2012-03-29 18:21:04 -0700421
422static struct msm_serial_hslite_platform_data uart_gsbi8_pdata = {
423 .line = 0,
424};
425
426static struct resource resources_uart_gsbi8[] = {
427 {
428 .start = GSBI8_UARTDM_IRQ,
429 .end = GSBI8_UARTDM_IRQ,
430 .flags = IORESOURCE_IRQ,
431 },
432 {
433 .start = MSM_UART8DM_PHYS,
434 .end = MSM_UART8DM_PHYS + PAGE_SIZE - 1,
435 .name = "uartdm_resource",
436 .flags = IORESOURCE_MEM,
437 },
438 {
439 .start = MSM_GSBI8_PHYS,
440 .end = MSM_GSBI8_PHYS + PAGE_SIZE - 1,
441 .name = "gsbi_resource",
442 .flags = IORESOURCE_MEM,
443 },
444};
445
446struct platform_device msm8960_device_uart_gsbi8 = {
447 .name = "msm_serial_hsl",
448 .id = 1,
449 .num_resources = ARRAY_SIZE(resources_uart_gsbi8),
450 .resource = resources_uart_gsbi8,
451 .dev.platform_data = &uart_gsbi8_pdata,
452};
453
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700454/* MSM Video core device */
455#ifdef CONFIG_MSM_BUS_SCALING
456static struct msm_bus_vectors vidc_init_vectors[] = {
457 {
458 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
459 .dst = MSM_BUS_SLAVE_EBI_CH0,
460 .ab = 0,
461 .ib = 0,
462 },
463 {
464 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
465 .dst = MSM_BUS_SLAVE_EBI_CH0,
466 .ab = 0,
467 .ib = 0,
468 },
469 {
470 .src = MSM_BUS_MASTER_AMPSS_M0,
471 .dst = MSM_BUS_SLAVE_EBI_CH0,
472 .ab = 0,
473 .ib = 0,
474 },
475 {
476 .src = MSM_BUS_MASTER_AMPSS_M0,
477 .dst = MSM_BUS_SLAVE_EBI_CH0,
478 .ab = 0,
479 .ib = 0,
480 },
481};
482static struct msm_bus_vectors vidc_venc_vga_vectors[] = {
483 {
484 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
485 .dst = MSM_BUS_SLAVE_EBI_CH0,
486 .ab = 54525952,
487 .ib = 436207616,
488 },
489 {
490 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
491 .dst = MSM_BUS_SLAVE_EBI_CH0,
492 .ab = 72351744,
493 .ib = 289406976,
494 },
495 {
496 .src = MSM_BUS_MASTER_AMPSS_M0,
497 .dst = MSM_BUS_SLAVE_EBI_CH0,
498 .ab = 500000,
499 .ib = 1000000,
500 },
501 {
502 .src = MSM_BUS_MASTER_AMPSS_M0,
503 .dst = MSM_BUS_SLAVE_EBI_CH0,
504 .ab = 500000,
505 .ib = 1000000,
506 },
507};
508static struct msm_bus_vectors vidc_vdec_vga_vectors[] = {
509 {
510 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
511 .dst = MSM_BUS_SLAVE_EBI_CH0,
512 .ab = 40894464,
513 .ib = 327155712,
514 },
515 {
516 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
517 .dst = MSM_BUS_SLAVE_EBI_CH0,
518 .ab = 48234496,
519 .ib = 192937984,
520 },
521 {
522 .src = MSM_BUS_MASTER_AMPSS_M0,
523 .dst = MSM_BUS_SLAVE_EBI_CH0,
524 .ab = 500000,
525 .ib = 2000000,
526 },
527 {
528 .src = MSM_BUS_MASTER_AMPSS_M0,
529 .dst = MSM_BUS_SLAVE_EBI_CH0,
530 .ab = 500000,
531 .ib = 2000000,
532 },
533};
534static struct msm_bus_vectors vidc_venc_720p_vectors[] = {
535 {
536 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
537 .dst = MSM_BUS_SLAVE_EBI_CH0,
538 .ab = 163577856,
539 .ib = 1308622848,
540 },
541 {
542 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
543 .dst = MSM_BUS_SLAVE_EBI_CH0,
544 .ab = 219152384,
545 .ib = 876609536,
546 },
547 {
548 .src = MSM_BUS_MASTER_AMPSS_M0,
549 .dst = MSM_BUS_SLAVE_EBI_CH0,
550 .ab = 1750000,
551 .ib = 3500000,
552 },
553 {
554 .src = MSM_BUS_MASTER_AMPSS_M0,
555 .dst = MSM_BUS_SLAVE_EBI_CH0,
556 .ab = 1750000,
557 .ib = 3500000,
558 },
559};
560static struct msm_bus_vectors vidc_vdec_720p_vectors[] = {
561 {
562 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
563 .dst = MSM_BUS_SLAVE_EBI_CH0,
564 .ab = 121634816,
565 .ib = 973078528,
566 },
567 {
568 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
569 .dst = MSM_BUS_SLAVE_EBI_CH0,
570 .ab = 155189248,
571 .ib = 620756992,
572 },
573 {
574 .src = MSM_BUS_MASTER_AMPSS_M0,
575 .dst = MSM_BUS_SLAVE_EBI_CH0,
576 .ab = 1750000,
577 .ib = 7000000,
578 },
579 {
580 .src = MSM_BUS_MASTER_AMPSS_M0,
581 .dst = MSM_BUS_SLAVE_EBI_CH0,
582 .ab = 1750000,
583 .ib = 7000000,
584 },
585};
586static struct msm_bus_vectors vidc_venc_1080p_vectors[] = {
587 {
588 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
589 .dst = MSM_BUS_SLAVE_EBI_CH0,
590 .ab = 372244480,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700591 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700592 },
593 {
594 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
595 .dst = MSM_BUS_SLAVE_EBI_CH0,
596 .ab = 501219328,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700597 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700598 },
599 {
600 .src = MSM_BUS_MASTER_AMPSS_M0,
601 .dst = MSM_BUS_SLAVE_EBI_CH0,
602 .ab = 2500000,
603 .ib = 5000000,
604 },
605 {
606 .src = MSM_BUS_MASTER_AMPSS_M0,
607 .dst = MSM_BUS_SLAVE_EBI_CH0,
608 .ab = 2500000,
609 .ib = 5000000,
610 },
611};
612static struct msm_bus_vectors vidc_vdec_1080p_vectors[] = {
613 {
614 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
615 .dst = MSM_BUS_SLAVE_EBI_CH0,
616 .ab = 222298112,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700617 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700618 },
619 {
620 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
621 .dst = MSM_BUS_SLAVE_EBI_CH0,
622 .ab = 330301440,
Gopikrishnaiah Anandan3e6bdda2011-11-04 16:05:04 -0700623 .ib = 2560000000U,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700624 },
625 {
626 .src = MSM_BUS_MASTER_AMPSS_M0,
627 .dst = MSM_BUS_SLAVE_EBI_CH0,
628 .ab = 2500000,
629 .ib = 700000000,
630 },
631 {
632 .src = MSM_BUS_MASTER_AMPSS_M0,
633 .dst = MSM_BUS_SLAVE_EBI_CH0,
634 .ab = 2500000,
635 .ib = 10000000,
636 },
637};
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700638static struct msm_bus_vectors vidc_venc_1080p_turbo_vectors[] = {
639 {
640 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
641 .dst = MSM_BUS_SLAVE_EBI_CH0,
642 .ab = 222298112,
643 .ib = 3522000000U,
644 },
645 {
646 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
647 .dst = MSM_BUS_SLAVE_EBI_CH0,
648 .ab = 330301440,
649 .ib = 3522000000U,
650 },
651 {
652 .src = MSM_BUS_MASTER_AMPSS_M0,
653 .dst = MSM_BUS_SLAVE_EBI_CH0,
654 .ab = 2500000,
655 .ib = 700000000,
656 },
657 {
658 .src = MSM_BUS_MASTER_AMPSS_M0,
659 .dst = MSM_BUS_SLAVE_EBI_CH0,
660 .ab = 2500000,
661 .ib = 10000000,
662 },
663};
664static struct msm_bus_vectors vidc_vdec_1080p_turbo_vectors[] = {
665 {
666 .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
667 .dst = MSM_BUS_SLAVE_EBI_CH0,
668 .ab = 222298112,
669 .ib = 3522000000U,
670 },
671 {
672 .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
673 .dst = MSM_BUS_SLAVE_EBI_CH0,
674 .ab = 330301440,
675 .ib = 3522000000U,
676 },
677 {
678 .src = MSM_BUS_MASTER_AMPSS_M0,
679 .dst = MSM_BUS_SLAVE_EBI_CH0,
680 .ab = 2500000,
681 .ib = 700000000,
682 },
683 {
684 .src = MSM_BUS_MASTER_AMPSS_M0,
685 .dst = MSM_BUS_SLAVE_EBI_CH0,
686 .ab = 2500000,
687 .ib = 10000000,
688 },
689};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700690
691static struct msm_bus_paths vidc_bus_client_config[] = {
692 {
693 ARRAY_SIZE(vidc_init_vectors),
694 vidc_init_vectors,
695 },
696 {
697 ARRAY_SIZE(vidc_venc_vga_vectors),
698 vidc_venc_vga_vectors,
699 },
700 {
701 ARRAY_SIZE(vidc_vdec_vga_vectors),
702 vidc_vdec_vga_vectors,
703 },
704 {
705 ARRAY_SIZE(vidc_venc_720p_vectors),
706 vidc_venc_720p_vectors,
707 },
708 {
709 ARRAY_SIZE(vidc_vdec_720p_vectors),
710 vidc_vdec_720p_vectors,
711 },
712 {
713 ARRAY_SIZE(vidc_venc_1080p_vectors),
714 vidc_venc_1080p_vectors,
715 },
716 {
717 ARRAY_SIZE(vidc_vdec_1080p_vectors),
718 vidc_vdec_1080p_vectors,
719 },
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700720 {
721 ARRAY_SIZE(vidc_venc_1080p_turbo_vectors),
Arun Menond4837f62012-08-20 15:25:50 -0700722 vidc_venc_1080p_turbo_vectors,
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700723 },
724 {
725 ARRAY_SIZE(vidc_vdec_1080p_turbo_vectors),
726 vidc_vdec_1080p_turbo_vectors,
727 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700728};
729
730static struct msm_bus_scale_pdata vidc_bus_client_data = {
731 vidc_bus_client_config,
732 ARRAY_SIZE(vidc_bus_client_config),
733 .name = "vidc",
734};
Arun Menond4837f62012-08-20 15:25:50 -0700735
736static struct msm_bus_vectors vidc_pro_init_vectors[] = {
737 {
738 .src = MSM_BUS_MASTER_VIDEO_ENC,
739 .dst = MSM_BUS_SLAVE_EBI_CH0,
740 .ab = 0,
741 .ib = 0,
742 },
743 {
744 .src = MSM_BUS_MASTER_VIDEO_DEC,
745 .dst = MSM_BUS_SLAVE_EBI_CH0,
746 .ab = 0,
747 .ib = 0,
748 },
749 {
750 .src = MSM_BUS_MASTER_AMPSS_M0,
751 .dst = MSM_BUS_SLAVE_EBI_CH0,
752 .ab = 0,
753 .ib = 0,
754 },
755 {
756 .src = MSM_BUS_MASTER_AMPSS_M0,
757 .dst = MSM_BUS_SLAVE_EBI_CH0,
758 .ab = 0,
759 .ib = 0,
760 },
761};
762static struct msm_bus_vectors vidc_pro_venc_vga_vectors[] = {
763 {
764 .src = MSM_BUS_MASTER_VIDEO_ENC,
765 .dst = MSM_BUS_SLAVE_EBI_CH0,
766 .ab = 54525952,
767 .ib = 436207616,
768 },
769 {
770 .src = MSM_BUS_MASTER_VIDEO_DEC,
771 .dst = MSM_BUS_SLAVE_EBI_CH0,
772 .ab = 72351744,
773 .ib = 289406976,
774 },
775 {
776 .src = MSM_BUS_MASTER_AMPSS_M0,
777 .dst = MSM_BUS_SLAVE_EBI_CH0,
778 .ab = 500000,
779 .ib = 1000000,
780 },
781 {
782 .src = MSM_BUS_MASTER_AMPSS_M0,
783 .dst = MSM_BUS_SLAVE_EBI_CH0,
784 .ab = 500000,
785 .ib = 1000000,
786 },
787};
788static struct msm_bus_vectors vidc_pro_vdec_vga_vectors[] = {
789 {
790 .src = MSM_BUS_MASTER_VIDEO_ENC,
791 .dst = MSM_BUS_SLAVE_EBI_CH0,
792 .ab = 40894464,
793 .ib = 327155712,
794 },
795 {
796 .src = MSM_BUS_MASTER_VIDEO_DEC,
797 .dst = MSM_BUS_SLAVE_EBI_CH0,
798 .ab = 48234496,
799 .ib = 192937984,
800 },
801 {
802 .src = MSM_BUS_MASTER_AMPSS_M0,
803 .dst = MSM_BUS_SLAVE_EBI_CH0,
804 .ab = 500000,
805 .ib = 2000000,
806 },
807 {
808 .src = MSM_BUS_MASTER_AMPSS_M0,
809 .dst = MSM_BUS_SLAVE_EBI_CH0,
810 .ab = 500000,
811 .ib = 2000000,
812 },
813};
814static struct msm_bus_vectors vidc_pro_venc_720p_vectors[] = {
815 {
816 .src = MSM_BUS_MASTER_VIDEO_ENC,
817 .dst = MSM_BUS_SLAVE_EBI_CH0,
818 .ab = 163577856,
819 .ib = 1308622848,
820 },
821 {
822 .src = MSM_BUS_MASTER_VIDEO_DEC,
823 .dst = MSM_BUS_SLAVE_EBI_CH0,
824 .ab = 219152384,
825 .ib = 876609536,
826 },
827 {
828 .src = MSM_BUS_MASTER_AMPSS_M0,
829 .dst = MSM_BUS_SLAVE_EBI_CH0,
830 .ab = 1750000,
831 .ib = 3500000,
832 },
833 {
834 .src = MSM_BUS_MASTER_AMPSS_M0,
835 .dst = MSM_BUS_SLAVE_EBI_CH0,
836 .ab = 1750000,
837 .ib = 3500000,
838 },
839};
840static struct msm_bus_vectors vidc_pro_vdec_720p_vectors[] = {
841 {
842 .src = MSM_BUS_MASTER_VIDEO_ENC,
843 .dst = MSM_BUS_SLAVE_EBI_CH0,
844 .ab = 121634816,
845 .ib = 973078528,
846 },
847 {
848 .src = MSM_BUS_MASTER_VIDEO_DEC,
849 .dst = MSM_BUS_SLAVE_EBI_CH0,
850 .ab = 155189248,
851 .ib = 620756992,
852 },
853 {
854 .src = MSM_BUS_MASTER_AMPSS_M0,
855 .dst = MSM_BUS_SLAVE_EBI_CH0,
856 .ab = 1750000,
857 .ib = 7000000,
858 },
859 {
860 .src = MSM_BUS_MASTER_AMPSS_M0,
861 .dst = MSM_BUS_SLAVE_EBI_CH0,
862 .ab = 1750000,
863 .ib = 7000000,
864 },
865};
866static struct msm_bus_vectors vidc_pro_venc_1080p_vectors[] = {
867 {
868 .src = MSM_BUS_MASTER_VIDEO_ENC,
869 .dst = MSM_BUS_SLAVE_EBI_CH0,
870 .ab = 372244480,
871 .ib = 2560000000U,
872 },
873 {
874 .src = MSM_BUS_MASTER_VIDEO_DEC,
875 .dst = MSM_BUS_SLAVE_EBI_CH0,
876 .ab = 501219328,
877 .ib = 2560000000U,
878 },
879 {
880 .src = MSM_BUS_MASTER_AMPSS_M0,
881 .dst = MSM_BUS_SLAVE_EBI_CH0,
882 .ab = 2500000,
883 .ib = 5000000,
884 },
885 {
886 .src = MSM_BUS_MASTER_AMPSS_M0,
887 .dst = MSM_BUS_SLAVE_EBI_CH0,
888 .ab = 2500000,
889 .ib = 5000000,
890 },
891};
892static struct msm_bus_vectors vidc_pro_vdec_1080p_vectors[] = {
893 {
894 .src = MSM_BUS_MASTER_VIDEO_ENC,
895 .dst = MSM_BUS_SLAVE_EBI_CH0,
896 .ab = 222298112,
897 .ib = 2560000000U,
898 },
899 {
900 .src = MSM_BUS_MASTER_VIDEO_DEC,
901 .dst = MSM_BUS_SLAVE_EBI_CH0,
902 .ab = 330301440,
903 .ib = 2560000000U,
904 },
905 {
906 .src = MSM_BUS_MASTER_AMPSS_M0,
907 .dst = MSM_BUS_SLAVE_EBI_CH0,
908 .ab = 2500000,
909 .ib = 700000000,
910 },
911 {
912 .src = MSM_BUS_MASTER_AMPSS_M0,
913 .dst = MSM_BUS_SLAVE_EBI_CH0,
914 .ab = 2500000,
915 .ib = 10000000,
916 },
917};
918static struct msm_bus_vectors vidc_pro_venc_1080p_turbo_vectors[] = {
919 {
920 .src = MSM_BUS_MASTER_VIDEO_ENC,
921 .dst = MSM_BUS_SLAVE_EBI_CH0,
922 .ab = 222298112,
923 .ib = 3522000000U,
924 },
925 {
926 .src = MSM_BUS_MASTER_VIDEO_DEC,
927 .dst = MSM_BUS_SLAVE_EBI_CH0,
928 .ab = 330301440,
929 .ib = 3522000000U,
930 },
931 {
932 .src = MSM_BUS_MASTER_AMPSS_M0,
933 .dst = MSM_BUS_SLAVE_EBI_CH0,
934 .ab = 2500000,
935 .ib = 700000000,
936 },
937 {
938 .src = MSM_BUS_MASTER_AMPSS_M0,
939 .dst = MSM_BUS_SLAVE_EBI_CH0,
940 .ab = 2500000,
941 .ib = 10000000,
942 },
943};
944static struct msm_bus_vectors vidc_pro_vdec_1080p_turbo_vectors[] = {
945 {
946 .src = MSM_BUS_MASTER_VIDEO_ENC,
947 .dst = MSM_BUS_SLAVE_EBI_CH0,
948 .ab = 222298112,
949 .ib = 3522000000U,
950 },
951 {
952 .src = MSM_BUS_MASTER_VIDEO_DEC,
953 .dst = MSM_BUS_SLAVE_EBI_CH0,
954 .ab = 330301440,
955 .ib = 3522000000U,
956 },
957 {
958 .src = MSM_BUS_MASTER_AMPSS_M0,
959 .dst = MSM_BUS_SLAVE_EBI_CH0,
960 .ab = 2500000,
961 .ib = 700000000,
962 },
963 {
964 .src = MSM_BUS_MASTER_AMPSS_M0,
965 .dst = MSM_BUS_SLAVE_EBI_CH0,
966 .ab = 2500000,
967 .ib = 10000000,
968 },
969};
970
971static struct msm_bus_paths vidc_pro_bus_client_config[] = {
972 {
973 ARRAY_SIZE(vidc_pro_init_vectors),
974 vidc_pro_init_vectors,
975 },
976 {
977 ARRAY_SIZE(vidc_pro_venc_vga_vectors),
978 vidc_pro_venc_vga_vectors,
979 },
980 {
981 ARRAY_SIZE(vidc_pro_vdec_vga_vectors),
982 vidc_pro_vdec_vga_vectors,
983 },
984 {
985 ARRAY_SIZE(vidc_pro_venc_720p_vectors),
986 vidc_pro_venc_720p_vectors,
987 },
988 {
989 ARRAY_SIZE(vidc_pro_vdec_720p_vectors),
990 vidc_pro_vdec_720p_vectors,
991 },
992 {
993 ARRAY_SIZE(vidc_pro_venc_1080p_vectors),
994 vidc_pro_venc_1080p_vectors,
995 },
996 {
997 ARRAY_SIZE(vidc_pro_vdec_1080p_vectors),
998 vidc_pro_vdec_1080p_vectors,
999 },
1000 {
1001 ARRAY_SIZE(vidc_pro_venc_1080p_turbo_vectors),
1002 vidc_pro_venc_1080p_turbo_vectors,
1003 },
1004 {
1005 ARRAY_SIZE(vidc_vdec_1080p_turbo_vectors),
1006 vidc_pro_vdec_1080p_turbo_vectors,
1007 },
1008};
1009
1010static struct msm_bus_scale_pdata vidc_pro_bus_client_data = {
1011 vidc_pro_bus_client_config,
1012 ARRAY_SIZE(vidc_bus_client_config),
1013 .name = "vidc",
1014};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001015#endif
1016
Mona Hossain9c430e32011-07-27 11:04:47 -07001017#ifdef CONFIG_HW_RANDOM_MSM
1018/* PRNG device */
1019#define MSM_PRNG_PHYS 0x1A500000
1020static struct resource rng_resources = {
1021 .flags = IORESOURCE_MEM,
1022 .start = MSM_PRNG_PHYS,
1023 .end = MSM_PRNG_PHYS + SZ_512 - 1,
1024};
1025
1026struct platform_device msm_device_rng = {
1027 .name = "msm_rng",
1028 .id = 0,
1029 .num_resources = 1,
1030 .resource = &rng_resources,
1031};
1032#endif
1033
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001034#define MSM_VIDC_BASE_PHYS 0x04400000
1035#define MSM_VIDC_BASE_SIZE 0x00100000
1036
1037static struct resource msm_device_vidc_resources[] = {
1038 {
1039 .start = MSM_VIDC_BASE_PHYS,
1040 .end = MSM_VIDC_BASE_PHYS + MSM_VIDC_BASE_SIZE - 1,
1041 .flags = IORESOURCE_MEM,
1042 },
1043 {
1044 .start = VCODEC_IRQ,
1045 .end = VCODEC_IRQ,
1046 .flags = IORESOURCE_IRQ,
1047 },
1048};
1049
1050struct msm_vidc_platform_data vidc_platform_data = {
1051#ifdef CONFIG_MSM_BUS_SCALING
1052 .vidc_bus_client_pdata = &vidc_bus_client_data,
1053#endif
Deepak Koturcb4f6722011-10-31 14:06:57 -07001054#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
Olav Hauganb5be7992011-11-18 14:29:02 -08001055 .memtype = ION_CP_MM_HEAP_ID,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001056 .enable_ion = 1,
Deepak kotur5f10b272012-03-15 22:01:39 -07001057 .cp_enabled = 1,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001058#else
Deepak Kotur12301a72011-11-09 18:30:29 -08001059 .memtype = MEMTYPE_EBI1,
Deepak Koturcb4f6722011-10-31 14:06:57 -07001060 .enable_ion = 0,
1061#endif
Deepika Pepakayalabebc7622011-12-01 15:13:43 -08001062 .disable_dmx = 0,
Rajeshwar Kurapatyc155c352011-12-17 06:35:32 +05301063 .disable_fullhd = 0,
Mohan Kumar Gubbihalli Lachma Naiked9dc912012-03-01 19:11:14 -08001064 .cont_mode_dpb_count = 18,
Riaz Rahaman84f8c682012-05-30 13:32:10 +05301065 .fw_addr = 0x9fe00000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001066};
1067
1068struct platform_device msm_device_vidc = {
1069 .name = "msm_vidc",
1070 .id = 0,
1071 .num_resources = ARRAY_SIZE(msm_device_vidc_resources),
1072 .resource = msm_device_vidc_resources,
1073 .dev = {
1074 .platform_data = &vidc_platform_data,
1075 },
1076};
1077
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001078#define MSM_SDC1_BASE 0x12400000
1079#define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
1080#define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
1081#define MSM_SDC2_BASE 0x12140000
1082#define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
1083#define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001084#define MSM_SDC3_BASE 0x12180000
1085#define MSM_SDC3_DML_BASE (MSM_SDC3_BASE + 0x800)
1086#define MSM_SDC3_BAM_BASE (MSM_SDC3_BASE + 0x2000)
1087#define MSM_SDC4_BASE 0x121C0000
1088#define MSM_SDC4_DML_BASE (MSM_SDC4_BASE + 0x800)
1089#define MSM_SDC4_BAM_BASE (MSM_SDC4_BASE + 0x2000)
1090#define MSM_SDC5_BASE 0x12200000
1091#define MSM_SDC5_DML_BASE (MSM_SDC5_BASE + 0x800)
1092#define MSM_SDC5_BAM_BASE (MSM_SDC5_BASE + 0x2000)
1093
1094static struct resource resources_sdc1[] = {
1095 {
1096 .name = "core_mem",
1097 .flags = IORESOURCE_MEM,
1098 .start = MSM_SDC1_BASE,
1099 .end = MSM_SDC1_DML_BASE - 1,
1100 },
1101 {
1102 .name = "core_irq",
1103 .flags = IORESOURCE_IRQ,
1104 .start = SDC1_IRQ_0,
1105 .end = SDC1_IRQ_0
1106 },
1107#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1108 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301109 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001110 .start = MSM_SDC1_DML_BASE,
1111 .end = MSM_SDC1_BAM_BASE - 1,
1112 .flags = IORESOURCE_MEM,
1113 },
1114 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301115 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001116 .start = MSM_SDC1_BAM_BASE,
1117 .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
1118 .flags = IORESOURCE_MEM,
1119 },
1120 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301121 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001122 .start = SDC1_BAM_IRQ,
1123 .end = SDC1_BAM_IRQ,
1124 .flags = IORESOURCE_IRQ,
1125 },
1126#endif
1127};
1128
1129static struct resource resources_sdc2[] = {
1130 {
1131 .name = "core_mem",
1132 .flags = IORESOURCE_MEM,
1133 .start = MSM_SDC2_BASE,
1134 .end = MSM_SDC2_DML_BASE - 1,
1135 },
1136 {
1137 .name = "core_irq",
1138 .flags = IORESOURCE_IRQ,
1139 .start = SDC2_IRQ_0,
1140 .end = SDC2_IRQ_0
1141 },
1142#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1143 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301144 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001145 .start = MSM_SDC2_DML_BASE,
1146 .end = MSM_SDC2_BAM_BASE - 1,
1147 .flags = IORESOURCE_MEM,
1148 },
1149 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301150 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001151 .start = MSM_SDC2_BAM_BASE,
1152 .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
1153 .flags = IORESOURCE_MEM,
1154 },
1155 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301156 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001157 .start = SDC2_BAM_IRQ,
1158 .end = SDC2_BAM_IRQ,
1159 .flags = IORESOURCE_IRQ,
1160 },
1161#endif
1162};
1163
1164static struct resource resources_sdc3[] = {
1165 {
1166 .name = "core_mem",
1167 .flags = IORESOURCE_MEM,
1168 .start = MSM_SDC3_BASE,
1169 .end = MSM_SDC3_DML_BASE - 1,
1170 },
1171 {
1172 .name = "core_irq",
1173 .flags = IORESOURCE_IRQ,
1174 .start = SDC3_IRQ_0,
1175 .end = SDC3_IRQ_0
1176 },
1177#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1178 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301179 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001180 .start = MSM_SDC3_DML_BASE,
1181 .end = MSM_SDC3_BAM_BASE - 1,
1182 .flags = IORESOURCE_MEM,
1183 },
1184 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301185 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001186 .start = MSM_SDC3_BAM_BASE,
1187 .end = MSM_SDC3_BAM_BASE + (2 * SZ_4K) - 1,
1188 .flags = IORESOURCE_MEM,
1189 },
1190 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301191 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001192 .start = SDC3_BAM_IRQ,
1193 .end = SDC3_BAM_IRQ,
1194 .flags = IORESOURCE_IRQ,
1195 },
1196#endif
1197};
1198
1199static struct resource resources_sdc4[] = {
1200 {
1201 .name = "core_mem",
1202 .flags = IORESOURCE_MEM,
1203 .start = MSM_SDC4_BASE,
1204 .end = MSM_SDC4_DML_BASE - 1,
1205 },
1206 {
1207 .name = "core_irq",
1208 .flags = IORESOURCE_IRQ,
1209 .start = SDC4_IRQ_0,
1210 .end = SDC4_IRQ_0
1211 },
1212#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1213 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301214 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001215 .start = MSM_SDC4_DML_BASE,
1216 .end = MSM_SDC4_BAM_BASE - 1,
1217 .flags = IORESOURCE_MEM,
1218 },
1219 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301220 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001221 .start = MSM_SDC4_BAM_BASE,
1222 .end = MSM_SDC4_BAM_BASE + (2 * SZ_4K) - 1,
1223 .flags = IORESOURCE_MEM,
1224 },
1225 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301226 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001227 .start = SDC4_BAM_IRQ,
1228 .end = SDC4_BAM_IRQ,
1229 .flags = IORESOURCE_IRQ,
1230 },
1231#endif
1232};
1233
1234static struct resource resources_sdc5[] = {
1235 {
1236 .name = "core_mem",
1237 .flags = IORESOURCE_MEM,
1238 .start = MSM_SDC5_BASE,
1239 .end = MSM_SDC5_DML_BASE - 1,
1240 },
1241 {
1242 .name = "core_irq",
1243 .flags = IORESOURCE_IRQ,
1244 .start = SDC5_IRQ_0,
1245 .end = SDC5_IRQ_0
1246 },
1247#ifdef CONFIG_MMC_MSM_SPS_SUPPORT
1248 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301249 .name = "dml_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001250 .start = MSM_SDC5_DML_BASE,
1251 .end = MSM_SDC5_BAM_BASE - 1,
1252 .flags = IORESOURCE_MEM,
1253 },
1254 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301255 .name = "bam_mem",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001256 .start = MSM_SDC5_BAM_BASE,
1257 .end = MSM_SDC5_BAM_BASE + (2 * SZ_4K) - 1,
1258 .flags = IORESOURCE_MEM,
1259 },
1260 {
Sujit Reddy Thumma1dfac2c2012-07-30 10:15:39 +05301261 .name = "bam_irq",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001262 .start = SDC5_BAM_IRQ,
1263 .end = SDC5_BAM_IRQ,
1264 .flags = IORESOURCE_IRQ,
1265 },
1266#endif
1267};
1268
1269struct platform_device msm_device_sdc1 = {
1270 .name = "msm_sdcc",
1271 .id = 1,
1272 .num_resources = ARRAY_SIZE(resources_sdc1),
1273 .resource = resources_sdc1,
1274 .dev = {
1275 .coherent_dma_mask = 0xffffffff,
1276 },
1277};
1278
1279struct platform_device msm_device_sdc2 = {
1280 .name = "msm_sdcc",
1281 .id = 2,
1282 .num_resources = ARRAY_SIZE(resources_sdc2),
1283 .resource = resources_sdc2,
1284 .dev = {
1285 .coherent_dma_mask = 0xffffffff,
1286 },
1287};
1288
1289struct platform_device msm_device_sdc3 = {
1290 .name = "msm_sdcc",
1291 .id = 3,
1292 .num_resources = ARRAY_SIZE(resources_sdc3),
1293 .resource = resources_sdc3,
1294 .dev = {
1295 .coherent_dma_mask = 0xffffffff,
1296 },
1297};
1298
1299struct platform_device msm_device_sdc4 = {
1300 .name = "msm_sdcc",
1301 .id = 4,
1302 .num_resources = ARRAY_SIZE(resources_sdc4),
1303 .resource = resources_sdc4,
1304 .dev = {
1305 .coherent_dma_mask = 0xffffffff,
1306 },
1307};
1308
1309struct platform_device msm_device_sdc5 = {
1310 .name = "msm_sdcc",
1311 .id = 5,
1312 .num_resources = ARRAY_SIZE(resources_sdc5),
1313 .resource = resources_sdc5,
1314 .dev = {
1315 .coherent_dma_mask = 0xffffffff,
1316 },
1317};
1318
Stephen Boydeb819882011-08-29 14:46:30 -07001319#define MSM_LPASS_QDSP6SS_PHYS 0x28800000
1320#define SFAB_LPASS_Q6_ACLK_CTL (MSM_CLK_CTL_BASE + 0x23A0)
1321
1322static struct resource msm_8960_q6_lpass_resources[] = {
1323 {
1324 .start = MSM_LPASS_QDSP6SS_PHYS,
1325 .end = MSM_LPASS_QDSP6SS_PHYS + SZ_256 - 1,
1326 .flags = IORESOURCE_MEM,
1327 },
1328};
1329
1330static struct pil_q6v4_pdata msm_8960_q6_lpass_data = {
1331 .strap_tcm_base = 0x01460000,
1332 .strap_ahb_upper = 0x00290000,
1333 .strap_ahb_lower = 0x00000280,
1334 .aclk_reg = SFAB_LPASS_Q6_ACLK_CTL,
1335 .name = "q6",
1336 .pas_id = PAS_Q6,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001337 .bus_port = MSM_BUS_MASTER_LPASS_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001338};
1339
1340struct platform_device msm_8960_q6_lpass = {
1341 .name = "pil_qdsp6v4",
1342 .id = 0,
1343 .num_resources = ARRAY_SIZE(msm_8960_q6_lpass_resources),
1344 .resource = msm_8960_q6_lpass_resources,
1345 .dev.platform_data = &msm_8960_q6_lpass_data,
1346};
1347
1348#define MSM_MSS_ENABLE_PHYS 0x08B00000
1349#define MSM_FW_QDSP6SS_PHYS 0x08800000
1350#define MSS_Q6FW_JTAG_CLK_CTL (MSM_CLK_CTL_BASE + 0x2C6C)
1351#define SFAB_MSS_Q6_FW_ACLK_CTL (MSM_CLK_CTL_BASE + 0x2044)
1352
1353static struct resource msm_8960_q6_mss_fw_resources[] = {
1354 {
1355 .start = MSM_FW_QDSP6SS_PHYS,
1356 .end = MSM_FW_QDSP6SS_PHYS + SZ_256 - 1,
1357 .flags = IORESOURCE_MEM,
1358 },
1359 {
1360 .start = MSM_MSS_ENABLE_PHYS,
1361 .end = MSM_MSS_ENABLE_PHYS + 4 - 1,
1362 .flags = IORESOURCE_MEM,
1363 },
1364};
1365
1366static struct pil_q6v4_pdata msm_8960_q6_mss_fw_data = {
1367 .strap_tcm_base = 0x00400000,
1368 .strap_ahb_upper = 0x00090000,
1369 .strap_ahb_lower = 0x00000080,
1370 .aclk_reg = SFAB_MSS_Q6_FW_ACLK_CTL,
1371 .jtag_clk_reg = MSS_Q6FW_JTAG_CLK_CTL,
1372 .name = "modem_fw",
1373 .depends = "q6",
1374 .pas_id = PAS_MODEM_FW,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001375 .bus_port = MSM_BUS_MASTER_MSS_FW_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001376};
1377
1378struct platform_device msm_8960_q6_mss_fw = {
1379 .name = "pil_qdsp6v4",
1380 .id = 1,
1381 .num_resources = ARRAY_SIZE(msm_8960_q6_mss_fw_resources),
1382 .resource = msm_8960_q6_mss_fw_resources,
1383 .dev.platform_data = &msm_8960_q6_mss_fw_data,
1384};
1385
1386#define MSM_SW_QDSP6SS_PHYS 0x08900000
1387#define SFAB_MSS_Q6_SW_ACLK_CTL (MSM_CLK_CTL_BASE + 0x2040)
1388#define MSS_Q6SW_JTAG_CLK_CTL (MSM_CLK_CTL_BASE + 0x2C68)
1389
1390static struct resource msm_8960_q6_mss_sw_resources[] = {
1391 {
1392 .start = MSM_SW_QDSP6SS_PHYS,
1393 .end = MSM_SW_QDSP6SS_PHYS + SZ_256 - 1,
1394 .flags = IORESOURCE_MEM,
1395 },
1396 {
1397 .start = MSM_MSS_ENABLE_PHYS,
1398 .end = MSM_MSS_ENABLE_PHYS + 4 - 1,
1399 .flags = IORESOURCE_MEM,
1400 },
1401};
1402
1403static struct pil_q6v4_pdata msm_8960_q6_mss_sw_data = {
1404 .strap_tcm_base = 0x00420000,
1405 .strap_ahb_upper = 0x00090000,
1406 .strap_ahb_lower = 0x00000080,
1407 .aclk_reg = SFAB_MSS_Q6_SW_ACLK_CTL,
1408 .jtag_clk_reg = MSS_Q6SW_JTAG_CLK_CTL,
1409 .name = "modem",
1410 .depends = "modem_fw",
1411 .pas_id = PAS_MODEM_SW,
Matt Wagantall6e4aafb2011-09-09 17:53:54 -07001412 .bus_port = MSM_BUS_MASTER_MSS_SW_PROC,
Stephen Boydeb819882011-08-29 14:46:30 -07001413};
1414
1415struct platform_device msm_8960_q6_mss_sw = {
1416 .name = "pil_qdsp6v4",
1417 .id = 2,
1418 .num_resources = ARRAY_SIZE(msm_8960_q6_mss_sw_resources),
1419 .resource = msm_8960_q6_mss_sw_resources,
1420 .dev.platform_data = &msm_8960_q6_mss_sw_data,
1421};
1422
Stephen Boyd322a9922011-09-20 01:05:54 -07001423static struct resource msm_8960_riva_resources[] = {
1424 {
1425 .start = 0x03204000,
1426 .end = 0x03204000 + SZ_256 - 1,
1427 .flags = IORESOURCE_MEM,
1428 },
1429};
1430
1431struct platform_device msm_8960_riva = {
1432 .name = "pil_riva",
1433 .id = -1,
1434 .num_resources = ARRAY_SIZE(msm_8960_riva_resources),
1435 .resource = msm_8960_riva_resources,
1436};
1437
Stephen Boydd89eebe2011-09-28 23:28:11 -07001438struct platform_device msm_pil_tzapps = {
1439 .name = "pil_tzapps",
1440 .id = -1,
1441};
1442
Stephen Boyd25c4a0b2011-09-20 00:12:36 -07001443struct platform_device msm_pil_dsps = {
1444 .name = "pil_dsps",
1445 .id = -1,
1446 .dev.platform_data = "dsps",
1447};
1448
Stephen Boyd7b973de2012-03-09 12:26:16 -08001449struct platform_device msm_pil_vidc = {
1450 .name = "pil_vidc",
1451 .id = -1,
1452};
1453
Eric Holmberg023d25c2012-03-01 12:27:55 -07001454static struct resource smd_resource[] = {
1455 {
1456 .name = "a9_m2a_0",
1457 .start = INT_A9_M2A_0,
1458 .flags = IORESOURCE_IRQ,
1459 },
1460 {
1461 .name = "a9_m2a_5",
1462 .start = INT_A9_M2A_5,
1463 .flags = IORESOURCE_IRQ,
1464 },
1465 {
1466 .name = "adsp_a11",
1467 .start = INT_ADSP_A11,
1468 .flags = IORESOURCE_IRQ,
1469 },
1470 {
1471 .name = "adsp_a11_smsm",
1472 .start = INT_ADSP_A11_SMSM,
1473 .flags = IORESOURCE_IRQ,
1474 },
1475 {
1476 .name = "dsps_a11",
1477 .start = INT_DSPS_A11,
1478 .flags = IORESOURCE_IRQ,
1479 },
1480 {
1481 .name = "dsps_a11_smsm",
1482 .start = INT_DSPS_A11_SMSM,
1483 .flags = IORESOURCE_IRQ,
1484 },
1485 {
1486 .name = "wcnss_a11",
1487 .start = INT_WCNSS_A11,
1488 .flags = IORESOURCE_IRQ,
1489 },
1490 {
1491 .name = "wcnss_a11_smsm",
1492 .start = INT_WCNSS_A11_SMSM,
1493 .flags = IORESOURCE_IRQ,
1494 },
1495};
1496
1497static struct smd_subsystem_config smd_config_list[] = {
1498 {
1499 .irq_config_id = SMD_MODEM,
1500 .subsys_name = "modem",
1501 .edge = SMD_APPS_MODEM,
1502
1503 .smd_int.irq_name = "a9_m2a_0",
1504 .smd_int.flags = IRQF_TRIGGER_RISING,
1505 .smd_int.irq_id = -1,
1506 .smd_int.device_name = "smd_dev",
1507 .smd_int.dev_id = 0,
1508 .smd_int.out_bit_pos = 1 << 3,
1509 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1510 .smd_int.out_offset = 0x8,
1511
1512 .smsm_int.irq_name = "a9_m2a_5",
1513 .smsm_int.flags = IRQF_TRIGGER_RISING,
1514 .smsm_int.irq_id = -1,
1515 .smsm_int.device_name = "smd_smsm",
1516 .smsm_int.dev_id = 0,
1517 .smsm_int.out_bit_pos = 1 << 4,
1518 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1519 .smsm_int.out_offset = 0x8,
1520 },
1521 {
1522 .irq_config_id = SMD_Q6,
1523 .subsys_name = "q6",
1524 .edge = SMD_APPS_QDSP,
1525
1526 .smd_int.irq_name = "adsp_a11",
1527 .smd_int.flags = IRQF_TRIGGER_RISING,
1528 .smd_int.irq_id = -1,
1529 .smd_int.device_name = "smd_dev",
1530 .smd_int.dev_id = 0,
1531 .smd_int.out_bit_pos = 1 << 15,
1532 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1533 .smd_int.out_offset = 0x8,
1534
1535 .smsm_int.irq_name = "adsp_a11_smsm",
1536 .smsm_int.flags = IRQF_TRIGGER_RISING,
1537 .smsm_int.irq_id = -1,
1538 .smsm_int.device_name = "smd_smsm",
1539 .smsm_int.dev_id = 0,
1540 .smsm_int.out_bit_pos = 1 << 14,
1541 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1542 .smsm_int.out_offset = 0x8,
1543 },
1544 {
1545 .irq_config_id = SMD_DSPS,
1546 .subsys_name = "dsps",
1547 .edge = SMD_APPS_DSPS,
1548
1549 .smd_int.irq_name = "dsps_a11",
1550 .smd_int.flags = IRQF_TRIGGER_RISING,
1551 .smd_int.irq_id = -1,
1552 .smd_int.device_name = "smd_dev",
1553 .smd_int.dev_id = 0,
1554 .smd_int.out_bit_pos = 1,
1555 .smd_int.out_base = (void __iomem *)MSM_SIC_NON_SECURE_BASE,
1556 .smd_int.out_offset = 0x4080,
1557
1558 .smsm_int.irq_name = "dsps_a11_smsm",
1559 .smsm_int.flags = IRQF_TRIGGER_RISING,
1560 .smsm_int.irq_id = -1,
1561 .smsm_int.device_name = "smd_smsm",
1562 .smsm_int.dev_id = 0,
1563 .smsm_int.out_bit_pos = 1,
1564 .smsm_int.out_base = (void __iomem *)MSM_SIC_NON_SECURE_BASE,
1565 .smsm_int.out_offset = 0x4094,
1566 },
1567 {
1568 .irq_config_id = SMD_WCNSS,
1569 .subsys_name = "wcnss",
1570 .edge = SMD_APPS_WCNSS,
1571
1572 .smd_int.irq_name = "wcnss_a11",
1573 .smd_int.flags = IRQF_TRIGGER_RISING,
1574 .smd_int.irq_id = -1,
1575 .smd_int.device_name = "smd_dev",
1576 .smd_int.dev_id = 0,
1577 .smd_int.out_bit_pos = 1 << 25,
1578 .smd_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1579 .smd_int.out_offset = 0x8,
1580
1581 .smsm_int.irq_name = "wcnss_a11_smsm",
1582 .smsm_int.flags = IRQF_TRIGGER_RISING,
1583 .smsm_int.irq_id = -1,
1584 .smsm_int.device_name = "smd_smsm",
1585 .smsm_int.dev_id = 0,
1586 .smsm_int.out_bit_pos = 1 << 23,
1587 .smsm_int.out_base = (void __iomem *)MSM_APCS_GCC_BASE,
1588 .smsm_int.out_offset = 0x8,
1589 },
1590};
1591
Eric Holmberg2bb6ccd2012-03-13 13:05:14 -06001592static struct smd_subsystem_restart_config smd_ssr_config = {
1593 .disable_smsm_reset_handshake = 1,
1594};
1595
Eric Holmberg023d25c2012-03-01 12:27:55 -07001596static struct smd_platform smd_platform_data = {
1597 .num_ss_configs = ARRAY_SIZE(smd_config_list),
1598 .smd_ss_configs = smd_config_list,
Eric Holmberg2bb6ccd2012-03-13 13:05:14 -06001599 .smd_ssr_config = &smd_ssr_config,
Eric Holmberg023d25c2012-03-01 12:27:55 -07001600};
1601
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001602struct platform_device msm_device_smd = {
1603 .name = "msm_smd",
1604 .id = -1,
Eric Holmberg023d25c2012-03-01 12:27:55 -07001605 .resource = smd_resource,
1606 .num_resources = ARRAY_SIZE(smd_resource),
1607 .dev = {
1608 .platform_data = &smd_platform_data,
1609 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001610};
1611
1612struct platform_device msm_device_bam_dmux = {
1613 .name = "BAM_RMNT",
1614 .id = -1,
1615};
1616
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001617static struct msm_watchdog_pdata msm_watchdog_pdata = {
1618 .pet_time = 10000,
1619 .bark_time = 11000,
1620 .has_secure = true,
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07001621 .base = MSM_TMR0_BASE + WDT0_OFFSET,
1622};
1623
1624static struct resource msm_watchdog_resources[] = {
1625 {
1626 .start = WDT0_ACCSCSSNBARK_INT,
1627 .end = WDT0_ACCSCSSNBARK_INT,
1628 .flags = IORESOURCE_IRQ,
1629 },
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001630};
1631
1632struct platform_device msm8960_device_watchdog = {
1633 .name = "msm_watchdog",
1634 .id = -1,
1635 .dev = {
1636 .platform_data = &msm_watchdog_pdata,
1637 },
Rohit Vaswanic77e4a62012-08-09 18:10:28 -07001638 .num_resources = ARRAY_SIZE(msm_watchdog_resources),
1639 .resource = msm_watchdog_resources,
Jeff Ohlstein7e668552011-10-06 16:17:25 -07001640};
1641
Stepan Moskovchenkodf13d342011-08-03 19:01:25 -07001642static struct resource msm_dmov_resource[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001643 {
1644 .start = ADM_0_SCSS_1_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001645 .flags = IORESOURCE_IRQ,
1646 },
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001647 {
1648 .start = 0x18320000,
1649 .end = 0x18320000 + SZ_1M - 1,
1650 .flags = IORESOURCE_MEM,
1651 },
1652};
1653
1654static struct msm_dmov_pdata msm_dmov_pdata = {
1655 .sd = 1,
1656 .sd_size = 0x800,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001657};
1658
Stepan Moskovchenkodf13d342011-08-03 19:01:25 -07001659struct platform_device msm8960_device_dmov = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001660 .name = "msm_dmov",
1661 .id = -1,
1662 .resource = msm_dmov_resource,
1663 .num_resources = ARRAY_SIZE(msm_dmov_resource),
Jeff Ohlstein905f1ce2011-09-07 18:50:18 -07001664 .dev = {
1665 .platform_data = &msm_dmov_pdata,
1666 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001667};
1668
1669static struct platform_device *msm_sdcc_devices[] __initdata = {
1670 &msm_device_sdc1,
1671 &msm_device_sdc2,
1672 &msm_device_sdc3,
1673 &msm_device_sdc4,
1674 &msm_device_sdc5,
1675};
1676
1677int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
1678{
1679 struct platform_device *pdev;
1680
1681 if (controller < 1 || controller > 5)
1682 return -EINVAL;
1683
1684 pdev = msm_sdcc_devices[controller-1];
1685 pdev->dev.platform_data = plat;
1686 return platform_device_register(pdev);
1687}
1688
1689static struct resource resources_qup_i2c_gsbi4[] = {
1690 {
1691 .name = "gsbi_qup_i2c_addr",
1692 .start = MSM_GSBI4_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001693 .end = MSM_GSBI4_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001694 .flags = IORESOURCE_MEM,
1695 },
1696 {
1697 .name = "qup_phys_addr",
1698 .start = MSM_GSBI4_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001699 .end = MSM_GSBI4_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001700 .flags = IORESOURCE_MEM,
1701 },
1702 {
1703 .name = "qup_err_intr",
1704 .start = GSBI4_QUP_IRQ,
1705 .end = GSBI4_QUP_IRQ,
1706 .flags = IORESOURCE_IRQ,
1707 },
1708};
1709
1710struct platform_device msm8960_device_qup_i2c_gsbi4 = {
1711 .name = "qup_i2c",
1712 .id = 4,
1713 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi4),
1714 .resource = resources_qup_i2c_gsbi4,
1715};
1716
1717static struct resource resources_qup_i2c_gsbi3[] = {
1718 {
1719 .name = "gsbi_qup_i2c_addr",
1720 .start = MSM_GSBI3_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001721 .end = MSM_GSBI3_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001722 .flags = IORESOURCE_MEM,
1723 },
1724 {
1725 .name = "qup_phys_addr",
1726 .start = MSM_GSBI3_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001727 .end = MSM_GSBI3_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001728 .flags = IORESOURCE_MEM,
1729 },
1730 {
1731 .name = "qup_err_intr",
1732 .start = GSBI3_QUP_IRQ,
1733 .end = GSBI3_QUP_IRQ,
1734 .flags = IORESOURCE_IRQ,
1735 },
1736};
1737
1738struct platform_device msm8960_device_qup_i2c_gsbi3 = {
1739 .name = "qup_i2c",
1740 .id = 3,
1741 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi3),
1742 .resource = resources_qup_i2c_gsbi3,
1743};
1744
Harini Jayaramanfe6ff4162012-03-14 11:25:40 -06001745static struct resource resources_qup_i2c_gsbi9[] = {
1746 {
1747 .name = "gsbi_qup_i2c_addr",
1748 .start = MSM_GSBI9_PHYS,
1749 .end = MSM_GSBI9_PHYS + 4 - 1,
1750 .flags = IORESOURCE_MEM,
1751 },
1752 {
1753 .name = "qup_phys_addr",
1754 .start = MSM_GSBI9_QUP_PHYS,
1755 .end = MSM_GSBI9_QUP_PHYS + MSM_QUP_SIZE - 1,
1756 .flags = IORESOURCE_MEM,
1757 },
1758 {
1759 .name = "qup_err_intr",
1760 .start = GSBI9_QUP_IRQ,
1761 .end = GSBI9_QUP_IRQ,
1762 .flags = IORESOURCE_IRQ,
1763 },
1764};
1765
1766struct platform_device msm8960_device_qup_i2c_gsbi9 = {
1767 .name = "qup_i2c",
1768 .id = 0,
1769 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi9),
1770 .resource = resources_qup_i2c_gsbi9,
1771};
1772
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001773static struct resource resources_qup_i2c_gsbi10[] = {
1774 {
1775 .name = "gsbi_qup_i2c_addr",
1776 .start = MSM_GSBI10_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001777 .end = MSM_GSBI10_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001778 .flags = IORESOURCE_MEM,
1779 },
1780 {
1781 .name = "qup_phys_addr",
1782 .start = MSM_GSBI10_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001783 .end = MSM_GSBI10_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001784 .flags = IORESOURCE_MEM,
1785 },
1786 {
1787 .name = "qup_err_intr",
1788 .start = GSBI10_QUP_IRQ,
1789 .end = GSBI10_QUP_IRQ,
1790 .flags = IORESOURCE_IRQ,
1791 },
1792};
1793
1794struct platform_device msm8960_device_qup_i2c_gsbi10 = {
1795 .name = "qup_i2c",
1796 .id = 10,
1797 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi10),
1798 .resource = resources_qup_i2c_gsbi10,
1799};
1800
1801static struct resource resources_qup_i2c_gsbi12[] = {
1802 {
1803 .name = "gsbi_qup_i2c_addr",
1804 .start = MSM_GSBI12_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001805 .end = MSM_GSBI12_PHYS + 4 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001806 .flags = IORESOURCE_MEM,
1807 },
1808 {
1809 .name = "qup_phys_addr",
1810 .start = MSM_GSBI12_QUP_PHYS,
Harini Jayaramand7614a72011-09-15 14:16:02 -06001811 .end = MSM_GSBI12_QUP_PHYS + MSM_QUP_SIZE - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001812 .flags = IORESOURCE_MEM,
1813 },
1814 {
1815 .name = "qup_err_intr",
1816 .start = GSBI12_QUP_IRQ,
1817 .end = GSBI12_QUP_IRQ,
1818 .flags = IORESOURCE_IRQ,
1819 },
1820};
1821
1822struct platform_device msm8960_device_qup_i2c_gsbi12 = {
1823 .name = "qup_i2c",
1824 .id = 12,
1825 .num_resources = ARRAY_SIZE(resources_qup_i2c_gsbi12),
1826 .resource = resources_qup_i2c_gsbi12,
1827};
1828
1829#ifdef CONFIG_MSM_CAMERA
Kevin Chanbb8ef862012-02-14 13:03:04 -08001830static struct resource msm_cam_gsbi4_i2c_mux_resources[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001831 {
Kevin Chanbb8ef862012-02-14 13:03:04 -08001832 .name = "i2c_mux_rw",
Nishant Pandit24153d82011-08-27 16:05:13 +05301833 .start = 0x008003E0,
Kevin Chanbb8ef862012-02-14 13:03:04 -08001834 .end = 0x008003E0 + SZ_8 - 1,
Nishant Pandit24153d82011-08-27 16:05:13 +05301835 .flags = IORESOURCE_MEM,
1836 },
1837 {
Kevin Chanbb8ef862012-02-14 13:03:04 -08001838 .name = "i2c_mux_ctl",
Nishant Pandit24153d82011-08-27 16:05:13 +05301839 .start = 0x008020B8,
Kevin Chanbb8ef862012-02-14 13:03:04 -08001840 .end = 0x008020B8 + SZ_4 - 1,
Nishant Pandit24153d82011-08-27 16:05:13 +05301841 .flags = IORESOURCE_MEM,
1842 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001843};
1844
Kevin Chanbb8ef862012-02-14 13:03:04 -08001845struct platform_device msm8960_device_i2c_mux_gsbi4 = {
1846 .name = "msm_cam_i2c_mux",
1847 .id = 0,
1848 .resource = msm_cam_gsbi4_i2c_mux_resources,
1849 .num_resources = ARRAY_SIZE(msm_cam_gsbi4_i2c_mux_resources),
1850};
Kevin Chanf6216f22011-10-25 18:40:11 -07001851
1852static struct resource msm_csiphy0_resources[] = {
1853 {
1854 .name = "csiphy",
1855 .start = 0x04800C00,
1856 .end = 0x04800C00 + SZ_1K - 1,
1857 .flags = IORESOURCE_MEM,
1858 },
1859 {
1860 .name = "csiphy",
1861 .start = CSIPHY_4LN_IRQ,
1862 .end = CSIPHY_4LN_IRQ,
1863 .flags = IORESOURCE_IRQ,
1864 },
1865};
1866
1867static struct resource msm_csiphy1_resources[] = {
1868 {
1869 .name = "csiphy",
1870 .start = 0x04801000,
1871 .end = 0x04801000 + SZ_1K - 1,
1872 .flags = IORESOURCE_MEM,
1873 },
1874 {
1875 .name = "csiphy",
1876 .start = MSM8960_CSIPHY_2LN_IRQ,
1877 .end = MSM8960_CSIPHY_2LN_IRQ,
1878 .flags = IORESOURCE_IRQ,
1879 },
1880};
1881
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001882static struct resource msm_csiphy2_resources[] = {
1883 {
1884 .name = "csiphy",
1885 .start = 0x04801400,
1886 .end = 0x04801400 + SZ_1K - 1,
1887 .flags = IORESOURCE_MEM,
1888 },
1889 {
1890 .name = "csiphy",
1891 .start = MSM8960_CSIPHY_2_2LN_IRQ,
1892 .end = MSM8960_CSIPHY_2_2LN_IRQ,
1893 .flags = IORESOURCE_IRQ,
1894 },
1895};
1896
Kevin Chanf6216f22011-10-25 18:40:11 -07001897struct platform_device msm8960_device_csiphy0 = {
1898 .name = "msm_csiphy",
1899 .id = 0,
1900 .resource = msm_csiphy0_resources,
1901 .num_resources = ARRAY_SIZE(msm_csiphy0_resources),
1902};
1903
1904struct platform_device msm8960_device_csiphy1 = {
1905 .name = "msm_csiphy",
1906 .id = 1,
1907 .resource = msm_csiphy1_resources,
1908 .num_resources = ARRAY_SIZE(msm_csiphy1_resources),
1909};
Kevin Chanc8b52e82011-10-25 23:20:21 -07001910
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001911struct platform_device msm8960_device_csiphy2 = {
1912 .name = "msm_csiphy",
1913 .id = 2,
1914 .resource = msm_csiphy2_resources,
1915 .num_resources = ARRAY_SIZE(msm_csiphy2_resources),
1916};
1917
Kevin Chanc8b52e82011-10-25 23:20:21 -07001918static struct resource msm_csid0_resources[] = {
1919 {
1920 .name = "csid",
1921 .start = 0x04800000,
1922 .end = 0x04800000 + SZ_1K - 1,
1923 .flags = IORESOURCE_MEM,
1924 },
1925 {
1926 .name = "csid",
1927 .start = CSI_0_IRQ,
1928 .end = CSI_0_IRQ,
1929 .flags = IORESOURCE_IRQ,
1930 },
1931};
1932
1933static struct resource msm_csid1_resources[] = {
1934 {
1935 .name = "csid",
1936 .start = 0x04800400,
1937 .end = 0x04800400 + SZ_1K - 1,
1938 .flags = IORESOURCE_MEM,
1939 },
1940 {
1941 .name = "csid",
1942 .start = CSI_1_IRQ,
1943 .end = CSI_1_IRQ,
1944 .flags = IORESOURCE_IRQ,
1945 },
1946};
1947
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001948static struct resource msm_csid2_resources[] = {
1949 {
1950 .name = "csid",
1951 .start = 0x04801800,
1952 .end = 0x04801800 + SZ_1K - 1,
1953 .flags = IORESOURCE_MEM,
1954 },
1955 {
1956 .name = "csid",
1957 .start = CSI_2_IRQ,
1958 .end = CSI_2_IRQ,
1959 .flags = IORESOURCE_IRQ,
1960 },
1961};
1962
Kevin Chanc8b52e82011-10-25 23:20:21 -07001963struct platform_device msm8960_device_csid0 = {
1964 .name = "msm_csid",
1965 .id = 0,
1966 .resource = msm_csid0_resources,
1967 .num_resources = ARRAY_SIZE(msm_csid0_resources),
1968};
1969
1970struct platform_device msm8960_device_csid1 = {
1971 .name = "msm_csid",
1972 .id = 1,
1973 .resource = msm_csid1_resources,
1974 .num_resources = ARRAY_SIZE(msm_csid1_resources),
1975};
Kevin Chane12c6672011-10-26 11:55:26 -07001976
Sreesudhan Ramakrish Ramkumarb1edcd02012-01-17 11:33:05 -08001977struct platform_device msm8960_device_csid2 = {
1978 .name = "msm_csid",
1979 .id = 2,
1980 .resource = msm_csid2_resources,
1981 .num_resources = ARRAY_SIZE(msm_csid2_resources),
1982};
1983
Kevin Chane12c6672011-10-26 11:55:26 -07001984struct resource msm_ispif_resources[] = {
1985 {
1986 .name = "ispif",
1987 .start = 0x04800800,
1988 .end = 0x04800800 + SZ_1K - 1,
1989 .flags = IORESOURCE_MEM,
1990 },
1991 {
1992 .name = "ispif",
1993 .start = ISPIF_IRQ,
1994 .end = ISPIF_IRQ,
1995 .flags = IORESOURCE_IRQ,
1996 },
1997};
1998
1999struct platform_device msm8960_device_ispif = {
2000 .name = "msm_ispif",
2001 .id = 0,
2002 .resource = msm_ispif_resources,
2003 .num_resources = ARRAY_SIZE(msm_ispif_resources),
2004};
Kevin Chan5827c552011-10-28 18:36:32 -07002005
2006static struct resource msm_vfe_resources[] = {
2007 {
2008 .name = "vfe32",
2009 .start = 0x04500000,
2010 .end = 0x04500000 + SZ_1M - 1,
2011 .flags = IORESOURCE_MEM,
2012 },
2013 {
2014 .name = "vfe32",
2015 .start = VFE_IRQ,
2016 .end = VFE_IRQ,
2017 .flags = IORESOURCE_IRQ,
2018 },
2019};
2020
2021struct platform_device msm8960_device_vfe = {
2022 .name = "msm_vfe",
2023 .id = 0,
2024 .resource = msm_vfe_resources,
2025 .num_resources = ARRAY_SIZE(msm_vfe_resources),
2026};
Kevin Chana0853122011-11-07 19:48:44 -08002027
2028static struct resource msm_vpe_resources[] = {
2029 {
2030 .name = "vpe",
2031 .start = 0x05300000,
2032 .end = 0x05300000 + SZ_1M - 1,
2033 .flags = IORESOURCE_MEM,
2034 },
2035 {
2036 .name = "vpe",
2037 .start = VPE_IRQ,
2038 .end = VPE_IRQ,
2039 .flags = IORESOURCE_IRQ,
2040 },
2041};
2042
2043struct platform_device msm8960_device_vpe = {
2044 .name = "msm_vpe",
2045 .id = 0,
2046 .resource = msm_vpe_resources,
2047 .num_resources = ARRAY_SIZE(msm_vpe_resources),
2048};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002049#endif
2050
Joel Nidera1261942011-09-12 16:30:09 +03002051#define MSM_TSIF0_PHYS (0x18200000)
2052#define MSM_TSIF1_PHYS (0x18201000)
2053#define MSM_TSIF_SIZE (0x200)
2054
2055#define TSIF_0_CLK GPIO_CFG(75, 1, GPIO_CFG_INPUT, \
2056 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2057#define TSIF_0_EN GPIO_CFG(76, 1, GPIO_CFG_INPUT, \
2058 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2059#define TSIF_0_DATA GPIO_CFG(77, 1, GPIO_CFG_INPUT, \
2060 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2061#define TSIF_0_SYNC GPIO_CFG(82, 1, GPIO_CFG_INPUT, \
2062 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2063#define TSIF_1_CLK GPIO_CFG(79, 1, GPIO_CFG_INPUT, \
2064 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2065#define TSIF_1_EN GPIO_CFG(80, 1, GPIO_CFG_INPUT, \
2066 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2067#define TSIF_1_DATA GPIO_CFG(81, 1, GPIO_CFG_INPUT, \
2068 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2069#define TSIF_1_SYNC GPIO_CFG(78, 1, GPIO_CFG_INPUT, \
2070 GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
2071
2072static const struct msm_gpio tsif0_gpios[] = {
2073 { .gpio_cfg = TSIF_0_CLK, .label = "tsif_clk", },
2074 { .gpio_cfg = TSIF_0_EN, .label = "tsif_en", },
2075 { .gpio_cfg = TSIF_0_DATA, .label = "tsif_data", },
2076 { .gpio_cfg = TSIF_0_SYNC, .label = "tsif_sync", },
2077};
2078
2079static const struct msm_gpio tsif1_gpios[] = {
2080 { .gpio_cfg = TSIF_1_CLK, .label = "tsif_clk", },
2081 { .gpio_cfg = TSIF_1_EN, .label = "tsif_en", },
2082 { .gpio_cfg = TSIF_1_DATA, .label = "tsif_data", },
2083 { .gpio_cfg = TSIF_1_SYNC, .label = "tsif_sync", },
2084};
2085
2086struct msm_tsif_platform_data tsif1_platform_data = {
2087 .num_gpios = ARRAY_SIZE(tsif1_gpios),
2088 .gpios = tsif1_gpios,
Joel Niderdfb793b2012-06-27 12:00:22 +03002089 .tsif_pclk = "iface_clk",
2090 .tsif_ref_clk = "ref_clk",
Joel Nidera1261942011-09-12 16:30:09 +03002091};
2092
2093struct resource tsif1_resources[] = {
2094 [0] = {
2095 .flags = IORESOURCE_IRQ,
2096 .start = TSIF2_IRQ,
2097 .end = TSIF2_IRQ,
2098 },
2099 [1] = {
2100 .flags = IORESOURCE_MEM,
2101 .start = MSM_TSIF1_PHYS,
2102 .end = MSM_TSIF1_PHYS + MSM_TSIF_SIZE - 1,
2103 },
2104 [2] = {
2105 .flags = IORESOURCE_DMA,
2106 .start = DMOV_TSIF_CHAN,
2107 .end = DMOV_TSIF_CRCI,
2108 },
2109};
2110
2111struct msm_tsif_platform_data tsif0_platform_data = {
2112 .num_gpios = ARRAY_SIZE(tsif0_gpios),
2113 .gpios = tsif0_gpios,
Joel Niderdfb793b2012-06-27 12:00:22 +03002114 .tsif_pclk = "iface_clk",
2115 .tsif_ref_clk = "ref_clk",
Joel Nidera1261942011-09-12 16:30:09 +03002116};
2117struct resource tsif0_resources[] = {
2118 [0] = {
2119 .flags = IORESOURCE_IRQ,
2120 .start = TSIF1_IRQ,
2121 .end = TSIF1_IRQ,
2122 },
2123 [1] = {
2124 .flags = IORESOURCE_MEM,
2125 .start = MSM_TSIF0_PHYS,
2126 .end = MSM_TSIF0_PHYS + MSM_TSIF_SIZE - 1,
2127 },
2128 [2] = {
2129 .flags = IORESOURCE_DMA,
2130 .start = DMOV_TSIF_CHAN,
2131 .end = DMOV_TSIF_CRCI,
2132 },
2133};
2134
2135struct platform_device msm_device_tsif[2] = {
2136 {
2137 .name = "msm_tsif",
2138 .id = 0,
2139 .num_resources = ARRAY_SIZE(tsif0_resources),
2140 .resource = tsif0_resources,
2141 .dev = {
2142 .platform_data = &tsif0_platform_data
2143 },
2144 },
2145 {
2146 .name = "msm_tsif",
2147 .id = 1,
2148 .num_resources = ARRAY_SIZE(tsif1_resources),
2149 .resource = tsif1_resources,
2150 .dev = {
2151 .platform_data = &tsif1_platform_data
2152 },
2153 }
2154};
2155
Jay Chokshi33c044a2011-12-07 13:05:40 -08002156static struct resource resources_ssbi_pmic[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002157 {
2158 .start = MSM_PMIC1_SSBI_CMD_PHYS,
2159 .end = MSM_PMIC1_SSBI_CMD_PHYS + MSM_PMIC_SSBI_SIZE - 1,
2160 .flags = IORESOURCE_MEM,
2161 },
2162};
2163
Jay Chokshi33c044a2011-12-07 13:05:40 -08002164struct platform_device msm8960_device_ssbi_pmic = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002165 .name = "msm_ssbi",
2166 .id = 0,
Jay Chokshi33c044a2011-12-07 13:05:40 -08002167 .resource = resources_ssbi_pmic,
2168 .num_resources = ARRAY_SIZE(resources_ssbi_pmic),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002169};
2170
2171static struct resource resources_qup_spi_gsbi1[] = {
2172 {
2173 .name = "spi_base",
2174 .start = MSM_GSBI1_QUP_PHYS,
2175 .end = MSM_GSBI1_QUP_PHYS + SZ_4K - 1,
2176 .flags = IORESOURCE_MEM,
2177 },
2178 {
2179 .name = "gsbi_base",
2180 .start = MSM_GSBI1_PHYS,
2181 .end = MSM_GSBI1_PHYS + 4 - 1,
2182 .flags = IORESOURCE_MEM,
2183 },
2184 {
2185 .name = "spi_irq_in",
2186 .start = MSM8960_GSBI1_QUP_IRQ,
2187 .end = MSM8960_GSBI1_QUP_IRQ,
2188 .flags = IORESOURCE_IRQ,
2189 },
Harini Jayaramanaac8e342011-08-09 19:25:23 -06002190 {
2191 .name = "spi_clk",
2192 .start = 9,
2193 .end = 9,
2194 .flags = IORESOURCE_IO,
2195 },
2196 {
Harini Jayaramanaac8e342011-08-09 19:25:23 -06002197 .name = "spi_miso",
2198 .start = 7,
2199 .end = 7,
2200 .flags = IORESOURCE_IO,
2201 },
2202 {
2203 .name = "spi_mosi",
2204 .start = 6,
2205 .end = 6,
2206 .flags = IORESOURCE_IO,
2207 },
Harini Jayaraman8392e432011-11-29 18:26:17 -07002208 {
2209 .name = "spi_cs",
2210 .start = 8,
2211 .end = 8,
2212 .flags = IORESOURCE_IO,
2213 },
2214 {
2215 .name = "spi_cs1",
2216 .start = 14,
2217 .end = 14,
2218 .flags = IORESOURCE_IO,
2219 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002220};
2221
2222struct platform_device msm8960_device_qup_spi_gsbi1 = {
2223 .name = "spi_qsd",
2224 .id = 0,
2225 .num_resources = ARRAY_SIZE(resources_qup_spi_gsbi1),
2226 .resource = resources_qup_spi_gsbi1,
2227};
2228
2229struct platform_device msm_pcm = {
2230 .name = "msm-pcm-dsp",
2231 .id = -1,
2232};
2233
Kiran Kandi5e809b02012-01-31 00:24:33 -08002234struct platform_device msm_multi_ch_pcm = {
2235 .name = "msm-multi-ch-pcm-dsp",
2236 .id = -1,
2237};
2238
Jayasena Sangaraboina99bf09c2012-07-17 12:03:08 -07002239struct platform_device msm_lowlatency_pcm = {
2240 .name = "msm-lowlatency-pcm-dsp",
2241 .id = -1,
2242};
2243
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002244struct platform_device msm_pcm_routing = {
2245 .name = "msm-pcm-routing",
2246 .id = -1,
2247};
2248
2249struct platform_device msm_cpudai0 = {
2250 .name = "msm-dai-q6",
2251 .id = 0x4000,
2252};
2253
2254struct platform_device msm_cpudai1 = {
2255 .name = "msm-dai-q6",
2256 .id = 0x4001,
2257};
2258
Kiran Kandi97fe19d2012-05-20 22:34:04 -07002259struct platform_device msm8960_cpudai_slimbus_2_rx = {
2260 .name = "msm-dai-q6",
2261 .id = 0x4004,
2262};
2263
Kiran Kandi1e6371d2012-03-29 11:48:57 -07002264struct platform_device msm8960_cpudai_slimbus_2_tx = {
2265 .name = "msm-dai-q6",
2266 .id = 0x4005,
2267};
2268
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002269struct platform_device msm_cpudai_hdmi_rx = {
Kiran Kandi5e809b02012-01-31 00:24:33 -08002270 .name = "msm-dai-q6-hdmi",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002271 .id = 8,
2272};
2273
2274struct platform_device msm_cpudai_bt_rx = {
2275 .name = "msm-dai-q6",
2276 .id = 0x3000,
2277};
2278
2279struct platform_device msm_cpudai_bt_tx = {
2280 .name = "msm-dai-q6",
2281 .id = 0x3001,
2282};
2283
2284struct platform_device msm_cpudai_fm_rx = {
2285 .name = "msm-dai-q6",
2286 .id = 0x3004,
2287};
2288
2289struct platform_device msm_cpudai_fm_tx = {
2290 .name = "msm-dai-q6",
2291 .id = 0x3005,
2292};
2293
Helen Zeng0705a5f2011-10-14 15:29:52 -07002294struct platform_device msm_cpudai_incall_music_rx = {
2295 .name = "msm-dai-q6",
2296 .id = 0x8005,
2297};
2298
Helen Zenge3d716a2011-10-14 16:32:16 -07002299struct platform_device msm_cpudai_incall_record_rx = {
2300 .name = "msm-dai-q6",
2301 .id = 0x8004,
2302};
2303
2304struct platform_device msm_cpudai_incall_record_tx = {
2305 .name = "msm-dai-q6",
2306 .id = 0x8003,
2307};
2308
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002309/*
2310 * Machine specific data for AUX PCM Interface
2311 * which the driver will be unware of.
2312 */
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002313struct msm_dai_auxpcm_pdata auxpcm_pdata = {
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002314 .clk = "pcm_clk",
Kuirong Wang547a9982012-05-04 18:29:11 -07002315 .mode_8k = {
2316 .mode = AFE_PCM_CFG_MODE_PCM,
2317 .sync = AFE_PCM_CFG_SYNC_INT,
Damir Didjustocadb6392012-08-17 00:16:07 -07002318 .frame = AFE_PCM_CFG_FRM_32BPF,
Kuirong Wang547a9982012-05-04 18:29:11 -07002319 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
2320 .slot = 0,
2321 .data = AFE_PCM_CFG_CDATAOE_MASTER,
Damir Didjustocadb6392012-08-17 00:16:07 -07002322 .pcm_clk_rate = 256000,
Kuirong Wang547a9982012-05-04 18:29:11 -07002323 },
2324 .mode_16k = {
2325 .mode = AFE_PCM_CFG_MODE_PCM,
2326 .sync = AFE_PCM_CFG_SYNC_INT,
Damir Didjustocadb6392012-08-17 00:16:07 -07002327 .frame = AFE_PCM_CFG_FRM_32BPF,
Kuirong Wang547a9982012-05-04 18:29:11 -07002328 .quant = AFE_PCM_CFG_QUANT_LINEAR_NOPAD,
2329 .slot = 0,
2330 .data = AFE_PCM_CFG_CDATAOE_MASTER,
Damir Didjustocadb6392012-08-17 00:16:07 -07002331 .pcm_clk_rate = 512000,
Kuirong Wang547a9982012-05-04 18:29:11 -07002332 }
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002333};
2334
2335struct platform_device msm_cpudai_auxpcm_rx = {
2336 .name = "msm-dai-q6",
2337 .id = 2,
2338 .dev = {
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002339 .platform_data = &auxpcm_pdata,
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002340 },
2341};
2342
2343struct platform_device msm_cpudai_auxpcm_tx = {
2344 .name = "msm-dai-q6",
2345 .id = 3,
Kiran Kandi5f4ab692012-02-23 11:23:56 -08002346 .dev = {
2347 .platform_data = &auxpcm_pdata,
2348 },
Bhalchandra Gajare0e795c42011-08-15 18:10:30 -07002349};
2350
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002351struct platform_device msm_cpu_fe = {
2352 .name = "msm-dai-fe",
2353 .id = -1,
2354};
2355
2356struct platform_device msm_stub_codec = {
2357 .name = "msm-stub-codec",
2358 .id = 1,
2359};
2360
2361struct platform_device msm_voice = {
2362 .name = "msm-pcm-voice",
2363 .id = -1,
2364};
2365
2366struct platform_device msm_voip = {
2367 .name = "msm-voip-dsp",
2368 .id = -1,
2369};
2370
2371struct platform_device msm_lpa_pcm = {
2372 .name = "msm-pcm-lpa",
2373 .id = -1,
2374};
2375
Asish Bhattacharya96bb6f42011-11-01 20:36:09 +05302376struct platform_device msm_compr_dsp = {
2377 .name = "msm-compr-dsp",
2378 .id = -1,
2379};
2380
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002381struct platform_device msm_pcm_hostless = {
2382 .name = "msm-pcm-hostless",
2383 .id = -1,
2384};
2385
Laxminath Kasamcee1d602011-08-01 19:26:57 +05302386struct platform_device msm_cpudai_afe_01_rx = {
2387 .name = "msm-dai-q6",
2388 .id = 0xE0,
2389};
2390
2391struct platform_device msm_cpudai_afe_01_tx = {
2392 .name = "msm-dai-q6",
2393 .id = 0xF0,
2394};
2395
2396struct platform_device msm_cpudai_afe_02_rx = {
2397 .name = "msm-dai-q6",
2398 .id = 0xF1,
2399};
2400
2401struct platform_device msm_cpudai_afe_02_tx = {
2402 .name = "msm-dai-q6",
2403 .id = 0xE1,
2404};
2405
2406struct platform_device msm_pcm_afe = {
2407 .name = "msm-pcm-afe",
2408 .id = -1,
2409};
2410
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002411static struct fs_driver_data gfx2d0_fs_data = {
2412 .clks = (struct fs_clk_data[]){
2413 { .name = "core_clk" },
2414 { .name = "iface_clk" },
2415 { 0 }
2416 },
2417 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002418};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002419
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002420static struct fs_driver_data gfx2d1_fs_data = {
2421 .clks = (struct fs_clk_data[]){
2422 { .name = "core_clk" },
2423 { .name = "iface_clk" },
2424 { 0 }
2425 },
2426 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
2427};
2428
2429static struct fs_driver_data gfx3d_fs_data = {
2430 .clks = (struct fs_clk_data[]){
2431 { .name = "core_clk", .reset_rate = 27000000 },
2432 { .name = "iface_clk" },
2433 { 0 }
2434 },
2435 .bus_port0 = MSM_BUS_MASTER_GRAPHICS_3D,
2436};
2437
2438static struct fs_driver_data ijpeg_fs_data = {
2439 .clks = (struct fs_clk_data[]){
2440 { .name = "core_clk" },
2441 { .name = "iface_clk" },
2442 { .name = "bus_clk" },
2443 { 0 }
2444 },
2445 .bus_port0 = MSM_BUS_MASTER_JPEG_ENC,
2446};
2447
2448static struct fs_driver_data mdp_fs_data = {
2449 .clks = (struct fs_clk_data[]){
2450 { .name = "core_clk" },
2451 { .name = "iface_clk" },
2452 { .name = "bus_clk" },
2453 { .name = "vsync_clk" },
2454 { .name = "lut_clk" },
2455 { .name = "tv_src_clk" },
2456 { .name = "tv_clk" },
Matt Wagantallc33c1ed2012-07-23 17:19:08 -07002457 { .name = "reset1_clk" },
2458 { .name = "reset2_clk" },
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002459 { 0 }
2460 },
2461 .bus_port0 = MSM_BUS_MASTER_MDP_PORT0,
2462 .bus_port1 = MSM_BUS_MASTER_MDP_PORT1,
2463};
2464
2465static struct fs_driver_data rot_fs_data = {
2466 .clks = (struct fs_clk_data[]){
2467 { .name = "core_clk" },
2468 { .name = "iface_clk" },
2469 { .name = "bus_clk" },
2470 { 0 }
2471 },
2472 .bus_port0 = MSM_BUS_MASTER_ROTATOR,
2473};
2474
2475static struct fs_driver_data ved_fs_data = {
2476 .clks = (struct fs_clk_data[]){
2477 { .name = "core_clk" },
2478 { .name = "iface_clk" },
2479 { .name = "bus_clk" },
2480 { 0 }
2481 },
2482 .bus_port0 = MSM_BUS_MASTER_HD_CODEC_PORT0,
2483 .bus_port1 = MSM_BUS_MASTER_HD_CODEC_PORT1,
2484};
2485
2486static struct fs_driver_data vfe_fs_data = {
2487 .clks = (struct fs_clk_data[]){
2488 { .name = "core_clk" },
2489 { .name = "iface_clk" },
2490 { .name = "bus_clk" },
2491 { 0 }
2492 },
2493 .bus_port0 = MSM_BUS_MASTER_VFE,
2494};
2495
2496static struct fs_driver_data vpe_fs_data = {
2497 .clks = (struct fs_clk_data[]){
2498 { .name = "core_clk" },
2499 { .name = "iface_clk" },
2500 { .name = "bus_clk" },
2501 { 0 }
2502 },
2503 .bus_port0 = MSM_BUS_MASTER_VPE,
2504};
2505
2506struct platform_device *msm8960_footswitch[] __initdata = {
Matt Wagantalld4aab1e2012-05-03 20:26:56 -07002507 FS_8X60(FS_MDP, "vdd", "mdp.0", &mdp_fs_data),
Matt Wagantall316f2fc2012-05-03 20:41:42 -07002508 FS_8X60(FS_ROT, "vdd", "msm_rotator.0", &rot_fs_data),
Matt Wagantalle4454b82012-05-03 20:48:01 -07002509 FS_8X60(FS_IJPEG, "vdd", "msm_gemini.0", &ijpeg_fs_data),
Kiran Kumar H Nfa18a032012-06-25 14:34:18 -07002510 FS_8X60(FS_VFE, "vdd", "msm_vfe.0", &vfe_fs_data),
2511 FS_8X60(FS_VPE, "vdd", "msm_vpe.0", &vpe_fs_data),
Matt Wagantalld6fbf232012-05-03 20:09:28 -07002512 FS_8X60(FS_GFX3D, "vdd", "kgsl-3d0.0", &gfx3d_fs_data),
2513 FS_8X60(FS_GFX2D0, "vdd", "kgsl-2d0.0", &gfx2d0_fs_data),
2514 FS_8X60(FS_GFX2D1, "vdd", "kgsl-2d1.1", &gfx2d1_fs_data),
Matt Wagantall5e46aac2012-05-03 20:20:18 -07002515 FS_8X60(FS_VED, "vdd", "msm_vidc.0", &ved_fs_data),
Matt Wagantall1f65d9d2012-04-25 14:24:20 -07002516};
2517unsigned msm8960_num_footswitch __initdata = ARRAY_SIZE(msm8960_footswitch);
Ravishangar Kalyanam319a83c2012-03-21 18:38:05 -07002518
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002519#ifdef CONFIG_MSM_ROTATOR
Ravishangar Kalyanam319a83c2012-03-21 18:38:05 -07002520static struct msm_bus_vectors rotator_init_vectors[] = {
2521 {
2522 .src = MSM_BUS_MASTER_ROTATOR,
2523 .dst = MSM_BUS_SLAVE_EBI_CH0,
2524 .ab = 0,
2525 .ib = 0,
2526 },
2527};
2528
2529static struct msm_bus_vectors rotator_ui_vectors[] = {
2530 {
2531 .src = MSM_BUS_MASTER_ROTATOR,
2532 .dst = MSM_BUS_SLAVE_EBI_CH0,
2533 .ab = (1024 * 600 * 4 * 2 * 60),
2534 .ib = (1024 * 600 * 4 * 2 * 60 * 1.5),
2535 },
2536};
2537
2538static struct msm_bus_vectors rotator_vga_vectors[] = {
2539 {
2540 .src = MSM_BUS_MASTER_ROTATOR,
2541 .dst = MSM_BUS_SLAVE_EBI_CH0,
2542 .ab = (640 * 480 * 2 * 2 * 30),
2543 .ib = (640 * 480 * 2 * 2 * 30 * 1.5),
2544 },
2545};
2546static struct msm_bus_vectors rotator_720p_vectors[] = {
2547 {
2548 .src = MSM_BUS_MASTER_ROTATOR,
2549 .dst = MSM_BUS_SLAVE_EBI_CH0,
2550 .ab = (1280 * 736 * 2 * 2 * 30),
2551 .ib = (1280 * 736 * 2 * 2 * 30 * 1.5),
2552 },
2553};
2554
2555static struct msm_bus_vectors rotator_1080p_vectors[] = {
2556 {
2557 .src = MSM_BUS_MASTER_ROTATOR,
2558 .dst = MSM_BUS_SLAVE_EBI_CH0,
2559 .ab = (1920 * 1088 * 2 * 2 * 30),
2560 .ib = (1920 * 1088 * 2 * 2 * 30 * 1.5),
2561 },
2562};
2563
2564static struct msm_bus_paths rotator_bus_scale_usecases[] = {
2565 {
2566 ARRAY_SIZE(rotator_init_vectors),
2567 rotator_init_vectors,
2568 },
2569 {
2570 ARRAY_SIZE(rotator_ui_vectors),
2571 rotator_ui_vectors,
2572 },
2573 {
2574 ARRAY_SIZE(rotator_vga_vectors),
2575 rotator_vga_vectors,
2576 },
2577 {
2578 ARRAY_SIZE(rotator_720p_vectors),
2579 rotator_720p_vectors,
2580 },
2581 {
2582 ARRAY_SIZE(rotator_1080p_vectors),
2583 rotator_1080p_vectors,
2584 },
2585};
2586
2587struct msm_bus_scale_pdata rotator_bus_scale_pdata = {
2588 rotator_bus_scale_usecases,
2589 ARRAY_SIZE(rotator_bus_scale_usecases),
2590 .name = "rotator",
2591};
2592
2593void __init msm_rotator_update_bus_vectors(unsigned int xres,
2594 unsigned int yres)
2595{
2596 rotator_ui_vectors[0].ab = xres * yres * 4 * 2 * 60;
2597 rotator_ui_vectors[0].ib = xres * yres * 4 * 2 * 60 * 3 / 2;
2598}
2599
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002600#define ROTATOR_HW_BASE 0x04E00000
2601static struct resource resources_msm_rotator[] = {
2602 {
2603 .start = ROTATOR_HW_BASE,
2604 .end = ROTATOR_HW_BASE + 0x100000 - 1,
2605 .flags = IORESOURCE_MEM,
2606 },
2607 {
2608 .start = ROT_IRQ,
2609 .end = ROT_IRQ,
2610 .flags = IORESOURCE_IRQ,
2611 },
2612};
2613
2614static struct msm_rot_clocks rotator_clocks[] = {
2615 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07002616 .clk_name = "core_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002617 .clk_type = ROTATOR_CORE_CLK,
Nagamalleswararao Ganji0bb107342011-10-10 20:55:32 -07002618 .clk_rate = 200 * 1000 * 1000,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002619 },
2620 {
Matt Wagantallbb90da92011-10-25 15:07:52 -07002621 .clk_name = "iface_clk",
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002622 .clk_type = ROTATOR_PCLK,
2623 .clk_rate = 0,
2624 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002625};
2626
2627static struct msm_rotator_platform_data rotator_pdata = {
2628 .number_of_clocks = ARRAY_SIZE(rotator_clocks),
2629 .hardware_version_number = 0x01020309,
2630 .rotator_clks = rotator_clocks,
Nagamalleswararao Ganji5fabbd62011-11-06 23:10:43 -08002631#ifdef CONFIG_MSM_BUS_SCALING
2632 .bus_scale_table = &rotator_bus_scale_pdata,
2633#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002634};
2635
2636struct platform_device msm_rotator_device = {
2637 .name = "msm_rotator",
2638 .id = 0,
2639 .num_resources = ARRAY_SIZE(resources_msm_rotator),
2640 .resource = resources_msm_rotator,
2641 .dev = {
2642 .platform_data = &rotator_pdata,
2643 },
2644};
Olav Hauganef95ae32012-05-15 09:50:30 -07002645
2646void __init msm_rotator_set_split_iommu_domain(void)
2647{
2648 rotator_pdata.rot_iommu_split_domain = 1;
2649}
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002650#endif
2651
2652#define MIPI_DSI_HW_BASE 0x04700000
2653#define MDP_HW_BASE 0x05100000
2654
2655static struct resource msm_mipi_dsi1_resources[] = {
2656 {
2657 .name = "mipi_dsi",
2658 .start = MIPI_DSI_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07002659 .end = MIPI_DSI_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002660 .flags = IORESOURCE_MEM,
2661 },
2662 {
2663 .start = DSI1_IRQ,
2664 .end = DSI1_IRQ,
2665 .flags = IORESOURCE_IRQ,
2666 },
2667};
2668
2669struct platform_device msm_mipi_dsi1_device = {
2670 .name = "mipi_dsi",
2671 .id = 1,
2672 .num_resources = ARRAY_SIZE(msm_mipi_dsi1_resources),
2673 .resource = msm_mipi_dsi1_resources,
2674};
2675
2676static struct resource msm_mdp_resources[] = {
2677 {
2678 .name = "mdp",
2679 .start = MDP_HW_BASE,
kuogee hsiehf12acf52011-09-06 10:49:43 -07002680 .end = MDP_HW_BASE + 0x000F0000 - 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002681 .flags = IORESOURCE_MEM,
2682 },
2683 {
2684 .start = MDP_IRQ,
2685 .end = MDP_IRQ,
2686 .flags = IORESOURCE_IRQ,
2687 },
2688};
2689
2690static struct platform_device msm_mdp_device = {
2691 .name = "mdp",
2692 .id = 0,
2693 .num_resources = ARRAY_SIZE(msm_mdp_resources),
2694 .resource = msm_mdp_resources,
2695};
2696
2697static void __init msm_register_device(struct platform_device *pdev, void *data)
2698{
2699 int ret;
2700
2701 pdev->dev.platform_data = data;
2702 ret = platform_device_register(pdev);
2703 if (ret)
2704 dev_err(&pdev->dev,
2705 "%s: platform_device_register() failed = %d\n",
2706 __func__, ret);
2707}
2708
Ravishangar Kalyanam882930f2011-07-08 17:51:52 -07002709#ifdef CONFIG_MSM_BUS_SCALING
2710static struct platform_device msm_dtv_device = {
2711 .name = "dtv",
2712 .id = 0,
2713};
2714#endif
2715
Ravishangar Kalyanamc2fee312012-02-09 19:11:22 -08002716struct platform_device msm_lvds_device = {
Huaibin Yang4a084e32011-12-15 15:25:52 -08002717 .name = "lvds",
2718 .id = 0,
2719};
2720
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002721void __init msm_fb_register_device(char *name, void *data)
2722{
2723 if (!strncmp(name, "mdp", 3))
2724 msm_register_device(&msm_mdp_device, data);
2725 else if (!strncmp(name, "mipi_dsi", 8))
2726 msm_register_device(&msm_mipi_dsi1_device, data);
Huaibin Yang4a084e32011-12-15 15:25:52 -08002727 else if (!strncmp(name, "lvds", 4))
2728 msm_register_device(&msm_lvds_device, data);
Ravishangar Kalyanam882930f2011-07-08 17:51:52 -07002729#ifdef CONFIG_MSM_BUS_SCALING
2730 else if (!strncmp(name, "dtv", 3))
2731 msm_register_device(&msm_dtv_device, data);
2732#endif
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002733 else
2734 printk(KERN_ERR "%s: unknown device! %s\n", __func__, name);
2735}
2736
2737static struct resource resources_sps[] = {
2738 {
2739 .name = "pipe_mem",
2740 .start = 0x12800000,
2741 .end = 0x12800000 + 0x4000 - 1,
2742 .flags = IORESOURCE_MEM,
2743 },
2744 {
2745 .name = "bamdma_dma",
2746 .start = 0x12240000,
2747 .end = 0x12240000 + 0x1000 - 1,
2748 .flags = IORESOURCE_MEM,
2749 },
2750 {
2751 .name = "bamdma_bam",
2752 .start = 0x12244000,
2753 .end = 0x12244000 + 0x4000 - 1,
2754 .flags = IORESOURCE_MEM,
2755 },
2756 {
2757 .name = "bamdma_irq",
2758 .start = SPS_BAM_DMA_IRQ,
2759 .end = SPS_BAM_DMA_IRQ,
2760 .flags = IORESOURCE_IRQ,
2761 },
2762};
2763
2764struct msm_sps_platform_data msm_sps_pdata = {
2765 .bamdma_restricted_pipes = 0x06,
2766};
2767
2768struct platform_device msm_device_sps = {
2769 .name = "msm_sps",
2770 .id = -1,
2771 .num_resources = ARRAY_SIZE(resources_sps),
2772 .resource = resources_sps,
2773 .dev.platform_data = &msm_sps_pdata,
2774};
2775
2776#ifdef CONFIG_MSM_MPM
Praveen Chidambaram78499012011-11-01 17:15:17 -06002777static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] __initdata = {
Praveen Chidambaramb3d857c2011-05-31 16:28:07 -06002778 [1] = MSM_GPIO_TO_INT(46),
2779 [2] = MSM_GPIO_TO_INT(150),
2780 [4] = MSM_GPIO_TO_INT(103),
2781 [5] = MSM_GPIO_TO_INT(104),
2782 [6] = MSM_GPIO_TO_INT(105),
2783 [7] = MSM_GPIO_TO_INT(106),
2784 [8] = MSM_GPIO_TO_INT(107),
2785 [9] = MSM_GPIO_TO_INT(7),
2786 [10] = MSM_GPIO_TO_INT(11),
2787 [11] = MSM_GPIO_TO_INT(15),
2788 [12] = MSM_GPIO_TO_INT(19),
2789 [13] = MSM_GPIO_TO_INT(23),
2790 [14] = MSM_GPIO_TO_INT(27),
2791 [15] = MSM_GPIO_TO_INT(31),
2792 [16] = MSM_GPIO_TO_INT(35),
2793 [19] = MSM_GPIO_TO_INT(90),
2794 [20] = MSM_GPIO_TO_INT(92),
2795 [23] = MSM_GPIO_TO_INT(85),
2796 [24] = MSM_GPIO_TO_INT(83),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002797 [25] = USB1_HS_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002798 [27] = HDMI_IRQ,
Praveen Chidambaramb3d857c2011-05-31 16:28:07 -06002799 [29] = MSM_GPIO_TO_INT(10),
2800 [30] = MSM_GPIO_TO_INT(102),
2801 [31] = MSM_GPIO_TO_INT(81),
2802 [32] = MSM_GPIO_TO_INT(78),
2803 [33] = MSM_GPIO_TO_INT(94),
2804 [34] = MSM_GPIO_TO_INT(72),
2805 [35] = MSM_GPIO_TO_INT(39),
2806 [36] = MSM_GPIO_TO_INT(43),
2807 [37] = MSM_GPIO_TO_INT(61),
2808 [38] = MSM_GPIO_TO_INT(50),
2809 [39] = MSM_GPIO_TO_INT(42),
2810 [41] = MSM_GPIO_TO_INT(62),
2811 [42] = MSM_GPIO_TO_INT(76),
2812 [43] = MSM_GPIO_TO_INT(75),
2813 [44] = MSM_GPIO_TO_INT(70),
2814 [45] = MSM_GPIO_TO_INT(69),
2815 [46] = MSM_GPIO_TO_INT(67),
2816 [47] = MSM_GPIO_TO_INT(65),
2817 [48] = MSM_GPIO_TO_INT(58),
2818 [49] = MSM_GPIO_TO_INT(54),
2819 [50] = MSM_GPIO_TO_INT(52),
2820 [51] = MSM_GPIO_TO_INT(49),
2821 [52] = MSM_GPIO_TO_INT(40),
2822 [53] = MSM_GPIO_TO_INT(37),
2823 [54] = MSM_GPIO_TO_INT(24),
2824 [55] = MSM_GPIO_TO_INT(14),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002825};
2826
Praveen Chidambaram78499012011-11-01 17:15:17 -06002827static uint16_t msm_mpm_bypassed_apps_irqs[] __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002828 TLMM_MSM_SUMMARY_IRQ,
2829 RPM_APCC_CPU0_GP_HIGH_IRQ,
2830 RPM_APCC_CPU0_GP_MEDIUM_IRQ,
2831 RPM_APCC_CPU0_GP_LOW_IRQ,
2832 RPM_APCC_CPU0_WAKE_UP_IRQ,
2833 RPM_APCC_CPU1_GP_HIGH_IRQ,
2834 RPM_APCC_CPU1_GP_MEDIUM_IRQ,
2835 RPM_APCC_CPU1_GP_LOW_IRQ,
2836 RPM_APCC_CPU1_WAKE_UP_IRQ,
2837 MSS_TO_APPS_IRQ_0,
2838 MSS_TO_APPS_IRQ_1,
2839 MSS_TO_APPS_IRQ_2,
2840 MSS_TO_APPS_IRQ_3,
2841 MSS_TO_APPS_IRQ_4,
2842 MSS_TO_APPS_IRQ_5,
2843 MSS_TO_APPS_IRQ_6,
2844 MSS_TO_APPS_IRQ_7,
2845 MSS_TO_APPS_IRQ_8,
2846 MSS_TO_APPS_IRQ_9,
2847 LPASS_SCSS_GP_LOW_IRQ,
2848 LPASS_SCSS_GP_MEDIUM_IRQ,
2849 LPASS_SCSS_GP_HIGH_IRQ,
David Collins5e2b2fd2011-09-08 15:23:30 -07002850 SPS_MTI_30,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002851 SPS_MTI_31,
David Collins5e2b2fd2011-09-08 15:23:30 -07002852 RIVA_APSS_SPARE_IRQ,
David Collins84ecd0a2011-09-27 21:11:11 -07002853 RIVA_APPS_WLAN_SMSM_IRQ,
2854 RIVA_APPS_WLAN_RX_DATA_AVAIL_IRQ,
2855 RIVA_APPS_WLAN_DATA_XFER_DONE_IRQ,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002856};
2857
Praveen Chidambaram78499012011-11-01 17:15:17 -06002858struct msm_mpm_device_data msm8960_mpm_dev_data __initdata = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002859 .irqs_m2a = msm_mpm_irqs_m2a,
2860 .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
2861 .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
2862 .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
2863 .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
2864 .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
2865 .mpm_apps_ipc_reg = MSM_APCS_GCC_BASE + 0x008,
2866 .mpm_apps_ipc_val = BIT(1),
2867 .mpm_ipc_irq = RPM_APCC_CPU0_GP_MEDIUM_IRQ,
2868
2869};
2870#endif
2871
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002872#define LPASS_SLIMBUS_PHYS 0x28080000
2873#define LPASS_SLIMBUS_BAM_PHYS 0x28084000
Sagar Dhariacc969452011-09-19 10:34:30 -06002874#define LPASS_SLIMBUS_SLEW (MSM8960_TLMM_PHYS + 0x207C)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002875/* Board info for the slimbus slave device */
2876static struct resource slimbus_res[] = {
2877 {
2878 .start = LPASS_SLIMBUS_PHYS,
2879 .end = LPASS_SLIMBUS_PHYS + 8191,
2880 .flags = IORESOURCE_MEM,
2881 .name = "slimbus_physical",
2882 },
2883 {
2884 .start = LPASS_SLIMBUS_BAM_PHYS,
2885 .end = LPASS_SLIMBUS_BAM_PHYS + 8191,
2886 .flags = IORESOURCE_MEM,
2887 .name = "slimbus_bam_physical",
2888 },
2889 {
Sagar Dhariacc969452011-09-19 10:34:30 -06002890 .start = LPASS_SLIMBUS_SLEW,
2891 .end = LPASS_SLIMBUS_SLEW + 4 - 1,
2892 .flags = IORESOURCE_MEM,
2893 .name = "slimbus_slew_reg",
2894 },
2895 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002896 .start = SLIMBUS0_CORE_EE1_IRQ,
2897 .end = SLIMBUS0_CORE_EE1_IRQ,
2898 .flags = IORESOURCE_IRQ,
2899 .name = "slimbus_irq",
2900 },
2901 {
2902 .start = SLIMBUS0_BAM_EE1_IRQ,
2903 .end = SLIMBUS0_BAM_EE1_IRQ,
2904 .flags = IORESOURCE_IRQ,
2905 .name = "slimbus_bam_irq",
2906 },
2907};
2908
2909struct platform_device msm_slim_ctrl = {
2910 .name = "msm_slim_ctrl",
2911 .id = 1,
2912 .num_resources = ARRAY_SIZE(slimbus_res),
2913 .resource = slimbus_res,
2914 .dev = {
2915 .coherent_dma_mask = 0xffffffffULL,
2916 },
2917};
2918
Lucille Sylvester6e362412011-12-09 16:21:42 -07002919static struct msm_dcvs_freq_entry grp3d_freq[] = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002920 {0, 900, 0, 0, 0},
2921 {0, 950, 0, 0, 0},
2922 {0, 950, 0, 0, 0},
2923 {0, 1200, 1, 100, 100},
Lucille Sylvester6e362412011-12-09 16:21:42 -07002924};
2925
2926static struct msm_dcvs_freq_entry grp2d_freq[] = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002927 {0, 900, 0, 0, 0},
2928 {0, 950, 1, 100, 100},
Lucille Sylvester6e362412011-12-09 16:21:42 -07002929};
2930
2931static struct msm_dcvs_core_info grp3d_core_info = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002932 .freq_tbl = &grp3d_freq[0],
2933 .core_param = {
2934 .core_type = MSM_DCVS_CORE_TYPE_GPU,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002935 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002936 .algo_param = {
2937 .disable_pc_threshold = 0,
2938 .em_win_size_min_us = 100000,
2939 .em_win_size_max_us = 300000,
2940 .em_max_util_pct = 97,
2941 .group_id = 0,
2942 .max_freq_chg_time_us = 100000,
2943 .slack_mode_dynamic = 0,
2944 .slack_weight_thresh_pct = 0,
2945 .slack_time_min_us = 39000,
2946 .slack_time_max_us = 39000,
2947 .ss_win_size_min_us = 1000000,
2948 .ss_win_size_max_us = 1000000,
2949 .ss_util_pct = 95,
2950 .ss_iobusy_conv = 100,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002951 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002952 .energy_coeffs = {
2953 .active_coeff_a = 2492,
2954 .active_coeff_b = 0,
2955 .active_coeff_c = 0,
2956
2957 .leakage_coeff_a = -17720,
2958 .leakage_coeff_b = 37,
2959 .leakage_coeff_c = 2729,
2960 .leakage_coeff_d = -277,
2961 },
2962 .power_param = {
2963 .current_temp = 25,
2964 .num_freq = ARRAY_SIZE(grp3d_freq),
2965 }
Lucille Sylvester6e362412011-12-09 16:21:42 -07002966};
2967
2968static struct msm_dcvs_core_info grp2d_core_info = {
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002969 .freq_tbl = &grp2d_freq[0],
2970 .core_param = {
2971 .core_type = MSM_DCVS_CORE_TYPE_GPU,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002972 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002973 .algo_param = {
2974 .disable_pc_threshold = 0,
2975 .em_win_size_min_us = 100000,
2976 .em_win_size_max_us = 300000,
2977 .em_max_util_pct = 97,
2978 .group_id = 0,
2979 .max_freq_chg_time_us = 100000,
2980 .slack_mode_dynamic = 0,
2981 .slack_weight_thresh_pct = 0,
2982 .slack_time_min_us = 39000,
2983 .slack_time_max_us = 39000,
2984 .ss_win_size_min_us = 1000000,
2985 .ss_win_size_max_us = 1000000,
2986 .ss_util_pct = 95,
2987 .ss_iobusy_conv = 100,
Lucille Sylvester6e362412011-12-09 16:21:42 -07002988 },
Abhijeet Dharmapurikar7e37e6e2012-08-23 18:58:44 -07002989 .energy_coeffs = {
2990 .active_coeff_a = 2492,
2991 .active_coeff_b = 0,
2992 .active_coeff_c = 0,
2993
2994 .leakage_coeff_a = -17720,
2995 .leakage_coeff_b = 37,
2996 .leakage_coeff_c = 2729,
2997 .leakage_coeff_d = -277,
2998 },
2999 .power_param = {
3000 .current_temp = 25,
3001 .num_freq = ARRAY_SIZE(grp2d_freq),
3002 }
Lucille Sylvester6e362412011-12-09 16:21:42 -07003003};
3004
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003005#ifdef CONFIG_MSM_BUS_SCALING
3006static struct msm_bus_vectors grp3d_init_vectors[] = {
3007 {
3008 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3009 .dst = MSM_BUS_SLAVE_EBI_CH0,
3010 .ab = 0,
3011 .ib = 0,
3012 },
3013};
3014
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003015static struct msm_bus_vectors grp3d_low_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003016 {
3017 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3018 .dst = MSM_BUS_SLAVE_EBI_CH0,
3019 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003020 .ib = KGSL_CONVERT_TO_MBPS(1000),
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003021 },
3022};
3023
3024static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
3025 {
3026 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3027 .dst = MSM_BUS_SLAVE_EBI_CH0,
3028 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003029 .ib = KGSL_CONVERT_TO_MBPS(2048),
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003030 },
3031};
3032
3033static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
3034 {
3035 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3036 .dst = MSM_BUS_SLAVE_EBI_CH0,
3037 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003038 .ib = KGSL_CONVERT_TO_MBPS(2656),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003039 },
3040};
3041
3042static struct msm_bus_vectors grp3d_max_vectors[] = {
3043 {
3044 .src = MSM_BUS_MASTER_GRAPHICS_3D,
3045 .dst = MSM_BUS_SLAVE_EBI_CH0,
3046 .ab = 0,
Suman Tatiraju0123d182011-09-30 14:59:06 -07003047 .ib = KGSL_CONVERT_TO_MBPS(3968),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003048 },
3049};
3050
3051static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
3052 {
3053 ARRAY_SIZE(grp3d_init_vectors),
3054 grp3d_init_vectors,
3055 },
3056 {
Lucille Sylvester34ec3692011-08-16 16:28:04 -06003057 ARRAY_SIZE(grp3d_low_vectors),
3058 grp3d_low_vectors,
3059 },
3060 {
3061 ARRAY_SIZE(grp3d_nominal_low_vectors),
3062 grp3d_nominal_low_vectors,
3063 },
3064 {
3065 ARRAY_SIZE(grp3d_nominal_high_vectors),
3066 grp3d_nominal_high_vectors,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003067 },
3068 {
3069 ARRAY_SIZE(grp3d_max_vectors),
3070 grp3d_max_vectors,
3071 },
3072};
3073
3074static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
3075 grp3d_bus_scale_usecases,
3076 ARRAY_SIZE(grp3d_bus_scale_usecases),
3077 .name = "grp3d",
3078};
3079
3080static struct msm_bus_vectors grp2d0_init_vectors[] = {
3081 {
3082 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3083 .dst = MSM_BUS_SLAVE_EBI_CH0,
3084 .ab = 0,
3085 .ib = 0,
3086 },
3087};
3088
Lucille Sylvester808eca22011-11-03 10:26:29 -07003089static struct msm_bus_vectors grp2d0_nominal_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003090 {
3091 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3092 .dst = MSM_BUS_SLAVE_EBI_CH0,
3093 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003094 .ib = KGSL_CONVERT_TO_MBPS(1000),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003095 },
3096};
3097
Lucille Sylvester808eca22011-11-03 10:26:29 -07003098static struct msm_bus_vectors grp2d0_max_vectors[] = {
3099 {
3100 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
3101 .dst = MSM_BUS_SLAVE_EBI_CH0,
3102 .ab = 0,
3103 .ib = KGSL_CONVERT_TO_MBPS(2048),
3104 },
3105};
3106
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003107static struct msm_bus_paths grp2d0_bus_scale_usecases[] = {
3108 {
3109 ARRAY_SIZE(grp2d0_init_vectors),
3110 grp2d0_init_vectors,
3111 },
3112 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003113 ARRAY_SIZE(grp2d0_nominal_vectors),
3114 grp2d0_nominal_vectors,
3115 },
3116 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003117 ARRAY_SIZE(grp2d0_max_vectors),
3118 grp2d0_max_vectors,
3119 },
3120};
3121
3122struct msm_bus_scale_pdata grp2d0_bus_scale_pdata = {
3123 grp2d0_bus_scale_usecases,
3124 ARRAY_SIZE(grp2d0_bus_scale_usecases),
3125 .name = "grp2d0",
3126};
3127
3128static struct msm_bus_vectors grp2d1_init_vectors[] = {
3129 {
3130 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3131 .dst = MSM_BUS_SLAVE_EBI_CH0,
3132 .ab = 0,
3133 .ib = 0,
3134 },
3135};
3136
Lucille Sylvester808eca22011-11-03 10:26:29 -07003137static struct msm_bus_vectors grp2d1_nominal_vectors[] = {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003138 {
3139 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3140 .dst = MSM_BUS_SLAVE_EBI_CH0,
3141 .ab = 0,
Lucille Sylvester3efebb52012-01-17 12:58:38 -07003142 .ib = KGSL_CONVERT_TO_MBPS(1000),
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003143 },
3144};
3145
Lucille Sylvester808eca22011-11-03 10:26:29 -07003146static struct msm_bus_vectors grp2d1_max_vectors[] = {
3147 {
3148 .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
3149 .dst = MSM_BUS_SLAVE_EBI_CH0,
3150 .ab = 0,
3151 .ib = KGSL_CONVERT_TO_MBPS(2048),
3152 },
3153};
3154
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003155static struct msm_bus_paths grp2d1_bus_scale_usecases[] = {
3156 {
3157 ARRAY_SIZE(grp2d1_init_vectors),
3158 grp2d1_init_vectors,
3159 },
3160 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003161 ARRAY_SIZE(grp2d1_nominal_vectors),
3162 grp2d1_nominal_vectors,
3163 },
3164 {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003165 ARRAY_SIZE(grp2d1_max_vectors),
3166 grp2d1_max_vectors,
3167 },
3168};
3169
3170struct msm_bus_scale_pdata grp2d1_bus_scale_pdata = {
3171 grp2d1_bus_scale_usecases,
3172 ARRAY_SIZE(grp2d1_bus_scale_usecases),
3173 .name = "grp2d1",
3174};
3175#endif
3176
3177static struct resource kgsl_3d0_resources[] = {
3178 {
3179 .name = KGSL_3D0_REG_MEMORY,
3180 .start = 0x04300000, /* GFX3D address */
3181 .end = 0x0431ffff,
3182 .flags = IORESOURCE_MEM,
3183 },
3184 {
3185 .name = KGSL_3D0_IRQ,
3186 .start = GFX3D_IRQ,
3187 .end = GFX3D_IRQ,
3188 .flags = IORESOURCE_IRQ,
3189 },
3190};
3191
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003192static const struct kgsl_iommu_ctx kgsl_3d0_iommu_ctxs[] = {
3193 { "gfx3d_user", 0 },
3194 { "gfx3d_priv", 1 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003195};
3196
3197static struct kgsl_device_iommu_data kgsl_3d0_iommu_data[] = {
3198 {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003199 .iommu_ctxs = kgsl_3d0_iommu_ctxs,
3200 .iommu_ctx_count = ARRAY_SIZE(kgsl_3d0_iommu_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003201 .physstart = 0x07C00000,
3202 .physend = 0x07C00000 + SZ_1M - 1,
3203 },
3204};
3205
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003206static struct kgsl_device_platform_data kgsl_3d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003207 .pwrlevel = {
3208 {
3209 .gpu_freq = 400000000,
3210 .bus_freq = 4,
3211 .io_fraction = 0,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003212 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003213 {
3214 .gpu_freq = 300000000,
3215 .bus_freq = 3,
3216 .io_fraction = 33,
3217 },
3218 {
3219 .gpu_freq = 200000000,
3220 .bus_freq = 2,
3221 .io_fraction = 100,
3222 },
3223 {
3224 .gpu_freq = 128000000,
3225 .bus_freq = 1,
3226 .io_fraction = 100,
3227 },
3228 {
3229 .gpu_freq = 27000000,
3230 .bus_freq = 0,
3231 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003232 },
Lucille Sylvester67b4c532012-02-08 11:24:31 -08003233 .init_level = 1,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003234 .num_levels = ARRAY_SIZE(grp3d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003235 .set_grp_async = NULL,
Lucille Sylvester5dc67512012-03-27 15:07:58 -06003236 .idle_timeout = HZ/12,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003237 .nap_allowed = true,
3238 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003239#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003240 .bus_scale_table = &grp3d_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003241#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003242 .iommu_data = kgsl_3d0_iommu_data,
3243 .iommu_count = ARRAY_SIZE(kgsl_3d0_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003244 .core_info = &grp3d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003245};
3246
3247struct platform_device msm_kgsl_3d0 = {
3248 .name = "kgsl-3d0",
3249 .id = 0,
3250 .num_resources = ARRAY_SIZE(kgsl_3d0_resources),
3251 .resource = kgsl_3d0_resources,
3252 .dev = {
3253 .platform_data = &kgsl_3d0_pdata,
3254 },
3255};
3256
3257static struct resource kgsl_2d0_resources[] = {
3258 {
3259 .name = KGSL_2D0_REG_MEMORY,
3260 .start = 0x04100000, /* Z180 base address */
3261 .end = 0x04100FFF,
3262 .flags = IORESOURCE_MEM,
3263 },
3264 {
3265 .name = KGSL_2D0_IRQ,
3266 .start = GFX2D0_IRQ,
3267 .end = GFX2D0_IRQ,
3268 .flags = IORESOURCE_IRQ,
3269 },
3270};
3271
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003272static const struct kgsl_iommu_ctx kgsl_2d0_iommu_ctxs[] = {
3273 { "gfx2d0_2d0", 0 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003274};
3275
3276static struct kgsl_device_iommu_data kgsl_2d0_iommu_data[] = {
3277 {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003278 .iommu_ctxs = kgsl_2d0_iommu_ctxs,
3279 .iommu_ctx_count = ARRAY_SIZE(kgsl_2d0_iommu_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003280 .physstart = 0x07D00000,
3281 .physend = 0x07D00000 + SZ_1M - 1,
3282 },
3283};
3284
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003285static struct kgsl_device_platform_data kgsl_2d0_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003286 .pwrlevel = {
3287 {
3288 .gpu_freq = 200000000,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003289 .bus_freq = 2,
3290 },
3291 {
3292 .gpu_freq = 96000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003293 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003294 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003295 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003296 .gpu_freq = 27000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003297 .bus_freq = 0,
3298 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003299 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003300 .init_level = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003301 .num_levels = ARRAY_SIZE(grp2d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003302 .set_grp_async = NULL,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003303 .idle_timeout = HZ/5,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003304 .nap_allowed = true,
3305 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003306#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003307 .bus_scale_table = &grp2d0_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003308#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003309 .iommu_data = kgsl_2d0_iommu_data,
3310 .iommu_count = ARRAY_SIZE(kgsl_2d0_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003311 .core_info = &grp2d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003312};
3313
3314struct platform_device msm_kgsl_2d0 = {
3315 .name = "kgsl-2d0",
3316 .id = 0,
3317 .num_resources = ARRAY_SIZE(kgsl_2d0_resources),
3318 .resource = kgsl_2d0_resources,
3319 .dev = {
3320 .platform_data = &kgsl_2d0_pdata,
3321 },
3322};
3323
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003324static const struct kgsl_iommu_ctx kgsl_2d1_iommu_ctxs[] = {
3325 { "gfx2d1_2d1", 0 },
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003326};
3327
3328static struct kgsl_device_iommu_data kgsl_2d1_iommu_data[] = {
3329 {
Shubhraprakash Daseb6df1d2012-05-01 00:55:35 -06003330 .iommu_ctxs = kgsl_2d1_iommu_ctxs,
3331 .iommu_ctx_count = ARRAY_SIZE(kgsl_2d1_iommu_ctxs),
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003332 .physstart = 0x07E00000,
3333 .physend = 0x07E00000 + SZ_1M - 1,
3334 },
3335};
3336
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003337static struct resource kgsl_2d1_resources[] = {
3338 {
3339 .name = KGSL_2D1_REG_MEMORY,
3340 .start = 0x04200000, /* Z180 device 1 base address */
3341 .end = 0x04200FFF,
3342 .flags = IORESOURCE_MEM,
3343 },
3344 {
3345 .name = KGSL_2D1_IRQ,
3346 .start = GFX2D1_IRQ,
3347 .end = GFX2D1_IRQ,
3348 .flags = IORESOURCE_IRQ,
3349 },
3350};
3351
3352static struct kgsl_device_platform_data kgsl_2d1_pdata = {
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003353 .pwrlevel = {
3354 {
3355 .gpu_freq = 200000000,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003356 .bus_freq = 2,
3357 },
3358 {
3359 .gpu_freq = 96000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003360 .bus_freq = 1,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003361 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003362 {
Lucille Sylvester808eca22011-11-03 10:26:29 -07003363 .gpu_freq = 27000000,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003364 .bus_freq = 0,
3365 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003366 },
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003367 .init_level = 0,
Lucille Sylvester6e362412011-12-09 16:21:42 -07003368 .num_levels = ARRAY_SIZE(grp2d_freq) + 1,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003369 .set_grp_async = NULL,
Lucille Sylvester808eca22011-11-03 10:26:29 -07003370 .idle_timeout = HZ/5,
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003371 .nap_allowed = true,
3372 .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003373#ifdef CONFIG_MSM_BUS_SCALING
Lucille Sylvesterdce84cd2011-10-12 14:15:37 -06003374 .bus_scale_table = &grp2d1_bus_scale_pdata,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003375#endif
Jordan Crouse46cf4bb2012-02-21 08:54:52 -07003376 .iommu_data = kgsl_2d1_iommu_data,
3377 .iommu_count = ARRAY_SIZE(kgsl_2d1_iommu_data),
Lucille Sylvester6e362412011-12-09 16:21:42 -07003378 .core_info = &grp2d_core_info,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003379};
3380
3381struct platform_device msm_kgsl_2d1 = {
3382 .name = "kgsl-2d1",
3383 .id = 1,
3384 .num_resources = ARRAY_SIZE(kgsl_2d1_resources),
3385 .resource = kgsl_2d1_resources,
3386 .dev = {
3387 .platform_data = &kgsl_2d1_pdata,
3388 },
3389};
3390
3391#ifdef CONFIG_MSM_GEMINI
3392static struct resource msm_gemini_resources[] = {
3393 {
3394 .start = 0x04600000,
3395 .end = 0x04600000 + SZ_1M - 1,
3396 .flags = IORESOURCE_MEM,
3397 },
3398 {
3399 .start = JPEG_IRQ,
3400 .end = JPEG_IRQ,
3401 .flags = IORESOURCE_IRQ,
3402 },
3403};
3404
3405struct platform_device msm8960_gemini_device = {
3406 .name = "msm_gemini",
3407 .resource = msm_gemini_resources,
3408 .num_resources = ARRAY_SIZE(msm_gemini_resources),
3409};
3410#endif
3411
Kalyani Oruganti465d1e12012-05-15 10:23:05 -07003412#ifdef CONFIG_MSM_MERCURY
3413static struct resource msm_mercury_resources[] = {
3414 {
3415 .start = 0x05000000,
3416 .end = 0x05000000 + SZ_1M - 1,
3417 .name = "mercury_resource_base",
3418 .flags = IORESOURCE_MEM,
3419 },
3420 {
3421 .start = JPEGD_IRQ,
3422 .end = JPEGD_IRQ,
3423 .flags = IORESOURCE_IRQ,
3424 },
3425};
3426struct platform_device msm8960_mercury_device = {
3427 .name = "msm_mercury",
3428 .resource = msm_mercury_resources,
3429 .num_resources = ARRAY_SIZE(msm_mercury_resources),
3430};
3431#endif
3432
Praveen Chidambaram78499012011-11-01 17:15:17 -06003433struct msm_rpm_platform_data msm8960_rpm_data __initdata = {
3434 .reg_base_addrs = {
3435 [MSM_RPM_PAGE_STATUS] = MSM_RPM_BASE,
3436 [MSM_RPM_PAGE_CTRL] = MSM_RPM_BASE + 0x400,
3437 [MSM_RPM_PAGE_REQ] = MSM_RPM_BASE + 0x600,
3438 [MSM_RPM_PAGE_ACK] = MSM_RPM_BASE + 0xa00,
3439 },
3440 .irq_ack = RPM_APCC_CPU0_GP_HIGH_IRQ,
Stephen Boydf61255e2012-02-24 14:31:09 -08003441 .irq_err = RPM_APCC_CPU0_GP_LOW_IRQ,
Praveen Chidambarame396ce62012-03-30 11:15:57 -06003442 .irq_wakeup = RPM_APCC_CPU0_WAKE_UP_IRQ,
Praveen Chidambaram78499012011-11-01 17:15:17 -06003443 .ipc_rpm_reg = MSM_APCS_GCC_BASE + 0x008,
3444 .ipc_rpm_val = 4,
3445 .target_id = {
3446 MSM_RPM_MAP(8960, NOTIFICATION_CONFIGURED_0, NOTIFICATION, 4),
3447 MSM_RPM_MAP(8960, NOTIFICATION_REGISTERED_0, NOTIFICATION, 4),
3448 MSM_RPM_MAP(8960, INVALIDATE_0, INVALIDATE, 8),
3449 MSM_RPM_MAP(8960, TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
3450 MSM_RPM_MAP(8960, TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
3451 MSM_RPM_MAP(8960, RPM_CTL, RPM_CTL, 1),
3452 MSM_RPM_MAP(8960, CXO_CLK, CXO_CLK, 1),
3453 MSM_RPM_MAP(8960, PXO_CLK, PXO_CLK, 1),
3454 MSM_RPM_MAP(8960, APPS_FABRIC_CLK, APPS_FABRIC_CLK, 1),
3455 MSM_RPM_MAP(8960, SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
3456 MSM_RPM_MAP(8960, MM_FABRIC_CLK, MM_FABRIC_CLK, 1),
3457 MSM_RPM_MAP(8960, DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
3458 MSM_RPM_MAP(8960, SFPB_CLK, SFPB_CLK, 1),
3459 MSM_RPM_MAP(8960, CFPB_CLK, CFPB_CLK, 1),
3460 MSM_RPM_MAP(8960, MMFPB_CLK, MMFPB_CLK, 1),
3461 MSM_RPM_MAP(8960, EBI1_CLK, EBI1_CLK, 1),
3462 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_HALT_0,
3463 APPS_FABRIC_CFG_HALT, 2),
3464 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_CLKMOD_0,
3465 APPS_FABRIC_CFG_CLKMOD, 3),
3466 MSM_RPM_MAP(8960, APPS_FABRIC_CFG_IOCTL,
3467 APPS_FABRIC_CFG_IOCTL, 1),
3468 MSM_RPM_MAP(8960, APPS_FABRIC_ARB_0, APPS_FABRIC_ARB, 12),
3469 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_HALT_0,
3470 SYS_FABRIC_CFG_HALT, 2),
3471 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_CLKMOD_0,
3472 SYS_FABRIC_CFG_CLKMOD, 3),
3473 MSM_RPM_MAP(8960, SYS_FABRIC_CFG_IOCTL,
3474 SYS_FABRIC_CFG_IOCTL, 1),
3475 MSM_RPM_MAP(8960, SYSTEM_FABRIC_ARB_0,
3476 SYSTEM_FABRIC_ARB, 29),
3477 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_HALT_0,
3478 MMSS_FABRIC_CFG_HALT, 2),
3479 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_CLKMOD_0,
3480 MMSS_FABRIC_CFG_CLKMOD, 3),
3481 MSM_RPM_MAP(8960, MMSS_FABRIC_CFG_IOCTL,
3482 MMSS_FABRIC_CFG_IOCTL, 1),
3483 MSM_RPM_MAP(8960, MM_FABRIC_ARB_0, MM_FABRIC_ARB, 23),
3484 MSM_RPM_MAP(8960, PM8921_S1_0, PM8921_S1, 2),
3485 MSM_RPM_MAP(8960, PM8921_S2_0, PM8921_S2, 2),
3486 MSM_RPM_MAP(8960, PM8921_S3_0, PM8921_S3, 2),
3487 MSM_RPM_MAP(8960, PM8921_S4_0, PM8921_S4, 2),
3488 MSM_RPM_MAP(8960, PM8921_S5_0, PM8921_S5, 2),
3489 MSM_RPM_MAP(8960, PM8921_S6_0, PM8921_S6, 2),
3490 MSM_RPM_MAP(8960, PM8921_S7_0, PM8921_S7, 2),
3491 MSM_RPM_MAP(8960, PM8921_S8_0, PM8921_S8, 2),
3492 MSM_RPM_MAP(8960, PM8921_L1_0, PM8921_L1, 2),
3493 MSM_RPM_MAP(8960, PM8921_L2_0, PM8921_L2, 2),
3494 MSM_RPM_MAP(8960, PM8921_L3_0, PM8921_L3, 2),
3495 MSM_RPM_MAP(8960, PM8921_L4_0, PM8921_L4, 2),
3496 MSM_RPM_MAP(8960, PM8921_L5_0, PM8921_L5, 2),
3497 MSM_RPM_MAP(8960, PM8921_L6_0, PM8921_L6, 2),
3498 MSM_RPM_MAP(8960, PM8921_L7_0, PM8921_L7, 2),
3499 MSM_RPM_MAP(8960, PM8921_L8_0, PM8921_L8, 2),
3500 MSM_RPM_MAP(8960, PM8921_L9_0, PM8921_L9, 2),
3501 MSM_RPM_MAP(8960, PM8921_L10_0, PM8921_L10, 2),
3502 MSM_RPM_MAP(8960, PM8921_L11_0, PM8921_L11, 2),
3503 MSM_RPM_MAP(8960, PM8921_L12_0, PM8921_L12, 2),
3504 MSM_RPM_MAP(8960, PM8921_L13_0, PM8921_L13, 2),
3505 MSM_RPM_MAP(8960, PM8921_L14_0, PM8921_L14, 2),
3506 MSM_RPM_MAP(8960, PM8921_L15_0, PM8921_L15, 2),
3507 MSM_RPM_MAP(8960, PM8921_L16_0, PM8921_L16, 2),
3508 MSM_RPM_MAP(8960, PM8921_L17_0, PM8921_L17, 2),
3509 MSM_RPM_MAP(8960, PM8921_L18_0, PM8921_L18, 2),
3510 MSM_RPM_MAP(8960, PM8921_L19_0, PM8921_L19, 2),
3511 MSM_RPM_MAP(8960, PM8921_L20_0, PM8921_L20, 2),
3512 MSM_RPM_MAP(8960, PM8921_L21_0, PM8921_L21, 2),
3513 MSM_RPM_MAP(8960, PM8921_L22_0, PM8921_L22, 2),
3514 MSM_RPM_MAP(8960, PM8921_L23_0, PM8921_L23, 2),
3515 MSM_RPM_MAP(8960, PM8921_L24_0, PM8921_L24, 2),
3516 MSM_RPM_MAP(8960, PM8921_L25_0, PM8921_L25, 2),
3517 MSM_RPM_MAP(8960, PM8921_L26_0, PM8921_L26, 2),
3518 MSM_RPM_MAP(8960, PM8921_L27_0, PM8921_L27, 2),
3519 MSM_RPM_MAP(8960, PM8921_L28_0, PM8921_L28, 2),
3520 MSM_RPM_MAP(8960, PM8921_L29_0, PM8921_L29, 2),
3521 MSM_RPM_MAP(8960, PM8921_CLK1_0, PM8921_CLK1, 2),
3522 MSM_RPM_MAP(8960, PM8921_CLK2_0, PM8921_CLK2, 2),
3523 MSM_RPM_MAP(8960, PM8921_LVS1, PM8921_LVS1, 1),
3524 MSM_RPM_MAP(8960, PM8921_LVS2, PM8921_LVS2, 1),
3525 MSM_RPM_MAP(8960, PM8921_LVS3, PM8921_LVS3, 1),
3526 MSM_RPM_MAP(8960, PM8921_LVS4, PM8921_LVS4, 1),
3527 MSM_RPM_MAP(8960, PM8921_LVS5, PM8921_LVS5, 1),
3528 MSM_RPM_MAP(8960, PM8921_LVS6, PM8921_LVS6, 1),
3529 MSM_RPM_MAP(8960, PM8921_LVS7, PM8921_LVS7, 1),
3530 MSM_RPM_MAP(8960, NCP_0, NCP, 2),
3531 MSM_RPM_MAP(8960, CXO_BUFFERS, CXO_BUFFERS, 1),
3532 MSM_RPM_MAP(8960, USB_OTG_SWITCH, USB_OTG_SWITCH, 1),
3533 MSM_RPM_MAP(8960, HDMI_SWITCH, HDMI_SWITCH, 1),
3534 MSM_RPM_MAP(8960, DDR_DMM_0, DDR_DMM, 2),
3535 MSM_RPM_MAP(8960, QDSS_CLK, QDSS_CLK, 1),
3536 },
3537 .target_status = {
3538 MSM_RPM_STATUS_ID_MAP(8960, VERSION_MAJOR),
3539 MSM_RPM_STATUS_ID_MAP(8960, VERSION_MINOR),
3540 MSM_RPM_STATUS_ID_MAP(8960, VERSION_BUILD),
3541 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_0),
3542 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_1),
3543 MSM_RPM_STATUS_ID_MAP(8960, SUPPORTED_RESOURCES_2),
3544 MSM_RPM_STATUS_ID_MAP(8960, RESERVED_SUPPORTED_RESOURCES_0),
3545 MSM_RPM_STATUS_ID_MAP(8960, SEQUENCE),
3546 MSM_RPM_STATUS_ID_MAP(8960, RPM_CTL),
3547 MSM_RPM_STATUS_ID_MAP(8960, CXO_CLK),
3548 MSM_RPM_STATUS_ID_MAP(8960, PXO_CLK),
3549 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CLK),
3550 MSM_RPM_STATUS_ID_MAP(8960, SYSTEM_FABRIC_CLK),
3551 MSM_RPM_STATUS_ID_MAP(8960, MM_FABRIC_CLK),
3552 MSM_RPM_STATUS_ID_MAP(8960, DAYTONA_FABRIC_CLK),
3553 MSM_RPM_STATUS_ID_MAP(8960, SFPB_CLK),
3554 MSM_RPM_STATUS_ID_MAP(8960, CFPB_CLK),
3555 MSM_RPM_STATUS_ID_MAP(8960, MMFPB_CLK),
3556 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CLK),
3557 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_HALT),
3558 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_CLKMOD),
3559 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_CFG_IOCTL),
3560 MSM_RPM_STATUS_ID_MAP(8960, APPS_FABRIC_ARB),
3561 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_HALT),
3562 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_CLKMOD),
3563 MSM_RPM_STATUS_ID_MAP(8960, SYS_FABRIC_CFG_IOCTL),
3564 MSM_RPM_STATUS_ID_MAP(8960, SYSTEM_FABRIC_ARB),
3565 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_HALT),
3566 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_CLKMOD),
3567 MSM_RPM_STATUS_ID_MAP(8960, MMSS_FABRIC_CFG_IOCTL),
3568 MSM_RPM_STATUS_ID_MAP(8960, MM_FABRIC_ARB),
3569 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S1_0),
3570 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S1_1),
3571 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S2_0),
3572 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S2_1),
3573 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S3_0),
3574 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S3_1),
3575 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S4_0),
3576 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S4_1),
3577 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S5_0),
3578 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S5_1),
3579 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S6_0),
3580 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S6_1),
3581 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S7_0),
3582 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S7_1),
3583 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S8_0),
3584 MSM_RPM_STATUS_ID_MAP(8960, PM8921_S8_1),
3585 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L1_0),
3586 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L1_1),
3587 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L2_0),
3588 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L2_1),
3589 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L3_0),
3590 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L3_1),
3591 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L4_0),
3592 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L4_1),
3593 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L5_0),
3594 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L5_1),
3595 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L6_0),
3596 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L6_1),
3597 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L7_0),
3598 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L7_1),
3599 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L8_0),
3600 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L8_1),
3601 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L9_0),
3602 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L9_1),
3603 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L10_0),
3604 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L10_1),
3605 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L11_0),
3606 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L11_1),
3607 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L12_0),
3608 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L12_1),
3609 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L13_0),
3610 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L13_1),
3611 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L14_0),
3612 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L14_1),
3613 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L15_0),
3614 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L15_1),
3615 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L16_0),
3616 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L16_1),
3617 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L17_0),
3618 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L17_1),
3619 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L18_0),
3620 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L18_1),
3621 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L19_0),
3622 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L19_1),
3623 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L20_0),
3624 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L20_1),
3625 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L21_0),
3626 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L21_1),
3627 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L22_0),
3628 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L22_1),
3629 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L23_0),
3630 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L23_1),
3631 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L24_0),
3632 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L24_1),
3633 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L25_0),
3634 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L25_1),
3635 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L26_0),
3636 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L26_1),
3637 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L27_0),
3638 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L27_1),
3639 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L28_0),
3640 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L28_1),
3641 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L29_0),
3642 MSM_RPM_STATUS_ID_MAP(8960, PM8921_L29_1),
3643 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK1_0),
3644 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK1_1),
3645 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK2_0),
3646 MSM_RPM_STATUS_ID_MAP(8960, PM8921_CLK2_1),
3647 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS1),
3648 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS2),
3649 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS3),
3650 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS4),
3651 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS5),
3652 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS6),
3653 MSM_RPM_STATUS_ID_MAP(8960, PM8921_LVS7),
3654 MSM_RPM_STATUS_ID_MAP(8960, NCP_0),
3655 MSM_RPM_STATUS_ID_MAP(8960, NCP_1),
3656 MSM_RPM_STATUS_ID_MAP(8960, CXO_BUFFERS),
3657 MSM_RPM_STATUS_ID_MAP(8960, USB_OTG_SWITCH),
3658 MSM_RPM_STATUS_ID_MAP(8960, HDMI_SWITCH),
3659 MSM_RPM_STATUS_ID_MAP(8960, DDR_DMM_0),
3660 MSM_RPM_STATUS_ID_MAP(8960, DDR_DMM_1),
3661 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CH0_RANGE),
3662 MSM_RPM_STATUS_ID_MAP(8960, EBI1_CH1_RANGE),
3663 },
3664 .target_ctrl_id = {
3665 MSM_RPM_CTRL_MAP(8960, VERSION_MAJOR),
3666 MSM_RPM_CTRL_MAP(8960, VERSION_MINOR),
3667 MSM_RPM_CTRL_MAP(8960, VERSION_BUILD),
3668 MSM_RPM_CTRL_MAP(8960, REQ_CTX_0),
3669 MSM_RPM_CTRL_MAP(8960, REQ_SEL_0),
3670 MSM_RPM_CTRL_MAP(8960, ACK_CTX_0),
3671 MSM_RPM_CTRL_MAP(8960, ACK_SEL_0),
3672 },
3673 .sel_invalidate = MSM_RPM_8960_SEL_INVALIDATE,
3674 .sel_notification = MSM_RPM_8960_SEL_NOTIFICATION,
3675 .sel_last = MSM_RPM_8960_SEL_LAST,
3676 .ver = {3, 0, 0},
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003677};
Praveen Chidambaram8985b012011-12-16 13:38:59 -07003678
Praveen Chidambaram78499012011-11-01 17:15:17 -06003679struct platform_device msm8960_rpm_device = {
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06003680 .name = "msm_rpm",
3681 .id = -1,
3682};
3683
Praveen Chidambaram78499012011-11-01 17:15:17 -06003684static struct msm_rpm_log_platform_data msm_rpm_log_pdata = {
3685 .phys_addr_base = 0x0010C000,
3686 .reg_offsets = {
3687 [MSM_RPM_LOG_PAGE_INDICES] = 0x00000080,
3688 [MSM_RPM_LOG_PAGE_BUFFER] = 0x000000A0,
3689 },
3690 .phys_size = SZ_8K,
3691 .log_len = 4096, /* log's buffer length in bytes */
3692 .log_len_mask = (4096 >> 2) - 1, /* length mask in units of u32 */
3693};
3694
3695struct platform_device msm8960_rpm_log_device = {
3696 .name = "msm_rpm_log",
3697 .id = -1,
3698 .dev = {
3699 .platform_data = &msm_rpm_log_pdata,
3700 },
3701};
3702
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003703static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
Anji Jonnalaa1a1c3b2012-09-18 19:20:21 +05303704 .phys_addr_base = 0x0010DD04,
3705 .phys_size = SZ_256,
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003706};
3707
Praveen Chidambaram78499012011-11-01 17:15:17 -06003708struct platform_device msm8960_rpm_stat_device = {
Praveen Chidambaram7a712232011-10-28 13:39:45 -06003709 .name = "msm_rpm_stat",
3710 .id = -1,
3711 .dev = {
3712 .platform_data = &msm_rpm_stat_pdata,
3713 },
3714};
Maheshkumar Sivasubramanian9c8cdc92011-09-12 14:11:30 -06003715
Anji Jonnala2a8bd312012-11-01 13:11:42 +05303716static struct resource resources_rpm_master_stats[] = {
3717 {
3718 .start = MSM8960_RPM_MASTER_STATS_BASE,
3719 .end = MSM8960_RPM_MASTER_STATS_BASE + SZ_256,
3720 .flags = IORESOURCE_MEM,
3721 },
3722};
3723
3724static char *master_names[] = {
3725 "KPSS",
3726 "GPSS",
3727 "LPASS",
3728 "RIVA",
3729 "DSPS",
3730};
3731
3732static struct msm_rpm_master_stats_platform_data msm_rpm_master_stat_pdata = {
3733 .masters = master_names,
3734 .nomasters = ARRAY_SIZE(master_names),
3735};
3736
3737struct platform_device msm8960_rpm_master_stat_device = {
3738 .name = "msm_rpm_master_stat",
3739 .id = -1,
3740 .num_resources = ARRAY_SIZE(resources_rpm_master_stats),
3741 .resource = resources_rpm_master_stats,
3742 .dev = {
3743 .platform_data = &msm_rpm_master_stat_pdata,
3744 },
3745};
3746
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003747struct platform_device msm_bus_sys_fabric = {
3748 .name = "msm_bus_fabric",
3749 .id = MSM_BUS_FAB_SYSTEM,
3750};
3751struct platform_device msm_bus_apps_fabric = {
3752 .name = "msm_bus_fabric",
3753 .id = MSM_BUS_FAB_APPSS,
3754};
3755struct platform_device msm_bus_mm_fabric = {
3756 .name = "msm_bus_fabric",
3757 .id = MSM_BUS_FAB_MMSS,
3758};
3759struct platform_device msm_bus_sys_fpb = {
3760 .name = "msm_bus_fabric",
3761 .id = MSM_BUS_FAB_SYSTEM_FPB,
3762};
3763struct platform_device msm_bus_cpss_fpb = {
3764 .name = "msm_bus_fabric",
3765 .id = MSM_BUS_FAB_CPSS_FPB,
3766};
3767
3768/* Sensors DSPS platform data */
3769#ifdef CONFIG_MSM_DSPS
3770
Vikram Mulukutlaac682bb2012-09-20 14:06:23 -07003771#define PPSS_DSPS_TCM_CODE_BASE 0x12000000
3772#define PPSS_DSPS_TCM_CODE_SIZE 0x28000
3773#define PPSS_DSPS_TCM_BUF_BASE 0x12040000
3774#define PPSS_DSPS_TCM_BUF_SIZE 0x4000
3775#define PPSS_DSPS_PIPE_BASE 0x12800000
3776#define PPSS_DSPS_PIPE_SIZE 0x4000
3777#define PPSS_DSPS_DDR_BASE 0x8fe00000
3778#define PPSS_DSPS_DDR_SIZE 0x100000
3779#define PPSS_SMEM_BASE 0x80000000
3780#define PPSS_SMEM_SIZE 0x200000
3781#define PPSS_REG_PHYS_BASE 0x12080000
3782#define PPSS_WDOG_UNMASKED_INT_EN 0x1808
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003783
3784static struct dsps_clk_info dsps_clks[] = {};
3785static struct dsps_regulator_info dsps_regs[] = {};
3786
3787/*
3788 * Note: GPIOs field is intialized in run-time at the function
3789 * msm8960_init_dsps().
3790 */
3791
3792struct msm_dsps_platform_data msm_dsps_pdata = {
3793 .clks = dsps_clks,
3794 .clks_num = ARRAY_SIZE(dsps_clks),
3795 .gpios = NULL,
3796 .gpios_num = 0,
3797 .regs = dsps_regs,
3798 .regs_num = ARRAY_SIZE(dsps_regs),
3799 .dsps_pwr_ctl_en = 1,
karthik karuppasamy1a1c6b02012-05-29 15:16:32 -07003800 .tcm_code_start = PPSS_DSPS_TCM_CODE_BASE,
3801 .tcm_code_size = PPSS_DSPS_TCM_CODE_SIZE,
3802 .tcm_buf_start = PPSS_DSPS_TCM_BUF_BASE,
3803 .tcm_buf_size = PPSS_DSPS_TCM_BUF_SIZE,
3804 .pipe_start = PPSS_DSPS_PIPE_BASE,
3805 .pipe_size = PPSS_DSPS_PIPE_SIZE,
3806 .ddr_start = PPSS_DSPS_DDR_BASE,
3807 .ddr_size = PPSS_DSPS_DDR_SIZE,
3808 .smem_start = PPSS_SMEM_BASE,
3809 .smem_size = PPSS_SMEM_SIZE,
Vikram Mulukutlaac682bb2012-09-20 14:06:23 -07003810 .ppss_wdog_unmasked_int_en_reg = PPSS_WDOG_UNMASKED_INT_EN,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003811 .signature = DSPS_SIGNATURE,
3812};
3813
3814static struct resource msm_dsps_resources[] = {
3815 {
3816 .start = PPSS_REG_PHYS_BASE,
3817 .end = PPSS_REG_PHYS_BASE + SZ_8K - 1,
3818 .name = "ppss_reg",
3819 .flags = IORESOURCE_MEM,
3820 },
Wentao Xua55500b2011-08-16 18:15:04 -04003821 {
3822 .start = PPSS_WDOG_TIMER_IRQ,
3823 .end = PPSS_WDOG_TIMER_IRQ,
3824 .name = "ppss_wdog",
3825 .flags = IORESOURCE_IRQ,
3826 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07003827};
3828
3829struct platform_device msm_dsps_device = {
3830 .name = "msm_dsps",
3831 .id = 0,
3832 .num_resources = ARRAY_SIZE(msm_dsps_resources),
3833 .resource = msm_dsps_resources,
3834 .dev.platform_data = &msm_dsps_pdata,
3835};
3836
3837#endif /* CONFIG_MSM_DSPS */
Pratik Patel7831c082011-06-08 21:44:37 -07003838
Pratik Patel3b0ca882012-06-01 16:54:14 -07003839#define CORESIGHT_PHYS_BASE 0x01A00000
3840#define CORESIGHT_TPIU_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x3000)
3841#define CORESIGHT_ETB_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1000)
3842#define CORESIGHT_FUNNEL_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x4000)
3843#define CORESIGHT_STM_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x6000)
3844#define CORESIGHT_ETM0_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1C000)
3845#define CORESIGHT_ETM1_PHYS_BASE (CORESIGHT_PHYS_BASE + 0x1D000)
Pratik Patel7831c082011-06-08 21:44:37 -07003846
Pratik Patel3b0ca882012-06-01 16:54:14 -07003847#define CORESIGHT_STM_CHANNEL_PHYS_BASE (0x14000000 + 0x280000)
Pratik Patel7831c082011-06-08 21:44:37 -07003848
Pratik Patel3b0ca882012-06-01 16:54:14 -07003849static struct resource coresight_tpiu_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003850 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003851 .start = CORESIGHT_TPIU_PHYS_BASE,
3852 .end = CORESIGHT_TPIU_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003853 .flags = IORESOURCE_MEM,
3854 },
3855};
3856
Pratik Patel3b0ca882012-06-01 16:54:14 -07003857static struct coresight_platform_data coresight_tpiu_pdata = {
3858 .id = 0,
3859 .name = "coresight-tpiu",
3860 .nr_inports = 1,
3861 .nr_outports = 0,
Pratik Patel7831c082011-06-08 21:44:37 -07003862};
3863
Pratik Patel3b0ca882012-06-01 16:54:14 -07003864struct platform_device coresight_tpiu_device = {
3865 .name = "coresight-tpiu",
3866 .id = 0,
3867 .num_resources = ARRAY_SIZE(coresight_tpiu_resources),
3868 .resource = coresight_tpiu_resources,
3869 .dev = {
3870 .platform_data = &coresight_tpiu_pdata,
3871 },
3872};
3873
3874static struct resource coresight_etb_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003875 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003876 .start = CORESIGHT_ETB_PHYS_BASE,
3877 .end = CORESIGHT_ETB_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003878 .flags = IORESOURCE_MEM,
3879 },
3880};
3881
Pratik Patel3b0ca882012-06-01 16:54:14 -07003882static struct coresight_platform_data coresight_etb_pdata = {
3883 .id = 1,
3884 .name = "coresight-etb",
3885 .nr_inports = 1,
3886 .nr_outports = 0,
3887 .default_sink = true,
Pratik Patel7831c082011-06-08 21:44:37 -07003888};
3889
Pratik Patel3b0ca882012-06-01 16:54:14 -07003890struct platform_device coresight_etb_device = {
3891 .name = "coresight-etb",
3892 .id = 0,
3893 .num_resources = ARRAY_SIZE(coresight_etb_resources),
3894 .resource = coresight_etb_resources,
3895 .dev = {
3896 .platform_data = &coresight_etb_pdata,
3897 },
3898};
3899
3900static struct resource coresight_funnel_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003901 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003902 .start = CORESIGHT_FUNNEL_PHYS_BASE,
3903 .end = CORESIGHT_FUNNEL_PHYS_BASE + SZ_4K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003904 .flags = IORESOURCE_MEM,
3905 },
3906};
3907
Pratik Patel3b0ca882012-06-01 16:54:14 -07003908static const int coresight_funnel_outports[] = { 0, 1 };
3909static const int coresight_funnel_child_ids[] = { 0, 1 };
3910static const int coresight_funnel_child_ports[] = { 0, 0 };
3911
3912static struct coresight_platform_data coresight_funnel_pdata = {
3913 .id = 2,
3914 .name = "coresight-funnel",
3915 .nr_inports = 4,
3916 .outports = coresight_funnel_outports,
3917 .child_ids = coresight_funnel_child_ids,
3918 .child_ports = coresight_funnel_child_ports,
3919 .nr_outports = ARRAY_SIZE(coresight_funnel_outports),
Pratik Patel7831c082011-06-08 21:44:37 -07003920};
3921
Pratik Patel3b0ca882012-06-01 16:54:14 -07003922struct platform_device coresight_funnel_device = {
3923 .name = "coresight-funnel",
3924 .id = 0,
3925 .num_resources = ARRAY_SIZE(coresight_funnel_resources),
3926 .resource = coresight_funnel_resources,
3927 .dev = {
3928 .platform_data = &coresight_funnel_pdata,
3929 },
3930};
3931
3932static struct resource coresight_stm_resources[] = {
Pratik Patel7831c082011-06-08 21:44:37 -07003933 {
Pratik Patel3b0ca882012-06-01 16:54:14 -07003934 .start = CORESIGHT_STM_PHYS_BASE,
3935 .end = CORESIGHT_STM_PHYS_BASE + SZ_4K - 1,
3936 .flags = IORESOURCE_MEM,
3937 },
3938 {
3939 .start = CORESIGHT_STM_CHANNEL_PHYS_BASE,
3940 .end = CORESIGHT_STM_CHANNEL_PHYS_BASE + SZ_1M + SZ_512K - 1,
Pratik Patel7831c082011-06-08 21:44:37 -07003941 .flags = IORESOURCE_MEM,
3942 },
3943};
3944
Pratik Patel3b0ca882012-06-01 16:54:14 -07003945static const int coresight_stm_outports[] = { 0 };
3946static const int coresight_stm_child_ids[] = { 2 };
3947static const int coresight_stm_child_ports[] = { 2 };
3948
3949static struct coresight_platform_data coresight_stm_pdata = {
3950 .id = 3,
3951 .name = "coresight-stm",
3952 .nr_inports = 0,
3953 .outports = coresight_stm_outports,
3954 .child_ids = coresight_stm_child_ids,
3955 .child_ports = coresight_stm_child_ports,
3956 .nr_outports = ARRAY_SIZE(coresight_stm_outports),
Pratik Patel7831c082011-06-08 21:44:37 -07003957};
3958
Pratik Patel3b0ca882012-06-01 16:54:14 -07003959struct platform_device coresight_stm_device = {
3960 .name = "coresight-stm",
3961 .id = 0,
3962 .num_resources = ARRAY_SIZE(coresight_stm_resources),
3963 .resource = coresight_stm_resources,
3964 .dev = {
3965 .platform_data = &coresight_stm_pdata,
3966 },
3967};
3968
3969static struct resource coresight_etm0_resources[] = {
3970 {
3971 .start = CORESIGHT_ETM0_PHYS_BASE,
3972 .end = CORESIGHT_ETM0_PHYS_BASE + SZ_4K - 1,
3973 .flags = IORESOURCE_MEM,
3974 },
3975};
3976
3977static const int coresight_etm0_outports[] = { 0 };
3978static const int coresight_etm0_child_ids[] = { 2 };
3979static const int coresight_etm0_child_ports[] = { 0 };
3980
3981static struct coresight_platform_data coresight_etm0_pdata = {
3982 .id = 4,
3983 .name = "coresight-etm0",
3984 .nr_inports = 0,
3985 .outports = coresight_etm0_outports,
3986 .child_ids = coresight_etm0_child_ids,
3987 .child_ports = coresight_etm0_child_ports,
3988 .nr_outports = ARRAY_SIZE(coresight_etm0_outports),
3989};
3990
3991struct platform_device coresight_etm0_device = {
3992 .name = "coresight-etm",
3993 .id = 0,
3994 .num_resources = ARRAY_SIZE(coresight_etm0_resources),
3995 .resource = coresight_etm0_resources,
3996 .dev = {
3997 .platform_data = &coresight_etm0_pdata,
3998 },
3999};
4000
4001static struct resource coresight_etm1_resources[] = {
4002 {
4003 .start = CORESIGHT_ETM1_PHYS_BASE,
4004 .end = CORESIGHT_ETM1_PHYS_BASE + SZ_4K - 1,
4005 .flags = IORESOURCE_MEM,
4006 },
4007};
4008
4009static const int coresight_etm1_outports[] = { 0 };
4010static const int coresight_etm1_child_ids[] = { 2 };
4011static const int coresight_etm1_child_ports[] = { 1 };
4012
4013static struct coresight_platform_data coresight_etm1_pdata = {
4014 .id = 5,
4015 .name = "coresight-etm1",
4016 .nr_inports = 0,
4017 .outports = coresight_etm1_outports,
4018 .child_ids = coresight_etm1_child_ids,
4019 .child_ports = coresight_etm1_child_ports,
4020 .nr_outports = ARRAY_SIZE(coresight_etm1_outports),
4021};
4022
4023struct platform_device coresight_etm1_device = {
4024 .name = "coresight-etm",
4025 .id = 1,
4026 .num_resources = ARRAY_SIZE(coresight_etm1_resources),
4027 .resource = coresight_etm1_resources,
4028 .dev = {
4029 .platform_data = &coresight_etm1_pdata,
4030 },
4031};
Praveen Chidambaram8ea3dcd2011-12-07 14:46:31 -07004032
Stepan Moskovchenkoc0557252012-06-07 17:39:14 -07004033static struct resource msm_ebi1_ch0_erp_resources[] = {
4034 {
4035 .start = HSDDRX_EBI1CH0_IRQ,
4036 .flags = IORESOURCE_IRQ,
4037 },
4038 {
4039 .start = 0x00A40000,
4040 .end = 0x00A40000 + SZ_4K - 1,
4041 .flags = IORESOURCE_MEM,
4042 },
4043};
4044
4045struct platform_device msm8960_device_ebi1_ch0_erp = {
4046 .name = "msm_ebi_erp",
4047 .id = 0,
4048 .num_resources = ARRAY_SIZE(msm_ebi1_ch0_erp_resources),
4049 .resource = msm_ebi1_ch0_erp_resources,
4050};
4051
4052static struct resource msm_ebi1_ch1_erp_resources[] = {
4053 {
4054 .start = HSDDRX_EBI1CH1_IRQ,
4055 .flags = IORESOURCE_IRQ,
4056 },
4057 {
4058 .start = 0x00D40000,
4059 .end = 0x00D40000 + SZ_4K - 1,
4060 .flags = IORESOURCE_MEM,
4061 },
4062};
4063
4064struct platform_device msm8960_device_ebi1_ch1_erp = {
4065 .name = "msm_ebi_erp",
4066 .id = 1,
4067 .num_resources = ARRAY_SIZE(msm_ebi1_ch1_erp_resources),
4068 .resource = msm_ebi1_ch1_erp_resources,
4069};
4070
Stepan Moskovchenko28662c52012-03-01 12:48:45 -08004071static struct resource msm_cache_erp_resources[] = {
4072 {
4073 .name = "l1_irq",
4074 .start = SC_SICCPUXEXTFAULTIRPTREQ,
4075 .flags = IORESOURCE_IRQ,
4076 },
4077 {
4078 .name = "l2_irq",
4079 .start = APCC_QGICL2IRPTREQ,
4080 .flags = IORESOURCE_IRQ,
4081 }
4082};
4083
4084struct platform_device msm8960_device_cache_erp = {
4085 .name = "msm_cache_erp",
4086 .id = -1,
4087 .num_resources = ARRAY_SIZE(msm_cache_erp_resources),
4088 .resource = msm_cache_erp_resources,
4089};
Laura Abbott0577d7b2012-04-17 11:14:30 -07004090
4091struct msm_iommu_domain_name msm8960_iommu_ctx_names[] = {
4092 /* Camera */
4093 {
4094 .name = "vpe_src",
4095 .domain = CAMERA_DOMAIN,
4096 },
4097 /* Camera */
4098 {
4099 .name = "vpe_dst",
4100 .domain = CAMERA_DOMAIN,
4101 },
4102 /* Camera */
4103 {
4104 .name = "vfe_imgwr",
4105 .domain = CAMERA_DOMAIN,
4106 },
4107 /* Camera */
4108 {
4109 .name = "vfe_misc",
4110 .domain = CAMERA_DOMAIN,
4111 },
4112 /* Camera */
4113 {
4114 .name = "ijpeg_src",
4115 .domain = CAMERA_DOMAIN,
4116 },
4117 /* Camera */
4118 {
4119 .name = "ijpeg_dst",
4120 .domain = CAMERA_DOMAIN,
4121 },
4122 /* Camera */
4123 {
4124 .name = "jpegd_src",
4125 .domain = CAMERA_DOMAIN,
4126 },
4127 /* Camera */
4128 {
4129 .name = "jpegd_dst",
4130 .domain = CAMERA_DOMAIN,
4131 },
Mayank Chopra9c4743f2012-06-27 15:31:43 +05304132 /* Rotator */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004133 {
4134 .name = "rot_src",
Olav Hauganef95ae32012-05-15 09:50:30 -07004135 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004136 },
Mayank Chopra9c4743f2012-06-27 15:31:43 +05304137 /* Rotator */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004138 {
4139 .name = "rot_dst",
Olav Hauganef95ae32012-05-15 09:50:30 -07004140 .domain = ROTATOR_SRC_DOMAIN,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004141 },
4142 /* Video */
4143 {
4144 .name = "vcodec_a_mm1",
4145 .domain = VIDEO_DOMAIN,
4146 },
4147 /* Video */
4148 {
4149 .name = "vcodec_b_mm2",
4150 .domain = VIDEO_DOMAIN,
4151 },
4152 /* Video */
4153 {
4154 .name = "vcodec_a_stream",
4155 .domain = VIDEO_DOMAIN,
4156 },
4157};
4158
4159static struct mem_pool msm8960_video_pools[] = {
4160 /*
4161 * Video hardware has the following requirements:
4162 * 1. All video addresses used by the video hardware must be at a higher
4163 * address than video firmware address.
4164 * 2. Video hardware can only access a range of 256MB from the base of
4165 * the video firmware.
4166 */
4167 [VIDEO_FIRMWARE_POOL] =
4168 /* Low addresses, intended for video firmware */
4169 {
4170 .paddr = SZ_128K,
4171 .size = SZ_16M - SZ_128K,
4172 },
4173 [VIDEO_MAIN_POOL] =
4174 /* Main video pool */
4175 {
4176 .paddr = SZ_16M,
4177 .size = SZ_256M - SZ_16M,
4178 },
4179 [GEN_POOL] =
4180 /* Remaining address space up to 2G */
4181 {
4182 .paddr = SZ_256M,
4183 .size = SZ_2G - SZ_256M,
4184 },
4185};
4186
4187static struct mem_pool msm8960_camera_pools[] = {
4188 [GEN_POOL] =
4189 /* One address space for camera */
4190 {
4191 .paddr = SZ_128K,
4192 .size = SZ_2G - SZ_128K,
4193 },
4194};
4195
Olav Hauganef95ae32012-05-15 09:50:30 -07004196static struct mem_pool msm8960_display_read_pools[] = {
Laura Abbott0577d7b2012-04-17 11:14:30 -07004197 [GEN_POOL] =
Olav Hauganef95ae32012-05-15 09:50:30 -07004198 /* One address space for display reads */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004199 {
4200 .paddr = SZ_128K,
4201 .size = SZ_2G - SZ_128K,
4202 },
4203};
4204
Olav Hauganef95ae32012-05-15 09:50:30 -07004205static struct mem_pool msm8960_rotator_src_pools[] = {
Laura Abbott0577d7b2012-04-17 11:14:30 -07004206 [GEN_POOL] =
Olav Hauganef95ae32012-05-15 09:50:30 -07004207 /* One address space for rotator src */
Laura Abbott0577d7b2012-04-17 11:14:30 -07004208 {
4209 .paddr = SZ_128K,
4210 .size = SZ_2G - SZ_128K,
4211 },
4212};
4213
4214static struct msm_iommu_domain msm8960_iommu_domains[] = {
4215 [VIDEO_DOMAIN] = {
4216 .iova_pools = msm8960_video_pools,
4217 .npools = ARRAY_SIZE(msm8960_video_pools),
4218 },
4219 [CAMERA_DOMAIN] = {
4220 .iova_pools = msm8960_camera_pools,
4221 .npools = ARRAY_SIZE(msm8960_camera_pools),
4222 },
Olav Hauganef95ae32012-05-15 09:50:30 -07004223 [DISPLAY_READ_DOMAIN] = {
4224 .iova_pools = msm8960_display_read_pools,
4225 .npools = ARRAY_SIZE(msm8960_display_read_pools),
Laura Abbott0577d7b2012-04-17 11:14:30 -07004226 },
Olav Hauganef95ae32012-05-15 09:50:30 -07004227 [ROTATOR_SRC_DOMAIN] = {
4228 .iova_pools = msm8960_rotator_src_pools,
4229 .npools = ARRAY_SIZE(msm8960_rotator_src_pools),
Laura Abbott0577d7b2012-04-17 11:14:30 -07004230 },
4231};
4232
4233struct iommu_domains_pdata msm8960_iommu_domain_pdata = {
4234 .domains = msm8960_iommu_domains,
4235 .ndomains = ARRAY_SIZE(msm8960_iommu_domains),
4236 .domain_names = msm8960_iommu_ctx_names,
4237 .nnames = ARRAY_SIZE(msm8960_iommu_ctx_names),
4238 .domain_alloc_flags = 0,
4239};
4240
4241struct platform_device msm8960_iommu_domain_device = {
4242 .name = "iommu_domains",
4243 .id = -1,
4244 .dev = {
4245 .platform_data = &msm8960_iommu_domain_pdata,
Laura Abbott532b2df2012-04-12 10:53:48 -07004246 }
4247};
4248
4249struct msm_rtb_platform_data msm8960_rtb_pdata = {
4250 .size = SZ_1M,
4251};
4252
4253static int __init msm_rtb_set_buffer_size(char *p)
4254{
4255 int s;
4256
4257 s = memparse(p, NULL);
4258 msm8960_rtb_pdata.size = ALIGN(s, SZ_4K);
4259 return 0;
4260}
4261early_param("msm_rtb_size", msm_rtb_set_buffer_size);
4262
4263
4264struct platform_device msm8960_rtb_device = {
4265 .name = "msm_rtb",
4266 .id = -1,
4267 .dev = {
4268 .platform_data = &msm8960_rtb_pdata,
Laura Abbott0577d7b2012-04-17 11:14:30 -07004269 },
4270};
Laura Abbott2ae8f362012-04-12 11:03:04 -07004271
Laura Abbott0a103cf2012-05-25 09:00:23 -07004272#define MSM_8960_L1_SIZE SZ_1M
4273/*
4274 * The actual L2 size is smaller but we need a larger buffer
4275 * size to store other dump information
4276 */
4277#define MSM_8960_L2_SIZE SZ_4M
4278
Laura Abbott2ae8f362012-04-12 11:03:04 -07004279struct msm_cache_dump_platform_data msm8960_cache_dump_pdata = {
Laura Abbott0a103cf2012-05-25 09:00:23 -07004280 .l2_size = MSM_8960_L2_SIZE,
4281 .l1_size = MSM_8960_L1_SIZE,
Laura Abbott2ae8f362012-04-12 11:03:04 -07004282};
4283
4284struct platform_device msm8960_cache_dump_device = {
4285 .name = "msm_cache_dump",
4286 .id = -1,
4287 .dev = {
4288 .platform_data = &msm8960_cache_dump_pdata,
4289 },
4290};
Joel King0cbf5d82012-05-24 15:21:38 -07004291
4292#define MDM2AP_ERRFATAL 40
4293#define AP2MDM_ERRFATAL 80
4294#define MDM2AP_STATUS 24
4295#define AP2MDM_STATUS 77
4296#define AP2MDM_PMIC_PWR_EN 22
4297#define AP2MDM_KPDPWR_N 79
4298#define AP2MDM_SOFT_RESET 78
Ameya Thakur43248fd2012-07-10 18:50:52 -07004299#define USB_SW 25
Joel King0cbf5d82012-05-24 15:21:38 -07004300
4301static struct resource sglte_resources[] = {
4302 {
4303 .start = MDM2AP_ERRFATAL,
4304 .end = MDM2AP_ERRFATAL,
4305 .name = "MDM2AP_ERRFATAL",
4306 .flags = IORESOURCE_IO,
4307 },
4308 {
4309 .start = AP2MDM_ERRFATAL,
4310 .end = AP2MDM_ERRFATAL,
4311 .name = "AP2MDM_ERRFATAL",
4312 .flags = IORESOURCE_IO,
4313 },
4314 {
4315 .start = MDM2AP_STATUS,
4316 .end = MDM2AP_STATUS,
4317 .name = "MDM2AP_STATUS",
4318 .flags = IORESOURCE_IO,
4319 },
4320 {
4321 .start = AP2MDM_STATUS,
4322 .end = AP2MDM_STATUS,
4323 .name = "AP2MDM_STATUS",
4324 .flags = IORESOURCE_IO,
4325 },
4326 {
4327 .start = AP2MDM_PMIC_PWR_EN,
4328 .end = AP2MDM_PMIC_PWR_EN,
4329 .name = "AP2MDM_PMIC_PWR_EN",
4330 .flags = IORESOURCE_IO,
4331 },
4332 {
4333 .start = AP2MDM_KPDPWR_N,
4334 .end = AP2MDM_KPDPWR_N,
4335 .name = "AP2MDM_KPDPWR_N",
4336 .flags = IORESOURCE_IO,
4337 },
4338 {
4339 .start = AP2MDM_SOFT_RESET,
4340 .end = AP2MDM_SOFT_RESET,
4341 .name = "AP2MDM_SOFT_RESET",
4342 .flags = IORESOURCE_IO,
4343 },
Ameya Thakur43248fd2012-07-10 18:50:52 -07004344 {
4345 .start = USB_SW,
4346 .end = USB_SW,
4347 .name = "USB_SW",
4348 .flags = IORESOURCE_IO,
4349 },
Joel King0cbf5d82012-05-24 15:21:38 -07004350};
4351
Rohit Vaswanib1cc4932012-07-23 21:30:11 -07004352struct platform_device msm_gpio_device = {
4353 .name = "msmgpio",
4354 .id = -1,
4355};
4356
Joel King0cbf5d82012-05-24 15:21:38 -07004357struct platform_device mdm_sglte_device = {
4358 .name = "mdm2_modem",
4359 .id = -1,
4360 .num_resources = ARRAY_SIZE(sglte_resources),
4361 .resource = sglte_resources,
4362};
Arun Menond4837f62012-08-20 15:25:50 -07004363
4364struct platform_device *msm8960_vidc_device[] __initdata = {
4365 &msm_device_vidc
4366};
4367
4368void __init msm8960_add_vidc_device(void)
4369{
4370 if (cpu_is_msm8960ab()) {
4371 struct msm_vidc_platform_data *pdata;
4372 pdata = (struct msm_vidc_platform_data *)
4373 msm_device_vidc.dev.platform_data;
4374 pdata->vidc_bus_client_pdata = &vidc_pro_bus_client_data;
4375 }
4376 platform_add_devices(msm8960_vidc_device,
4377 ARRAY_SIZE(msm8960_vidc_device));
4378}