diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/soc15.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/soc15.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index d4b8d62f4294..15033efec2ba 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c @@ -902,6 +902,7 @@ static const struct amdgpu_asic_funcs aqua_vanjaram_asic_funcs =  	.pre_asic_init = &soc15_pre_asic_init,  	.query_video_codecs = &soc15_query_video_codecs,  	.encode_ext_smn_addressing = &aqua_vanjaram_encode_ext_smn_addressing, +	.get_reg_state = &aqua_vanjaram_get_reg_state,  };  static int soc15_common_early_init(void *handle) @@ -1161,6 +1162,11 @@ static int soc15_common_early_init(void *handle)  			AMD_PG_SUPPORT_VCN_DPG |  			AMD_PG_SUPPORT_JPEG;  		adev->external_rev_id = adev->rev_id + 0x46; +		/* GC 9.4.3 uses MMIO register region hole at a different offset */ +		if (!amdgpu_sriov_vf(adev)) { +			adev->rmmio_remap.reg_offset = 0x1A000; +			adev->rmmio_remap.bus_addr = adev->rmmio_base + 0x1A000; +		}  		break;  	default:  		/* FIXME: not supported yet */ @@ -1418,11 +1424,14 @@ static void soc15_common_get_clockgating_state(void *handle, u64 *flags)  	if (amdgpu_sriov_vf(adev))  		*flags = 0; -	adev->nbio.funcs->get_clockgating_state(adev, flags); +	if (adev->nbio.funcs && adev->nbio.funcs->get_clockgating_state) +		adev->nbio.funcs->get_clockgating_state(adev, flags); -	adev->hdp.funcs->get_clock_gating_state(adev, flags); +	if (adev->hdp.funcs && adev->hdp.funcs->get_clock_gating_state) +		adev->hdp.funcs->get_clock_gating_state(adev, flags); -	if (amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(13, 0, 2)) { +	if ((amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(13, 0, 2)) && +	    (amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(13, 0, 6))) {  		/* AMD_CG_SUPPORT_DRM_MGCG */  		data = RREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_MISC_CGTT_CTRL0));  		if (!(data & 0x01000000)) @@ -1435,9 +1444,11 @@ static void soc15_common_get_clockgating_state(void *handle, u64 *flags)  	}  	/* AMD_CG_SUPPORT_ROM_MGCG */ -	adev->smuio.funcs->get_clock_gating_state(adev, flags); +	if (adev->smuio.funcs && adev->smuio.funcs->get_clock_gating_state) +		adev->smuio.funcs->get_clock_gating_state(adev, flags); -	adev->df.funcs->get_clockgating_state(adev, flags); +	if (adev->df.funcs && adev->df.funcs->get_clockgating_state) +		adev->df.funcs->get_clockgating_state(adev, flags);  }  static int soc15_common_set_powergating_state(void *handle,  | 
