From: pding <pixel.d...@amd.com>

Move kfd probe prior to device init. Release exclusive mode
after hw_init if kfd is not enabled.

v2:
 - pass pdev param

Signed-off-by: pding <pixel.d...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 5 +++--
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 5b10ce9..83d18c8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -68,7 +68,8 @@ void amdgpu_amdkfd_fini(void)
        }
 }
 
-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
+                               struct pci_dev *pdev)
 {
        const struct kfd2kgd_calls *kfd2kgd;
 
@@ -89,7 +90,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
                return;
        }
 
-       adev->kfd = kgd2kfd->probe(adev->pdev, kfd2kgd);
+       adev->kfd = kgd2kfd->probe(pdev, kfd2kgd);
 }
 
 void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 8d689ab..707c892 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -44,7 +44,8 @@ void amdgpu_amdkfd_suspend(struct amdgpu_device *adev);
 int amdgpu_amdkfd_resume(struct amdgpu_device *adev);
 void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
                        const void *ih_ring_entry);
-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev);
+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
+                               struct pci_dev *pdev);
 void amdgpu_amdkfd_device_init(struct amdgpu_device *adev);
 void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 068b56a..ef01aa3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1716,6 +1716,9 @@ static int amdgpu_init(struct amdgpu_device *adev)
                adev->ip_blocks[i].status.hw = true;
        }
 
+       if (amdgpu_sriov_vf(adev) && !adev->kfd)
+               amdgpu_virt_release_full_gpu(adev, true);
+
        return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 3e9760d..f872052 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -138,6 +138,8 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned 
long flags)
            !pci_is_thunderbolt_attached(dev->pdev))
                flags |= AMD_IS_PX;
 
+       amdgpu_amdkfd_device_probe(adev, dev->pdev);
+
        /* amdgpu_device_init should report only fatal error
         * like memory allocation failure or iomapping failure,
         * or memory manager initialization failure, it must
@@ -170,7 +172,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned 
long flags)
                                "Error during ACPI methods call\n");
        }
 
-       amdgpu_amdkfd_device_probe(adev);
        amdgpu_amdkfd_device_init(adev);
 
        if (amdgpu_device_is_px(dev)) {
@@ -182,7 +183,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned 
long flags)
                pm_runtime_put_autosuspend(dev->dev);
        }
 
-       if (amdgpu_sriov_vf(adev))
+       if (amdgpu_sriov_vf(adev) && adev->kfd)
                amdgpu_virt_release_full_gpu(adev, true);
 
 out:
-- 
2.9.5

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to