drm/amdgpu: use amdxcp platform device as spatial partition
authorJames Zhu <James.Zhu@amd.com>
Tue, 25 Apr 2023 21:02:48 +0000 (17:02 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 15:08:58 +0000 (11:08 -0400)
Use amdxcp platform device as spatial partition device.

-v2: remove unused variable

Signed-off-by: James Zhu <James.Zhu@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c

index 422c36ed8f365fef006e833a41bdd33108f8683f..7489b2b1a0d0155b4be2ab0ff76369cc4d8fd760 100644 (file)
@@ -50,6 +50,7 @@
 #include "amdgpu_ras.h"
 #include "amdgpu_xgmi.h"
 #include "amdgpu_reset.h"
+#include "../amdxcp/amdgpu_xcp_drv.h"
 
 /*
  * KMS wrapper.
@@ -2948,6 +2949,7 @@ static void __exit amdgpu_exit(void)
        amdgpu_sync_fini();
        amdgpu_fence_slab_fini();
        mmu_notifier_synchronize();
+       amdgpu_xcp_drv_release();
 }
 
 module_init(amdgpu_init);
index 86087faab689f4d03da998189443176ae5b00156..d733fa6e7477e75f4f71c1895dd5e68953b868f8 100644 (file)
@@ -25,6 +25,7 @@
 #include "amdgpu_drv.h"
 
 #include <drm/drm_drv.h>
+#include "../amdxcp/amdgpu_xcp_drv.h"
 
 static int __amdgpu_xcp_run(struct amdgpu_xcp_mgr *xcp_mgr,
                            struct amdgpu_xcp_ip *xcp_ip, int xcp_state)
@@ -226,18 +227,15 @@ int amdgpu_xcp_query_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr, u32 flags)
 static int amdgpu_xcp_dev_alloc(struct amdgpu_device *adev)
 {
        struct drm_device *p_ddev;
-       struct pci_dev *pdev;
        struct drm_device *ddev;
-       int i;
+       int i, ret;
 
-       pdev = adev->pdev;
        ddev = adev_to_drm(adev);
 
        for (i = 0; i < MAX_XCP; i++) {
-               p_ddev = drm_dev_alloc(&amdgpu_partition_driver,
-                       &pci_upstream_bridge(pdev)->dev);
-               if (IS_ERR(p_ddev))
-                       return PTR_ERR(p_ddev);
+               ret = amdgpu_xcp_drm_dev_alloc(&p_ddev);
+               if (ret)
+                       return ret;
 
                /* Redirect all IOCTLs to the primary device */
                adev->xcp_mgr->xcp[i].rdev = p_ddev->render->dev;