Skip to content

Commit 466a59a

Browse files
Asad Kamalalexdeucher
authored andcommitted
drm/amd/pm: Get xgmi link status for XGMI_v_6_4_0
Get XGMI_v_6_4_0 link status and populate it to metrics v1_7 for SMU_v_13_0_6 v2: Get link status register value for each soc from separate function (Lijo) Signed-off-by: Asad Kamal <[email protected]> Reviewed-by: Lijo Lazar <[email protected]> Reviewed-by: Yang Wang <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent e2259b5 commit 466a59a

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
#define smnPCS_GOPX1_PCS_ERROR_STATUS 0x12200210
4141
#define smnPCS_GOPX1_PCS_ERROR_NONCORRECTABLE_MASK 0x12200218
4242

43+
#define XGMI_STATE_DISABLE 0xD1
44+
#define XGMI_STATE_LS0 0x81
45+
#define XGMI_LINK_ACTIVE 1
46+
#define XGMI_LINK_INACTIVE 0
47+
4348
static DEFINE_MUTEX(xgmi_mutex);
4449

4550
#define AMDGPU_MAX_XGMI_DEVICE_PER_HIVE 4
@@ -289,6 +294,42 @@ static const struct amdgpu_pcs_ras_field xgmi3x16_pcs_ras_fields[] = {
289294
SOC15_REG_FIELD(PCS_XGMI3X16_PCS_ERROR_STATUS, RxCMDPktErr)},
290295
};
291296

297+
static u32 xgmi_v6_4_get_link_status(struct amdgpu_device *adev, int global_link_num)
298+
{
299+
const u32 smnpcs_xgmi3x16_pcs_state_hist1 = 0x11a00070;
300+
const int xgmi_inst = 2;
301+
u32 link_inst;
302+
u64 addr;
303+
304+
link_inst = global_link_num % xgmi_inst;
305+
306+
addr = (smnpcs_xgmi3x16_pcs_state_hist1 | (link_inst << 20)) +
307+
adev->asic_funcs->encode_ext_smn_addressing(global_link_num / xgmi_inst);
308+
309+
return RREG32_PCIE_EXT(addr);
310+
}
311+
312+
int amdgpu_get_xgmi_link_status(struct amdgpu_device *adev, int global_link_num)
313+
{
314+
u32 xgmi_state_reg_val;
315+
316+
switch (amdgpu_ip_version(adev, XGMI_HWIP, 0)) {
317+
case IP_VERSION(6, 4, 0):
318+
xgmi_state_reg_val = xgmi_v6_4_get_link_status(adev, global_link_num);
319+
break;
320+
default:
321+
return -EOPNOTSUPP;
322+
}
323+
324+
if ((xgmi_state_reg_val & 0xFF) == XGMI_STATE_DISABLE)
325+
return -ENOLINK;
326+
327+
if ((xgmi_state_reg_val & 0xFF) == XGMI_STATE_LS0)
328+
return XGMI_LINK_ACTIVE;
329+
330+
return XGMI_LINK_INACTIVE;
331+
}
332+
292333
/**
293334
* DOC: AMDGPU XGMI Support
294335
*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,7 @@ int amdgpu_xgmi_reset_on_init(struct amdgpu_device *adev);
8484
int amdgpu_xgmi_request_nps_change(struct amdgpu_device *adev,
8585
struct amdgpu_hive_info *hive,
8686
int req_nps_mode);
87+
int amdgpu_get_xgmi_link_status(struct amdgpu_device *adev,
88+
int global_link_num);
8789

8890
#endif

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ MODULE_FIRMWARE("amdgpu/smu_13_0_14.bin");
9696
#define PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK 0xE0
9797
#define PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE__SHIFT 0x5
9898
#define LINK_SPEED_MAX 4
99-
10099
#define SMU_13_0_6_DSCLK_THRESHOLD 140
101100

102101
#define MCA_BANK_IPID(_ip, _hwid, _type) \
@@ -2448,6 +2447,9 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
24482447
SMUQ10_ROUND(GET_METRIC_FIELD(XgmiReadDataSizeAcc, flag)[i]);
24492448
gpu_metrics->xgmi_write_data_acc[i] =
24502449
SMUQ10_ROUND(GET_METRIC_FIELD(XgmiWriteDataSizeAcc, flag)[i]);
2450+
ret = amdgpu_get_xgmi_link_status(adev, i);
2451+
if (ret >= 0)
2452+
gpu_metrics->xgmi_link_status[i] = ret;
24512453
}
24522454

24532455
gpu_metrics->num_partition = adev->xcp_mgr->num_xcps;

0 commit comments

Comments
 (0)