diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 36 | 
1 files changed, 32 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c index c6dba1eaefbd..fd435a96481c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c @@ -124,7 +124,7 @@ static int amdgpu_cgs_alloc_gpu_mem(struct cgs_device *cgs_device,  	ret = amdgpu_bo_create_restricted(adev, size, PAGE_SIZE,  					  true, domain, flags,  					  NULL, &placement, NULL, -					  &obj); +					  0, &obj);  	if (ret) {  		DRM_ERROR("(%d) bo create failed\n", ret);  		return ret; @@ -166,7 +166,7 @@ static int amdgpu_cgs_gmap_gpu_mem(struct cgs_device *cgs_device, cgs_handle_t h  	r = amdgpu_bo_reserve(obj, true);  	if (unlikely(r != 0))  		return r; -	r = amdgpu_bo_pin_restricted(obj, obj->prefered_domains, +	r = amdgpu_bo_pin_restricted(obj, obj->preferred_domains,  				     min_offset, max_offset, mcaddr);  	amdgpu_bo_unreserve(obj);  	return r; @@ -240,6 +240,8 @@ static uint32_t amdgpu_cgs_read_ind_register(struct cgs_device *cgs_device,  		return RREG32_DIDT(index);  	case CGS_IND_REG_GC_CAC:  		return RREG32_GC_CAC(index); +	case CGS_IND_REG_SE_CAC: +		return RREG32_SE_CAC(index);  	case CGS_IND_REG__AUDIO_ENDPT:  		DRM_ERROR("audio endpt register access not implemented.\n");  		return 0; @@ -266,6 +268,8 @@ static void amdgpu_cgs_write_ind_register(struct cgs_device *cgs_device,  		return WREG32_DIDT(index, value);  	case CGS_IND_REG_GC_CAC:  		return WREG32_GC_CAC(index, value); +	case CGS_IND_REG_SE_CAC: +		return WREG32_SE_CAC(index, value);  	case CGS_IND_REG__AUDIO_ENDPT:  		DRM_ERROR("audio endpt register access not implemented.\n");  		return; @@ -610,6 +614,17 @@ static int amdgpu_cgs_enter_safe_mode(struct cgs_device *cgs_device,  	return 0;  } +static void amdgpu_cgs_lock_grbm_idx(struct cgs_device *cgs_device, +					bool lock) +{ +	CGS_FUNC_ADEV; + +	if (lock) +		mutex_lock(&adev->grbm_idx_mutex); +	else +		mutex_unlock(&adev->grbm_idx_mutex); +} +  static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,  					enum cgs_ucode_id type,  					struct cgs_firmware_info *info) @@ -644,7 +659,7 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,  		info->version = (uint16_t)le32_to_cpu(header->header.ucode_version);  		if (CGS_UCODE_ID_CP_MEC == type) -			info->image_size = (header->jt_offset) << 2; +			info->image_size = le32_to_cpu(header->jt_offset) << 2;  		info->fw_version = amdgpu_get_firmware_version(cgs_device, type);  		info->feature_version = (uint16_t)le32_to_cpu(header->ucode_feature_version); @@ -719,7 +734,13 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,  				strcpy(fw_name, "amdgpu/polaris12_smc.bin");  				break;  			case CHIP_VEGA10: -				strcpy(fw_name, "amdgpu/vega10_smc.bin"); +				if ((adev->pdev->device == 0x687f) && +					((adev->pdev->revision == 0xc0) || +					(adev->pdev->revision == 0xc1) || +					(adev->pdev->revision == 0xc3))) +					strcpy(fw_name, "amdgpu/vega10_acg_smc.bin"); +				else +					strcpy(fw_name, "amdgpu/vega10_smc.bin");  				break;  			default:  				DRM_ERROR("SMC firmware not supported\n"); @@ -838,6 +859,12 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device,  		return -EINVAL;  	mode_info = info->mode_info; +	if (mode_info) { +		/* if the displays are off, vblank time is max */ +		mode_info->vblank_time_us = 0xffffffff; +		/* always set the reference clock */ +		mode_info->ref_clock = adev->clock.spll.reference_freq; +	}  	if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {  		list_for_each_entry(crtc, @@ -1111,6 +1138,7 @@ static const struct cgs_ops amdgpu_cgs_ops = {  	.query_system_info = amdgpu_cgs_query_system_info,  	.is_virtualization_enabled = amdgpu_cgs_is_virtualization_enabled,  	.enter_safe_mode = amdgpu_cgs_enter_safe_mode, +	.lock_grbm_idx = amdgpu_cgs_lock_grbm_idx,  };  static const struct cgs_os_ops amdgpu_cgs_os_ops = { |