drm/i915: Add PSR registers for PSR VLV/CHV.
authorRodrigo Vivi <rodrigo.vivi@intel.com>
Fri, 14 Nov 2014 16:52:36 +0000 (08:52 -0800)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 3 Dec 2014 08:35:08 +0000 (09:35 +0100)
Baytrail (Valleyview) and Braswell (Cherryview) uses a complete different
implementation of PSR that we currently have supported for
Haswell and Broadwell. So let's start by adding registers definitions.

I usually don't like commit that adds just registers without using,
but after I put all in one commit I realized that no one would want
to take the AR to review it so I decided to split in order to make
reviewer's life easier. Only last commit in this series will actually
enable the PSR on intel enable panel path.

But as it happens currently with HSW/BDW the plan is to let it
disabled by default (protected by kernel parameter)
while we are able to fully validate it.

v2: Remove a unused bit definition that isn't used on vlv and
    reserved on chv as pointed out by Durgadoss.

Cc: Durgadoss R <durgadoss.r@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_reg.h

index 544675895c8dff93f6b5cdf3eb757e5643467f33..a96552251383c6dcaa90f8ed5920014d90b5277f 100644 (file)
@@ -2524,6 +2524,42 @@ enum punit_power_well {
 #define PIPESRC(trans) _TRANSCODER2(trans, _PIPEASRC)
 #define PIPE_MULT(trans) _TRANSCODER2(trans, _PIPE_MULT_A)
 
+/* VLV eDP PSR registers */
+#define _PSRCTLA                               (VLV_DISPLAY_BASE + 0x60090)
+#define _PSRCTLB                               (VLV_DISPLAY_BASE + 0x61090)
+#define  VLV_EDP_PSR_ENABLE                    (1<<0)
+#define  VLV_EDP_PSR_RESET                     (1<<1)
+#define  VLV_EDP_PSR_MODE_MASK                 (7<<2)
+#define  VLV_EDP_PSR_MODE_HW_TIMER             (1<<3)
+#define  VLV_EDP_PSR_MODE_SW_TIMER             (1<<2)
+#define  VLV_EDP_PSR_SINGLE_FRAME_UPDATE       (1<<7)
+#define  VLV_EDP_PSR_ACTIVE_ENTRY              (1<<8)
+#define  VLV_EDP_PSR_SRC_TRANSMITTER_STATE     (1<<9)
+#define  VLV_EDP_PSR_DBL_FRAME                 (1<<10)
+#define  VLV_EDP_PSR_FRAME_COUNT_MASK          (0xff<<16)
+#define  VLV_EDP_PSR_IDLE_FRAME_SHIFT          16
+#define VLV_PSRCTL(pipe) _PIPE(pipe, _PSRCTLA, _PSRCTLB)
+
+#define _VSCSDPA                       (VLV_DISPLAY_BASE + 0x600a0)
+#define _VSCSDPB                       (VLV_DISPLAY_BASE + 0x610a0)
+#define  VLV_EDP_PSR_SDP_FREQ_MASK     (3<<30)
+#define  VLV_EDP_PSR_SDP_FREQ_ONCE     (1<<31)
+#define  VLV_EDP_PSR_SDP_FREQ_EVFRAME  (1<<30)
+#define VLV_VSCSDP(pipe)       _PIPE(pipe, _VSCSDPA, _VSCSDPB)
+
+#define _PSRSTATA                      (VLV_DISPLAY_BASE + 0x60094)
+#define _PSRSTATB                      (VLV_DISPLAY_BASE + 0x61094)
+#define  VLV_EDP_PSR_LAST_STATE_MASK   (7<<3)
+#define  VLV_EDP_PSR_CURR_STATE_MASK   7
+#define  VLV_EDP_PSR_DISABLED          (0<<0)
+#define  VLV_EDP_PSR_INACTIVE          (1<<0)
+#define  VLV_EDP_PSR_IN_TRANS_TO_ACTIVE        (2<<0)
+#define  VLV_EDP_PSR_ACTIVE_NORFB_UP   (3<<0)
+#define  VLV_EDP_PSR_ACTIVE_SF_UPDATE  (4<<0)
+#define  VLV_EDP_PSR_EXIT              (5<<0)
+#define  VLV_EDP_PSR_IN_TRANS          (1<<7)
+#define VLV_PSRSTAT(pipe) _PIPE(pipe, _PSRSTATA, _PSRSTATB)
+
 /* HSW+ eDP PSR registers */
 #define EDP_PSR_BASE(dev)                       (IS_HASWELL(dev) ? 0x64800 : 0x6f800)
 #define EDP_PSR_CTL(dev)                       (EDP_PSR_BASE(dev) + 0)