Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: add inst to amdgpu_dpm_enable_vcn

Add an instance parameter to amdgpu_dpm_enable_vcn() function, and change
all calls from vcn ip functions to add instance argument. vcn generations
with only one instance (v1.0, v2.0) always use 0 as instance number. vcn
generations with multiple instances (v2.5, v3.0, v4.0, v4.0.3, v4.0.5,
v5.0.0) use the actual instance number.

v2: remove for-loop in amdgpu_dpm_enable_vcn(), and temporarily move it
to vcn ip with multiple instances, in order to keep the exact same logic
as before, until further separation in next patch.

v3: fix missing prefix

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Boyuan Zhang and committed by
Alex Deucher
393f026b ff69bba0

+60 -38
+3 -3
drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
··· 303 303 idle_work_unexecuted = cancel_delayed_work_sync(&adev->vcn.idle_work); 304 304 if (idle_work_unexecuted) { 305 305 if (adev->pm.dpm_enabled) 306 - amdgpu_dpm_enable_vcn(adev, false); 306 + amdgpu_dpm_enable_vcn(adev, false, 0); 307 307 } 308 308 309 309 r = vcn_v1_0_hw_fini(ip_block); ··· 1856 1856 if (fences == 0) { 1857 1857 amdgpu_gfx_off_ctrl(adev, true); 1858 1858 if (adev->pm.dpm_enabled) 1859 - amdgpu_dpm_enable_vcn(adev, false); 1859 + amdgpu_dpm_enable_vcn(adev, false, 0); 1860 1860 else 1861 1861 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN, 1862 1862 AMD_PG_STATE_GATE); ··· 1886 1886 if (set_clocks) { 1887 1887 amdgpu_gfx_off_ctrl(adev, false); 1888 1888 if (adev->pm.dpm_enabled) 1889 - amdgpu_dpm_enable_vcn(adev, true); 1889 + amdgpu_dpm_enable_vcn(adev, true, 0); 1890 1890 else 1891 1891 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN, 1892 1892 AMD_PG_STATE_UNGATE);
+2 -2
drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
··· 978 978 int i, j, r; 979 979 980 980 if (adev->pm.dpm_enabled) 981 - amdgpu_dpm_enable_vcn(adev, true); 981 + amdgpu_dpm_enable_vcn(adev, true, 0); 982 982 983 983 if (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) 984 984 return vcn_v2_0_start_dpg_mode(adev, adev->vcn.indirect_sram); ··· 1235 1235 1236 1236 power_off: 1237 1237 if (adev->pm.dpm_enabled) 1238 - amdgpu_dpm_enable_vcn(adev, false); 1238 + amdgpu_dpm_enable_vcn(adev, false, 0); 1239 1239 1240 1240 return 0; 1241 1241 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
··· 1012 1012 uint32_t rb_bufsz, tmp; 1013 1013 int i, j, k, r; 1014 1014 1015 - if (adev->pm.dpm_enabled) 1016 - amdgpu_dpm_enable_vcn(adev, true); 1015 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1016 + if (adev->pm.dpm_enabled) 1017 + amdgpu_dpm_enable_vcn(adev, true, i); 1018 + } 1017 1019 1018 1020 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1019 1021 if (adev->vcn.harvest_config & (1 << i)) ··· 1487 1485 ~UVD_POWER_STATUS__UVD_POWER_STATUS_MASK); 1488 1486 } 1489 1487 1490 - if (adev->pm.dpm_enabled) 1491 - amdgpu_dpm_enable_vcn(adev, false); 1488 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1489 + if (adev->pm.dpm_enabled) 1490 + amdgpu_dpm_enable_vcn(adev, false, i); 1491 + } 1492 1492 1493 1493 return 0; 1494 1494 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
··· 1141 1141 uint32_t rb_bufsz, tmp; 1142 1142 int i, j, k, r; 1143 1143 1144 - if (adev->pm.dpm_enabled) 1145 - amdgpu_dpm_enable_vcn(adev, true); 1144 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1145 + if (adev->pm.dpm_enabled) 1146 + amdgpu_dpm_enable_vcn(adev, true, i); 1147 + } 1146 1148 1147 1149 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1148 1150 if (adev->vcn.harvest_config & (1 << i)) ··· 1634 1632 vcn_v3_0_enable_static_power_gating(adev, i); 1635 1633 } 1636 1634 1637 - if (adev->pm.dpm_enabled) 1638 - amdgpu_dpm_enable_vcn(adev, false); 1635 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1636 + if (adev->pm.dpm_enabled) 1637 + amdgpu_dpm_enable_vcn(adev, false, i); 1638 + } 1639 1639 1640 1640 return 0; 1641 1641 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
··· 1097 1097 uint32_t tmp; 1098 1098 int i, j, k, r; 1099 1099 1100 - if (adev->pm.dpm_enabled) 1101 - amdgpu_dpm_enable_vcn(adev, true); 1100 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1101 + if (adev->pm.dpm_enabled) 1102 + amdgpu_dpm_enable_vcn(adev, true, i); 1103 + } 1102 1104 1103 1105 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1104 1106 if (adev->vcn.harvest_config & (1 << i)) ··· 1625 1623 vcn_v4_0_enable_static_power_gating(adev, i); 1626 1624 } 1627 1625 1628 - if (adev->pm.dpm_enabled) 1629 - amdgpu_dpm_enable_vcn(adev, false); 1626 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1627 + if (adev->pm.dpm_enabled) 1628 + amdgpu_dpm_enable_vcn(adev, false, i); 1629 + } 1630 1630 1631 1631 return 0; 1632 1632 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
··· 1121 1121 int i, j, k, r, vcn_inst; 1122 1122 uint32_t tmp; 1123 1123 1124 - if (adev->pm.dpm_enabled) 1125 - amdgpu_dpm_enable_vcn(adev, true); 1124 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1125 + if (adev->pm.dpm_enabled) 1126 + amdgpu_dpm_enable_vcn(adev, true, i); 1127 + } 1126 1128 1127 1129 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1128 1130 if (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) { ··· 1397 1395 vcn_v4_0_3_enable_clock_gating(adev, i); 1398 1396 } 1399 1397 Done: 1400 - if (adev->pm.dpm_enabled) 1401 - amdgpu_dpm_enable_vcn(adev, false); 1398 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1399 + if (adev->pm.dpm_enabled) 1400 + amdgpu_dpm_enable_vcn(adev, false, i); 1401 + } 1402 1402 1403 1403 return 0; 1404 1404 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
··· 1000 1000 uint32_t tmp; 1001 1001 int i, j, k, r; 1002 1002 1003 - if (adev->pm.dpm_enabled) 1004 - amdgpu_dpm_enable_vcn(adev, true); 1003 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1004 + if (adev->pm.dpm_enabled) 1005 + amdgpu_dpm_enable_vcn(adev, true, i); 1006 + } 1005 1007 1006 1008 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1007 1009 if (adev->vcn.harvest_config & (1 << i)) ··· 1279 1277 vcn_v4_0_5_enable_static_power_gating(adev, i); 1280 1278 } 1281 1279 1282 - if (adev->pm.dpm_enabled) 1283 - amdgpu_dpm_enable_vcn(adev, false); 1280 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1281 + if (adev->pm.dpm_enabled) 1282 + amdgpu_dpm_enable_vcn(adev, false, i); 1283 + } 1284 1284 1285 1285 return 0; 1286 1286 }
+8 -4
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
··· 771 771 uint32_t tmp; 772 772 int i, j, k, r; 773 773 774 - if (adev->pm.dpm_enabled) 775 - amdgpu_dpm_enable_vcn(adev, true); 774 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 775 + if (adev->pm.dpm_enabled) 776 + amdgpu_dpm_enable_vcn(adev, true, i); 777 + } 776 778 777 779 for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 778 780 if (adev->vcn.harvest_config & (1 << i)) ··· 1020 1018 vcn_v5_0_0_enable_static_power_gating(adev, i); 1021 1019 } 1022 1020 1023 - if (adev->pm.dpm_enabled) 1024 - amdgpu_dpm_enable_vcn(adev, false); 1021 + for (i = 0; i < adev->vcn.num_vcn_inst; ++i) { 1022 + if (adev->pm.dpm_enabled) 1023 + amdgpu_dpm_enable_vcn(adev, false, i); 1024 + } 1025 1025 1026 1026 return 0; 1027 1027 }
+6 -8
drivers/gpu/drm/amd/pm/amdgpu_dpm.c
··· 581 581 enable ? "enable" : "disable", ret); 582 582 } 583 583 584 - void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable) 584 + void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable, int inst) 585 585 { 586 - int i, ret = 0; 586 + int ret = 0; 587 587 588 - for (i = 0; i < adev->vcn.num_vcn_inst; i++) { 589 - ret = amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_VCN, !enable, i); 590 - if (ret) 591 - DRM_ERROR("Dpm %s uvd failed, ret = %d. \n", 592 - enable ? "enable" : "disable", ret); 593 - } 588 + ret = amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_VCN, !enable, inst); 589 + if (ret) 590 + DRM_ERROR("Dpm %s uvd failed, ret = %d. \n", 591 + enable ? "enable" : "disable", ret); 594 592 } 595 593 596 594 void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable)
+1 -1
drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
··· 446 446 447 447 void amdgpu_dpm_compute_clocks(struct amdgpu_device *adev); 448 448 void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable); 449 - void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable); 449 + void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable, int inst); 450 450 void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable); 451 451 void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable); 452 452 void amdgpu_dpm_enable_vpe(struct amdgpu_device *adev, bool enable);