aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodrigo Vivi <rodrigo.vivi@intel.com>2017-06-16 18:49:58 -0400
committerRodrigo Vivi <rodrigo.vivi@intel.com>2017-06-16 19:14:29 -0400
commit46c26662d2fb8377f5d387cf2e5ee3246af780b7 (patch)
tree3f274e9ebb5be774b1649a681eba12019266a2b8
parent28e0f4eef6cb3413a8eb943cd9e366793bfa7e87 (diff)
drm/i915/cfl: Introduce Coffee Lake workarounds.
Coffee Lake inherit most of Kabylake production workarounds. v2: Fix typo on commit message and remove WaDisableKillLogic and GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC, since as Mika pointed out they shouldn't be here for cfl according to BSpec. Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1497653398-15722-1-git-send-email-rodrigo.vivi@intel.com
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_engine_cs.c81
2 files changed, 60 insertions, 23 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 205dd91d3601..61fc7e90a7da 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -1884,7 +1884,7 @@ static void gtt_write_workarounds(struct drm_i915_private *dev_priv)
1884 * called on driver load and after a GPU reset, so you can place 1884 * called on driver load and after a GPU reset, so you can place
1885 * workarounds here even if they get overwritten by GPU reset. 1885 * workarounds here even if they get overwritten by GPU reset.
1886 */ 1886 */
1887 /* WaIncreaseDefaultTLBEntries:chv,bdw,skl,bxt,kbl,glk */ 1887 /* WaIncreaseDefaultTLBEntries:chv,bdw,skl,bxt,kbl,glk,cfl */
1888 if (IS_BROADWELL(dev_priv)) 1888 if (IS_BROADWELL(dev_priv))
1889 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_BDW); 1889 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_BDW);
1890 else if (IS_CHERRYVIEW(dev_priv)) 1890 else if (IS_CHERRYVIEW(dev_priv))
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index bc38bd128b76..a4487c5b7e37 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -814,26 +814,27 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
814 struct drm_i915_private *dev_priv = engine->i915; 814 struct drm_i915_private *dev_priv = engine->i915;
815 int ret; 815 int ret;
816 816
817 /* WaConextSwitchWithConcurrentTLBInvalidate:skl,bxt,kbl,glk */ 817 /* WaConextSwitchWithConcurrentTLBInvalidate:skl,bxt,kbl,glk,cfl */
818 I915_WRITE(GEN9_CSFE_CHICKEN1_RCS, _MASKED_BIT_ENABLE(GEN9_PREEMPT_GPGPU_SYNC_SWITCH_DISABLE)); 818 I915_WRITE(GEN9_CSFE_CHICKEN1_RCS, _MASKED_BIT_ENABLE(GEN9_PREEMPT_GPGPU_SYNC_SWITCH_DISABLE));
819 819
820 /* WaEnableLbsSlaRetryTimerDecrement:skl,bxt,kbl,glk */ 820 /* WaEnableLbsSlaRetryTimerDecrement:skl,bxt,kbl,glk,cfl */
821 I915_WRITE(BDW_SCRATCH1, I915_READ(BDW_SCRATCH1) | 821 I915_WRITE(BDW_SCRATCH1, I915_READ(BDW_SCRATCH1) |
822 GEN9_LBS_SLA_RETRY_TIMER_DECREMENT_ENABLE); 822 GEN9_LBS_SLA_RETRY_TIMER_DECREMENT_ENABLE);
823 823
824 /* WaDisableKillLogic:bxt,skl,kbl */ 824 /* WaDisableKillLogic:bxt,skl,kbl,cfl */
825 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | 825 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) |
826 ECOCHK_DIS_TLB); 826 ECOCHK_DIS_TLB);
827 827
828 /* WaClearFlowControlGpgpuContextSave:skl,bxt,kbl,glk */ 828 /* WaClearFlowControlGpgpuContextSave:skl,bxt,kbl,glk,cfl */
829 /* WaDisablePartialInstShootdown:skl,bxt,kbl,glk */ 829 /* WaDisablePartialInstShootdown:skl,bxt,kbl,glk,cfl */
830 WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN, 830 WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN,
831 FLOW_CONTROL_ENABLE | 831 FLOW_CONTROL_ENABLE |
832 PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE); 832 PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE);
833 833
834 /* Syncing dependencies between camera and graphics:skl,bxt,kbl */ 834 /* Syncing dependencies between camera and graphics:skl,bxt,kbl */
835 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3, 835 if (!IS_COFFEELAKE(dev_priv))
836 GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC); 836 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
837 GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC);
837 838
838 /* WaDisableDgMirrorFixInHalfSliceChicken5:bxt */ 839 /* WaDisableDgMirrorFixInHalfSliceChicken5:bxt */
839 if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) 840 if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
@@ -851,18 +852,18 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
851 */ 852 */
852 } 853 }
853 854
854 /* WaEnableYV12BugFixInHalfSliceChicken7:skl,bxt,kbl,glk */ 855 /* WaEnableYV12BugFixInHalfSliceChicken7:skl,bxt,kbl,glk,cfl */
855 /* WaEnableSamplerGPGPUPreemptionSupport:skl,bxt,kbl */ 856 /* WaEnableSamplerGPGPUPreemptionSupport:skl,bxt,kbl,cfl */
856 WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7, 857 WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7,
857 GEN9_ENABLE_YV12_BUGFIX | 858 GEN9_ENABLE_YV12_BUGFIX |
858 GEN9_ENABLE_GPGPU_PREEMPTION); 859 GEN9_ENABLE_GPGPU_PREEMPTION);
859 860
860 /* Wa4x4STCOptimizationDisable:skl,bxt,kbl,glk */ 861 /* Wa4x4STCOptimizationDisable:skl,bxt,kbl,glk,cfl */
861 /* WaDisablePartialResolveInVc:skl,bxt,kbl */ 862 /* WaDisablePartialResolveInVc:skl,bxt,kbl,cfl */
862 WA_SET_BIT_MASKED(CACHE_MODE_1, (GEN8_4x4_STC_OPTIMIZATION_DISABLE | 863 WA_SET_BIT_MASKED(CACHE_MODE_1, (GEN8_4x4_STC_OPTIMIZATION_DISABLE |
863 GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE)); 864 GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE));
864 865
865 /* WaCcsTlbPrefetchDisable:skl,bxt,kbl,glk */ 866 /* WaCcsTlbPrefetchDisable:skl,bxt,kbl,glk,cfl */
866 WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5, 867 WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5,
867 GEN9_CCS_TLB_PREFETCH_ENABLE); 868 GEN9_CCS_TLB_PREFETCH_ENABLE);
868 869
@@ -871,7 +872,7 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
871 WA_SET_BIT_MASKED(SLICE_ECO_CHICKEN0, 872 WA_SET_BIT_MASKED(SLICE_ECO_CHICKEN0,
872 PIXEL_MASK_CAMMING_DISABLE); 873 PIXEL_MASK_CAMMING_DISABLE);
873 874
874 /* WaForceContextSaveRestoreNonCoherent:skl,bxt,kbl */ 875 /* WaForceContextSaveRestoreNonCoherent:skl,bxt,kbl,cfl */
875 WA_SET_BIT_MASKED(HDC_CHICKEN0, 876 WA_SET_BIT_MASKED(HDC_CHICKEN0,
876 HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT | 877 HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT |
877 HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE); 878 HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE);
@@ -889,39 +890,41 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
889 * a TLB invalidation occurs during a PSD flush. 890 * a TLB invalidation occurs during a PSD flush.
890 */ 891 */
891 892
892 /* WaForceEnableNonCoherent:skl,bxt,kbl */ 893 /* WaForceEnableNonCoherent:skl,bxt,kbl,cfl */
893 WA_SET_BIT_MASKED(HDC_CHICKEN0, 894 WA_SET_BIT_MASKED(HDC_CHICKEN0,
894 HDC_FORCE_NON_COHERENT); 895 HDC_FORCE_NON_COHERENT);
895 896
896 /* WaDisableHDCInvalidation:skl,bxt,kbl */ 897 /* WaDisableHDCInvalidation:skl,bxt,kbl */
897 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | 898 if (!IS_COFFEELAKE(dev_priv))
898 BDW_DISABLE_HDC_INVALIDATION); 899 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) |
900 BDW_DISABLE_HDC_INVALIDATION);
899 901
900 /* WaDisableSamplerPowerBypassForSOPingPong:skl,bxt,kbl */ 902 /* WaDisableSamplerPowerBypassForSOPingPong:skl,bxt,kbl,cfl */
901 if (IS_SKYLAKE(dev_priv) || 903 if (IS_SKYLAKE(dev_priv) ||
902 IS_KABYLAKE(dev_priv) || 904 IS_KABYLAKE(dev_priv) ||
905 IS_COFFEELAKE(dev_priv) ||
903 IS_BXT_REVID(dev_priv, 0, BXT_REVID_B0)) 906 IS_BXT_REVID(dev_priv, 0, BXT_REVID_B0))
904 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3, 907 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
905 GEN8_SAMPLER_POWER_BYPASS_DIS); 908 GEN8_SAMPLER_POWER_BYPASS_DIS);
906 909
907 /* WaDisableSTUnitPowerOptimization:skl,bxt,kbl,glk */ 910 /* WaDisableSTUnitPowerOptimization:skl,bxt,kbl,glk,cfl */
908 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN2, GEN8_ST_PO_DISABLE); 911 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN2, GEN8_ST_PO_DISABLE);
909 912
910 /* WaOCLCoherentLineFlush:skl,bxt,kbl */ 913 /* WaOCLCoherentLineFlush:skl,bxt,kbl,cfl */
911 I915_WRITE(GEN8_L3SQCREG4, (I915_READ(GEN8_L3SQCREG4) | 914 I915_WRITE(GEN8_L3SQCREG4, (I915_READ(GEN8_L3SQCREG4) |
912 GEN8_LQSC_FLUSH_COHERENT_LINES)); 915 GEN8_LQSC_FLUSH_COHERENT_LINES));
913 916
914 /* WaVFEStateAfterPipeControlwithMediaStateClear:skl,bxt,glk */ 917 /* WaVFEStateAfterPipeControlwithMediaStateClear:skl,bxt,glk,cfl */
915 ret = wa_ring_whitelist_reg(engine, GEN9_CTX_PREEMPT_REG); 918 ret = wa_ring_whitelist_reg(engine, GEN9_CTX_PREEMPT_REG);
916 if (ret) 919 if (ret)
917 return ret; 920 return ret;
918 921
919 /* WaEnablePreemptionGranularityControlByUMD:skl,bxt,kbl */ 922 /* WaEnablePreemptionGranularityControlByUMD:skl,bxt,kbl,cfl */
920 ret= wa_ring_whitelist_reg(engine, GEN8_CS_CHICKEN1); 923 ret= wa_ring_whitelist_reg(engine, GEN8_CS_CHICKEN1);
921 if (ret) 924 if (ret)
922 return ret; 925 return ret;
923 926
924 /* WaAllowUMDToModifyHDCChicken1:skl,bxt,kbl,glk */ 927 /* WaAllowUMDToModifyHDCChicken1:skl,bxt,kbl,glk,cfl */
925 ret = wa_ring_whitelist_reg(engine, GEN8_HDC_CHICKEN1); 928 ret = wa_ring_whitelist_reg(engine, GEN8_HDC_CHICKEN1);
926 if (ret) 929 if (ret)
927 return ret; 930 return ret;
@@ -1140,6 +1143,38 @@ static int glk_init_workarounds(struct intel_engine_cs *engine)
1140 return 0; 1143 return 0;
1141} 1144}
1142 1145
1146static int cfl_init_workarounds(struct intel_engine_cs *engine)
1147{
1148 struct drm_i915_private *dev_priv = engine->i915;
1149 int ret;
1150
1151 ret = gen9_init_workarounds(engine);
1152 if (ret)
1153 return ret;
1154
1155 /* WaEnableGapsTsvCreditFix:cfl */
1156 I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
1157 GEN9_GAPS_TSV_CREDIT_DISABLE));
1158
1159 /* WaToEnableHwFixForPushConstHWBug:cfl */
1160 WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
1161 GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION);
1162
1163 /* WaDisableGafsUnitClkGating:cfl */
1164 WA_SET_BIT(GEN7_UCGCTL4, GEN8_EU_GAUNIT_CLOCK_GATE_DISABLE);
1165
1166 /* WaDisableSbeCacheDispatchPortSharing:cfl */
1167 WA_SET_BIT_MASKED(
1168 GEN7_HALF_SLICE_CHICKEN1,
1169 GEN7_SBE_SS_CACHE_DISPATCH_PORT_SHARING_DISABLE);
1170
1171 /* WaInPlaceDecompressionHang:cfl */
1172 WA_SET_BIT(GEN9_GAMT_ECO_REG_RW_IA,
1173 GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
1174
1175 return 0;
1176}
1177
1143int init_workarounds_ring(struct intel_engine_cs *engine) 1178int init_workarounds_ring(struct intel_engine_cs *engine)
1144{ 1179{
1145 struct drm_i915_private *dev_priv = engine->i915; 1180 struct drm_i915_private *dev_priv = engine->i915;
@@ -1162,6 +1197,8 @@ int init_workarounds_ring(struct intel_engine_cs *engine)
1162 err = kbl_init_workarounds(engine); 1197 err = kbl_init_workarounds(engine);
1163 else if (IS_GEMINILAKE(dev_priv)) 1198 else if (IS_GEMINILAKE(dev_priv))
1164 err = glk_init_workarounds(engine); 1199 err = glk_init_workarounds(engine);
1200 else if (IS_COFFEELAKE(dev_priv))
1201 err = cfl_init_workarounds(engine);
1165 else 1202 else
1166 err = 0; 1203 err = 0;
1167 if (err) 1204 if (err)