Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0da3ea12fc2607beb67c2d54d0347807ea615573
Commit:     0da3ea12fc2607beb67c2d54d0347807ea615573
Parent:     ca0b07d9a969c6561e5d6f69c861fbedf8d09e5d
Author:     Jesse Barnes <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 20 09:39:58 2008 +1000
Committer:  Dave Airlie <[EMAIL PROTECTED]>
CommitDate: Wed Feb 20 09:39:58 2008 +1000

    drm/i915: save/restore interrupt state
    
    On resume, if the interrupt state isn't restored correctly, we may end
    up with a flood of unexpected or ill-timed interrupts, which could cause
    the kernel to disable the interrupt or vblank events to happen at the
    wrong time.  So save/restore them properly.
    
    Signed-off-by: Dave Airlie <[EMAIL PROTECTED]>
---
 drivers/char/drm/i915_drv.c |    7 +++++++
 drivers/char/drm/i915_drv.h |    5 +++++
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/char/drm/i915_drv.c b/drivers/char/drm/i915_drv.c
index 52e5103..0f525ad 100644
--- a/drivers/char/drm/i915_drv.c
+++ b/drivers/char/drm/i915_drv.c
@@ -276,6 +276,7 @@ static int i915_suspend(struct drm_device *dev)
                dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
        }
        i915_save_palette(dev, PIPE_A);
+       dev_priv->savePIPEASTAT = I915_READ(I915REG_PIPEASTAT);
 
        /* Pipe & plane B info */
        dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF);
@@ -303,6 +304,7 @@ static int i915_suspend(struct drm_device *dev)
                dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
        }
        i915_save_palette(dev, PIPE_B);
+       dev_priv->savePIPEBSTAT = I915_READ(I915REG_PIPEBSTAT);
 
        /* CRT state */
        dev_priv->saveADPA = I915_READ(ADPA);
@@ -329,6 +331,11 @@ static int i915_suspend(struct drm_device *dev)
        dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
        dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
 
+       /* Interrupt state */
+       dev_priv->saveIIR = I915_READ(I915REG_INT_IDENTITY_R);
+       dev_priv->saveIER = I915_READ(I915REG_INT_ENABLE_R);
+       dev_priv->saveIMR = I915_READ(I915REG_INT_MASK_R);
+
        /* VGA state */
        dev_priv->saveVCLK_DIVISOR_VGA0 = I915_READ(VCLK_DIVISOR_VGA0);
        dev_priv->saveVCLK_DIVISOR_VGA1 = I915_READ(VCLK_DIVISOR_VGA1);
diff --git a/drivers/char/drm/i915_drv.h b/drivers/char/drm/i915_drv.h
index 786460d..360f660 100644
--- a/drivers/char/drm/i915_drv.h
+++ b/drivers/char/drm/i915_drv.h
@@ -134,6 +134,7 @@ typedef struct drm_i915_private {
        u32 saveVBLANK_A;
        u32 saveVSYNC_A;
        u32 saveBCLRPAT_A;
+       u32 savePIPEASTAT;
        u32 saveDSPASTRIDE;
        u32 saveDSPASIZE;
        u32 saveDSPAPOS;
@@ -154,6 +155,7 @@ typedef struct drm_i915_private {
        u32 saveVBLANK_B;
        u32 saveVSYNC_B;
        u32 saveBCLRPAT_B;
+       u32 savePIPEBSTAT;
        u32 saveDSPBSTRIDE;
        u32 saveDSPBSIZE;
        u32 saveDSPBPOS;
@@ -182,6 +184,9 @@ typedef struct drm_i915_private {
        u32 saveFBC_LL_BASE;
        u32 saveFBC_CONTROL;
        u32 saveFBC_CONTROL2;
+       u32 saveIER;
+       u32 saveIIR;
+       u32 saveIMR;
        u32 saveSWF0[16];
        u32 saveSWF1[16];
        u32 saveSWF2[3];
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to