diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_engine_cs.c | 81 |
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 | ||
| 1146 | static 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 | |||
| 1143 | int init_workarounds_ring(struct intel_engine_cs *engine) | 1178 | int 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) |
