[Intel-gfx] [PATCH][drm/i915] restore HWS_PGA if resuming from suspend

Li Peng peng.li at linux.intel.com
Tue Nov 18 08:58:24 CET 2008


Resend the patch in git style.

On Tue, 2008-11-18 at 10:44 +0800, Li Peng wrote:
> On Mon, 2008-11-17 at 10:26 -0800, Eric Anholt wrote:
> > On Mon, 2008-11-17 at 18:14 +0800, Li Peng wrote:
> > > This patch restore HWS_PGA for device who don't use gtt mapped hardware
> > > status page.
> > > It is to fix the suspend/resume failure of xf86-video-intel dri2 branch
> > > on 945GME, as the dri2 branch doesn't call I830Resume() to restore
> > > hardware status page anymore and we need to handle this in
> > > i915_gem_entervt_ioctl()
> > 
> > This should also be saved/restored in i915_suspend.c so that it works
> > correctly in the absence of the X Server doing the enter/leavevt path.
> > 
> Yes, It is better to do this in i915_save_state()/i915_restore_state(),
> here is the updated patch and works well 
> on 945GME.
> 
> Peng
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index 42d79f7..05c470e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -158,6 +158,7 @@ typedef struct drm_i915_private {
>  	u32 saveDSPBCNTR;
>  	u32 saveDSPARB;
>  	u32 saveRENDERSTANDBY;
> +	u32 saveHWS;
>  	u32 savePIPEACONF;
>  	u32 savePIPEBCONF;
>  	u32 savePIPEASRC;
> diff --git a/drivers/gpu/drm/i915/i915_suspend.c
> b/drivers/gpu/drm/i915/i915_suspend.c
> index 5ddc6e5..5d84027 100644
> --- a/drivers/gpu/drm/i915/i915_suspend.c
> +++ b/drivers/gpu/drm/i915/i915_suspend.c
> @@ -244,6 +244,9 @@ int i915_save_state(struct drm_device *dev)
>  	if (IS_I965G(dev) && IS_MOBILE(dev))
>  		dev_priv->saveRENDERSTANDBY = I915_READ(MCHBAR_RENDER_STANDBY);
>  
> +	/* Hardware status page */
> +	dev_priv->saveHWS = I915_READ(HWS_PGA);
> +
>  	/* Display arbitration control */
>  	dev_priv->saveDSPARB = I915_READ(DSPARB);
>  
> @@ -373,6 +376,9 @@ int i915_restore_state(struct drm_device *dev)
>  	if (IS_I965G(dev) && IS_MOBILE(dev))
>  		I915_WRITE(MCHBAR_RENDER_STANDBY, dev_priv->saveRENDERSTANDBY);
>  
> +	/* Hardware status page */
> +	I915_WRITE(HWS_PGA, dev_priv->saveHWS);
> +
>  	/* Display arbitration */
>  	I915_WRITE(DSPARB, dev_priv->saveDSPARB);
>  
> > > Peng
> > > diff --git a/drivers/gpu/drm/i915/i915_gem.c
> > > b/drivers/gpu/drm/i915/i915_gem.c
> > > index a15b098..b6b451a 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > > @@ -2924,8 +2924,13 @@ i915_gem_init_hws(struct drm_device *dev)
> > >  	/* If we need a physical address for the status page, it's already
> > >  	 * initialized at driver load time.
> > >  	 */
> > > -	if (!I915_NEED_GFX_HWS(dev))
> > > +	if (!I915_NEED_GFX_HWS(dev)) {
> > > +		if (dev_priv->mm.suspended) {
> > > +			I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
> > > +			I915_READ(HWS_PGA); /* posting read */
> > > +		}
> > >  		return 0;
> > > +	}
> > >  
> > >  	obj = drm_gem_object_alloc(dev, 4096);
> > >  	if (obj == NULL) {
> > > 
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Save_Restore_HWS_PGA.patch
Type: application/mbox
Size: 1847 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20081118/afefaff7/attachment.mbox>


More information about the Intel-gfx mailing list