Skip to content

Commit e4443e4

Browse files
vsyrjaladanvet
authored andcommitted
drm/i915/chv: Add a bunch of pre production workarounds
The following workarounds should be needed for pre-production hardware only: * WaDisablePwrmtrEvent:chv * WaSetMaskForGfxBusyness:chv * WaDisableGunitClockGating:chv * WaDisableFfDopClockGating:chv * WaDisableDopClockGating:chv Signed-off-by: Ville Syrjälä <[email protected]> Reviewed-by: Damien Lespiau <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
1 parent 1966e59 commit e4443e4

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,7 @@ enum punit_power_well {
10811081
#define IMR 0x020a8
10821082
#define ISR 0x020ac
10831083
#define VLV_GUNIT_CLOCK_GATE (VLV_DISPLAY_BASE + 0x2060)
1084+
#define GINT_DIS (1<<22)
10841085
#define GCFG_DIS (1<<8)
10851086
#define VLV_GUNIT_CLOCK_GATE2 (VLV_DISPLAY_BASE + 0x2064)
10861087
#define VLV_IIR_RW (VLV_DISPLAY_BASE + 0x2084)
@@ -1211,6 +1212,7 @@ enum punit_power_well {
12111212

12121213
#define GEN6_RC_SLEEP_PSMI_CONTROL 0x2050
12131214
#define GEN8_RC_SEMA_IDLE_MSG_DISABLE (1 << 12)
1215+
#define GEN8_FF_DOP_CLOCK_GATE_DISABLE (1<<10)
12141216

12151217
#define GEN6_BSD_SLEEP_PSMI_CONTROL 0x12050
12161218
#define GEN6_BSD_SLEEP_MSG_DISABLE (1 << 0)
@@ -5269,6 +5271,7 @@ enum punit_power_well {
52695271
#define HSW_EDRAM_PRESENT 0x120010
52705272

52715273
#define GEN6_UCGCTL1 0x9400
5274+
# define GEN6_EU_TCUNIT_CLOCK_GATE_DISABLE (1 << 16)
52725275
# define GEN6_BLBUNIT_CLOCK_GATE_DISABLE (1 << 5)
52735276
# define GEN6_CSUNIT_CLOCK_GATE_DISABLE (1 << 7)
52745277

drivers/gpu/drm/i915/intel_pm.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3466,11 +3466,15 @@ static void gen8_enable_rps(struct drm_device *dev)
34663466

34673467
I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
34683468

3469+
/* WaDisablePwrmtrEvent:chv (pre-production hw) */
3470+
I915_WRITE(0xA80C, I915_READ(0xA80C) & 0x00ffffff);
3471+
I915_WRITE(0xA810, I915_READ(0xA810) & 0xffffff00);
3472+
34693473
/* 5: Enable RPS */
34703474
I915_WRITE(GEN6_RP_CONTROL,
34713475
GEN6_RP_MEDIA_TURBO |
34723476
GEN6_RP_MEDIA_HW_NORMAL_MODE |
3473-
GEN6_RP_MEDIA_IS_GFX |
3477+
GEN6_RP_MEDIA_IS_GFX | /* WaSetMaskForGfxBusyness:chv (pre-production hw ?) */
34743478
GEN6_RP_ENABLE |
34753479
GEN6_RP_UP_BUSY_AVG |
34763480
GEN6_RP_DOWN_IDLE_AVG);
@@ -5405,6 +5409,20 @@ static void cherryview_init_clock_gating(struct drm_device *dev)
54055409
/* WaDisableSamplerPowerBypass:chv (pre-production hw) */
54065410
I915_WRITE(HALF_SLICE_CHICKEN3,
54075411
_MASKED_BIT_ENABLE(GEN8_SAMPLER_POWER_BYPASS_DIS));
5412+
5413+
/* WaDisableGunitClockGating:chv (pre-production hw) */
5414+
I915_WRITE(VLV_GUNIT_CLOCK_GATE, I915_READ(VLV_GUNIT_CLOCK_GATE) |
5415+
GINT_DIS);
5416+
5417+
/* WaDisableFfDopClockGating:chv (pre-production hw) */
5418+
I915_WRITE(GEN6_RC_SLEEP_PSMI_CONTROL,
5419+
_MASKED_BIT_ENABLE(GEN8_FF_DOP_CLOCK_GATE_DISABLE));
5420+
5421+
/* WaDisableDopClockGating:chv (pre-production hw) */
5422+
I915_WRITE(GEN7_ROW_CHICKEN2,
5423+
_MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
5424+
I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) |
5425+
GEN6_EU_TCUNIT_CLOCK_GATE_DISABLE);
54085426
}
54095427

54105428
static void g4x_init_clock_gating(struct drm_device *dev)

0 commit comments

Comments
 (0)