Other Parts Discussed in Thread: SK-AM62, SK-LCD1, SK-AM62B-P1
Tool/software:
I am trying to use dual OLDI displays on the AM6254ATCGGAALW.
I do not see tidss initializing upon boot as is stated in SDK documentation section 3.2.2.6. DSS subsection 3.2.2.6.6.1 and I dont see /dev/dri directory appear.
I'm using TISDK v09.01.00.08 (18 Dec 2023). I believe this version supports TIDSS and dual OLDI without the need for patches, correct?
I read these posts as reference when writing code:
AM625: OLDI driver or dts example
PROCESSOR-SDK-AM62X: how to enable LVDS in the kernel
I do see the following kernel message during boot:
root@am62xx-evm:~# dmesg | grep dss [ 11.746589] platform 30200000.dss: deferred probe pending
What mistakes am I making in my device tree or kernel .config?
Here are my relevant kernel configurations:
CONFIG_DRM_PANEL=y CONFIG_DRM_PANEL_LVDS=y CONFIG_DRM_PANEL_SIMPLE=y CONFIG_DRM_BRIDGE=y CONFIG_DRM_PANEL_BRIDGE=y CONFIG_DRM_TIDSS=y CONFIG_DRM_LEGACY=y CONFIG_DRM_NOMODESET=y CONFIG_FB_CMDLINE=y CONFIG_FB_NOTIFY=y CONFIG_FB=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_SYS_FILLRECT=m CONFIG_FB_SYS_COPYAREA=m CONFIG_FB_SYS_IMAGEBLIT=m CONFIG_FB_SYS_FOPS=m CONFIG_FB_DEFERRED_IO=y CONFIG_FB_MODE_HELPERS=y CONFIG_FB_SIMPLE=y CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_PWM=m CONFIG_VIDEOMODE_HELPERS=y
Here are my sections of relevant device tree code:
#include <dt-bindings/soc/ti,sci_pm_domain.h> #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include "k3-pinctrl.h" #include <dt-bindings/net/ti-dp83867.h> #include "k3-am625.dtsi" dss_oldi_io_ctrl: dss-oldi-io-ctrl@8600 { compatible = "syscon"; reg = <0x8600 0x200>; }; dss: dss@30200000 { compatible = "ti,am625-dss"; pinctrl-names = "default"; pinctrl-0 = <&main_oldi0_pins_default &main_oldi1_pins_default>; reg = <0x00 0x30200000 0x00 0x1000>, /* common */ <0x00 0x30201000 0x00 0x1000>, /* common1 */ <0x00 0x30202000 0x00 0x1000>, /* vidl1 */ <0x00 0x30206000 0x00 0x1000>, /* vid */ <0x00 0x30207000 0x00 0x1000>, /* ovr1 */ <0x00 0x30208000 0x00 0x1000>, /* ovr2 */ <0x00 0x3020a000 0x00 0x1000>, /* vp1: Used for OLDI */ <0x00 0x3020b000 0x00 0x1000>; /* vp2: Used as DPI Out */ reg-names = "common", "common1", "vidl1", "vid", "ovr1", "ovr2", "vp1", "vp2"; ti,am65x-oldi-io-ctrl = <&dss_oldi_io_ctrl>; power-domains = <&k3_pds 67 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 67 1>, <&k3_clks 216 1>, <&k3_clks 67 2>; clock-names = "fck", "vp1", "vp2"; interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>; dss_ports: ports { #address-cells = <1>; #size-cells = <0>; /* VP1: LVDS Output (OLDI TX 0) */ port@0 { reg = <0>; oldi_out0: endpoint { remote-endpoint = <&lcd_in0>; }; }; /* VP1: LVDS Output (OLDI TX 1) */ port@2 { reg = <2>; oldi_out1: endpoint { remote-endpoint = <&lcd_in1>; }; }; }; }; /* * Note that the OLDI TX 0 transmits the odd set of pixels * while the OLDI TX 1 transmits the even set. This is a * fixed configuration in the IP integration and is not * changeable. The properties, "dual-lvds-odd-pixels" and * "dual-lvds-even-pixels" have been used to merely * identify if a Dual Link configuration is required. * Swapping them will not make any difference. */ port@0 { dual-lvds-odd-pixels; lcd_in0: endpoint { remote-endpoint = <&oldi_out0>; }; }; port@1 { dual-lvds-even-pixels; lcd_in1: endpoint { remote-endpoint = <&oldi_out1>; }; }; chosen { #address-cells = <2>; #size-cells = <2>; ranges; stdout-path = "serial2:115200n8"; bootargs = "console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000"; framebuffer0: framebuffer@0 { compatible = "simple-framebuffer"; power-domains = <&k3_pds 67 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 67 1>, <&k3_clks 216 1>, <&k3_clks 67 2>; display = <&dss>; reg = <0x00 0xff700000 0x00 0x008ca000>; width = <1920>; height = <1200>; stride = <(1920 * 4)>; format = "x8r8g8b8"; }; };