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

drm/amdgpu: return tcc_disabled_mask to userspace

UMDs need this for correct programming of harvested chips.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Marek Olšák and committed by
Alex Deucher
cf21e76a b96ec4a4

+19 -1
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 82 82 * - 3.32.0 - Add syncobj timeline support to AMDGPU_CS. 83 83 * - 3.33.0 - Fixes for GDS ENOMEM failures in AMDGPU_CS. 84 84 * - 3.34.0 - Non-DC can flip correctly between buffers with different pitches 85 + * - 3.35.0 - Add drm_amdgpu_info_device::tcc_disabled_mask 85 86 */ 86 87 #define KMS_DRIVER_MAJOR 3 87 - #define KMS_DRIVER_MINOR 34 88 + #define KMS_DRIVER_MINOR 35 88 89 #define KMS_DRIVER_PATCHLEVEL 0 89 90 90 91 #define AMDGPU_MAX_TIMEOUT_PARAM_LENTH 256
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
··· 165 165 uint32_t num_sc_per_sh; 166 166 uint32_t num_packer_per_sc; 167 167 uint32_t pa_sc_tile_steering_override; 168 + uint64_t tcc_disabled_mask; 168 169 }; 169 170 170 171 struct amdgpu_cu_info {
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
··· 782 782 dev_info.pa_sc_tile_steering_override = 783 783 adev->gfx.config.pa_sc_tile_steering_override; 784 784 785 + dev_info.tcc_disabled_mask = adev->gfx.config.tcc_disabled_mask; 786 + 785 787 return copy_to_user(out, &dev_info, 786 788 min((size_t)size, sizeof(dev_info))) ? -EFAULT : 0; 787 789 }
+12
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
··· 1691 1691 } 1692 1692 } 1693 1693 1694 + static void gfx_v10_0_get_tcc_info(struct amdgpu_device *adev) 1695 + { 1696 + /* TCCs are global (not instanced). */ 1697 + uint32_t tcc_disable = RREG32_SOC15(GC, 0, mmCGTS_TCC_DISABLE) | 1698 + RREG32_SOC15(GC, 0, mmCGTS_USER_TCC_DISABLE); 1699 + 1700 + adev->gfx.config.tcc_disabled_mask = 1701 + REG_GET_FIELD(tcc_disable, CGTS_TCC_DISABLE, TCC_DISABLE) | 1702 + (REG_GET_FIELD(tcc_disable, CGTS_TCC_DISABLE, HI_TCC_DISABLE) << 16); 1703 + } 1704 + 1694 1705 static void gfx_v10_0_constants_init(struct amdgpu_device *adev) 1695 1706 { 1696 1707 u32 tmp; ··· 1713 1702 1714 1703 gfx_v10_0_setup_rb(adev); 1715 1704 gfx_v10_0_get_cu_info(adev, &adev->gfx.cu_info); 1705 + gfx_v10_0_get_tcc_info(adev); 1716 1706 adev->gfx.config.pa_sc_tile_steering_override = 1717 1707 gfx_v10_0_init_pa_sc_tile_steering_override(adev); 1718 1708
+2
include/uapi/drm/amdgpu_drm.h
··· 1005 1005 __u64 high_va_max; 1006 1006 /* gfx10 pa_sc_tile_steering_override */ 1007 1007 __u32 pa_sc_tile_steering_override; 1008 + /* disabled TCCs */ 1009 + __u64 tcc_disabled_mask; 1008 1010 }; 1009 1011 1010 1012 struct drm_amdgpu_info_hw_ip {