diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2015-03-10 10:16:28 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-03-17 17:30:20 -0400 |
commit | 15665979ca601f483cd5caca851620d2c2845125 (patch) | |
tree | aaefc9ffc3b94ea17a2f10ddaeed80e33278df17 | |
parent | 6e721fb1ee99f3f9f67b94c8d1f9204217399733 (diff) |
drm/i915: Add polish to VLV WM shift+mask operations
Wrap the FW register value shift+mask operations into a macro to hide
the ugliness a bit. Also might avoid bugs due to typos.
Also rename all the primary/sprite plane low order bit masks to have the
_VLV suffix, so that we can use the FW_WM_VLV() macro instead of the
FW_WM() macro for them in a consistent manner. Cursor and all the high
order bits are left to use the FW_WM() macro as there's no real
confusion with them.
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 74 |
2 files changed, 46 insertions, 38 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 495b22b4ec78..8ff039d0f546 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -4161,25 +4161,25 @@ enum skl_disp_power_wells { | |||
4161 | #define DSPFW_SPRITED_WM1_SHIFT 24 | 4161 | #define DSPFW_SPRITED_WM1_SHIFT 24 |
4162 | #define DSPFW_SPRITED_WM1_MASK (0xff<<24) | 4162 | #define DSPFW_SPRITED_WM1_MASK (0xff<<24) |
4163 | #define DSPFW_SPRITED_SHIFT 16 | 4163 | #define DSPFW_SPRITED_SHIFT 16 |
4164 | #define DSPFW_SPRITED_MASK (0xff<<16) | 4164 | #define DSPFW_SPRITED_MASK_VLV (0xff<<16) |
4165 | #define DSPFW_SPRITEC_WM1_SHIFT 8 | 4165 | #define DSPFW_SPRITEC_WM1_SHIFT 8 |
4166 | #define DSPFW_SPRITEC_WM1_MASK (0xff<<8) | 4166 | #define DSPFW_SPRITEC_WM1_MASK (0xff<<8) |
4167 | #define DSPFW_SPRITEC_SHIFT 0 | 4167 | #define DSPFW_SPRITEC_SHIFT 0 |
4168 | #define DSPFW_SPRITEC_MASK (0xff<<0) | 4168 | #define DSPFW_SPRITEC_MASK_VLV (0xff<<0) |
4169 | #define DSPFW8_CHV (VLV_DISPLAY_BASE + 0x700b8) | 4169 | #define DSPFW8_CHV (VLV_DISPLAY_BASE + 0x700b8) |
4170 | #define DSPFW_SPRITEF_WM1_SHIFT 24 | 4170 | #define DSPFW_SPRITEF_WM1_SHIFT 24 |
4171 | #define DSPFW_SPRITEF_WM1_MASK (0xff<<24) | 4171 | #define DSPFW_SPRITEF_WM1_MASK (0xff<<24) |
4172 | #define DSPFW_SPRITEF_SHIFT 16 | 4172 | #define DSPFW_SPRITEF_SHIFT 16 |
4173 | #define DSPFW_SPRITEF_MASK (0xff<<16) | 4173 | #define DSPFW_SPRITEF_MASK_VLV (0xff<<16) |
4174 | #define DSPFW_SPRITEE_WM1_SHIFT 8 | 4174 | #define DSPFW_SPRITEE_WM1_SHIFT 8 |
4175 | #define DSPFW_SPRITEE_WM1_MASK (0xff<<8) | 4175 | #define DSPFW_SPRITEE_WM1_MASK (0xff<<8) |
4176 | #define DSPFW_SPRITEE_SHIFT 0 | 4176 | #define DSPFW_SPRITEE_SHIFT 0 |
4177 | #define DSPFW_SPRITEE_MASK (0xff<<0) | 4177 | #define DSPFW_SPRITEE_MASK_VLV (0xff<<0) |
4178 | #define DSPFW9_CHV (VLV_DISPLAY_BASE + 0x7007c) /* wtf #2? */ | 4178 | #define DSPFW9_CHV (VLV_DISPLAY_BASE + 0x7007c) /* wtf #2? */ |
4179 | #define DSPFW_PLANEC_WM1_SHIFT 24 | 4179 | #define DSPFW_PLANEC_WM1_SHIFT 24 |
4180 | #define DSPFW_PLANEC_WM1_MASK (0xff<<24) | 4180 | #define DSPFW_PLANEC_WM1_MASK (0xff<<24) |
4181 | #define DSPFW_PLANEC_SHIFT 16 | 4181 | #define DSPFW_PLANEC_SHIFT 16 |
4182 | #define DSPFW_PLANEC_MASK (0xff<<16) | 4182 | #define DSPFW_PLANEC_MASK_VLV (0xff<<16) |
4183 | #define DSPFW_CURSORC_WM1_SHIFT 8 | 4183 | #define DSPFW_CURSORC_WM1_SHIFT 8 |
4184 | #define DSPFW_CURSORC_WM1_MASK (0x3f<<16) | 4184 | #define DSPFW_CURSORC_WM1_MASK (0x3f<<16) |
4185 | #define DSPFW_CURSORC_SHIFT 0 | 4185 | #define DSPFW_CURSORC_SHIFT 0 |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 3b3bf8676783..ac7777217440 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -835,6 +835,11 @@ static bool g4x_compute_srwm(struct drm_device *dev, | |||
835 | display, cursor); | 835 | display, cursor); |
836 | } | 836 | } |
837 | 837 | ||
838 | #define FW_WM(value, plane) \ | ||
839 | (((value) << DSPFW_ ## plane ## _SHIFT) & DSPFW_ ## plane ## _MASK) | ||
840 | #define FW_WM_VLV(value, plane) \ | ||
841 | (((value) << DSPFW_ ## plane ## _SHIFT) & DSPFW_ ## plane ## _MASK_VLV) | ||
842 | |||
838 | static void vlv_write_wm_values(struct intel_crtc *crtc, | 843 | static void vlv_write_wm_values(struct intel_crtc *crtc, |
839 | const struct vlv_wm_values *wm) | 844 | const struct vlv_wm_values *wm) |
840 | { | 845 | { |
@@ -848,50 +853,50 @@ static void vlv_write_wm_values(struct intel_crtc *crtc, | |||
848 | (wm->ddl[pipe].primary << DDL_PLANE_SHIFT)); | 853 | (wm->ddl[pipe].primary << DDL_PLANE_SHIFT)); |
849 | 854 | ||
850 | I915_WRITE(DSPFW1, | 855 | I915_WRITE(DSPFW1, |
851 | ((wm->sr.plane << DSPFW_SR_SHIFT) & DSPFW_SR_MASK) | | 856 | FW_WM(wm->sr.plane, SR) | |
852 | ((wm->pipe[PIPE_B].cursor << DSPFW_CURSORB_SHIFT) & DSPFW_CURSORB_MASK) | | 857 | FW_WM(wm->pipe[PIPE_B].cursor, CURSORB) | |
853 | ((wm->pipe[PIPE_B].primary << DSPFW_PLANEB_SHIFT) & DSPFW_PLANEB_MASK_VLV) | | 858 | FW_WM_VLV(wm->pipe[PIPE_B].primary, PLANEB) | |
854 | ((wm->pipe[PIPE_A].primary << DSPFW_PLANEA_SHIFT) & DSPFW_PLANEA_MASK_VLV)); | 859 | FW_WM_VLV(wm->pipe[PIPE_A].primary, PLANEA)); |
855 | I915_WRITE(DSPFW2, | 860 | I915_WRITE(DSPFW2, |
856 | ((wm->pipe[PIPE_A].sprite[1] << DSPFW_SPRITEB_SHIFT) & DSPFW_SPRITEB_MASK_VLV) | | 861 | FW_WM_VLV(wm->pipe[PIPE_A].sprite[1], SPRITEB) | |
857 | ((wm->pipe[PIPE_A].cursor << DSPFW_CURSORA_SHIFT) & DSPFW_CURSORA_MASK) | | 862 | FW_WM(wm->pipe[PIPE_A].cursor, CURSORA) | |
858 | ((wm->pipe[PIPE_A].sprite[0] << DSPFW_SPRITEA_SHIFT) & DSPFW_SPRITEA_MASK_VLV)); | 863 | FW_WM_VLV(wm->pipe[PIPE_A].sprite[0], SPRITEA)); |
859 | I915_WRITE(DSPFW3, | 864 | I915_WRITE(DSPFW3, |
860 | ((wm->sr.cursor << DSPFW_CURSOR_SR_SHIFT) & DSPFW_CURSOR_SR_MASK)); | 865 | FW_WM(wm->sr.cursor, CURSOR_SR)); |
861 | 866 | ||
862 | if (IS_CHERRYVIEW(dev_priv)) { | 867 | if (IS_CHERRYVIEW(dev_priv)) { |
863 | I915_WRITE(DSPFW7_CHV, | 868 | I915_WRITE(DSPFW7_CHV, |
864 | ((wm->pipe[PIPE_B].sprite[1] << DSPFW_SPRITED_SHIFT) & DSPFW_SPRITED_MASK) | | 869 | FW_WM_VLV(wm->pipe[PIPE_B].sprite[1], SPRITED) | |
865 | ((wm->pipe[PIPE_B].sprite[0] << DSPFW_SPRITEC_SHIFT) & DSPFW_SPRITEC_MASK)); | 870 | FW_WM_VLV(wm->pipe[PIPE_B].sprite[0], SPRITEC)); |
866 | I915_WRITE(DSPFW8_CHV, | 871 | I915_WRITE(DSPFW8_CHV, |
867 | ((wm->pipe[PIPE_C].sprite[1] << DSPFW_SPRITEF_SHIFT) & DSPFW_SPRITEF_MASK) | | 872 | FW_WM_VLV(wm->pipe[PIPE_C].sprite[1], SPRITEF) | |
868 | ((wm->pipe[PIPE_C].sprite[0] << DSPFW_SPRITEE_SHIFT) & DSPFW_SPRITEE_MASK)); | 873 | FW_WM_VLV(wm->pipe[PIPE_C].sprite[0], SPRITEE)); |
869 | I915_WRITE(DSPFW9_CHV, | 874 | I915_WRITE(DSPFW9_CHV, |
870 | ((wm->pipe[PIPE_C].primary << DSPFW_PLANEC_SHIFT) & DSPFW_PLANEC_MASK) | | 875 | FW_WM_VLV(wm->pipe[PIPE_C].primary, PLANEC) | |
871 | ((wm->pipe[PIPE_C].cursor << DSPFW_CURSORC_SHIFT) & DSPFW_CURSORC_MASK)); | 876 | FW_WM(wm->pipe[PIPE_C].cursor, CURSORC)); |
872 | I915_WRITE(DSPHOWM, | 877 | I915_WRITE(DSPHOWM, |
873 | (((wm->sr.plane >> 9) << DSPFW_SR_HI_SHIFT) & DSPFW_SR_HI_MASK) | | 878 | FW_WM(wm->sr.plane >> 9, SR_HI) | |
874 | (((wm->pipe[PIPE_C].sprite[1] >> 8) << DSPFW_SPRITEF_HI_SHIFT) & DSPFW_SPRITEF_HI_MASK) | | 879 | FW_WM(wm->pipe[PIPE_C].sprite[1] >> 8, SPRITEF_HI) | |
875 | (((wm->pipe[PIPE_C].sprite[0] >> 8) << DSPFW_SPRITEE_HI_SHIFT) & DSPFW_SPRITEE_HI_MASK) | | 880 | FW_WM(wm->pipe[PIPE_C].sprite[0] >> 8, SPRITEE_HI) | |
876 | (((wm->pipe[PIPE_C].primary >> 8) << DSPFW_PLANEC_HI_SHIFT) & DSPFW_PLANEC_HI_MASK) | | 881 | FW_WM(wm->pipe[PIPE_C].primary >> 8, PLANEC_HI) | |
877 | (((wm->pipe[PIPE_B].sprite[1] >> 8) << DSPFW_SPRITED_HI_SHIFT) & DSPFW_SPRITED_HI_MASK) | | 882 | FW_WM(wm->pipe[PIPE_B].sprite[1] >> 8, SPRITED_HI) | |
878 | (((wm->pipe[PIPE_B].sprite[0] >> 8) << DSPFW_SPRITEC_HI_SHIFT) & DSPFW_SPRITEC_HI_MASK) | | 883 | FW_WM(wm->pipe[PIPE_B].sprite[0] >> 8, SPRITEC_HI) | |
879 | (((wm->pipe[PIPE_B].primary >> 8) << DSPFW_PLANEB_HI_SHIFT) & DSPFW_PLANEB_HI_MASK) | | 884 | FW_WM(wm->pipe[PIPE_B].primary >> 8, PLANEB_HI) | |
880 | (((wm->pipe[PIPE_A].sprite[1] >> 8) << DSPFW_SPRITEB_HI_SHIFT) & DSPFW_SPRITEB_HI_MASK) | | 885 | FW_WM(wm->pipe[PIPE_A].sprite[1] >> 8, SPRITEB_HI) | |
881 | (((wm->pipe[PIPE_A].sprite[0] >> 8) << DSPFW_SPRITEA_HI_SHIFT) & DSPFW_SPRITEA_HI_MASK) | | 886 | FW_WM(wm->pipe[PIPE_A].sprite[0] >> 8, SPRITEA_HI) | |
882 | (((wm->pipe[PIPE_A].primary >> 8) << DSPFW_PLANEA_HI_SHIFT) & DSPFW_PLANEA_HI_MASK)); | 887 | FW_WM(wm->pipe[PIPE_A].primary >> 8, PLANEA_HI)); |
883 | } else { | 888 | } else { |
884 | I915_WRITE(DSPFW7, | 889 | I915_WRITE(DSPFW7, |
885 | ((wm->pipe[PIPE_B].sprite[1] << DSPFW_SPRITED_SHIFT) & DSPFW_SPRITED_MASK) | | 890 | FW_WM_VLV(wm->pipe[PIPE_B].sprite[1], SPRITED) | |
886 | ((wm->pipe[PIPE_B].sprite[0] << DSPFW_SPRITEC_SHIFT) & DSPFW_SPRITEC_MASK)); | 891 | FW_WM_VLV(wm->pipe[PIPE_B].sprite[0], SPRITEC)); |
887 | I915_WRITE(DSPHOWM, | 892 | I915_WRITE(DSPHOWM, |
888 | (((wm->sr.plane >> 9) << DSPFW_SR_HI_SHIFT) & DSPFW_SR_HI_MASK) | | 893 | FW_WM(wm->sr.plane >> 9, SR_HI) | |
889 | (((wm->pipe[PIPE_B].sprite[1] >> 8) << DSPFW_SPRITED_HI_SHIFT) & DSPFW_SPRITED_HI_MASK) | | 894 | FW_WM(wm->pipe[PIPE_B].sprite[1] >> 8, SPRITED_HI) | |
890 | (((wm->pipe[PIPE_B].sprite[0] >> 8) << DSPFW_SPRITEC_HI_SHIFT) & DSPFW_SPRITEC_HI_MASK) | | 895 | FW_WM(wm->pipe[PIPE_B].sprite[0] >> 8, SPRITEC_HI) | |
891 | (((wm->pipe[PIPE_B].primary >> 8) << DSPFW_PLANEB_HI_SHIFT) & DSPFW_PLANEB_HI_MASK) | | 896 | FW_WM(wm->pipe[PIPE_B].primary >> 8, PLANEB_HI) | |
892 | (((wm->pipe[PIPE_A].sprite[1] >> 8) << DSPFW_SPRITEB_HI_SHIFT) & DSPFW_SPRITEB_HI_MASK) | | 897 | FW_WM(wm->pipe[PIPE_A].sprite[1] >> 8, SPRITEB_HI) | |
893 | (((wm->pipe[PIPE_A].sprite[0] >> 8) << DSPFW_SPRITEA_HI_SHIFT) & DSPFW_SPRITEA_HI_MASK) | | 898 | FW_WM(wm->pipe[PIPE_A].sprite[0] >> 8, SPRITEA_HI) | |
894 | (((wm->pipe[PIPE_A].primary >> 8) << DSPFW_PLANEA_HI_SHIFT) & DSPFW_PLANEA_HI_MASK)); | 899 | FW_WM(wm->pipe[PIPE_A].primary >> 8, PLANEA_HI)); |
895 | } | 900 | } |
896 | 901 | ||
897 | POSTING_READ(DSPFW1); | 902 | POSTING_READ(DSPFW1); |
@@ -899,6 +904,9 @@ static void vlv_write_wm_values(struct intel_crtc *crtc, | |||
899 | dev_priv->wm.vlv = *wm; | 904 | dev_priv->wm.vlv = *wm; |
900 | } | 905 | } |
901 | 906 | ||
907 | #undef FW_WM | ||
908 | #undef FW_WM_VLV | ||
909 | |||
902 | static uint8_t vlv_compute_drain_latency(struct drm_crtc *crtc, | 910 | static uint8_t vlv_compute_drain_latency(struct drm_crtc *crtc, |
903 | struct drm_plane *plane) | 911 | struct drm_plane *plane) |
904 | { | 912 | { |