Merge tag 'drm-misc-next-fixes-2021-09-09' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_psp.c
index a78a832..9b41cb8 100644 (file)
@@ -469,10 +469,10 @@ psp_cmd_submit_buf(struct psp_context *psp,
         */
        if (!skip_unsupport && (psp->cmd_buf_mem->resp.status || !timeout) && !ras_intr) {
                if (ucode)
-                       DRM_WARN("failed to load ucode (%s) ",
-                                 amdgpu_ucode_name(ucode->ucode_id));
-               DRM_WARN("psp gfx command (%s) failed and response status is (0x%X)\n",
-                        psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id),
+                       DRM_WARN("failed to load ucode %s(0x%X) ",
+                                 amdgpu_ucode_name(ucode->ucode_id), ucode->ucode_id);
+               DRM_WARN("psp gfx command %s(0x%X) failed and response status is (0x%X)\n",
+                        psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id), psp->cmd_buf_mem->cmd_id,
                         psp->cmd_buf_mem->resp.status);
                if (!timeout) {
                        ret = -EINVAL;
@@ -899,23 +899,37 @@ static void psp_prep_ta_load_cmd_buf(struct psp_gfx_cmd_resp *cmd,
        cmd->cmd.cmd_load_ta.cmd_buf_len         = ta_shared_size;
 }
 
-static int psp_xgmi_init_shared_buf(struct psp_context *psp)
+static int psp_ta_init_shared_buf(struct psp_context *psp,
+                                 struct ta_mem_context *mem_ctx,
+                                 uint32_t shared_mem_size)
 {
        int ret;
 
        /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for xgmi ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_XGMI_SHARED_MEM_SIZE,
-                                     PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->xgmi_context.context.mem_context.shared_bo,
-                                     &psp->xgmi_context.context.mem_context.shared_mc_addr,
-                                     &psp->xgmi_context.context.mem_context.shared_buf);
+       * Allocate 16k memory aligned to 4k from Frame Buffer (local
+       * physical) for ta to host memory
+       */
+       ret = amdgpu_bo_create_kernel(psp->adev, shared_mem_size, PAGE_SIZE,
+                                     AMDGPU_GEM_DOMAIN_VRAM,
+                                     &mem_ctx->shared_bo,
+                                     &mem_ctx->shared_mc_addr,
+                                     &mem_ctx->shared_buf);
 
        return ret;
 }
 
+static void psp_ta_free_shared_buf(struct ta_mem_context *mem_ctx)
+{
+       amdgpu_bo_free_kernel(&mem_ctx->shared_bo, &mem_ctx->shared_mc_addr,
+                             &mem_ctx->shared_buf);
+}
+
+static int psp_xgmi_init_shared_buf(struct psp_context *psp)
+{
+       return psp_ta_init_shared_buf(psp, &psp->xgmi_context.context.mem_context,
+                                     PSP_XGMI_SHARED_MEM_SIZE);
+}
+
 static void psp_prep_ta_invoke_cmd_buf(struct psp_gfx_cmd_resp *cmd,
                                       uint32_t ta_cmd_id,
                                       uint32_t session_id)
@@ -1020,9 +1034,7 @@ int psp_xgmi_terminate(struct psp_context *psp)
        psp->xgmi_context.context.initialized = false;
 
        /* free xgmi shared memory */
-       amdgpu_bo_free_kernel(&psp->xgmi_context.context.mem_context.shared_bo,
-                       &psp->xgmi_context.context.mem_context.shared_mc_addr,
-                       &psp->xgmi_context.context.mem_context.shared_buf);
+       psp_ta_free_shared_buf(&psp->xgmi_context.context.mem_context);
 
        return 0;
 }
