[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


Hi,

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 
datasheet:

 "C1DRB0 = Total memory in chA rank0 + chA rank1 + chA rank2 + chA rank3 + chB 
rank0
(in 32-MB increments)
If Channel B is empty, all of the C1DRBs are programmed with the same value as 
C0DRB3."
(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):
http://users.mandriva.com.br/~herton/intel_945/corrupted.png
A normal screen (without corruption) is like this:
http://users.mandriva.com.br/~herton/intel_945/normal.png
If I force to use UXA or disable tiling in xorg.conf no corruption happens.

--
[]'s
Herton



More information about the Intel-gfx mailing list