drm/amdgpu: Add callback to fill xcp memory id
authorLijo Lazar <lijo.lazar@amd.com>
Fri, 3 Feb 2023 11:42:10 +0000 (17:12 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:57:08 +0000 (09:57 -0400)
Add callback in xcp interface to fill xcp memory id information. Memory
id is used to identify the range/partition of an XCP from the available
memory partitions in device. Also, fill the id information.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Le Ma <le.ma@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h

index 337d558..e1d3727 100644 (file)
@@ -116,6 +116,7 @@ static void __amdgpu_xcp_add_block(struct amdgpu_xcp_mgr *xcp_mgr, int xcp_id,
 static int __amdgpu_xcp_init(struct amdgpu_xcp_mgr *xcp_mgr, int num_xcps)
 {
        struct amdgpu_xcp_ip ip;
+       uint8_t mem_id;
        int i, j, ret;
 
        for (i = 0; i < MAX_XCP; ++i)
@@ -130,6 +131,17 @@ static int __amdgpu_xcp_init(struct amdgpu_xcp_mgr *xcp_mgr, int num_xcps)
 
                        __amdgpu_xcp_add_block(xcp_mgr, i, &ip);
                }
+
+               xcp_mgr->xcp[i].id = i;
+
+               if (xcp_mgr->funcs->get_xcp_mem_id) {
+                       ret = xcp_mgr->funcs->get_xcp_mem_id(
+                               xcp_mgr, &xcp_mgr->xcp[i], &mem_id);
+                       if (ret)
+                               continue;
+                       else
+                               xcp_mgr->xcp[i].mem_id = mem_id;
+               }
        }
 
        xcp_mgr->num_xcps = num_xcps;
index 45d590d..7e7e458 100644 (file)
@@ -68,7 +68,7 @@ struct amdgpu_xcp {
        struct amdgpu_xcp_ip ip[AMDGPU_XCP_MAX_BLOCKS];
 
        uint8_t id;
-       uint8_t mem_node;
+       uint8_t mem_id;
        bool valid;
 };
 
@@ -89,6 +89,8 @@ struct amdgpu_xcp_mgr_funcs {
        int (*get_ip_details)(struct amdgpu_xcp_mgr *xcp_mgr, int xcp_id,
                              enum AMDGPU_XCP_IP_BLOCK ip_id,
                              struct amdgpu_xcp_ip *ip);
+       int (*get_xcp_mem_id)(struct amdgpu_xcp_mgr *xcp_mgr,
+                             struct amdgpu_xcp *xcp, uint8_t *mem_id);
 
        int (*prepare_suspend)(struct amdgpu_xcp_mgr *xcp_mgr, int xcp_id);
        int (*suspend)(struct amdgpu_xcp_mgr *xcp_mgr, int xcp_id);