Windows 10 IoT Enterprise on MX8MP for only LVDS output

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Windows 10 IoT Enterprise on MX8MP for only LVDS output

Jump to solution
13,542 Views
hankwang
Contributor V

Hello, I have a board with 8MP CPU and 4G DDR. I can boot to the screen below. But LVDS has no screen to display WinPE.

And follow user guide, I enable lvds0 in galcore.inf to 0x4.

Do you know where I need to modify the code for lvds0 only output?

Note: I tested my lvds panel, it can work on 8MP EVK board thought  mini-SAS to LVDS Panel. I thought my LVDS panel can work on Windows 10 IoT Enterprise.

hankwang_0-1691664081758.png

hankwang_1-1691664438956.png

 

 

0 Kudos
Reply
1 Solution
13,375 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

Hi @hankwang ,
There's a piece of code in UEFI that should set back-light GPIO pin to high.


mu_platform_nxp/NXP/MX8M_PLUS_EVK/Library/iMX8BoardLib/iMX8BoardInit.c

/* Configure GPIO1_IO10 = LVDS_EN as output with log. 1 */
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO10 = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0); /* ALT0 */
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO10 = LVDS_PAD_CTRL;
GPIO1_DR |= (0x01 << 10); // Set the pad to the high level
GPIO1_GDIR |= (0x01 << 10); // Set output direction
/* Configure GPIO1_IO11 = LVDS_BL_PWM as output with log. 1 */
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO11 = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0); /* ALT0 */
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11 = LVDS_PAD_CTRL;
GPIO1_DR |= (0x01 << 11); // Set the pad to the high level
GPIO1_GDIR |= (0x01 << 11); // Set output direction

 

View solution in original post

0 Kudos
Reply
21 Replies
13,274 Views
Dhruvit
NXP TechSupport
NXP TechSupport

Hi @hankwang,

I hope you are doing well.

->Use a standard HDMI cable to connect an HDMI-compatible display. It is necessary to update the Display0Interface parameter in the registry or galcore.inf to 0x4 and reboot/re-install the GPU driver (for more information, see i.MX Windows 10 IoT User’s Guide, IMXWGU)

->A single LVDS display (connected to LVDS0) and a dual LVDS display (connected to both LVDS0 and LVDS1) can be used. It is necessary to update the Display0Interface parameter in the registry or galcore.inf to 0x4 (single LVDS) or 0x6 (dual LVDS) for the Windows GPU driver and reboot/re-install the GPU driver (for more information, see i.MX Windows 10 IoT User’s Guide, IMXWGU).

Thanks & Regards,
Dhruvit Vasavada

0 Kudos
Reply
13,234 Views
hankwang
Contributor V

Thank you for reply.

I changed the value to LVDS display and reflashed the windows image to sd card. But I still don't display LVDS Screen.

0 Kudos
Reply
13,316 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

Hi @hankwang ,
I believe only completely installed Windows loads galcore.inf but not WinPe. WinPe most likely relies on initialization done by U-Boot or UEFI. Can you see U-Boot splash on your display when booting?

Frantisek

0 Kudos
Reply
13,266 Views
hankwang
Contributor V

Thanks for your reply

Here is my log file.

I can not see any splash on my screen(LVDS Panel) when booting. Panel is always dark.

I think  I need to modify uefi file for lvds display. Do you know where it can be modified?

0 Kudos
Reply
13,233 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

Hi @hankwang ,
saw two topics dealing with this U-Boot/UEFI modification. One seems to implement display initialization in U-Boot and disable part of our code in UEFI, the other seems to be just disabling the UEFI part.

https://community.nxp.com/t5/i-MX-Processors/Setting-LVDS-Display-mode-with-WinIot/m-p/1698842#M2102...

https://community.nxp.com/t5/i-MX-Processors/iMX8M-Mini-Windows-10-IoT-with-ili9811c-LCD-panel-displ...


In case you would like GPU acceleration a modification to galcore windows driver might be required in the future, but I am not sure about that.

Edit: Also because there's a chance of BSOD I'd recommend to hook up a WinDbg to WinPe. You either use make WinPe cmd script arguments or run BCDedit on BCD file stored on installation SDCard to enable that. For serial debugger you might need to slow down baudrate of UART in U-Boot.

0 Kudos
Reply
13,176 Views
hankwang
Contributor V

Thank you for this information.

How to check the backlight setting of LVDS? I enabled debug messages in UEFI and see this message:

Video Pll settings. Pll Rate = 519750000 Hz Pclk = 74250000 Hz.

Maybe I can make sure the LVDS signal is ok, but the backlight always dark. Where can I check the backlight parameters code in UEFI?

Thanks.

 

0 Kudos
Reply
13,376 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

Hi @hankwang ,
There's a piece of code in UEFI that should set back-light GPIO pin to high.


mu_platform_nxp/NXP/MX8M_PLUS_EVK/Library/iMX8BoardLib/iMX8BoardInit.c

/* Configure GPIO1_IO10 = LVDS_EN as output with log. 1 */
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO10 = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0); /* ALT0 */
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO10 = LVDS_PAD_CTRL;
GPIO1_DR |= (0x01 << 10); // Set the pad to the high level
GPIO1_GDIR |= (0x01 << 10); // Set output direction
/* Configure GPIO1_IO11 = LVDS_BL_PWM as output with log. 1 */
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO11 = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(0); /* ALT0 */
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO11 = LVDS_PAD_CTRL;
GPIO1_DR |= (0x01 << 11); // Set the pad to the high level
GPIO1_GDIR |= (0x01 << 11); // Set output direction

 

