blob: 69a2d180860e4a324c683597801224f87a98e6c7 [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* arch/arm/mach-msm/adsp_info.c
2 *
Duy Truong790f06d2013-02-13 16:38:12 -08003 * Copyright (c) 2008-2009, 2011-2012 The Linux Foundation. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07004 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16#include "adsp.h"
17
18/* Firmware modules */
19#define QDSP_MODULE_KERNEL 0x0106dd4e
20#define QDSP_MODULE_AFETASK 0x0106dd6f
21#define QDSP_MODULE_AUDPLAY0TASK 0x0106dd70
22#define QDSP_MODULE_AUDPLAY1TASK 0x0106dd71
23#define QDSP_MODULE_AUDPPTASK 0x0106dd72
24#define QDSP_MODULE_VIDEOTASK 0x0106dd73
25#define QDSP_MODULE_VIDEO_AAC_VOC 0x0106dd74
26#define QDSP_MODULE_PCM_DEC 0x0106dd75
27#define QDSP_MODULE_AUDIO_DEC_MP3 0x0106dd76
28#define QDSP_MODULE_AUDIO_DEC_AAC 0x0106dd77
29#define QDSP_MODULE_AUDIO_DEC_WMA 0x0106dd78
30#define QDSP_MODULE_HOSTPCM 0x0106dd79
31#define QDSP_MODULE_DTMF 0x0106dd7a
32#define QDSP_MODULE_AUDRECTASK 0x0106dd7b
33#define QDSP_MODULE_AUDPREPROCTASK 0x0106dd7c
34#define QDSP_MODULE_SBC_ENC 0x0106dd7d
35#define QDSP_MODULE_VOC_UMTS 0x0106dd9a
36#define QDSP_MODULE_VOC_CDMA 0x0106dd98
37#define QDSP_MODULE_VOC_PCM 0x0106dd7f
38#define QDSP_MODULE_VOCENCTASK 0x0106dd80
39#define QDSP_MODULE_VOCDECTASK 0x0106dd81
40#define QDSP_MODULE_VOICEPROCTASK 0x0106dd82
41#define QDSP_MODULE_VIDEOENCTASK 0x0106dd83
42#define QDSP_MODULE_VFETASK 0x0106dd84
43#define QDSP_MODULE_WAV_ENC 0x0106dd85
44#define QDSP_MODULE_AACLC_ENC 0x0106dd86
45#define QDSP_MODULE_VIDEO_AMR 0x0106dd87
46#define QDSP_MODULE_VOC_AMR 0x0106dd88
47#define QDSP_MODULE_VOC_EVRC 0x0106dd89
48#define QDSP_MODULE_VOC_13K 0x0106dd8a
49#define QDSP_MODULE_VOC_FGV 0x0106dd8b
50#define QDSP_MODULE_DIAGTASK 0x0106dd8c
51#define QDSP_MODULE_JPEGTASK 0x0106dd8d
52#define QDSP_MODULE_LPMTASK 0x0106dd8e
53#define QDSP_MODULE_QCAMTASK 0x0106dd8f
54#define QDSP_MODULE_MODMATHTASK 0x0106dd90
55#define QDSP_MODULE_AUDPLAY2TASK 0x0106dd91
56#define QDSP_MODULE_AUDPLAY3TASK 0x0106dd92
57#define QDSP_MODULE_AUDPLAY4TASK 0x0106dd93
58#define QDSP_MODULE_GRAPHICSTASK 0x0106dd94
59#define QDSP_MODULE_MIDI 0x0106dd95
60#define QDSP_MODULE_GAUDIO 0x0106dd96
61#define QDSP_MODULE_VDEC_LP_MODE 0x0106dd97
62#define QDSP_MODULE_VIDEO_AAC_VOC_TURBO 0x01089f77
63#define QDSP_MODULE_VIDEO_AMR_TURBO 0x01089f78
64#define QDSP_MODULE_WM_TURBO_MODE 0x01089f79
65#define QDSP_MODULE_VDEC_LP_MODE_TURBO 0x01089f7a
66#define QDSP_MODULE_AUDREC0TASK 0x0109696f
67#define QDSP_MODULE_AUDREC1TASK 0x01096970
68#define QDSP_MODULE_RMTASK 0x01090f8e
69#define QDSP_MODULE_MAX 0x7fffffff
70
71 /* DO NOT USE: Force this enum to be a 32bit type to improve speed */
72#define QDSP_MODULE_32BIT_DUMMY 0x10000
73
74static uint32_t *qdsp_task_to_module[IMG_MAX];
75static uint32_t *qdsp_queue_offset_table[IMG_MAX];
76
77#define QDSP_MODULE(n, clkname, clkrate, verify_cmd_func, patch_event_func) \
78 { .name = #n, .pdev_name = "adsp_" #n, .id = QDSP_MODULE_##n, \
79 .clk_name = clkname, .clk_rate = clkrate, \
80 .verify_cmd = verify_cmd_func, .patch_event = patch_event_func }
81
82static struct adsp_module_info module_info[] = {
83 QDSP_MODULE(AUDPLAY0TASK, NULL, 0, NULL, NULL),
84 QDSP_MODULE(AUDPLAY1TASK, NULL, 0, NULL, NULL),
85 QDSP_MODULE(AUDPLAY2TASK, NULL, 0, NULL, NULL),
86 QDSP_MODULE(AUDPLAY3TASK, NULL, 0, NULL, NULL),
87 QDSP_MODULE(AUDPPTASK, NULL, 0, NULL, NULL),
88 QDSP_MODULE(AUDPREPROCTASK, NULL, 0, NULL, NULL),
89 QDSP_MODULE(RMTASK, NULL, 0, NULL, NULL),
90#if !defined(CONFIG_ARCH_MSM7X30)
91 QDSP_MODULE(AUDRECTASK, NULL, 0, NULL, NULL),
Suresh Vankadara055cb8e2012-01-18 00:50:04 +053092 QDSP_MODULE(VFETASK, NULL, 0, adsp_vfe_verify_cmd,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070093 adsp_vfe_patch_event),
94 QDSP_MODULE(QCAMTASK, NULL, 0, NULL, NULL),
95 QDSP_MODULE(LPMTASK, NULL, 0, adsp_lpm_verify_cmd, NULL),
96 QDSP_MODULE(JPEGTASK, "vdc_clk", 96000000, adsp_jpeg_verify_cmd,
97 adsp_jpeg_patch_event),
98 QDSP_MODULE(VIDEOTASK, "vdc_clk", 96000000,
99 adsp_video_verify_cmd, NULL),
100 QDSP_MODULE(VDEC_LP_MODE, NULL, 0, NULL, NULL),
101 QDSP_MODULE(VIDEOENCTASK, "vdc_clk", 96000000,
102 adsp_videoenc_verify_cmd, NULL),
103 QDSP_MODULE(VIDEO_AAC_VOC_TURBO, NULL, 0, NULL, NULL),
104 QDSP_MODULE(VIDEO_AMR_TURBO, NULL, 0, NULL, NULL),
105 QDSP_MODULE(WM_TURBO_MODE, NULL, 0, NULL, NULL),
106 QDSP_MODULE(VDEC_LP_MODE_TURBO, NULL, 0, NULL, NULL),
107#if defined(CONFIG_MSM7X27A_AUDIO)
108 QDSP_MODULE(AUDREC1TASK, NULL, 0, NULL, NULL),
109#endif
110#else
111 QDSP_MODULE(AFETASK , NULL, 0, NULL, NULL),
112 QDSP_MODULE(AUDREC0TASK, NULL, 0, NULL, NULL),
113 QDSP_MODULE(AUDREC1TASK, NULL, 0, NULL, NULL),
114#endif
115};
116
117int adsp_init_info(struct adsp_info *info)
118{
119 uint32_t img_num;
120
121 info->send_irq = 0x00c00200;
122 info->read_ctrl = 0x00400038;
123 info->write_ctrl = 0x00400034;
124
125 info->max_msg16_size = 193;
126 info->max_msg32_size = 8;
127 for (img_num = 0; img_num < IMG_MAX; img_num++)
128 qdsp_queue_offset_table[img_num] =
129 &info->init_info_ptr->queue_offsets[img_num][0];
130
131 for (img_num = 0; img_num < IMG_MAX; img_num++)
132 qdsp_task_to_module[img_num] =
133 &info->init_info_ptr->task_to_module_tbl[img_num][0];
134 info->max_task_id = 30;
135 info->max_module_id = QDSP_MODULE_MAX - 1;
136 info->max_queue_id = QDSP_MAX_NUM_QUEUES;
137 info->max_image_id = 2;
138 info->queue_offset = qdsp_queue_offset_table;
139 info->task_to_module = qdsp_task_to_module;
140
141 info->module_count = ARRAY_SIZE(module_info);
142 info->module = module_info;
143 return 0;
144}