Skip to content

Commit 6d2191d

Browse files
Ellen Panalexdeucher
authored andcommitted
drm/amdgpu: Add SRIOV crit_region_version support
1. Added enum amd_sriov_crit_region_version to support multi versions 2. Added logic in SRIOV mailbox to regonize crit_region version during req_gpu_init_data Signed-off-by: Ellen Pan <yunru.pan@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent d88c8be commit 6d2191d

4 files changed

Lines changed: 32 additions & 9 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,10 @@ void amdgpu_virt_request_init_data(struct amdgpu_device *adev)
150150
virt->ops->req_init_data(adev);
151151

152152
if (adev->virt.req_init_data_ver > 0)
153-
DRM_INFO("host supports REQ_INIT_DATA handshake\n");
153+
dev_info(adev->dev, "host supports REQ_INIT_DATA handshake of critical_region_version %d\n",
154+
adev->virt.req_init_data_ver);
154155
else
155-
DRM_WARN("host doesn't support REQ_INIT_DATA handshake\n");
156+
dev_warn(adev->dev, "host doesn't support REQ_INIT_DATA handshake\n");
156157
}
157158

158159
/**

drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,11 @@ struct amdgpu_virt_ras {
262262

263263
DECLARE_ATTR_CAP_CLASS(amdgpu_virt, AMDGPU_VIRT_CAPS_LIST);
264264

265+
struct amdgpu_virt_region {
266+
uint32_t offset;
267+
uint32_t size_kb;
268+
};
269+
265270
/* GPU virtualization */
266271
struct amdgpu_virt {
267272
uint32_t caps;
@@ -289,6 +294,9 @@ struct amdgpu_virt {
289294
bool ras_init_done;
290295
uint32_t reg_access;
291296

297+
/* dynamic(v2) critical regions */
298+
struct amdgpu_virt_region init_data_header;
299+
292300
/* vf2pf message */
293301
struct delayed_work vf2pf_work;
294302
uint32_t vf2pf_update_interval_ms;

drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@
6666
(AMD_SRIOV_MSG_VBIOS_SIZE_KB_V1 + AMD_SRIOV_MSG_DATAEXCHANGE_SIZE_KB_V1 + \
6767
AMD_SRIOV_MSG_RAS_TELEMETRY_SIZE_KB_V1)
6868

69+
enum amd_sriov_crit_region_version {
70+
GPU_CRIT_REGION_V1 = 1,
71+
GPU_CRIT_REGION_V2 = 2,
72+
};
73+
6974
/*
7075
* PF2VF history log:
7176
* v1 defined in amdgim

drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,20 @@ static int xgpu_nv_send_access_requests_with_param(struct amdgpu_device *adev,
222222
adev->virt.req_init_data_ver = 0;
223223
} else {
224224
if (req == IDH_REQ_GPU_INIT_DATA) {
225-
adev->virt.req_init_data_ver =
226-
RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW1);
227-
228-
/* assume V1 in case host doesn't set version number */
229-
if (adev->virt.req_init_data_ver < 1)
230-
adev->virt.req_init_data_ver = 1;
225+
switch (RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW1)) {
226+
case GPU_CRIT_REGION_V2:
227+
adev->virt.req_init_data_ver = GPU_CRIT_REGION_V2;
228+
adev->virt.init_data_header.offset =
229+
RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW2);
230+
adev->virt.init_data_header.size_kb =
231+
RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW3);
232+
break;
233+
default:
234+
adev->virt.req_init_data_ver = GPU_CRIT_REGION_V1;
235+
adev->virt.init_data_header.offset = -1;
236+
adev->virt.init_data_header.size_kb = 0;
237+
break;
238+
}
231239
}
232240
}
233241

@@ -285,7 +293,8 @@ static int xgpu_nv_release_full_gpu_access(struct amdgpu_device *adev,
285293

286294
static int xgpu_nv_request_init_data(struct amdgpu_device *adev)
287295
{
288-
return xgpu_nv_send_access_requests(adev, IDH_REQ_GPU_INIT_DATA);
296+
return xgpu_nv_send_access_requests_with_param(adev, IDH_REQ_GPU_INIT_DATA,
297+
0, GPU_CRIT_REGION_V2, 0);
289298
}
290299

291300
static int xgpu_nv_mailbox_ack_irq(struct amdgpu_device *adev,

0 commit comments

Comments
 (0)