0 Kudos
Reply
13,153 Views
hankwang
Contributor V

Thank you very much for your reply. This is our pwm control for yocto.
But I modified PWMInit function and displayinit function. But the backlight is always dark.

Can you help me to check where still need to modify? And PWM2 pin is GPIO1_IO11 . This pin needs to be changed from GPIO to PWM. I want to know where can set default brightness level  and frequency  for PWM?

 

hankwang_0-1692094871810.png

 

 

 

0 Kudos
Reply
13,105 Views
hankwang
Contributor V

For PWM, I changed the PWM mode to GPIO mode and set it to high. The backlight can be turned on.

When PWM is in PWM mode, PWM cannot output duty cycle.

0 Kudos
Reply
13,144 Views
Frantisek_Prochaska
NXP Employee
NXP Employee
I don't know much about PWM. Will ask around if somebody can help you. However, GPIO works fine for checking the displayed image - Full brightness. This should be similar to 100% PWM.
0 Kudos
Reply
13,103 Views
hankwang
Contributor V

Thank you for your help.

For PWM, I changed the PWM mode to GPIO mode and set it to high. The backlight can be turned on.

When PWM is in PWM mode, PWM cannot output duty cycle. I do not know why.

0 Kudos
Reply
13,098 Views
Frantisek_Prochaska
NXP Employee
NXP Employee
Good, Thanks for feedback.
Did you also get an image on the display?
0 Kudos
Reply
13,094 Views
hankwang
Contributor V

Yes, I can briefly see the Windows logo, and then there's no display. I need to continue debugging.

0 Kudos
Reply
13,090 Views
Frantisek_Prochaska
NXP Employee
NXP Employee
Great!

It can be anything. WinDbg will tell you the most. But you can also check message from Dhruvit at this point (or comment out gfx.asl to be sure).
0 Kudos
Reply
13,084 Views
hankwang
Contributor V

Do you have documents about using WinDbg to connect to the i.MX8MP EVK board?
Here is a video. I think Windows crashed when activating WinPE.
https://streamable.com/xxtron

0 Kudos
Reply
13,076 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

There's ethernet debugger for which you need a dll and serial debugger. That kd_net.dll should be distributed by Microsoft at some point. Serial debugger works out of box (after enabling) on the same UART (COM port) as U-Boot console.
UART used to work fine at 921600 baud but after some Windows patches it needs to be run at 115200 (U-Boot sets baud-rate in this case). There's a possible workaround: People say 921600 works okay if you you open Virtualbox on the WinDbg PC.
To enable debugger for WinPe run BCDEDIT with store argument pointing to BCD file on SD card.

EDIT:
The bcdedit commands should look somewhat like this. Just form top of my head, not sure about ordering and slashes. : bcdedit /store .. /debug yes, or bcdedit /store ... /set {default} debug yes , bcdedit /store ... /dbgsettings serial, or /set {dbgsettings} serial - I'm very unsure. Maybe documentation or make_winpe.cmd can guide you.

0 Kudos
Reply
13,048 Views
hankwang
Contributor V

I activated the debugger mode for Windows Preinstallation Environment (WinPE) using a serial port. The screen freezes when attempting to boot into WinPE.

However, my Windows Debugger (WinDebug) always remains in a "waiting to reconnect" state. I have confirmed that WinPE is in debug mode.

I'm unsure why WinDebug is not establishing a connection with the 8MP EVK board.

When I close WinDebug, the 8MP EVK board successfully boots into WinPE.

Do you have any ideas?

Note: My WinDebug version is 10.0.22000.194 AMD64 (Administrator permissions) and baud rate is 921600. The port number is same as uboot port number.

0 Kudos
Reply
13,043 Views
hankwang
Contributor V

You mentioned "UART used to work fine at 921600 baud but after some Windows patches it needs to be run at 115200 (U-Boot sets baud-rate in this case). There's a possible workaround: People say 921600 works okay if you you open Virtualbox on the WinDbg PC."

I don't understand what you mean. Are you suggesting that WinDbg might not support a baud rate of 921600, and I might need to run WinDbg in a virtual machine to support 921600? is it right?

0 Kudos
Reply
12,914 Views
Frantisek_Prochaska
NXP Employee
NXP Employee

"Windows hangs when WinDbg is connected" - this is exact same behavior we observed at 921600 bauds. I guess it's caused by lack of flow control and loss of data on the bus.

The baudrate of U-Boot is set by "CONFIG_BAUDRATE=921600" in .config but thats regenrated over and over when you run buildme64.sh so you need to change that in uboot-imx/configs/imx8mp_evk_nt_uuu_defconfig (if you didn't rename that file).

0 Kudos
Reply
12,907 Views
hankwang
Contributor V

Hello, I have set the baud rate to 921600. I got some messages from windbg.

I posted another ticket. Please help to check it.

https://community.nxp.com/t5/i-MX-Processors/Cannot-boot-into-WinPe-for-Windows-10-IoT/m-p/1708060#M...