@@ -1270,19 +1282,8 @@ int psp_xgmi_set_topology_info(struct psp_context *psp,
 // ras begin
 static int psp_ras_init_shared_buf(struct psp_context *psp)
 {
-       int ret;
-
-       /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for ras ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_RAS_SHARED_MEM_SIZE,
-                       PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                       &psp->ras_context.context.mem_context.shared_bo,
-                       &psp->ras_context.context.mem_context.shared_mc_addr,
-                       &psp->ras_context.context.mem_context.shared_buf);
-
-       return ret;
+       return psp_ta_init_shared_buf(psp, &psp->ras_context.context.mem_context,
+                                     PSP_RAS_SHARED_MEM_SIZE);
 }
 
 static int psp_ras_load(struct psp_context *psp)
@@ -1466,9 +1467,7 @@ static int psp_ras_terminate(struct psp_context *psp)
        psp->ras_context.context.initialized = false;
 
        /* free ras shared memory */
-       amdgpu_bo_free_kernel(&psp->ras_context.context.mem_context.shared_bo,
-                       &psp->ras_context.context.mem_context.shared_mc_addr,
-                       &psp->ras_context.context.mem_context.shared_buf);
+       psp_ta_free_shared_buf(&psp->ras_context.context.mem_context);
 
        return 0;
 }
@@ -1576,19 +1575,8 @@ int psp_ras_trigger_error(struct psp_context *psp,
 // HDCP start
 static int psp_hdcp_init_shared_buf(struct psp_context *psp)
 {
-       int ret;
-
-       /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for hdcp ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_HDCP_SHARED_MEM_SIZE,
-                                     PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->hdcp_context.context.mem_context.shared_bo,
-                                     &psp->hdcp_context.context.mem_context.shared_mc_addr,
-                                     &psp->hdcp_context.context.mem_context.shared_buf);
-
-       return ret;
+       return psp_ta_init_shared_buf(psp, &psp->hdcp_context.context.mem_context,
+                                     PSP_HDCP_SHARED_MEM_SIZE);
 }
 
 static int psp_hdcp_load(struct psp_context *psp)
@@ -1712,9 +1700,7 @@ static int psp_hdcp_terminate(struct psp_context *psp)
 
 out:
        /* free hdcp shared memory */
-       amdgpu_bo_free_kernel(&psp->hdcp_context.context.mem_context.shared_bo,
-                             &psp->hdcp_context.context.mem_context.shared_mc_addr,
-                             &psp->hdcp_context.context.mem_context.shared_buf);
+       psp_ta_free_shared_buf(&psp->hdcp_context.context.mem_context);
 
        return 0;
 }
@@ -1723,19 +1709,8 @@ out:
 // DTM start
 static int psp_dtm_init_shared_buf(struct psp_context *psp)
 {
-       int ret;
-
-       /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for dtm ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_DTM_SHARED_MEM_SIZE,
-                                     PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->dtm_context.context.mem_context.shared_bo,
-                                     &psp->dtm_context.context.mem_context.shared_mc_addr,
-                                     &psp->dtm_context.context.mem_context.shared_buf);
-
-       return ret;
+       return psp_ta_init_shared_buf(psp, &psp->dtm_context.context.mem_context,
+                                     PSP_DTM_SHARED_MEM_SIZE);
 }
 
 static int psp_dtm_load(struct psp_context *psp)
@@ -1858,10 +1833,8 @@ static int psp_dtm_terminate(struct psp_context *psp)
        psp->dtm_context.context.initialized = false;
 
 out:
-       /* free hdcp shared memory */
-       amdgpu_bo_free_kernel(&psp->dtm_context.context.mem_context.shared_bo,
-                             &psp->dtm_context.context.mem_context.shared_mc_addr,
-                             &psp->dtm_context.context.mem_context.shared_buf);
+       /* free dtm shared memory */
+       psp_ta_free_shared_buf(&psp->dtm_context.context.mem_context);
 
        return 0;
 }
