[PATCH 3/4] drm/amdgpu/dce6: add dce_v6_0_disable_dce

Deng, Emily Emily.Deng at amd.com
Fri Sep 30 07:21:07 UTC 2016


Hi Alex,
    It seems hasn't support virtual display for dce_v6_0 asic?

> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Alex Deucher
> Sent: Friday, September 30, 2016 12:14 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: [PATCH 3/4] drm/amdgpu/dce6: add dce_v6_0_disable_dce
> 
> Needed for virtual dce support
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 50
> ++++++++++++++++++++++++++++++++---
>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.h |  2 ++
>  2 files changed, 48 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> index 0a6e3b1..502e979 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> @@ -490,12 +490,55 @@ static void dce_v6_0_resume_mc_access(struct
> amdgpu_device *adev,  static void dce_v6_0_set_vga_render_state(struct
> amdgpu_device *adev,
>  					  bool render)
>  {
> -	if (!render)
> +	if (!render)
>  		WREG32(R_000300_VGA_RENDER_CONTROL,
>  			RREG32(R_000300_VGA_RENDER_CONTROL) &
> C_000300_VGA_VSTATUS_CNTL);
> 
>  }
> 
> +static int dce_v6_0_get_num_crtc(struct amdgpu_device *adev) {
> +	int num_crtc = 0;
> +
> +	switch (adev->asic_type) {
> +	case CHIP_TAHITI:
> +	case CHIP_PITCAIRN:
> +	case CHIP_VERDE:
> +		num_crtc = 6;
> +		break;
> +	case CHIP_OLAND:
> +		num_crtc = 2;
> +		break;
> +	default:
> +		num_crtc = 0;
> +	}
> +	return num_crtc;
> +}
> +
> +void dce_v6_0_disable_dce(struct amdgpu_device *adev) {
> +	/*Disable VGA render and enabled crtc, if has DCE engine*/
> +	if (amdgpu_atombios_has_dce_engine_info(adev)) {
> +		u32 tmp;
> +		int crtc_enabled, i;
> +
> +		dce_v6_0_set_vga_render_state(adev, false);
> +
> +		/*Disable crtc*/
> +		for (i = 0; i < dce_v6_0_get_num_crtc(adev); i++) {
> +			crtc_enabled =
> RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]) &
> +				EVERGREEN_CRTC_MASTER_EN;
> +			if (crtc_enabled) {
> +				WREG32(EVERGREEN_CRTC_UPDATE_LOCK
> + crtc_offsets[i], 1);
> +				tmp = RREG32(EVERGREEN_CRTC_CONTROL
> + crtc_offsets[i]);
> +				tmp &= ~EVERGREEN_CRTC_MASTER_EN;
> +				WREG32(EVERGREEN_CRTC_CONTROL +
> crtc_offsets[i], tmp);
> +				WREG32(EVERGREEN_CRTC_UPDATE_LOCK
> + crtc_offsets[i], 0);
> +			}
> +		}
> +	}
> +}
> +
>  static void dce_v6_0_program_fmt(struct drm_encoder *encoder)  {
> 
> @@ -2217,21 +2260,20 @@ static int dce_v6_0_early_init(void *handle)
>  	dce_v6_0_set_display_funcs(adev);
>  	dce_v6_0_set_irq_funcs(adev);
> 
> +	adev->mode_info.num_crtc = dce_v6_0_get_num_crtc(adev);
> +
>  	switch (adev->asic_type) {
>  	case CHIP_TAHITI:
>  	case CHIP_PITCAIRN:
>  	case CHIP_VERDE:
> -		adev->mode_info.num_crtc = 6;
>  		adev->mode_info.num_hpd = 6;
>  		adev->mode_info.num_dig = 6;
>  		break;
>  	case CHIP_OLAND:
> -		adev->mode_info.num_crtc = 2;
>  		adev->mode_info.num_hpd = 2;
>  		adev->mode_info.num_dig = 2;
>  		break;
>  	default:
> -		/* FIXME: not supported yet */
>  		return -EINVAL;
>  	}
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.h
> b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.h
> index 6a55281..4c6cd18 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.h
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.h
> @@ -26,4 +26,6 @@
> 
>  extern const struct amd_ip_funcs dce_v6_0_ip_funcs;
> 
> +void dce_v6_0_disable_dce(struct amdgpu_device *adev);
> +
>  #endif
> --
> 2.5.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list