Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/hsw: Disable L3 caching of atomic memory operations.

Otherwise using any atomic memory operation will lock up the GPU due
to a Haswell hardware bug.

v2: Use the _MASKED_BIT_ENABLE macro. Drop drm parameter definition.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: <stable@vger.kernel.org>
[danvet: Fix checkpatch fail.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

authored by

Francisco Jerez and committed by
Daniel Vetter
f3fc4884 671952a2

+11
+6
drivers/gpu/drm/i915/i915_reg.h
··· 3881 3881 #define GEN7_SQ_CHICKEN_MBCUNIT_CONFIG 0x9030 3882 3882 #define GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB (1<<11) 3883 3883 3884 + #define HSW_SCRATCH1 0xb038 3885 + #define HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE (1<<27) 3886 + 3884 3887 #define HSW_FUSE_STRAP 0x42014 3885 3888 #define HSW_CDCLK_LIMIT (1 << 24) 3886 3889 ··· 4730 4727 #define GEN7_ROW_CHICKEN2 0xe4f4 4731 4728 #define GEN7_ROW_CHICKEN2_GT2 0xf4f4 4732 4729 #define DOP_CLOCK_GATING_DISABLE (1<<0) 4730 + 4731 + #define HSW_ROW_CHICKEN3 0xe49c 4732 + #define HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE (1 << 6) 4733 4733 4734 4734 #define G4X_AUD_VID_DID (dev_priv->info->display_mmio_offset + 0x62020) 4735 4735 #define INTEL_AUDIO_DEVCL 0x808629FB
+5
drivers/gpu/drm/i915/intel_pm.c
··· 4953 4953 I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER, 4954 4954 GEN7_WA_L3_CHICKEN_MODE); 4955 4955 4956 + /* L3 caching of data atomics doesn't work -- disable it. */ 4957 + I915_WRITE(HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE); 4958 + I915_WRITE(HSW_ROW_CHICKEN3, 4959 + _MASKED_BIT_ENABLE(HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE)); 4960 + 4956 4961 /* This is required by WaCatErrorRejectionIssue:hsw */ 4957 4962 I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG, 4958 4963 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |