diff options
| -rw-r--r-- | drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/adreno/adreno_gpu.c | 28 |
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); |
| 147 | out: | ||
| 148 | kfree(newname); | ||
| 149 | return fw; | ||
| 140 | } | 150 | } |
| 141 | 151 | ||
| 142 | static int adreno_load_fw(struct adreno_gpu *adreno_gpu) | 152 | static int adreno_load_fw(struct adreno_gpu *adreno_gpu) |
