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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-By: Emily Deng <Emily.Deng at amd.com>

> -----Original Message-----
> From: Deucher, Alexander
> Sent: Friday, September 30, 2016 9:19 PM
> To: Deng, Emily <Emily.Deng at amd.com>; Alex Deucher
> <alexdeucher at gmail.com>; amd-gfx at lists.freedesktop.org
> Subject: RE: [PATCH 3/4] drm/amdgpu/dce6: add dce_v6_0_disable_dce
> 
> > -----Original Message-----
> > From: Deng, Emily
> > Sent: Friday, September 30, 2016 3:21 AM
> > To: Alex Deucher; amd-gfx at lists.freedesktop.org
> > Cc: Deucher, Alexander
> > Subject: RE: [PATCH 3/4] drm/amdgpu/dce6: add dce_v6_0_disable_dce
> >
> > Hi Alex,
> >     It seems hasn't support virtual display for dce_v6_0 asic?
> 
> SI support was developed in parallel and landed after your virtual dce patches
> went in.
> 
> Alex
> 
> >
> > > -----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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux