[haiku-development] Re: intel_extreme rework status

  • From: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
  • To: haiku-development@xxxxxxxxxxxxx
  • Date: Thu, 26 May 2016 07:24:11 +0200

On Thu, May 26, 2016 at 01:41:52AM +0000, Alexander von Gluck IV wrote:

Things start to go wrong with the PLL computation. The driver is looking
for 69.3MHz, but only manages to get 31.1429. This is way off the
target.

for reference, as reported by the syslog:

min: p 28 (p1 2 p2 14), n 1, m 79 (m1 12, m2 5)
max: p 112 (p1 8 p2 14), n 3, m 118 (m1 22, m2 9)

found: p = 112, n = 3, m = 109 (m1 = 18, m2 = 7)

I assume this should match with the PLL limits described in SNB volume 3
part 3, section 2.3. But, the limits for M does not seem to match: max M
value could be 127, not 118.

I got those updated values from the linux driver here:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/i915/intel_display.c#n426

It seems we are using ironlake clock limits, since that file doesn't
have the sandy bridge ones.


I'm also not sure how the code computes 31.1429MHz with these settings.

The output frequency is f = (R * M) / ((N+2) * P) with R=100MHz.
With the found settings I only get 19.46MHz, which is even more wrong
than announced.

The limits for N also seem wrong, the datasheet says values 3-8 are
allowed and use (N+2) in the frequency math. I'm not sure if that means
the limits should be 3-8 or 5-10, but I don't see how it could end up
with 1-3.

IronLake and above use some modified frequency math based on intel's work 
here:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/i915/intel_display.c#n818

The comment here uses exactly the same formula as the spec. The code
seems to be doing a bruteforce search for parameters, and our
implementation doesn't work.

Then I get an error later on when trying to set the display mode:

"LVDS C didn't power on within 100ms!"

I guess this may be caused by the invalid N value preventing the PLL
from locking.

I always see that issue even on working hardware, so I wouldn't mind it for 
now.


Why have a log for an harmless problem then? (No, "Linux does it" is not
an acceptable answer).

-- 
Adrien.

Other related posts: