OSDN Git Service

drm/amdgpu: load np fw prior before loading the TAs
authorHawking Zhang <Hawking.Zhang@amd.com>
Mon, 2 Dec 2019 05:44:38 +0000 (13:44 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 3 Dec 2019 16:08:10 +0000 (11:08 -0500)
Platform TAs will independently toggle DF Cstate.
for instance, get/set topology from xgmi ta. do error
injection from ras ta. In such case, PMFW needs to be
loaded before TAs so that all the subsequent Cstate
calls recieved by PSP FW can be routed to PMFW.

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c

index 6ff5e78..c845297 100644 (file)
@@ -1231,39 +1231,6 @@ static int psp_hw_start(struct psp_context *psp)
                return ret;
        }
 
-       ret = psp_asd_load(psp);
-       if (ret) {
-               DRM_ERROR("PSP load asd failed!\n");
-               return ret;
-       }
-
-       if (adev->gmc.xgmi.num_physical_nodes > 1) {
-               ret = psp_xgmi_initialize(psp);
-               /* Warning the XGMI seesion initialize failure
-                * Instead of stop driver initialization
-                */
-               if (ret)
-                       dev_err(psp->adev->dev,
-                               "XGMI: Failed to initialize XGMI session\n");
-       }
-
-       if (psp->adev->psp.ta_fw) {
-               ret = psp_ras_initialize(psp);
-               if (ret)
-                       dev_err(psp->adev->dev,
-                                       "RAS: Failed to initialize RAS\n");
-
-               ret = psp_hdcp_initialize(psp);
-               if (ret)
-                       dev_err(psp->adev->dev,
-                               "HDCP: Failed to initialize HDCP\n");
-
-               ret = psp_dtm_initialize(psp);
-               if (ret)
-                       dev_err(psp->adev->dev,
-                               "DTM: Failed to initialize DTM\n");
-       }
-
        return 0;
 }
 
@@ -1579,6 +1546,39 @@ skip_memalloc:
        if (ret)
                goto failed;
 
+       ret = psp_asd_load(psp);
+       if (ret) {
+               DRM_ERROR("PSP load asd failed!\n");
+               return ret;
+       }
+
+       if (adev->gmc.xgmi.num_physical_nodes > 1) {
+               ret = psp_xgmi_initialize(psp);
+               /* Warning the XGMI seesion initialize failure
+                * Instead of stop driver initialization
+                */
+               if (ret)
+                       dev_err(psp->adev->dev,
+                               "XGMI: Failed to initialize XGMI session\n");
+       }
+
+       if (psp->adev->psp.ta_fw) {
+               ret = psp_ras_initialize(psp);
+               if (ret)
+                       dev_err(psp->adev->dev,
+                                       "RAS: Failed to initialize RAS\n");
+
+               ret = psp_hdcp_initialize(psp);
+               if (ret)
+                       dev_err(psp->adev->dev,
+                               "HDCP: Failed to initialize HDCP\n");
+
+               ret = psp_dtm_initialize(psp);
+               if (ret)
+                       dev_err(psp->adev->dev,
+                               "DTM: Failed to initialize DTM\n");
+       }
+
        return 0;
 
 failed: