[PATCH 44/48] drm/amdgpu: use new helper to get num instances for VCN

Alex Deucher alexander.deucher at amd.com
Tue Dec 10 22:53:33 UTC 2024


Use the helper for all non-VCN code which queries the number
of VCN instances.

Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c   |  3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c       |  9 +++++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       |  5 +++--
 drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c    |  8 ++++---
 drivers/gpu/drm/amd/amdgpu/nv.c               |  4 +++-
 drivers/gpu/drm/amd/amdgpu/soc21.c            |  4 +++-
 drivers/gpu/drm/amd/amdgpu/soc24.c            |  4 +++-
 drivers/gpu/drm/amd/pm/amdgpu_dpm.c           |  2 +-
 drivers/gpu/drm/amd/pm/amdgpu_pm.c            |  6 ++++--
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 21 ++++++++++++-------
 .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c   |  5 +++--
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c    |  5 +++--
 .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c    |  5 +++--
 13 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index 49ca8c814455d..7c3719ef07070 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -2028,6 +2028,7 @@ DEFINE_DEBUGFS_ATTRIBUTE(fops_sclk_set, NULL,
 
 int amdgpu_debugfs_init(struct amdgpu_device *adev)
 {
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 	struct dentry *root = adev_to_drm(adev)->primary->debugfs_root;
 	struct dentry *ent;
 	int r, i;
@@ -2082,7 +2083,7 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev)
 		amdgpu_debugfs_ring_init(adev, ring);
 	}
 
