aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Kuoppala <mika.kuoppala@linux.intel.com>2016-06-07 10:18:54 -0400
committerMika Kuoppala <mika.kuoppala@intel.com>2016-07-15 08:51:22 -0400
commit68370e0ab1636efce7b7e8254430c1ec321564bc (patch)
tree1a7026151190aa7f4b256035ff978953dfcb2be1
parentc000456c8c642c6474cd7b94344ff1c39e91c575 (diff)
drm/i915/kbl: Init gen9 workarounds
Kabylake is part of gen9 family so init the generic gen9 workarounds for it. v2: rebase Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1465309159-30531-3-git-send-email-mika.kuoppala@intel.com (cherry picked from commit e5f81d65ac5a04020d790caf63b2324730ba0277) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c48
1 files changed, 32 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 31d7e2804e2b..bcd9e70cd8e0 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -916,21 +916,21 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
916 uint32_t tmp; 916 uint32_t tmp;
917 int ret; 917 int ret;
918 918
919 /* WaEnableLbsSlaRetryTimerDecrement:skl */ 919 /* WaEnableLbsSlaRetryTimerDecrement:skl,bxt,kbl */
920 I915_WRITE(BDW_SCRATCH1, I915_READ(BDW_SCRATCH1) | 920 I915_WRITE(BDW_SCRATCH1, I915_READ(BDW_SCRATCH1) |
921 GEN9_LBS_SLA_RETRY_TIMER_DECREMENT_ENABLE); 921 GEN9_LBS_SLA_RETRY_TIMER_DECREMENT_ENABLE);
922 922
923 /* WaDisableKillLogic:bxt,skl */ 923 /* WaDisableKillLogic:bxt,skl,kbl */
924 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | 924 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) |
925 ECOCHK_DIS_TLB); 925 ECOCHK_DIS_TLB);
926 926
927 /* WaClearFlowControlGpgpuContextSave:skl,bxt */ 927 /* WaClearFlowControlGpgpuContextSave:skl,bxt,kbl */
928 /* WaDisablePartialInstShootdown:skl,bxt */ 928 /* WaDisablePartialInstShootdown:skl,bxt,kbl */
929 WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN, 929 WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN,
930 FLOW_CONTROL_ENABLE | 930 FLOW_CONTROL_ENABLE |
931 PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE); 931 PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE);
932 932
933 /* Syncing dependencies between camera and graphics:skl,bxt */ 933 /* Syncing dependencies between camera and graphics:skl,bxt,kbl */
934 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3, 934 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
935 GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC); 935 GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC);
936 936
@@ -952,18 +952,18 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
952 */ 952 */
953 } 953 }
954 954
955 /* WaEnableYV12BugFixInHalfSliceChicken7:skl,bxt */ 955 /* WaEnableYV12BugFixInHalfSliceChicken7:skl,bxt,kbl */
956 /* WaEnableSamplerGPGPUPreemptionSupport:skl,bxt */ 956 /* WaEnableSamplerGPGPUPreemptionSupport:skl,bxt,kbl */
957 WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7, 957 WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7,
958 GEN9_ENABLE_YV12_BUGFIX | 958 GEN9_ENABLE_YV12_BUGFIX |
959 GEN9_ENABLE_GPGPU_PREEMPTION); 959 GEN9_ENABLE_GPGPU_PREEMPTION);
960 960
961 /* Wa4x4STCOptimizationDisable:skl,bxt */ 961 /* Wa4x4STCOptimizationDisable:skl,bxt,kbl */
962 /* WaDisablePartialResolveInVc:skl,bxt */ 962 /* WaDisablePartialResolveInVc:skl,bxt,kbl */
963 WA_SET_BIT_MASKED(CACHE_MODE_1, (GEN8_4x4_STC_OPTIMIZATION_DISABLE | 963 WA_SET_BIT_MASKED(CACHE_MODE_1, (GEN8_4x4_STC_OPTIMIZATION_DISABLE |
964 GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE)); 964 GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE));
965 965
966 /* WaCcsTlbPrefetchDisable:skl,bxt */ 966 /* WaCcsTlbPrefetchDisable:skl,bxt,kbl */
967 WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5, 967 WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5,
968 GEN9_CCS_TLB_PREFETCH_ENABLE); 968 GEN9_CCS_TLB_PREFETCH_ENABLE);
969 969
@@ -980,15 +980,17 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
980 tmp |= HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE; 980 tmp |= HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE;
981 WA_SET_BIT_MASKED(HDC_CHICKEN0, tmp); 981 WA_SET_BIT_MASKED(HDC_CHICKEN0, tmp);
982 982
983 /* WaDisableSamplerPowerBypassForSOPingPong:skl,bxt */ 983 /* WaDisableSamplerPowerBypassForSOPingPong:skl,bxt,kbl */
984 if (IS_SKYLAKE(dev) || IS_BXT_REVID(dev, 0, BXT_REVID_B0)) 984 if (IS_SKYLAKE(dev_priv) ||
985 IS_KABYLAKE(dev_priv) ||
986 IS_BXT_REVID(dev_priv, 0, BXT_REVID_B0))
985 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3, 987 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
986 GEN8_SAMPLER_POWER_BYPASS_DIS); 988 GEN8_SAMPLER_POWER_BYPASS_DIS);
987 989
988 /* WaDisableSTUnitPowerOptimization:skl,bxt */ 990 /* WaDisableSTUnitPowerOptimization:skl,bxt,kbl */
989 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN2, GEN8_ST_PO_DISABLE); 991 WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN2, GEN8_ST_PO_DISABLE);
990 992
991 /* WaOCLCoherentLineFlush:skl,bxt */ 993 /* WaOCLCoherentLineFlush:skl,bxt,kbl */
992 I915_WRITE(GEN8_L3SQCREG4, (I915_READ(GEN8_L3SQCREG4) | 994 I915_WRITE(GEN8_L3SQCREG4, (I915_READ(GEN8_L3SQCREG4) |
993 GEN8_LQSC_FLUSH_COHERENT_LINES)); 995 GEN8_LQSC_FLUSH_COHERENT_LINES));
994 996
@@ -997,12 +999,12 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
997 if (ret) 999 if (ret)
998 return ret; 1000 return ret;
999 1001
1000 /* WaEnablePreemptionGranularityControlByUMD:skl,bxt */ 1002 /* WaEnablePreemptionGranularityControlByUMD:skl,bxt,kbl */
1001 ret= wa_ring_whitelist_reg(engine, GEN8_CS_CHICKEN1); 1003 ret= wa_ring_whitelist_reg(engine, GEN8_CS_CHICKEN1);
1002 if (ret) 1004 if (ret)
1003 return ret; 1005 return ret;
1004 1006
1005 /* WaAllowUMDToModifyHDCChicken1:skl,bxt */ 1007 /* WaAllowUMDToModifyHDCChicken1:skl,bxt,kbl */
1006 ret = wa_ring_whitelist_reg(engine, GEN8_HDC_CHICKEN1); 1008 ret = wa_ring_whitelist_reg(engine, GEN8_HDC_CHICKEN1);
1007 if (ret) 1009 if (ret)
1008 return ret; 1010 return ret;
@@ -1185,6 +1187,17 @@ static int bxt_init_workarounds(struct intel_engine_cs *engine)
1185 return 0; 1187 return 0;
1186} 1188}
1187 1189
1190static int kbl_init_workarounds(struct intel_engine_cs *engine)
1191{
1192 int ret;
1193
1194 ret = gen9_init_workarounds(engine);
1195 if (ret)
1196 return ret;
1197
1198 return 0;
1199}
1200
1188int init_workarounds_ring(struct intel_engine_cs *engine) 1201int init_workarounds_ring(struct intel_engine_cs *engine)
1189{ 1202{
1190 struct drm_device *dev = engine->dev; 1203 struct drm_device *dev = engine->dev;
@@ -1207,6 +1220,9 @@ int init_workarounds_ring(struct intel_engine_cs *engine)
1207 if (IS_BROXTON(dev)) 1220 if (IS_BROXTON(dev))
1208 return bxt_init_workarounds(engine); 1221 return bxt_init_workarounds(engine);
1209 1222
1223 if (IS_KABYLAKE(dev_priv))
1224 return kbl_init_workarounds(engine);
1225
1210 return 0; 1226 return 0;
1211} 1227}
1212 1228