aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Crouse <jcrouse@codeaurora.org>2018-02-01 14:15:16 -0500
committerRob Clark <robdclark@gmail.com>2018-02-20 10:41:22 -0500
commitc5e3548c295ace44c2ec8c3af1c10e82bc47f9b3 (patch)
tree8b237973ae71b2aafa1e8e8569fa057595317e8a
parentf306953fdb1145020dd2a838698792d686feb2e3 (diff)
drm/msm/adreno: Define a list of firmware files to load per target
The number and type of firmware files required differs for each target. Instead of using a fixed struct member for each possible firmware file use a generic list of files that should be loaded on boot. Use some semi-target specific enums to help each target find the appropriate firmware(s) that it needs to load. Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/adreno/a3xx_gpu.c8
-rw-r--r--drivers/gpu/drm/msm/adreno/a4xx_gpu.c8
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_debugfs.c13
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_gpu.c8
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_power.c26
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_device.c44
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.c33
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.h12
8 files changed, 80 insertions, 72 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
index 4baef2738178..1dd84d3489ae 100644
--- a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
@@ -256,8 +256,8 @@ static int a3xx_hw_init(struct msm_gpu *gpu)
256 */ 256 */
257 257
258 /* Load PM4: */ 258 /* Load PM4: */
259 ptr = (uint32_t *)(adreno_gpu->pm4->data); 259 ptr = (uint32_t *)(adreno_gpu->fw[ADRENO_FW_PM4]->data);
260 len = adreno_gpu->pm4->size / 4; 260 len = adreno_gpu->fw[ADRENO_FW_PM4]->size / 4;
261 DBG("loading PM4 ucode version: %x", ptr[1]); 261 DBG("loading PM4 ucode version: %x", ptr[1]);
262 262
263 gpu_write(gpu, REG_AXXX_CP_DEBUG, 263 gpu_write(gpu, REG_AXXX_CP_DEBUG,
@@ -268,8 +268,8 @@ static int a3xx_hw_init(struct msm_gpu *gpu)
268 gpu_write(gpu, REG_AXXX_CP_ME_RAM_DATA, ptr[i]); 268 gpu_write(gpu, REG_AXXX_CP_ME_RAM_DATA, ptr[i]);
269 269
270 /* Load PFP: */ 270 /* Load PFP: */
271 ptr = (uint32_t *)(adreno_gpu->pfp->data); 271 ptr = (uint32_t *)(adreno_gpu->fw[ADRENO_FW_PFP]->data);
272 len = adreno_gpu->pfp->size / 4; 272 len = adreno_gpu->fw[ADRENO_FW_PFP]->size / 4;
273 DBG("loading PFP ucode version: %x", ptr[5]); 273 DBG("loading PFP ucode version: %x", ptr[5]);
274 274
275 gpu_write(gpu, REG_A3XX_CP_PFP_UCODE_ADDR, 0); 275 gpu_write(gpu, REG_A3XX_CP_PFP_UCODE_ADDR, 0);
diff --git a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c b/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
index 8199a4b9f2fa..2884b1b1660c 100644
--- a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a4xx_gpu.c
@@ -274,16 +274,16 @@ static int a4xx_hw_init(struct msm_gpu *gpu)
274 return ret; 274 return ret;
275 275
276 /* Load PM4: */ 276 /* Load PM4: */
277 ptr = (uint32_t *)(adreno_gpu->pm4->data); 277 ptr = (uint32_t *)(adreno_gpu->fw[ADRENO_FW_PM4]->data);
278 len = adreno_gpu->pm4->size / 4; 278 len = adreno_gpu->fw[ADRENO_FW_PM4]->size / 4;
279 DBG("loading PM4 ucode version: %u", ptr[0]); 279 DBG("loading PM4 ucode version: %u", ptr[0]);
280 gpu_write(gpu, REG_A4XX_CP_ME_RAM_WADDR, 0); 280 gpu_write(gpu, REG_A4XX_CP_ME_RAM_WADDR, 0);
281 for (i = 1; i < len; i++) 281 for (i = 1; i < len; i++)
282 gpu_write(gpu, REG_A4XX_CP_ME_RAM_DATA, ptr[i]); 282 gpu_write(gpu, REG_A4XX_CP_ME_RAM_DATA, ptr[i]);
283 283
284 /* Load PFP: */ 284 /* Load PFP: */
285 ptr = (uint32_t *)(adreno_gpu->pfp->data); 285 ptr = (uint32_t *)(adreno_gpu->fw[ADRENO_FW_PFP]->data);
286 len = adreno_gpu->pfp->size / 4; 286 len = adreno_gpu->fw[ADRENO_FW_PFP]->size / 4;
287 DBG("loading PFP ucode version: %u", ptr[0]); 287 DBG("loading PFP ucode version: %u", ptr[0]);
288 288
289 gpu_write(gpu, REG_A4XX_CP_PFP_UCODE_ADDR, 0); 289 gpu_write(gpu, REG_A4XX_CP_PFP_UCODE_ADDR, 0);
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
index cef09780ef17..6b279414b9c0 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
@@ -123,15 +123,12 @@ reset_set(void *data, u64 val)
123 123
124 mutex_lock(&dev->struct_mutex); 124 mutex_lock(&dev->struct_mutex);
125 125
126 if (adreno_gpu->pm4) { 126 release_firmware(adreno_gpu->fw[ADRENO_FW_PM4]);
127 release_firmware(adreno_gpu->pm4); 127 adreno_gpu->fw[ADRENO_FW_PM4] = NULL;
128 adreno_gpu->pm4 = NULL; 128
129 } 129 release_firmware(adreno_gpu->fw[ADRENO_FW_PFP]);
130 adreno_gpu->fw[ADRENO_FW_PFP] = NULL;
130 131
131 if (adreno_gpu->pfp) {
132 release_firmware(adreno_gpu->pfp);
133 adreno_gpu->pfp = NULL;
134 }
135 if (a5xx_gpu->pm4_bo) { 132 if (a5xx_gpu->pm4_bo) {
136 if (a5xx_gpu->pm4_iova) 133 if (a5xx_gpu->pm4_iova)
137 msm_gem_put_iova(a5xx_gpu->pm4_bo, gpu->aspace); 134 msm_gem_put_iova(a5xx_gpu->pm4_bo, gpu->aspace);
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index 795fe11a9371..517e19c3f9ed 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -523,8 +523,8 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
523 int ret; 523 int ret;
524 524
525 if (!a5xx_gpu->pm4_bo) { 525 if (!a5xx_gpu->pm4_bo) {
526 a5xx_gpu->pm4_bo = a5xx_ucode_load_bo(gpu, adreno_gpu->pm4, 526 a5xx_gpu->pm4_bo = a5xx_ucode_load_bo(gpu,
527 &a5xx_gpu->pm4_iova); 527 adreno_gpu->fw[ADRENO_FW_PM4], &a5xx_gpu->pm4_iova);
528 528
529 if (IS_ERR(a5xx_gpu->pm4_bo)) { 529 if (IS_ERR(a5xx_gpu->pm4_bo)) {
530 ret = PTR_ERR(a5xx_gpu->pm4_bo); 530 ret = PTR_ERR(a5xx_gpu->pm4_bo);
@@ -536,8 +536,8 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
536 } 536 }
537 537
538 if (!a5xx_gpu->pfp_bo) { 538 if (!a5xx_gpu->pfp_bo) {
539 a5xx_gpu->pfp_bo = a5xx_ucode_load_bo(gpu, adreno_gpu->pfp, 539 a5xx_gpu->pfp_bo = a5xx_ucode_load_bo(gpu,
540 &a5xx_gpu->pfp_iova); 540 adreno_gpu->fw[ADRENO_FW_PFP], &a5xx_gpu->pfp_iova);
541 541
542 if (IS_ERR(a5xx_gpu->pfp_bo)) { 542 if (IS_ERR(a5xx_gpu->pfp_bo)) {
543 ret = PTR_ERR(a5xx_gpu->pfp_bo); 543 ret = PTR_ERR(a5xx_gpu->pfp_bo);
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_power.c b/drivers/gpu/drm/msm/adreno/a5xx_power.c
index 6630e6c0c8be..e9c0e56dbec0 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_power.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_power.c
@@ -261,7 +261,6 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
261 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); 261 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
262 struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu); 262 struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu);
263 struct drm_device *drm = gpu->dev; 263 struct drm_device *drm = gpu->dev;
264 const struct firmware *fw;
265 uint32_t dwords = 0, offset = 0, bosize; 264 uint32_t dwords = 0, offset = 0, bosize;
266 unsigned int *data, *ptr, *cmds; 265 unsigned int *data, *ptr, *cmds;
267 unsigned int cmds_size; 266 unsigned int cmds_size;
@@ -269,15 +268,7 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
269 if (a5xx_gpu->gpmu_bo) 268 if (a5xx_gpu->gpmu_bo)
270 return; 269 return;
271 270
272 /* Get the firmware */ 271 data = (unsigned int *) adreno_gpu->fw[ADRENO_FW_GPMU]->data;
273 fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->powerfw);
274 if (IS_ERR(fw)) {
275 DRM_ERROR("%s: Could not get GPMU firmware. GPMU will not be active\n",
276 gpu->name);
277 return;
278 }
279
280 data = (unsigned int *) fw->data;
281 272
282 /* 273 /*
283 * The first dword is the size of the remaining data in dwords. Use it 274 * The first dword is the size of the remaining data in dwords. Use it
@@ -285,12 +276,14 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
285 * the firmware that we read 276 * the firmware that we read
286 */ 277 */
287 278
288 if (fw->size < 8 || (data[0] < 2) || (data[0] >= (fw->size >> 2))) 279 if (adreno_gpu->fw[ADRENO_FW_GPMU]->size < 8 ||
289 goto out; 280 (data[0] < 2) || (data[0] >=
281 (adreno_gpu->fw[ADRENO_FW_GPMU]->size >> 2)))
282 return;
290 283
291 /* The second dword is an ID - look for 2 (GPMU_FIRMWARE_ID) */ 284 /* The second dword is an ID - look for 2 (GPMU_FIRMWARE_ID) */
292 if (data[1] != 2) 285 if (data[1] != 2)
293 goto out; 286 return;
294 287
295 cmds = data + data[2] + 3; 288 cmds = data + data[2] + 3;
296 cmds_size = data[0] - data[2] - 2; 289 cmds_size = data[0] - data[2] - 2;
@@ -325,8 +318,7 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
325 msm_gem_put_vaddr(a5xx_gpu->gpmu_bo); 318 msm_gem_put_vaddr(a5xx_gpu->gpmu_bo);
326 a5xx_gpu->gpmu_dwords = dwords; 319 a5xx_gpu->gpmu_dwords = dwords;
327 320
328 goto out; 321 return;
329
330err: 322err:
331 if (a5xx_gpu->gpmu_iova) 323 if (a5xx_gpu->gpmu_iova)
332 msm_gem_put_iova(a5xx_gpu->gpmu_bo, gpu->aspace); 324 msm_gem_put_iova(a5xx_gpu->gpmu_bo, gpu->aspace);
@@ -336,8 +328,4 @@ err:
336 a5xx_gpu->gpmu_bo = NULL; 328 a5xx_gpu->gpmu_bo = NULL;
337 a5xx_gpu->gpmu_iova = 0; 329 a5xx_gpu->gpmu_iova = 0;
338 a5xx_gpu->gpmu_dwords = 0; 330 a5xx_gpu->gpmu_dwords = 0;
339
340out:
341 /* No need to keep that firmware laying around anymore */
342 release_firmware(fw);
343} 331}
diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
index d64ceeb0d6f0..f07d3ec7d77b 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
@@ -30,61 +30,75 @@ static const struct adreno_info gpulist[] = {
30 .rev = ADRENO_REV(3, 0, 5, ANY_ID), 30 .rev = ADRENO_REV(3, 0, 5, ANY_ID),
31 .revn = 305, 31 .revn = 305,
32 .name = "A305", 32 .name = "A305",
33 .pm4fw = "a300_pm4.fw", 33 .fw = {
34 .pfpfw = "a300_pfp.fw", 34 [ADRENO_FW_PM4] = "a300_pm4.fw",
35 [ADRENO_FW_PFP] = "a300_pfp.fw",
36 },
35 .gmem = SZ_256K, 37 .gmem = SZ_256K,
36 .init = a3xx_gpu_init, 38 .init = a3xx_gpu_init,
37 }, { 39 }, {
38 .rev = ADRENO_REV(3, 0, 6, 0), 40 .rev = ADRENO_REV(3, 0, 6, 0),
39 .revn = 307, /* because a305c is revn==306 */ 41 .revn = 307, /* because a305c is revn==306 */
40 .name = "A306", 42 .name = "A306",
41 .pm4fw = "a300_pm4.fw", 43 .fw = {
42 .pfpfw = "a300_pfp.fw", 44 [ADRENO_FW_PM4] = "a300_pm4.fw",
45 [ADRENO_FW_PFP] = "a300_pfp.fw",
46 },
43 .gmem = SZ_128K, 47 .gmem = SZ_128K,
44 .init = a3xx_gpu_init, 48 .init = a3xx_gpu_init,
45 }, { 49 }, {
46 .rev = ADRENO_REV(3, 2, ANY_ID, ANY_ID), 50 .rev = ADRENO_REV(3, 2, ANY_ID, ANY_ID),
47 .revn = 320, 51 .revn = 320,
48 .name = "A320", 52 .name = "A320",
49 .pm4fw = "a300_pm4.fw", 53 .fw = {
50 .pfpfw = "a300_pfp.fw", 54 [ADRENO_FW_PM4] = "a300_pm4.fw",
55 [ADRENO_FW_PFP] = "a300_pfp.fw",
56 },
51 .gmem = SZ_512K, 57 .gmem = SZ_512K,
52 .init = a3xx_gpu_init, 58 .init = a3xx_gpu_init,
53 }, { 59 }, {
54 .rev = ADRENO_REV(3, 3, 0, ANY_ID), 60 .rev = ADRENO_REV(3, 3, 0, ANY_ID),
55 .revn = 330, 61 .revn = 330,
56 .name = "A330", 62 .name = "A330",
57 .pm4fw = "a330_pm4.fw", 63 .fw = {
58 .pfpfw = "a330_pfp.fw", 64 [ADRENO_FW_PM4] = "a330_pm4.fw",
65 [ADRENO_FW_PFP] = "a330_pfp.fw",
66 },
59 .gmem = SZ_1M, 67 .gmem = SZ_1M,
60 .init = a3xx_gpu_init, 68 .init = a3xx_gpu_init,
61 }, { 69 }, {
62 .rev = ADRENO_REV(4, 2, 0, ANY_ID), 70 .rev = ADRENO_REV(4, 2, 0, ANY_ID),
63 .revn = 420, 71 .revn = 420,
64 .name = "A420", 72 .name = "A420",
65 .pm4fw = "a420_pm4.fw", 73 .fw = {
66 .pfpfw = "a420_pfp.fw", 74 [ADRENO_FW_PM4] = "a420_pm4.fw",
75 [ADRENO_FW_PFP] = "a420_pfp.fw",
76 },
67 .gmem = (SZ_1M + SZ_512K), 77 .gmem = (SZ_1M + SZ_512K),
68 .init = a4xx_gpu_init, 78 .init = a4xx_gpu_init,
69 }, { 79 }, {
70 .rev = ADRENO_REV(4, 3, 0, ANY_ID), 80 .rev = ADRENO_REV(4, 3, 0, ANY_ID),
71 .revn = 430, 81 .revn = 430,
72 .name = "A430", 82 .name = "A430",
73 .pm4fw = "a420_pm4.fw", 83 .fw = {
74 .pfpfw = "a420_pfp.fw", 84 [ADRENO_FW_PM4] = "a420_pm4.fw",
85 [ADRENO_FW_PFP] = "a420_pfp.fw",
86 },
75 .gmem = (SZ_1M + SZ_512K), 87 .gmem = (SZ_1M + SZ_512K),
76 .init = a4xx_gpu_init, 88 .init = a4xx_gpu_init,
77 }, { 89 }, {
78 .rev = ADRENO_REV(5, 3, 0, 2), 90 .rev = ADRENO_REV(5, 3, 0, 2),
79 .revn = 530, 91 .revn = 530,
80 .name = "A530", 92 .name = "A530",
81 .pm4fw = "a530_pm4.fw", 93 .fw = {
82 .pfpfw = "a530_pfp.fw", 94 [ADRENO_FW_PM4] = "a530_pm4.fw",
95 [ADRENO_FW_PFP] = "a530_pfp.fw",
96 [ADRENO_FW_GPMU] = "a530v3_gpmu.fw2",
97 },
83 .gmem = SZ_1M, 98 .gmem = SZ_1M,
84 .quirks = ADRENO_QUIRK_TWO_PASS_USE_WFI | 99 .quirks = ADRENO_QUIRK_TWO_PASS_USE_WFI |
85 ADRENO_QUIRK_FAULT_DETECT_MASK, 100 ADRENO_QUIRK_FAULT_DETECT_MASK,
86 .init = a5xx_gpu_init, 101 .init = a5xx_gpu_init,
87 .powerfw = "a530v3_gpmu.fw2",
88 .zapfw = "a530_zap.mdt", 102 .zapfw = "a530_zap.mdt",
89 }, 103 },
90}; 104};
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index de63ff26a062..4a8ee5ec571e 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -140,23 +140,24 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
140 140
141static int adreno_load_fw(struct adreno_gpu *adreno_gpu) 141static int adreno_load_fw(struct adreno_gpu *adreno_gpu)
142{ 142{
143 const struct firmware *fw; 143 int i;
144 144
145 if (adreno_gpu->pm4) 145 for (i = 0; i < ARRAY_SIZE(adreno_gpu->info->fw); i++) {
146 return 0; 146 const struct firmware *fw;
147 147
148 fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->pm4fw); 148 if (!adreno_gpu->info->fw[i])
149 if (IS_ERR(fw)) 149 continue;
150 return PTR_ERR(fw);
151 adreno_gpu->pm4 = fw;
152 150
153 fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->pfpfw); 151 /* Skip if the firmware has already been loaded */
154 if (IS_ERR(fw)) { 152 if (adreno_gpu->fw[i])
155 release_firmware(adreno_gpu->pm4); 153 continue;
156 adreno_gpu->pm4 = NULL; 154
157 return PTR_ERR(fw); 155 fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->fw[i]);
156 if (IS_ERR(fw))
157 return PTR_ERR(fw);
158
159 adreno_gpu->fw[i] = fw;
158 } 160 }
159 adreno_gpu->pfp = fw;
160 161
161 return 0; 162 return 0;
162} 163}
@@ -569,8 +570,10 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
569 570
570void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu) 571void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu)
571{ 572{
572 release_firmware(adreno_gpu->pm4); 573 unsigned int i;
573 release_firmware(adreno_gpu->pfp); 574
575 for (i = 0; i < ARRAY_SIZE(adreno_gpu->info->fw); i++)
576 release_firmware(adreno_gpu->fw[i]);
574 577
575 msm_gpu_cleanup(&adreno_gpu->base); 578 msm_gpu_cleanup(&adreno_gpu->base);
576} 579}
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
index 0a869bb8ee9d..499092af81a2 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
@@ -48,6 +48,13 @@ enum adreno_regs {
48 REG_ADRENO_REGISTER_MAX, 48 REG_ADRENO_REGISTER_MAX,
49}; 49};
50 50
51enum {
52 ADRENO_FW_PM4 = 0,
53 ADRENO_FW_PFP = 1,
54 ADRENO_FW_GPMU = 2,
55 ADRENO_FW_MAX,
56};
57
51enum adreno_quirks { 58enum adreno_quirks {
52 ADRENO_QUIRK_TWO_PASS_USE_WFI = 1, 59 ADRENO_QUIRK_TWO_PASS_USE_WFI = 1,
53 ADRENO_QUIRK_FAULT_DETECT_MASK = 2, 60 ADRENO_QUIRK_FAULT_DETECT_MASK = 2,
@@ -72,8 +79,7 @@ struct adreno_info {
72 struct adreno_rev rev; 79 struct adreno_rev rev;
73 uint32_t revn; 80 uint32_t revn;
74 const char *name; 81 const char *name;
75 const char *pm4fw, *pfpfw; 82 const char *fw[ADRENO_FW_MAX];
76 const char *powerfw;
77 uint32_t gmem; 83 uint32_t gmem;
78 enum adreno_quirks quirks; 84 enum adreno_quirks quirks;
79 struct msm_gpu *(*init)(struct drm_device *dev); 85 struct msm_gpu *(*init)(struct drm_device *dev);
@@ -115,7 +121,7 @@ struct adreno_gpu {
115 } fwloc; 121 } fwloc;
116 122
117 /* firmware: */ 123 /* firmware: */
118 const struct firmware *pm4, *pfp; 124 const struct firmware *fw[ADRENO_FW_MAX];
119 125
120 /* 126 /*
121 * Register offsets are different between some GPUs. 127 * Register offsets are different between some GPUs.