-	for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+	for (i = 0; i < num_vcn_inst; i++) {
 		if (!amdgpu_vcnfw_log)
 			break;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 5204d1217cec4..e1e0f80b23606 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -400,6 +400,7 @@ static int amdgpu_hw_ip_info(struct amdgpu_device *adev,
 	enum amd_ip_block_type type;
 	unsigned int num_rings = 0;
 	unsigned int i, j;
+	int num_inst;
 
 	if (info->query_hw_ip.ip_instance >= AMDGPU_HW_IP_INSTANCE_MAX_COUNT)
 		return -EINVAL;
@@ -464,7 +465,8 @@ static int amdgpu_hw_ip_info(struct amdgpu_device *adev,
 		break;
 	case AMDGPU_HW_IP_VCN_DEC:
 		type = AMD_IP_BLOCK_TYPE_VCN;
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		num_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+		for (i = 0; i < num_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 
@@ -476,7 +478,8 @@ static int amdgpu_hw_ip_info(struct amdgpu_device *adev,
 		break;
 	case AMDGPU_HW_IP_VCN_ENC:
 		type = AMD_IP_BLOCK_TYPE_VCN;
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		num_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+		for (i = 0; i < num_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 
@@ -686,7 +689,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 			count = adev->jpeg.num_jpeg_inst * adev->jpeg.num_jpeg_rings;
 			break;
 		case AMD_IP_BLOCK_TYPE_VCN:
-			count = adev->vcn.num_vcn_inst;
+			count = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 			break;
 		case AMD_IP_BLOCK_TYPE_UVD:
 			count = adev->uvd.num_uvd_inst;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index db081618e85c3..66ec1a4da7343 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -358,7 +358,7 @@ static void amdgpu_ras_instance_mask_check(struct amdgpu_device *adev,
 				struct ras_debug_if *data)
 {
 	int num_xcc = adev->gfx.xcc_mask ? NUM_XCC(adev->gfx.xcc_mask) : 1;
-	uint32_t mask, inst_mask = data->inject.instance_mask;
+	uint32_t mask, inst, inst_mask = data->inject.instance_mask;
 
 	/* no need to set instance mask if there is only one instance */
 	if (num_xcc <= 1 && inst_mask) {
@@ -379,7 +379,8 @@ static void amdgpu_ras_instance_mask_check(struct amdgpu_device *adev,
 		break;
 	case AMDGPU_RAS_BLOCK__VCN:
 	case AMDGPU_RAS_BLOCK__JPEG:
-		mask = GENMASK(adev->vcn.num_vcn_inst - 1, 0);
+		inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+		mask = GENMASK(inst - 1, 0);
 		break;
 	default:
 		mask = inst_mask;
diff --git a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
index e157d6d857b6e..ab7a2ba59a1bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
+++ b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
@@ -64,7 +64,9 @@ void aqua_vanjaram_doorbell_index_init(struct amdgpu_device *adev)
 
 static bool aqua_vanjaram_xcp_vcn_shared(struct amdgpu_device *adev)
 {
-	return (adev->xcp_mgr->num_xcps > adev->vcn.num_vcn_inst);
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+
+	return adev->xcp_mgr->num_xcps > num_vcn_inst;
 }
 
 static void aqua_vanjaram_set_xcp_id(struct amdgpu_device *adev,
@@ -398,7 +400,7 @@ static int __aqua_vanjaram_get_xcp_ip_info(struct amdgpu_xcp_mgr *xcp_mgr, int x
 	int num_xcc_xcp, num_sdma_xcp, num_vcn_xcp;
 
 	num_sdma = adev->sdma.num_instances;
-	num_vcn = adev->vcn.num_vcn_inst;
+	num_vcn = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 	num_shared_vcn = 1;
 
 	num_xcc_xcp = adev->gfx.num_xcc_per_xcp;
@@ -462,7 +464,7 @@ static int aqua_vanjaram_get_xcp_res_info(struct amdgpu_xcp_mgr *xcp_mgr,
 
 	max_res[AMDGPU_XCP_RES_XCC] = NUM_XCC(adev->gfx.xcc_mask);
 	max_res[AMDGPU_XCP_RES_DMA] = adev->sdma.num_instances;
-	max_res[AMDGPU_XCP_RES_DEC] = adev->vcn.num_vcn_inst;
+	max_res[AMDGPU_XCP_RES_DEC] = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 	max_res[AMDGPU_XCP_RES_JPEG] = adev->jpeg.num_jpeg_inst;
 
 	switch (mode) {
diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c
index 47db483c35169..a14865c02d73b 100644
--- a/drivers/gpu/drm/amd/amdgpu/nv.c
+++ b/drivers/gpu/drm/amd/amdgpu/nv.c
@@ -210,7 +210,9 @@ static const struct amdgpu_video_codecs yc_video_codecs_decode = {
 static int nv_query_video_codecs(struct amdgpu_device *adev, bool encode,
 				 const struct amdgpu_video_codecs **codecs)
 {
-	if (adev->vcn.num_vcn_inst == hweight8(adev->vcn.harvest_config))
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+
+	if (!num_vcn_inst)
 		return -EINVAL;
 
 	switch (amdgpu_ip_version(adev, UVD_HWIP, 0)) {
diff --git a/drivers/gpu/drm/amd/amdgpu/soc21.c b/drivers/gpu/drm/amd/amdgpu/soc21.c
index 62ad67d0b598f..7ee3f1d2fcd24 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc21.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc21.c
@@ -150,7 +150,9 @@ static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_decode_vcn1 = {
 static int soc21_query_video_codecs(struct amdgpu_device *adev, bool encode,
 				 const struct amdgpu_video_codecs **codecs)
 {
-	if (adev->vcn.num_vcn_inst == hweight8(adev->vcn.harvest_config))
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+
+	if (!num_vcn_inst)
 		return -EINVAL;
 
 	switch (amdgpu_ip_version(adev, UVD_HWIP, 0)) {
diff --git a/drivers/gpu/drm/amd/amdgpu/soc24.c b/drivers/gpu/drm/amd/amdgpu/soc24.c
index 6b8e078ee7c75..8958f1e544e04 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc24.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc24.c
@@ -74,7 +74,9 @@ static const struct amdgpu_video_codecs vcn_5_0_0_video_codecs_decode_vcn0 = {
 static int soc24_query_video_codecs(struct amdgpu_device *adev, bool encode,
 				 const struct amdgpu_video_codecs **codecs)
 {
-	if (adev->vcn.num_vcn_inst == hweight8(adev->vcn.harvest_config))
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
+
+	if (!num_vcn_inst)
 		return -EINVAL;
 
 	switch (amdgpu_ip_version(adev, UVD_HWIP, 0)) {
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
index 6a9e26905edfc..71797b06f94f8 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
@@ -81,7 +81,7 @@ int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev,
 	bool is_vcn = (block_type == AMD_IP_BLOCK_TYPE_UVD || block_type == AMD_IP_BLOCK_TYPE_VCN);
 
 	if (atomic_read(&adev->pm.pwr_state[block_type]) == pwr_state &&
-			(!is_vcn || adev->vcn.num_vcn_inst == 1)) {
+	    (!is_vcn || amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN) == 1)) {
 		dev_dbg(adev->dev, "IP block%d already in the target %s state!",
 				block_type, gate ? "gate" : "ungate");
 		return 0;
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index e8ae7681bf0a3..adedad84cbb6a 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -2093,7 +2093,8 @@ static int pp_dpm_clk_default_attr_update(struct amdgpu_device *adev, struct amd
 		if (!((gc_ver == IP_VERSION(10, 3, 1) ||
 		       gc_ver == IP_VERSION(10, 3, 0) ||
 		       gc_ver == IP_VERSION(11, 0, 2) ||
-		       gc_ver == IP_VERSION(11, 0, 3)) && adev->vcn.num_vcn_inst >= 2))
+		       gc_ver == IP_VERSION(11, 0, 3)) &&
+		      amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN) >= 2))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_dclk)) {
 		if (!(gc_ver == IP_VERSION(10, 3, 1) ||
@@ -2115,7 +2116,8 @@ static int pp_dpm_clk_default_attr_update(struct amdgpu_device *adev, struct amd
 		if (!((gc_ver == IP_VERSION(10, 3, 1) ||
 		       gc_ver == IP_VERSION(10, 3, 0) ||
 		       gc_ver == IP_VERSION(11, 0, 2) ||
-		       gc_ver == IP_VERSION(11, 0, 3)) && adev->vcn.num_vcn_inst >= 2))
+		       gc_ver == IP_VERSION(11, 0, 3)) &&
+		      amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN) >= 2))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_pcie)) {
 		if (gc_ver == IP_VERSION(9, 4, 2) ||
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index e5dd0bb31c386..566edfbdad17f 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -788,19 +788,20 @@ static int smu_set_default_dpm_table(struct smu_context *smu)
 	struct smu_power_gate *power_gate = &smu_power->power_gate;
 	int vcn_gate[AMDGPU_MAX_VCN_INSTANCES], jpeg_gate, i;
 	int ret = 0;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	if (!smu->ppt_funcs->set_default_dpm_table)
 		return 0;
 
 	if (adev->pg_flags & AMD_PG_SUPPORT_VCN) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++)
+		for (i = 0; i < num_vcn_inst; i++)
 			vcn_gate[i] = atomic_read(&power_gate->vcn_gated[i]);
 	}
 	if (adev->pg_flags & AMD_PG_SUPPORT_JPEG)
 		jpeg_gate = atomic_read(&power_gate->jpeg_gated);
 
 	if (adev->pg_flags & AMD_PG_SUPPORT_VCN) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			ret = smu_dpm_set_vcn_enable(smu, true, i);
 			if (ret)
 				return ret;
@@ -822,7 +823,7 @@ static int smu_set_default_dpm_table(struct smu_context *smu)
 		smu_dpm_set_jpeg_enable(smu, !jpeg_gate);
 err_out:
 	if (adev->pg_flags & AMD_PG_SUPPORT_VCN) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++)
+		for (i = 0; i < num_vcn_inst; i++)
 			smu_dpm_set_vcn_enable(smu, !vcn_gate[i], i);
 	}
 
@@ -1279,6 +1280,7 @@ static int smu_sw_init(struct amdgpu_ip_block *ip_block)
 	struct amdgpu_device *adev = ip_block->adev;
 	struct smu_context *smu = adev->powerplay.pp_handle;
 	int i, ret;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	smu->pool_size = adev->pm.smu_prv_buffer_size;
 	smu->smu_feature.feature_num = SMU_FEATURE_MAX;
@@ -1290,7 +1292,7 @@ static int smu_sw_init(struct amdgpu_ip_block *ip_block)
 	atomic64_set(&smu->throttle_int_counter, 0);
 	smu->watermarks_bitmap = 0;
 
-	for (i = 0; i < adev->vcn.num_vcn_inst; i++)
+	for (i = 0; i < num_vcn_inst; i++)
 		atomic_set(&smu->smu_power.power_gate.vcn_gated[i], 1);
 	atomic_set(&smu->smu_power.power_gate.jpeg_gated, 1);
 	atomic_set(&smu->smu_power.power_gate.vpe_gated, 1);
@@ -1824,6 +1826,7 @@ static int smu_hw_init(struct amdgpu_ip_block *ip_block)
 	int i, ret;
 	struct amdgpu_device *adev = ip_block->adev;
 	struct smu_context *smu = adev->powerplay.pp_handle;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev)) {
 		smu->pm_enabled = false;
@@ -1847,7 +1850,7 @@ static int smu_hw_init(struct amdgpu_ip_block *ip_block)
 		ret = smu_set_gfx_imu_enable(smu);
 		if (ret)
 			return ret;
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++)
+		for (i = 0; i < num_vcn_inst; i++)
 			smu_dpm_set_vcn_enable(smu, true, i);
 		smu_dpm_set_jpeg_enable(smu, true);
 		smu_dpm_set_vpe_enable(smu, true);
@@ -2047,11 +2050,12 @@ static int smu_hw_fini(struct amdgpu_ip_block *ip_block)
 	struct amdgpu_device *adev = ip_block->adev;
 	struct smu_context *smu = adev->powerplay.pp_handle;
 	int i, ret;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
 		return 0;
 
-	for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+	for (i = 0; i < num_vcn_inst; i++) {
 		smu_dpm_set_vcn_enable(smu, false, i);
 		adev->vcn.inst[i].cur_state = AMD_PG_STATE_GATE;
 	}
@@ -2995,7 +2999,7 @@ static int smu_read_sensor(void *handle,
 	struct amdgpu_device *adev = smu->adev;
 	struct smu_umd_pstate_table *pstate_table =
 				&smu->pstate_table;
-	int i, ret = 0;
+	int i, ret = 0, num_vcn_inst;
 	uint32_t *size, size_val;
 
 	if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
@@ -3041,8 +3045,9 @@ static int smu_read_sensor(void *handle,
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_VCN_POWER_STATE:
+		num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 		*(uint32_t *)data = 0;
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			if (!atomic_read(&smu->smu_power.power_gate.vcn_gated[i])) {
 				*(uint32_t *)data = 1;
 				break;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
index 19a25fdc2f5b4..5cfb68d673089 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c
@@ -958,6 +958,7 @@ static int sienna_cichlid_set_default_dpm_table(struct smu_context *smu)
 	struct amdgpu_device *adev = smu->adev;
 	int i, ret = 0;
 	DpmDescriptor_t *table_member;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	/* socclk dpm table setup */
 	dpm_table = &dpm_context->dpm_tables.soc_table;
@@ -1033,7 +1034,7 @@ static int sienna_cichlid_set_default_dpm_table(struct smu_context *smu)
 	}
 
 	/* vclk0/1 dpm table setup */
-	for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+	for (i = 0; i < num_vcn_inst; i++) {
 		if (adev->vcn.harvest_config & (1 << i))
 			continue;
 
@@ -1056,7 +1057,7 @@ static int sienna_cichlid_set_default_dpm_table(struct smu_context *smu)
 	}
 
 	/* dclk0/1 dpm table setup */
-	for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+	for (i = 0; i < num_vcn_inst; i++) {
 		if (adev->vcn.harvest_config & (1 << i))
 			continue;
 		dpm_table = &dpm_context->dpm_tables.dclk_table;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
index 7bb45ff6d5c85..e61b8c5fb9d67 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -1717,6 +1717,7 @@ int smu_v13_0_set_performance_level(struct smu_context *smu,
 	uint32_t fclk_min = 0, fclk_max = 0;
 	int ret = 0, i;
 	bool auto_level = false;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	switch (level) {
 	case AMD_DPM_FORCED_LEVEL_HIGH:
@@ -1833,7 +1834,7 @@ int smu_v13_0_set_performance_level(struct smu_context *smu,
 	}
 
 	if (vclk_min && vclk_max) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 			ret = smu_v13_0_set_soft_freq_limited_range(smu,
@@ -1849,7 +1850,7 @@ int smu_v13_0_set_performance_level(struct smu_context *smu,
 	}
 
 	if (dclk_min && dclk_max) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 			ret = smu_v13_0_set_soft_freq_limited_range(smu,
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
index 9b2f4fe1578b8..e660f4a663781 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
@@ -1211,6 +1211,7 @@ int smu_v14_0_set_performance_level(struct smu_context *smu,
 	uint32_t fclk_min = 0, fclk_max = 0;
 	int ret = 0, i;
 	bool auto_level = false;
+	int num_vcn_inst = amdgpu_device_ip_get_num_inst(adev, AMD_IP_BLOCK_TYPE_VCN);
 
 	switch (level) {
 	case AMD_DPM_FORCED_LEVEL_HIGH:
@@ -1314,7 +1315,7 @@ int smu_v14_0_set_performance_level(struct smu_context *smu,
 	}
 
 	if (vclk_min && vclk_max) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 			ret = smu_v14_0_set_soft_freq_limited_range(smu,
@@ -1330,7 +1331,7 @@ int smu_v14_0_set_performance_level(struct smu_context *smu,
 	}
 
 	if (dclk_min && dclk_max) {
-		for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
+		for (i = 0; i < num_vcn_inst; i++) {
 			if (adev->vcn.harvest_config & (1 << i))
 				continue;
 			ret = smu_v14_0_set_soft_freq_limited_range(smu,
-- 
2.47.1



More information about the amd-gfx mailing list