diff options
author | Mika Kuoppala <mika.kuoppala@linux.intel.com> | 2016-06-07 10:18:54 -0400 |
---|---|---|
committer | Mika Kuoppala <mika.kuoppala@intel.com> | 2016-07-15 08:51:22 -0400 |
commit | 68370e0ab1636efce7b7e8254430c1ec321564bc (patch) | |
tree | 1a7026151190aa7f4b256035ff978953dfcb2be1 | |
parent | c000456c8c642c6474cd7b94344ff1c39e91c575 (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.c | 48 |
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 | ||
1190 | static 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 | |||
1188 | int init_workarounds_ring(struct intel_engine_cs *engine) | 1201 | int 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 | ||