aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2014-06-11 09:51:18 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-08-08 11:43:54 -0400
commit0a56067469bde6662ce7c89a3d290171f878bac4 (patch)
tree9f92654ad9ad2310c23a897c588cda08c6b6a69c
parent9783de20967a59d7627772bf77fc8066c47bef79 (diff)
drm/i915: Fill out the FWx watermark register defines
Add defines for all the watermark registers on modernish gmch platforms. VLV has increased the number of bits available for certain watermaks so expand the masks appropriately. Also vlv and chv have added some extra FW registers. Not sure what happened on chv because a new register called FW9 is now at the offset where FW7 was on vlv, while FW7 and FW8 (another new register) have been moved off somewhere else. Oh well, well just need two defines for FW7 then. v2: Fix DSPHOWM1 offset (Paulo) Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h138
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c11
2 files changed, 130 insertions, 19 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 5ebac620bbcd..a87eb18b4c90 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -3865,28 +3865,136 @@ enum punit_power_well {
3865#define DSPARB_BEND_SHIFT 9 /* on 855 */ 3865#define DSPARB_BEND_SHIFT 9 /* on 855 */
3866#define DSPARB_AEND_SHIFT 0 3866#define DSPARB_AEND_SHIFT 0
3867 3867
3868/* pnv/gen4/g4x/vlv/chv */
3868#define DSPFW1 (dev_priv->info.display_mmio_offset + 0x70034) 3869#define DSPFW1 (dev_priv->info.display_mmio_offset + 0x70034)
3869#define DSPFW_SR_SHIFT 23 3870#define DSPFW_SR_SHIFT 23
3870#define DSPFW_SR_MASK (0x1ff<<23) 3871#define DSPFW_SR_MASK (0x1ff<<23)
3871#define DSPFW_CURSORB_SHIFT 16 3872#define DSPFW_CURSORB_SHIFT 16
3872#define DSPFW_CURSORB_MASK (0x3f<<16) 3873#define DSPFW_CURSORB_MASK (0x3f<<16)
3873#define DSPFW_PLANEB_SHIFT 8 3874#define DSPFW_PLANEB_SHIFT 8
3874#define DSPFW_PLANEB_MASK (0x7f<<8) 3875#define DSPFW_PLANEB_MASK (0x7f<<8)
3875#define DSPFW_PLANEA_MASK (0x7f) 3876#define DSPFW_PLANEB_MASK_VLV (0xff<<8) /* vlv/chv */
3877#define DSPFW_PLANEA_SHIFT 0
3878#define DSPFW_PLANEA_MASK (0x7f<<0)
3879#define DSPFW_PLANEA_MASK_VLV (0xff<<0) /* vlv/chv */
3876#define DSPFW2 (dev_priv->info.display_mmio_offset + 0x70038) 3880#define DSPFW2 (dev_priv->info.display_mmio_offset + 0x70038)
3877#define DSPFW_CURSORA_MASK 0x00003f00 3881#define DSPFW_FBC_SR_EN (1<<31) /* g4x */
3878#define DSPFW_CURSORA_SHIFT 8 3882#define DSPFW_FBC_SR_SHIFT 28
3879#define DSPFW_PLANEC_MASK (0x7f) 3883#define DSPFW_FBC_SR_MASK (0x7<<28) /* g4x */
3884#define DSPFW_FBC_HPLL_SR_SHIFT 24
3885#define DSPFW_FBC_HPLL_SR_MASK (0xf<<24) /* g4x */
3886#define DSPFW_SPRITEB_SHIFT (16)
3887#define DSPFW_SPRITEB_MASK (0x7f<<16) /* g4x */
3888#define DSPFW_SPRITEB_MASK_VLV (0xff<<16) /* vlv/chv */
3889#define DSPFW_CURSORA_SHIFT 8
3890#define DSPFW_CURSORA_MASK (0x3f<<8)
3891#define DSPFW_PLANEC_SHIFT_OLD 0
3892#define DSPFW_PLANEC_MASK_OLD (0x7f<<0) /* pre-gen4 sprite C */
3893#define DSPFW_SPRITEA_SHIFT 0
3894#define DSPFW_SPRITEA_MASK (0x7f<<0) /* g4x */
3895#define DSPFW_SPRITEA_MASK_VLV (0xff<<0) /* vlv/chv */
3880#define DSPFW3 (dev_priv->info.display_mmio_offset + 0x7003c) 3896#define DSPFW3 (dev_priv->info.display_mmio_offset + 0x7003c)
3881#define DSPFW_HPLL_SR_EN (1<<31) 3897#define DSPFW_HPLL_SR_EN (1<<31)
3882#define DSPFW_CURSOR_SR_SHIFT 24
3883#define PINEVIEW_SELF_REFRESH_EN (1<<30) 3898#define PINEVIEW_SELF_REFRESH_EN (1<<30)
3899#define DSPFW_CURSOR_SR_SHIFT 24
3884#define DSPFW_CURSOR_SR_MASK (0x3f<<24) 3900#define DSPFW_CURSOR_SR_MASK (0x3f<<24)
3885#define DSPFW_HPLL_CURSOR_SHIFT 16 3901#define DSPFW_HPLL_CURSOR_SHIFT 16
3886#define DSPFW_HPLL_CURSOR_MASK (0x3f<<16) 3902#define DSPFW_HPLL_CURSOR_MASK (0x3f<<16)
3887#define DSPFW_HPLL_SR_MASK (0x1ff) 3903#define DSPFW_HPLL_SR_SHIFT 0
3888#define DSPFW4 (dev_priv->info.display_mmio_offset + 0x70070) 3904#define DSPFW_HPLL_SR_MASK (0x1ff<<0)
3889#define DSPFW7 (dev_priv->info.display_mmio_offset + 0x7007c) 3905
3906/* vlv/chv */
3907#define DSPFW4 (VLV_DISPLAY_BASE + 0x70070)
3908#define DSPFW_SPRITEB_WM1_SHIFT 16
3909#define DSPFW_SPRITEB_WM1_MASK (0xff<<16)
3910#define DSPFW_CURSORA_WM1_SHIFT 8
3911#define DSPFW_CURSORA_WM1_MASK (0x3f<<8)
3912#define DSPFW_SPRITEA_WM1_SHIFT 0
3913#define DSPFW_SPRITEA_WM1_MASK (0xff<<0)
3914#define DSPFW5 (VLV_DISPLAY_BASE + 0x70074)
3915#define DSPFW_PLANEB_WM1_SHIFT 24
3916#define DSPFW_PLANEB_WM1_MASK (0xff<<24)
3917#define DSPFW_PLANEA_WM1_SHIFT 16
3918#define DSPFW_PLANEA_WM1_MASK (0xff<<16)
3919#define DSPFW_CURSORB_WM1_SHIFT 8
3920#define DSPFW_CURSORB_WM1_MASK (0x3f<<8)
3921#define DSPFW_CURSOR_SR_WM1_SHIFT 0
3922#define DSPFW_CURSOR_SR_WM1_MASK (0x3f<<0)
3923#define DSPFW6 (VLV_DISPLAY_BASE + 0x70078)
3924#define DSPFW_SR_WM1_SHIFT 0
3925#define DSPFW_SR_WM1_MASK (0x1ff<<0)
3926#define DSPFW7 (VLV_DISPLAY_BASE + 0x7007c)
3927#define DSPFW7_CHV (VLV_DISPLAY_BASE + 0x700b4) /* wtf #1? */
3928#define DSPFW_SPRITED_WM1_SHIFT 24
3929#define DSPFW_SPRITED_WM1_MASK (0xff<<24)
3930#define DSPFW_SPRITED_SHIFT 16
3931#define DSPFW_SPRITED_MASK (0xff<<16)
3932#define DSPFW_SPRITEC_WM1_SHIFT 8
3933#define DSPFW_SPRITEC_WM1_MASK (0xff<<8)
3934#define DSPFW_SPRITEC_SHIFT 0
3935#define DSPFW_SPRITEC_MASK (0xff<<0)
3936#define DSPFW8_CHV (VLV_DISPLAY_BASE + 0x700b8)
3937#define DSPFW_SPRITEF_WM1_SHIFT 24
3938#define DSPFW_SPRITEF_WM1_MASK (0xff<<24)
3939#define DSPFW_SPRITEF_SHIFT 16
3940#define DSPFW_SPRITEF_MASK (0xff<<16)
3941#define DSPFW_SPRITEE_WM1_SHIFT 8
3942#define DSPFW_SPRITEE_WM1_MASK (0xff<<8)
3943#define DSPFW_SPRITEE_SHIFT 0
3944#define DSPFW_SPRITEE_MASK (0xff<<0)
3945#define DSPFW9_CHV (VLV_DISPLAY_BASE + 0x7007c) /* wtf #2? */
3946#define DSPFW_PLANEC_WM1_SHIFT 24
3947#define DSPFW_PLANEC_WM1_MASK (0xff<<24)
3948#define DSPFW_PLANEC_SHIFT 16
3949#define DSPFW_PLANEC_MASK (0xff<<16)
3950#define DSPFW_CURSORC_WM1_SHIFT 8
3951#define DSPFW_CURSORC_WM1_MASK (0x3f<<16)
3952#define DSPFW_CURSORC_SHIFT 0
3953#define DSPFW_CURSORC_MASK (0x3f<<0)
3954
3955/* vlv/chv high order bits */
3956#define DSPHOWM (VLV_DISPLAY_BASE + 0x70064)
3957#define DSPFW_SR_HI_SHIFT 24
3958#define DSPFW_SR_HI_MASK (1<<24)
3959#define DSPFW_SPRITEF_HI_SHIFT 23
3960#define DSPFW_SPRITEF_HI_MASK (1<<23)
3961#define DSPFW_SPRITEE_HI_SHIFT 22
3962#define DSPFW_SPRITEE_HI_MASK (1<<22)
3963#define DSPFW_PLANEC_HI_SHIFT 21
3964#define DSPFW_PLANEC_HI_MASK (1<<21)
3965#define DSPFW_SPRITED_HI_SHIFT 20
3966#define DSPFW_SPRITED_HI_MASK (1<<20)
3967#define DSPFW_SPRITEC_HI_SHIFT 16
3968#define DSPFW_SPRITEC_HI_MASK (1<<16)
3969#define DSPFW_PLANEB_HI_SHIFT 12
3970#define DSPFW_PLANEB_HI_MASK (1<<12)
3971#define DSPFW_SPRITEB_HI_SHIFT 8
3972#define DSPFW_SPRITEB_HI_MASK (1<<8)
3973#define DSPFW_SPRITEA_HI_SHIFT 4
3974#define DSPFW_SPRITEA_HI_MASK (1<<4)
3975#define DSPFW_PLANEA_HI_SHIFT 0
3976#define DSPFW_PLANEA_HI_MASK (1<<0)
3977#define DSPHOWM1 (VLV_DISPLAY_BASE + 0x70068)
3978#define DSPFW_SR_WM1_HI_SHIFT 24
3979#define DSPFW_SR_WM1_HI_MASK (1<<24)
3980#define DSPFW_SPRITEF_WM1_HI_SHIFT 23
3981#define DSPFW_SPRITEF_WM1_HI_MASK (1<<23)
3982#define DSPFW_SPRITEE_WM1_HI_SHIFT 22
3983#define DSPFW_SPRITEE_WM1_HI_MASK (1<<22)
3984#define DSPFW_PLANEC_WM1_HI_SHIFT 21
3985#define DSPFW_PLANEC_WM1_HI_MASK (1<<21)
3986#define DSPFW_SPRITED_WM1_HI_SHIFT 20
3987#define DSPFW_SPRITED_WM1_HI_MASK (1<<20)
3988#define DSPFW_SPRITEC_WM1_HI_SHIFT 16
3989#define DSPFW_SPRITEC_WM1_HI_MASK (1<<16)
3990#define DSPFW_PLANEB_WM1_HI_SHIFT 12
3991#define DSPFW_PLANEB_WM1_HI_MASK (1<<12)
3992#define DSPFW_SPRITEB_WM1_HI_SHIFT 8
3993#define DSPFW_SPRITEB_WM1_HI_MASK (1<<8)
3994#define DSPFW_SPRITEA_WM1_HI_SHIFT 4
3995#define DSPFW_SPRITEA_WM1_HI_MASK (1<<4)
3996#define DSPFW_PLANEA_WM1_HI_SHIFT 0
3997#define DSPFW_PLANEA_WM1_HI_MASK (1<<0)
3890 3998
3891/* drain latency register values*/ 3999/* drain latency register values*/
3892#define DRAIN_LATENCY_PRECISION_32 32 4000#define DRAIN_LATENCY_PRECISION_32 32
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index ab80df2909e0..0f9164d854de 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -1400,7 +1400,7 @@ static void valleyview_update_wm(struct drm_crtc *crtc)
1400 (plane_sr << DSPFW_SR_SHIFT) | 1400 (plane_sr << DSPFW_SR_SHIFT) |
1401 (cursorb_wm << DSPFW_CURSORB_SHIFT) | 1401 (cursorb_wm << DSPFW_CURSORB_SHIFT) |
1402 (planeb_wm << DSPFW_PLANEB_SHIFT) | 1402 (planeb_wm << DSPFW_PLANEB_SHIFT) |
1403 planea_wm); 1403 (planea_wm << DSPFW_PLANEA_SHIFT));
1404 I915_WRITE(DSPFW2, 1404 I915_WRITE(DSPFW2,
1405 (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) | 1405 (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) |
1406 (cursora_wm << DSPFW_CURSORA_SHIFT)); 1406 (cursora_wm << DSPFW_CURSORA_SHIFT));
@@ -1457,7 +1457,7 @@ static void g4x_update_wm(struct drm_crtc *crtc)
1457 (plane_sr << DSPFW_SR_SHIFT) | 1457 (plane_sr << DSPFW_SR_SHIFT) |
1458 (cursorb_wm << DSPFW_CURSORB_SHIFT) | 1458 (cursorb_wm << DSPFW_CURSORB_SHIFT) |
1459 (planeb_wm << DSPFW_PLANEB_SHIFT) | 1459 (planeb_wm << DSPFW_PLANEB_SHIFT) |
1460 planea_wm); 1460 (planea_wm << DSPFW_PLANEA_SHIFT));
1461 I915_WRITE(DSPFW2, 1461 I915_WRITE(DSPFW2,
1462 (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) | 1462 (I915_READ(DSPFW2) & ~DSPFW_CURSORA_MASK) |
1463 (cursora_wm << DSPFW_CURSORA_SHIFT)); 1463 (cursora_wm << DSPFW_CURSORA_SHIFT));
@@ -1531,8 +1531,11 @@ static void i965_update_wm(struct drm_crtc *unused_crtc)
1531 1531
1532 /* 965 has limitations... */ 1532 /* 965 has limitations... */
1533 I915_WRITE(DSPFW1, (srwm << DSPFW_SR_SHIFT) | 1533 I915_WRITE(DSPFW1, (srwm << DSPFW_SR_SHIFT) |
1534 (8 << 16) | (8 << 8) | (8 << 0)); 1534 (8 << DSPFW_CURSORB_SHIFT) |
1535 I915_WRITE(DSPFW2, (8 << 8) | (8 << 0)); 1535 (8 << DSPFW_PLANEB_SHIFT) |
1536 (8 << DSPFW_PLANEA_SHIFT));
1537 I915_WRITE(DSPFW2, (8 << DSPFW_CURSORA_SHIFT) |
1538 (8 << DSPFW_PLANEC_SHIFT_OLD));
1536 /* update cursor SR watermark */ 1539 /* update cursor SR watermark */
1537 I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT)); 1540 I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
1538 1541