@@ -120,6 +120,29 @@ void gen2_irq_init(struct intel_uncore *uncore, struct i915_irq_regs regs,
120
120
intel_uncore_posting_read (uncore , regs .imr );
121
121
}
122
122
123
+ void gen2_error_reset (struct intel_uncore * uncore , struct i915_error_regs regs )
124
+ {
125
+ intel_uncore_write (uncore , regs .emr , 0xffffffff );
126
+ intel_uncore_posting_read (uncore , regs .emr );
127
+
128
+ intel_uncore_write (uncore , regs .eir , 0xffffffff );
129
+ intel_uncore_posting_read (uncore , regs .eir );
130
+ intel_uncore_write (uncore , regs .eir , 0xffffffff );
131
+ intel_uncore_posting_read (uncore , regs .eir );
132
+ }
133
+
134
+ void gen2_error_init (struct intel_uncore * uncore , struct i915_error_regs regs ,
135
+ u32 emr_val )
136
+ {
137
+ intel_uncore_write (uncore , regs .eir , 0xffffffff );
138
+ intel_uncore_posting_read (uncore , regs .eir );
139
+ intel_uncore_write (uncore , regs .eir , 0xffffffff );
140
+ intel_uncore_posting_read (uncore , regs .eir );
141
+
142
+ intel_uncore_write (uncore , regs .emr , emr_val );
143
+ intel_uncore_posting_read (uncore , regs .emr );
144
+ }
145
+
123
146
/**
124
147
* ivb_parity_work - Workqueue called when a parity error interrupt
125
148
* occurred.
@@ -867,6 +890,7 @@ static void i915_irq_reset(struct drm_i915_private *dev_priv)
867
890
868
891
i9xx_display_irq_reset (dev_priv );
869
892
893
+ gen2_error_reset (uncore , GEN2_ERROR_REGS );
870
894
gen2_irq_reset (uncore , GEN2_IRQ_REGS );
871
895
dev_priv -> irq_mask = ~0u ;
872
896
}
@@ -876,7 +900,7 @@ static void i915_irq_postinstall(struct drm_i915_private *dev_priv)
876
900
struct intel_uncore * uncore = & dev_priv -> uncore ;
877
901
u32 enable_mask ;
878
902
879
- intel_uncore_write (uncore , EMR , i9xx_error_mask (dev_priv ));
903
+ gen2_error_init (uncore , GEN2_ERROR_REGS , i9xx_error_mask (dev_priv ));
880
904
881
905
dev_priv -> irq_mask =
882
906
~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
@@ -972,6 +996,7 @@ static void i965_irq_reset(struct drm_i915_private *dev_priv)
972
996
973
997
i9xx_display_irq_reset (dev_priv );
974
998
999
+ gen2_error_reset (uncore , GEN2_ERROR_REGS );
975
1000
gen2_irq_reset (uncore , GEN2_IRQ_REGS );
976
1001
dev_priv -> irq_mask = ~0u ;
977
1002
}
@@ -1000,7 +1025,7 @@ static void i965_irq_postinstall(struct drm_i915_private *dev_priv)
1000
1025
struct intel_uncore * uncore = & dev_priv -> uncore ;
1001
1026
u32 enable_mask ;
1002
1027
1003
- intel_uncore_write (uncore , EMR , i965_error_mask (dev_priv ));
1028
+ gen2_error_init (uncore , GEN2_ERROR_REGS , i965_error_mask (dev_priv ));
1004
1029
1005
1030
dev_priv -> irq_mask =
1006
1031
~(I915_ASLE_INTERRUPT |
0 commit comments