drm/amdgpu: cleanup some incorrect reg access for SRIOV
authorMonk Liu <Monk.Liu@amd.com>
Thu, 23 Jan 2020 09:25:38 +0000 (17:25 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 25 Feb 2020 16:01:25 +0000 (11:01 -0500)
1)
we shouldn't load PSP kdb and sys/sos for VF, they are
supposed to be handled by hypervisor

2)
ih reroute doesn't work on VF thus we should avoid calling
it, besides VF should not use those PSP register sets for PF

3)
shouldn't load SMU ucode under SRIOV, otherwise PSP would report
error

Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
drivers/gpu/drm/amd/amdgpu/psp_v11_0.c

index a16c8101e250d26a89bc09b5ff110597c501c84a..3494966da60edfe53119214782bf1437d389ca3f 100644 (file)
@@ -1081,7 +1081,7 @@ static int psp_hw_start(struct psp_context *psp)
        struct amdgpu_device *adev = psp->adev;
        int ret;
 
-       if (!amdgpu_sriov_vf(adev) || !adev->in_gpu_reset) {
+       if (!amdgpu_sriov_vf(adev) && !adev->in_gpu_reset) {
                if (psp->kdb_bin_size &&
                    (psp->funcs->bootloader_load_kdb != NULL)) {
                        ret = psp_bootloader_load_kdb(psp);
@@ -1318,7 +1318,7 @@ static int psp_np_fw_load(struct psp_context *psp)
 
        if (psp->autoload_supported) {
                ucode = &adev->firmware.ucode[AMDGPU_UCODE_ID_SMC];
-               if (!ucode->fw)
+               if (!ucode->fw || amdgpu_sriov_vf(adev))
                        goto out;
 
                ret = psp_execute_np_fw_load(psp, ucode);
index 0829188c1a5c5eca2992d8468fd7d5f5f3edd1c3..8ab3bf3158a9cc35d5744102ea5c08275311646d 100644 (file)
@@ -420,7 +420,8 @@ static int psp_v11_0_ring_init(struct psp_context *psp,
        struct psp_ring *ring;
        struct amdgpu_device *adev = psp->adev;
 
-       psp_v11_0_reroute_ih(psp);
+       if (!amdgpu_sriov_vf(adev))
+               psp_v11_0_reroute_ih(psp);
 
        ring = &psp->km_ring;