Intel HD Graphics: scan line wraps around?
Posted: Thu Jun 16, 2022 1:06 pm
Hello, I'm trying to set the source size (resolution) of pipe A but for some reason the line seems to wrap around:
My understanding is that I should be able to freely adjust the size of the pipe. This seems to hold for the vertical size and horizontal sizes smaller than the original size, but for some reason not when the horizontal size is larger than the original size.
I tried disabling and re-enabling the plane but it does not seem to do anything. Likewise, I tried disabling and re-enabling the panel fitter but that seems to cause the first line to be stretched entirely across the vertical axis. I've also tried to adjust the stride but it seems not to have any effect.
To try debug the issue I've dumped the values of some registers to the display when possible (which may or may not be related to the issue at all, I'm running out of ideas):
These registers have the following values if I don't adjust anything:
PF_WIN_SZ_A indicates the output is 1920x1080, PIPE_SRCSZ_A indicates the input is 1024x768. The stride is 4096 bytes.
When changing the resolution PIPE_SRCSZ_A is 0x077f_0437, which corresponds to 1920x1080.
Changing the stride updates the register but seems to have no effect even when the plane is disabled first.
I have a hunch that I need to disable & properly reconfigure the transcoder (and port?) first to make it work but I'd like to get some pointers first, since it's hard to tell if anything is working without any external serial or Ethernet ports to communicate.
My current code is here. It is very messy though.
I've also attached two diagrams from Volume 11 of the manual since it's part of what gives me the impression the pipe's source size can freely be adjusted.
My understanding is that I should be able to freely adjust the size of the pipe. This seems to hold for the vertical size and horizontal sizes smaller than the original size, but for some reason not when the horizontal size is larger than the original size.
I tried disabling and re-enabling the plane but it does not seem to do anything. Likewise, I tried disabling and re-enabling the panel fitter but that seems to cause the first line to be stretched entirely across the vertical axis. I've also tried to adjust the stride but it seems not to have any effect.
To try debug the issue I've dumped the values of some registers to the display when possible (which may or may not be related to the issue at all, I'm running out of ideas):
Code: Select all
0x70180, // PRI_CTL_A
0x70188, // PRI_STRIDE_A
0x68080, // PF_CTRL_A
0x68074, // PF_WIN_SZ_A
0x6001C, // PIPE_SRCSZ_A
0x43408, // IPS_CTL
0x45270, // WM_LINETIME_A
Code: Select all
PRI_CTL_A 0x9800_0000
PRI_STRIDE_A 0x0000_1000
PF_CTRL_A 0x8080_0000
PF_WIN_SZ_A 0x0780_0438
PIPE_SRCSZ_A 0x03ff_02ff
IPS_CTL 0x0000_0000
WM_LINETIME_A 0x0000_0000
When changing the resolution PIPE_SRCSZ_A is 0x077f_0437, which corresponds to 1920x1080.
Changing the stride updates the register but seems to have no effect even when the plane is disabled first.
I have a hunch that I need to disable & properly reconfigure the transcoder (and port?) first to make it work but I'd like to get some pointers first, since it's hard to tell if anything is working without any external serial or Ethernet ports to communicate.
My current code is here. It is very messy though.
I've also attached two diagrams from Volume 11 of the manual since it's part of what gives me the impression the pipe's source size can freely be adjusted.