U-Boot IPU_PIX_FMT_BGR24 pixfmt

I have a Colibri iMX6DL 512MB V1.0A installed on a custom carrier board. The carrier boards connects to a 4.3 inch 480x272 display with a 24-bit parallel RGB interface. I have initially added a new display to the U-Boot colibri_imx6.c display_info_t structure with the pixfmt set to IPU_PIX_FMT_RGB24 and the display shows the Toradex logo but the colors are swapped. I changed the pixfmt to IPU_PIX_FMT_BGR24 and the display does not show the logo and appears to be functioning with incorrect timing settings. I have also created a custom device tree for this board in the Linux Kernel. I set the mxcfb1 interface_pix_fmt to BGR24 and the lcd default_ifmt to BGR24. When the Linux Kernel boots the colors are correct.

I did modify the U-Boot colibri_imx6.c file to add the iomux settings for IPU1_DISP0_DATA18 thru IPU1_DISP0_DATA23. I also changed to IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT and IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT.

Is there something else that needs to be changed in U-Boot to make the IPU operate in BGR mode to swap the colors?


I solved this issue by comparing the source for the Linux Kernel to U-Boot. There were several differences but I found that I only needed to modify the code in ipu_disp.c. After this the U-boot splash image displayed with the correct colors using IPU_PIX_FMT_BGR24.link text