Hello,
i try to set up a custom board (imx6q) with Windows IoT Core. Only the lvds display is not working under Windows. While booting u-boot, the display is running. I added the
[PcdsFeatureFlag.common]
giMX6TokenSpaceGuid.PcdLvdsEnable|TRUE
to the *.dsc file.
I also added the display timing settings in the display.c file
IMX_DISPLAY_TIMING Kyocera_TCG84 = {
40000000, // PixelClock, 40000000 33260160
800, // HActive
256, // HBlank, Whole line - HActive
600, // VActive
28, // VBlank Whole frame - VActive
128, // HSync - Sync pulse
4, // VSync - Sync pulse
40, // HSyncOffset; - front porch horizontal
1, // VSyncOffset; - front porch vertical
800, // HImageSize
600, // VImageSize
0, // HBorder
0, // VBorder
0, // EdidFlags
0, // Flags
1, // PixelRepetition
32, // Bpp
PIXEL_FORMAT_BGRA32, // PixelFormat
};
and changed this pointer:
*PreferredTimingPtr = Kyocera_TCG84;
The Debug Log seems like i would be initialized correct.
GopDxeInitialize: Enter <\r><\n>
**********************<\r><\n>
Preferred Timing<\r><\n>
**********************<\r><\n>
PixelClock 40000000<\r><\n>
HActive 800<\r><\n>
HBlank 256<\r><\n>
VActive 600<\r><\n>
VBlank 28<\r><\n>
HSync 128<\r><\n>
VSync 4<\r><\n>
HSyncOffset 40<\r><\n>
VSyncOffset 1<\r><\n>
HBorder 0<\r><\n>
VBorder 0<\r><\n>
EdidFlags 0<\r><\n>
Flags 0<\r><\n>
PixelRepetition 1<\r><\n>
BPP 32<\r><\n>
PixelFormat 1<\r><\n>
**********************<\r><\n>
GetPreferredTiming: --GetPreferredTiming<\r><\n>
GopDxeInitialize: - Allocate frame buffer<\r><\n>
GopDxeInitialize: Display Memory: Needed=1920000, Available=8388608<\r><\n>
GopDxeInitialize: - allocating frame buffer... <\r><\n>
AllocateFrameBuffer: Enter<\r><\n>
AllocateFrameBuffer: Frame Buffer AddrP=10000000h<\r><\n>
AllocateFrameBuffer: Frame Buffer Size=800000h<\r><\n>
AllocateFrameBuffer: Allocate FB PhyAddr 10000000 VirtAddr 10000000<\r><\n>
AllocateFrameBuffer: Exit = 0h<\r><\n>
GopDxeInitialize: - Initialize the frame buffer to green<\r><\n>
GopDxeInitialize: - set display configuration to single HDMI (DisplayDevice: 2)<\r><\n>
SetupDisplayMux: - GPR3_REG: 31457280<\r><\n>
ImxSetPll5ReferenceRate: PLL 5 setting (40000000) Target Freq 800000000 Divider 5 PostDiv 4<\r><\n>
ConfigureDisplayInterface: - DisplayInterfaceContextPtr->displayInterface: 0<\r><\n>
InstallProtocolInterface: 9042A9DE-23DC-4A38-96FB-7ADED080516A 4EE893B4<\r><\n>
InstallProtocolInterface: 09576E91-6D3F-11D2-8E39-00A0C969723B 4EE8939C<\r><\n>
GopDxeInitialize: Exit = 0h<\r><\n>
Do i need to enable or change something else?
Most of the registers are now like in the uboot. After checking and comparing the signals between uboot and uefi it seems that there is no data on the data lines while running uefi and Windows. Are there some registers that should also have been set in the uboot instead of the uefi?
I found the problem. I commented out "CONFIG_IMX_PERSIST_INIT=y" in my defconfig. After i reactived it, the LVDS display works.
I compared all registers that get changed by the edk2 and there where some differences. After that I changed the settings in the edk2 so that all registers have the same values like the uboot but the display won't work under Windows IoT and the edk2. Now I don't have any idea what can be wrong. The display works fine with the uboot and worked with windows ce that runs on our boards the last years so the hardware should not be a problem.
Hi Christian,
your method was correct. To enable LVDS instead of HDMI as default display you should indeed just change FALSE to TRUE in
giMX6TokenSpaceGuid.PcdLvdsEnable| TRUE
in
imx-edk2-platforms\Platform\NXP\Sabre_iMX6Q_1GB\Sabre_iMX6Q_1GB.dsc
This feature is tested and working properly on NXP SABRE boards (https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/sabre-board-for...)
Reasons for this issue could be numerous, from bad LVDS cables to incorrect HW setup or wrong parameters in timing. I would recommend to compare your design with reference board design. Sadly we don’t have any Kyocera LVDS Displays to help you with setup.
If you have more questions please feel free to ask.
Petr