Request for Intel 915 hw information
jbarnes at virtuousgeek.org
Thu Sep 20 18:02:16 PDT 2007
On Thursday, September 20, 2007, Krzysztof Halasa wrote:
> > In the case of an interlaced mode, I think the frame count
> > registers will count whole fields, not individual interlaced
> > frames.
> You mean "count whole frames" and not individual fields?
Err yes, that's what I meant. However, there are separate bits in the
PIPE*STAT registers for controlling whether you get vblank interrupts
on even or odd frames or both.
The odd event enable bit is 21 and even is 20. They shouldn't be on
unless an interlaced mode is active.
> FRAMEPIXEL >> 24 counts fields (i.e., halfs of a frame). I'm using
> 50 Hz (I) PAL (20 ms for a field, 40 ms for full frame) so the
> counter is incremented with 50 Hz rate (not 25 Hz for whole frame).
> FRAMEPIXEL & 0xFFFFFF counts pixels in each field.
Ok, so you're actually getting each field. Good enough I guess.
> >> What is PIPEA_DSL? Is it implemented on 915 and/or other chips?
> > Yeah, i915 has it. It gives you the actual scanline number
> > currently being scanned out. Again for interlaced modes it'll give
> > you a field relative number, so you'd expect all even numbers for
> > one frame, then all odd numbers the next.
> Field relative number => with 576 lines I get 0-288 (288 = VSYNC
> IRQ). I.e., I don't know if it's even or odd field.
Hm, ok, so I guess it's just the current line in the field, regardless
of which one. According to the docs every other field should have a
count one higher than the previous field:
"In interlaced display timings, the scan line counter provides the
current line in the field. One field will have a total number of lines
that is one greater than the other field."
So I guess you can see which field is even or odd based on which has the
higher number or which you've enabled vblank events for in PIPE*STAT.
> I wonder if it's possible to read the address (in RAM) of current
> line and/or pixel? It would include field information.
> Or perhaps there is some field indication bit somewhere?
Well, there's PIPEAFRAMEPIX (the low part of the frame count register
set). The low 24 bits of that register contain the pixel count, so you
could try to use that.
More information about the xorg