[Intel-gfx] Regression in i915_gem_detect_bit_6_swizzle for 945G

Herton Ronaldo Krzesinski herton at mandriva.com.br
Thu Jun 18 04:30:56 CEST 2009


not sure if already reported, but looks like commit 
568d9a8f6d4bf81e0672c74573dc02981d31e3ea ("drm/i915: Change
DCC tiling detection case to cover only mobile parts.") introduced a 
regression in linux kernel, at least for 945G chips.

With this change, this code is now run for 945 desktop parts:

                if (I915_READ16(C0DRB3) != I915_READ16(C1DRB3)) {
                        swizzle_x = I915_BIT_6_SWIZZLE_NONE;
                        swizzle_y = I915_BIT_6_SWIZZLE_NONE;
                } else {
                        swizzle_x = I915_BIT_6_SWIZZLE_9_10;
                        swizzle_y = I915_BIT_6_SWIZZLE_9;

The problem is that C0DRB3 == 0x10206, which is true for 965 (and later? only 
checked 965 datasheet for now), but this isn't true for 945, 945G/945P 
datasheet informs another address (8 bits 103h instead of 16 bits 206h, same 
issue with C1DRB3). Also I guess the check for 945G must be different, from 

 "C1DRB0 = Total memory in chA rank0 + chA rank1 + chA rank2 + chA rank3 + chB 
(in 32-MB increments)
If Channel B is empty, all of the C1DRBs are programmed with the same value as 
(in the part talking about C0DRB0 and single/interleaved mode)

Probably 915 is affected too, only checked the case for 945.

Also another problem I noticed, when any tiling gets enabled on all 945G 
machines I could test, the following screen corruption happens always at some 
places only when using EXA (with xorg intel driver <= 2.7.1, I think until 
2.6.1 is affected):
A normal screen (without corruption) is like this:
If I force to use UXA or disable tiling in xorg.conf no corruption happens.


More information about the Intel-gfx mailing list