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";
};
};

