intel_de_read(display, GEN9_CLKGATE_DIS_0) |
PWM1_GATING_DIS | PWM2_GATING_DIS);
}
+
+void intel_display_bdw_clock_gating_disable_fbcq(struct intel_display *display)
+{
+ /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
+ intel_de_rmw(display, CHICKEN_PIPESL_1(PIPE_A), 0, HSW_FBCQ_DIS);
+}
+
+void intel_display_bdw_clock_gating_vblank_in_srd(struct intel_display *display)
+{
+ enum pipe pipe;
+
+ /* WaPsrDPAMaskVBlankInSRD:hsw */
+ intel_de_rmw(display, CHICKEN_PAR1_1, 0, HSW_MASK_VBL_TO_PIPE_IN_SRD);
+
+ for_each_pipe(display, pipe) {
+ /* WaPsrDPRSUnmaskVBlankInSRD:hsw,bdw */
+ intel_de_rmw(display, CHICKEN_PIPESL_1(pipe), 0,
+ BDW_UNMASK_VBL_TO_REGS_IN_SRD);
+ }
+}
+
+void intel_display_bdw_clock_gating_kvm_notif(struct intel_display *display)
+{
+ /* WaKVMNotificationOnConfigChange:bdw */
+ intel_de_rmw(display, CHICKEN_PAR2_1, 0,
+ KVM_CONFIG_CHANGE_NOTIFICATION_SELECT);
+}
+
+void intel_display_hsw_init_clock_gating(struct intel_display *display)
+{
+ enum pipe pipe;
+
+ /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
+ intel_de_rmw(display, CHICKEN_PIPESL_1(PIPE_A), 0, HSW_FBCQ_DIS);
+
+ /* WaPsrDPAMaskVBlankInSRD:hsw */
+ intel_de_rmw(display, CHICKEN_PAR1_1, 0, HSW_MASK_VBL_TO_PIPE_IN_SRD);
+
+ for_each_pipe(display, pipe) {
+ /* WaPsrDPRSUnmaskVBlankInSRD:hsw,bdw */
+ intel_de_rmw(display, CHICKEN_PIPESL_1(pipe), 0,
+ HSW_UNMASK_VBL_TO_REGS_IN_SRD);
+ }
+}
static void bdw_init_clock_gating(struct drm_i915_private *i915)
{
- struct intel_display *display = i915->display;
- enum pipe pipe;
-
- /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(PIPE_A), 0, HSW_FBCQ_DIS);
+ intel_display_bdw_clock_gating_disable_fbcq(i915->display);
/* WaSwitchSolVfFArbitrationPriority:bdw */
intel_uncore_rmw(&i915->uncore, GAM_ECOCHK, 0, HSW_ECOCHK_ARB_PRIO_SOL);
- /* WaPsrDPAMaskVBlankInSRD:bdw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PAR1_1, 0, HSW_MASK_VBL_TO_PIPE_IN_SRD);
-
- for_each_pipe(display, pipe) {
- /* WaPsrDPRSUnmaskVBlankInSRD:bdw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(pipe),
- 0, BDW_UNMASK_VBL_TO_REGS_IN_SRD);
- }
+ intel_display_bdw_clock_gating_vblank_in_srd(i915->display);
/* WaVSRefCountFullforceMissDisable:bdw */
/* WaDSRefCountFullforceMissDisable:bdw */
/* WaProgramL3SqcReg1Default:bdw */
gen8_set_l3sqc_credits(i915, 30, 2);
- /* WaKVMNotificationOnConfigChange:bdw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PAR2_1,
- 0, KVM_CONFIG_CHANGE_NOTIFICATION_SELECT);
+ intel_display_bdw_clock_gating_kvm_notif(i915->display);
intel_pch_init_clock_gating(i915->display);
static void hsw_init_clock_gating(struct drm_i915_private *i915)
{
- struct intel_display *display = i915->display;
- enum pipe pipe;
-
- /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(PIPE_A), 0, HSW_FBCQ_DIS);
-
- /* WaPsrDPAMaskVBlankInSRD:hsw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PAR1_1, 0, HSW_MASK_VBL_TO_PIPE_IN_SRD);
-
- for_each_pipe(display, pipe) {
- /* WaPsrDPRSUnmaskVBlankInSRD:hsw */
- intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(pipe),
- 0, HSW_UNMASK_VBL_TO_REGS_IN_SRD);
- }
+ intel_display_hsw_init_clock_gating(i915->display);
/* This is required by WaCatErrorRejectionIssue:hsw */
intel_uncore_rmw(&i915->uncore, GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,