drm/msm/adreno: split out helper to load fw
authorRob Clark <robdclark@gmail.com>
Mon, 16 Oct 2017 14:13:15 +0000 (10:13 -0400)
committerRob Clark <robdclark@gmail.com>
Sat, 28 Oct 2017 15:01:31 +0000 (11:01 -0400)
Prep work for the next patch.

Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
drivers/gpu/drm/msm/adreno/a5xx_power.c
drivers/gpu/drm/msm/adreno/adreno_gpu.c
drivers/gpu/drm/msm/adreno/adreno_gpu.h

index f44ca0ef4ae981d0f975ab4461ba6003d8c6552c..4854c659927cb03f93f96801e07975cec6caf652 100644 (file)
@@ -26,8 +26,9 @@ static void a5xx_dump(struct msm_gpu *gpu);
 
 #define GPU_PAS_ID 13
 
-static int zap_shader_load_mdt(struct device *dev, const char *fwname)
+static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname)
 {
+       struct device *dev = &gpu->pdev->dev;
        const struct firmware *fw;
        struct device_node *np;
        struct resource r;
@@ -55,10 +56,10 @@ static int zap_shader_load_mdt(struct device *dev, const char *fwname)
        mem_size = resource_size(&r);
 
        /* Request the MDT file for the firmware */
-       ret = request_firmware(&fw, fwname, dev);
-       if (ret) {
+       fw = adreno_request_fw(to_adreno_gpu(gpu), fwname);
+       if (IS_ERR(fw)) {
                DRM_DEV_ERROR(dev, "Unable to load %s\n", fwname);
-               return ret;
+               return PTR_ERR(fw);
        }
 
        /* Figure out how much memory we need */
@@ -381,7 +382,7 @@ static int a5xx_zap_shader_init(struct msm_gpu *gpu)
                return -ENODEV;
        }
 
-       ret = zap_shader_load_mdt(&pdev->dev, adreno_gpu->info->zapfw);
+       ret = zap_shader_load_mdt(gpu, adreno_gpu->info->zapfw);
 
        loaded = !ret;
 
index 04aab1dcae2b12e9f52dff5d0de618e85e5f21c9..b5de2be67732777b3c90f8881e5032261ac8c75b 100644 (file)
@@ -264,7 +264,8 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
                return;
 
        /* Get the firmware */
-       if (request_firmware(&fw, adreno_gpu->info->gpmufw, drm->dev)) {
+       fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->gpmufw);
+       if (IS_ERR(fw)) {
                DRM_ERROR("%s: Could not get GPMU firmware. GPMU will not be active\n",
                        gpu->name);
                return;
index 8caa7f1f012d3c32304786b8c51defa534bcc266..54f77045ff607438222b706fbf3a596192424913 100644 (file)
@@ -64,29 +64,41 @@ int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value)
        }
 }
 
-static int adreno_load_fw(struct adreno_gpu *adreno_gpu)
+const struct firmware *
+adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname)
 {
        struct drm_device *drm = adreno_gpu->base.dev;
+       const struct firmware *fw = NULL;
        int ret;
 
+       ret = request_firmware(&fw, fwname, drm->dev);
+       if (ret) {
+               dev_err(drm->dev, "failed to load %s: %d\n", fwname, ret);
+               return ERR_PTR(ret);
+       }
+
+       return fw;
+}
+
+static int adreno_load_fw(struct adreno_gpu *adreno_gpu)
+{
+       const struct firmware *fw;
+
        if (adreno_gpu->pm4)
                return 0;
 
-       ret = request_firmware(&adreno_gpu->pm4, adreno_gpu->info->pm4fw, drm->dev);
-       if (ret) {
-               dev_err(drm->dev, "failed to load %s PM4 firmware: %d\n",
-                               adreno_gpu->info->pm4fw, ret);
-               return ret;
-       }
+       fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->pm4fw);
+       if (IS_ERR(fw))
+               return PTR_ERR(fw);
+       adreno_gpu->pm4 = fw;
 
-       ret = request_firmware(&adreno_gpu->pfp, adreno_gpu->info->pfpfw, drm->dev);
-       if (ret) {
-               dev_err(drm->dev, "failed to load %s PFP firmware: %d\n",
-                               adreno_gpu->info->pfpfw, ret);
+       fw = adreno_request_fw(adreno_gpu, adreno_gpu->info->pfpfw);
+       if (IS_ERR(fw)) {
                release_firmware(adreno_gpu->pm4);
                adreno_gpu->pm4 = NULL;
-               return ret;
+               return PTR_ERR(fw);
        }
+       adreno_gpu->pfp = fw;
 
        return 0;
 }
index 4d9165f29f430851219f31fa4100895e34548f2a..3eda98af546e8b3ef2608651c69f1e31fefe6fcd 100644 (file)
@@ -196,6 +196,8 @@ static inline int adreno_is_a530(struct adreno_gpu *gpu)
 }
 
 int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value);
+const struct firmware *adreno_request_fw(struct adreno_gpu *adreno_gpu,
+               const char *fwname);
 int adreno_hw_init(struct msm_gpu *gpu);
 uint32_t adreno_last_fence(struct msm_gpu *gpu);
 void adreno_recover(struct msm_gpu *gpu);