aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_gpu.c7
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.c28
2 files changed, 24 insertions, 11 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index bd84f71d27d8..ab1d9308c311 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -11,6 +11,7 @@
11 * 11 *
12 */ 12 */
13 13
14#include <linux/kernel.h>
14#include <linux/types.h> 15#include <linux/types.h>
15#include <linux/cpumask.h> 16#include <linux/cpumask.h>
16#include <linux/qcom_scm.h> 17#include <linux/qcom_scm.h>
@@ -20,6 +21,7 @@
20#include <linux/pm_opp.h> 21#include <linux/pm_opp.h>
21#include <linux/nvmem-consumer.h> 22#include <linux/nvmem-consumer.h>
22#include <linux/iopoll.h> 23#include <linux/iopoll.h>
24#include <linux/slab.h>
23#include "msm_gem.h" 25#include "msm_gem.h"
24#include "msm_mmu.h" 26#include "msm_mmu.h"
25#include "a5xx_gpu.h" 27#include "a5xx_gpu.h"
@@ -92,12 +94,13 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname)
92 ret = qcom_mdt_load(dev, fw, fwname, GPU_PAS_ID, 94 ret = qcom_mdt_load(dev, fw, fwname, GPU_PAS_ID,
93 mem_region, mem_phys, mem_size, NULL); 95 mem_region, mem_phys, mem_size, NULL);
94 } else { 96 } else {
95 char newname[strlen("qcom/") + strlen(fwname) + 1]; 97 char *newname;
96 98
97 sprintf(newname, "qcom/%s", fwname); 99 newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
98 100
99 ret = qcom_mdt_load(dev, fw, newname, GPU_PAS_ID, 101 ret = qcom_mdt_load(dev, fw, newname, GPU_PAS_ID,
100 mem_region, mem_phys, mem_size, NULL); 102 mem_region, mem_phys, mem_size, NULL);
103 kfree(newname);
101 } 104 }
102 if (ret) 105 if (ret)
103 goto out; 106 goto out;
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 38ac50b73829..65c0ae7d8ad1 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -18,7 +18,9 @@
18 */ 18 */
19 19
20#include <linux/ascii85.h> 20#include <linux/ascii85.h>
21#include <linux/kernel.h>
21#include <linux/pm_opp.h> 22#include <linux/pm_opp.h>
23#include <linux/slab.h>
22#include "adreno_gpu.h" 24#include "adreno_gpu.h"
23#include "msm_gem.h" 25#include "msm_gem.h"
24#include "msm_mmu.h" 26#include "msm_mmu.h"
@@ -71,10 +73,12 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
71{ 73{
72 struct drm_device *drm = adreno_gpu->base.dev; 74 struct drm_device *drm = adreno_gpu->base.dev;
73 const struct firmware *fw = NULL; 75 const struct firmware *fw = NULL;
74 char newname[strlen("qcom/") + strlen(fwname) + 1]; 76 char *newname;
75 int ret; 77 int ret;
76 78
77 sprintf(newname, "qcom/%s", fwname); 79 newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
80 if (!newname)
81 return ERR_PTR(-ENOMEM);
78 82
79 /* 83 /*
80 * Try first to load from qcom/$fwfile using a direct load (to avoid 84 * Try first to load from qcom/$fwfile using a direct load (to avoid
@@ -88,11 +92,12 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
88 dev_info(drm->dev, "loaded %s from new location\n", 92 dev_info(drm->dev, "loaded %s from new location\n",
89 newname); 93 newname);
90 adreno_gpu->fwloc = FW_LOCATION_NEW; 94 adreno_gpu->fwloc = FW_LOCATION_NEW;
91 return fw; 95 goto out;
92 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) { 96 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) {
93 dev_err(drm->dev, "failed to load %s: %d\n", 97 dev_err(drm->dev, "failed to load %s: %d\n",
94 newname, ret); 98 newname, ret);
95 return ERR_PTR(ret); 99 fw = ERR_PTR(ret);
100 goto out;
96 } 101 }
97 } 102 }
98 103
@@ -107,11 +112,12 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
107 dev_info(drm->dev, "loaded %s from legacy location\n", 112 dev_info(drm->dev, "loaded %s from legacy location\n",
108 newname); 113 newname);
109 adreno_gpu->fwloc = FW_LOCATION_LEGACY; 114 adreno_gpu->fwloc = FW_LOCATION_LEGACY;
110 return fw; 115 goto out;
111 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) { 116 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) {
112 dev_err(drm->dev, "failed to load %s: %d\n", 117 dev_err(drm->dev, "failed to load %s: %d\n",
113 fwname, ret); 118 fwname, ret);
114 return ERR_PTR(ret); 119 fw = ERR_PTR(ret);
120 goto out;
115 } 121 }
116 } 122 }
117 123
@@ -127,16 +133,20 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
127 dev_info(drm->dev, "loaded %s with helper\n", 133 dev_info(drm->dev, "loaded %s with helper\n",
128 newname); 134 newname);
129 adreno_gpu->fwloc = FW_LOCATION_HELPER; 135 adreno_gpu->fwloc = FW_LOCATION_HELPER;
130 return fw; 136 goto out;
131 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) { 137 } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) {
132 dev_err(drm->dev, "failed to load %s: %d\n", 138 dev_err(drm->dev, "failed to load %s: %d\n",
133 newname, ret); 139 newname, ret);
134 return ERR_PTR(ret); 140 fw = ERR_PTR(ret);
141 goto out;
135 } 142 }
136 } 143 }
137 144
138 dev_err(drm->dev, "failed to load %s\n", fwname); 145 dev_err(drm->dev, "failed to load %s\n", fwname);
139 return ERR_PTR(-ENOENT); 146 fw = ERR_PTR(-ENOENT);
147out:
148 kfree(newname);
149 return fw;
140} 150}
141 151
142static int adreno_load_fw(struct adreno_gpu *adreno_gpu) 152static int adreno_load_fw(struct adreno_gpu *adreno_gpu)