@@ -1870,19 +1843,8 @@ out:
 // RAP start
 static int psp_rap_init_shared_buf(struct psp_context *psp)
 {
-       int ret;
-
-       /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for rap ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_RAP_SHARED_MEM_SIZE,
-                                     PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->rap_context.context.mem_context.shared_bo,
-                                     &psp->rap_context.context.mem_context.shared_mc_addr,
-                                     &psp->rap_context.context.mem_context.shared_buf);
-
-       return ret;
+       return psp_ta_init_shared_buf(psp, &psp->rap_context.context.mem_context,
+                                     PSP_RAP_SHARED_MEM_SIZE);
 }
 
 static int psp_rap_load(struct psp_context *psp)
@@ -1958,9 +1920,7 @@ static int psp_rap_initialize(struct psp_context *psp)
        if (ret || status != TA_RAP_STATUS__SUCCESS) {
                psp_rap_unload(psp);
 
-               amdgpu_bo_free_kernel(&psp->rap_context.context.mem_context.shared_bo,
-                             &psp->rap_context.context.mem_context.shared_mc_addr,
-                             &psp->rap_context.context.mem_context.shared_buf);
+               psp_ta_free_shared_buf(&psp->rap_context.context.mem_context);
 
                psp->rap_context.context.initialized = false;
 
@@ -1985,9 +1945,7 @@ static int psp_rap_terminate(struct psp_context *psp)
        psp->rap_context.context.initialized = false;
 
        /* free rap shared memory */
-       amdgpu_bo_free_kernel(&psp->rap_context.context.mem_context.shared_bo,
-                             &psp->rap_context.context.mem_context.shared_mc_addr,
-                             &psp->rap_context.context.mem_context.shared_buf);
+       psp_ta_free_shared_buf(&psp->rap_context.context.mem_context);
 
        return ret;
 }
@@ -2030,19 +1988,9 @@ out_unlock:
 /* securedisplay start */
 static int psp_securedisplay_init_shared_buf(struct psp_context *psp)
 {
-       int ret;
-
-       /*
-        * Allocate 16k memory aligned to 4k from Frame Buffer (local
-        * physical) for sa ta <-> Driver
-        */
-       ret = amdgpu_bo_create_kernel(psp->adev, PSP_SECUREDISPLAY_SHARED_MEM_SIZE,
-                                     PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->securedisplay_context.context.mem_context.shared_bo,
-                                     &psp->securedisplay_context.context.mem_context.shared_mc_addr,
-                                     &psp->securedisplay_context.context.mem_context.shared_buf);
-
-       return ret;
+       return psp_ta_init_shared_buf(
+               psp, &psp->securedisplay_context.context.mem_context,
+               PSP_SECUREDISPLAY_SHARED_MEM_SIZE);
 }
 
 static int psp_securedisplay_load(struct psp_context *psp)
@@ -2120,9 +2068,7 @@ static int psp_securedisplay_initialize(struct psp_context *psp)
        if (ret) {
                psp_securedisplay_unload(psp);
 
-               amdgpu_bo_free_kernel(&psp->securedisplay_context.context.mem_context.shared_bo,
-                             &psp->securedisplay_context.context.mem_context.shared_mc_addr,
-                             &psp->securedisplay_context.context.mem_context.shared_buf);
+               psp_ta_free_shared_buf(&psp->securedisplay_context.context.mem_context);
 
                psp->securedisplay_context.context.initialized = false;
 
@@ -2159,9 +2105,7 @@ static int psp_securedisplay_terminate(struct psp_context *psp)
        psp->securedisplay_context.context.initialized = false;
 
        /* free securedisplay shared memory */
-       amdgpu_bo_free_kernel(&psp->securedisplay_context.context.mem_context.shared_bo,
-                             &psp->securedisplay_context.context.mem_context.shared_mc_addr,
-                             &psp->securedisplay_context.context.mem_context.shared_buf);
+       psp_ta_free_shared_buf(&psp->securedisplay_context.context.mem_context);
 
        return ret;
 }