Hello,
First, your overall approach seems correct. Using TorizonCore Builder’s build command with a tcbuild.yaml that defines the splash screen and the overlays to add or remove, followed by deployment over SSH with deploy --reboot, is the recommended workflow for preparing a production image. There should be no need to change that part of the process.
One correction regarding the previous Toradex AI suggestion is that changing the overlay to target &panel_dpi does not apply in this case, as your overlay already targets that node correctly. Therefore, this does not appear to be a device tree syntax issue.
The clock-frequency property is stored as a plain integer in the device tree. When dtc compiles the overlay, it should preserve that value regardless of whether the compilation is performed directly or through TorizonCore Builder. In other words, the build process itself should not change 33300000 into another frequency.
One of the first possibilities to verify is whether the manually installed .dtbo that works and the .dts currently passed to TorizonCore Builder contain different timing values. The source you shared also makes this worth checking, since the following line shows that at least two clock values were tested at some point:
clock-frequency = <33300000>; // <25165392>
You can verify this by decompiling the working binary overlay and comparing it with the source used by TorizonCore Builder.
First, decompile the .dtbo that works:
dtc -I dtb -O dts \ colibri-imx7_panel-res-touch-7inch_overlay.dtbo \ -o working.dts
Then compare the panel-timing block in working.dts with the corresponding block in the .dts passed to TorizonCore Builder. In particular, check:
clock-frequency
hactive and vactive
hsync-len, hfront-porch, and hback-porch
vsync-len, vfront-porch, and vback-porch
If any of these values differ, update the source used by TorizonCore Builder with the values from working.dts, then rebuild and deploy the image. This should make the generated overlay match the one that is already working correctly.
You can also confirm whether the overlay was applied by reading the following property on the target:
cat /proc/device-tree/chosen/overlays/colibri-imx7_panel-res-touch-7inch_overlay.dtbo
A value of 0 indicates that U-Boot applied the overlay successfully. However, this only confirms that the overlay was applied; it does not confirm that the applied file contains the expected timing values.
If the two panel-timing blocks are identical and the display still behaves differently, the next step would be to compare the working .dtbo with the .dtbo generated by TorizonCore Builder and check the final list and order of overlays applied by the image.
In that case, please attach the working .dtbo, the generated .dtbo, and the final overlay configuration so we can investigate further.
Rafael Savitsky
Toradex
Hello,
First, your overall approach seems correct. Using TorizonCore Builder’s build command with a tcbuild.yaml that defines the splash screen and the overlays to add or remove, followed by deployment over SSH with deploy --reboot, is the recommended workflow for preparing a production image. There should be no need to change that part of the process.
One correction regarding the previous Toradex AI suggestion is that changing the overlay to target &panel_dpi does not apply in this case, as your overlay already targets that node correctly. Therefore, this does not appear to be a device tree syntax issue.
The clock-frequency property is stored as a plain integer in the device tree. When dtc compiles the overlay, it should preserve that value regardless of whether the compilation is performed directly or through TorizonCore Builder. In other words, the build process itself should not change 33300000 into another frequency.
One of the first possibilities to verify is whether the manually installed .dtbo that works and the .dts currently passed to TorizonCore Builder contain different timing values. The source you shared also makes this worth checking, since the following line shows that at least two clock values were tested at some point:
clock-frequency = <33300000>; // <25165392>
You can verify this by decompiling the working binary overlay and comparing it with the source used by TorizonCore Builder.
First, decompile the .dtbo that works:
dtc -I dtb -O dts \ colibri-imx7_panel-res-touch-7inch_overlay.dtbo \ -o working.dts
Then compare the panel-timing block in working.dts with the corresponding block in the .dts passed to TorizonCore Builder. In particular, check:
clock-frequency
hactive and vactive
hsync-len, hfront-porch, and hback-porch
vsync-len, vfront-porch, and vback-porch
If any of these values differ, update the source used by TorizonCore Builder with the values from working.dts, then rebuild and deploy the image. This should make the generated overlay match the one that is already working correctly.
You can also confirm whether the overlay was applied by reading the following property on the target:
cat /proc/device-tree/chosen/overlays/colibri-imx7_panel-res-touch-7inch_overlay.dtbo
A value of 0 indicates that U-Boot applied the overlay successfully. However, this only confirms that the overlay was applied; it does not confirm that the applied file contains the expected timing values.
If the two panel-timing blocks are identical and the display still behaves differently, the next step would be to compare the working .dtbo with the .dtbo generated by TorizonCore Builder and check the final list and order of overlays applied by the image.
In that case, please attach the working .dtbo, the generated .dtbo, and the final overlay configuration so we can investigate further.
Rafael Savitsky
Toradex