2023-05-25 05:48 AM
Hey there,
I am working with a custom board based on an OSD32MP157F SoM. The pinout is very similar with the DK2 board with some minor differences, mainly the DSI_RESET pin. I have done several tests on STM32MP157f-dk2 boards with an eDP display that connects through a MIPI/eDP bridge to the DSI port of the DK. This works fine for a while now.
In the custom board I do not have included any ltdc peripheral as I thought that it is not needed for driving the DSI bridge. I made a new image with the corresponding pinout and the bridge i2c driver initializes normally as seen in the bootlog.
[ 1.735336] lt8911exb 0-0029: Success request pwr-gpio
[ 1.740362] lt8911exb 0-0029: Success request rst-gpio
[ 1.747446] lt8911exb 0-0029: LT8911EXB i2c test success chipid: 0xe0517
[ 1.785822] lt8911exb 0-0029: LT8911 tx pll locked
[ 1.833083] lt8911exb 0-0029: video check: Vtotal = 0
[ 1.838486] lt8911exb 0-0029: video check: Hact(word counter) = 0
[ 1.844158] lt8911exb 0-0029: video check: Vact = 0
[ 2.143622] lt8911exb 0-0029: LT8911EXB setup finish.
But when I try "modtest -M stm" I get a
failed to open device 'stm': No such file or directory
I investigated the entries in /dev and there is no drm entry either.
During troubleshooting I found this post from a few years ago that shows great similarities with my current issue. Looking at the LTDC wiki I can see that the LTDC binds to the DRM/KMS framework. My main hypothesis at the moment is that the DRM framework never initializes since there is no LTDC entry or peripheral. I was wondering if this hypothesis is correct and if yes if there are any ways of using the DRM framework only for DSI.
I attach some parts of the device tree here in case they are helpful. Any ideas or suggestions are highly appreciated
Solved! Go to Solution.
2023-05-25 08:11 AM - edited 2023-11-20 04:35 AM
Hi @KChar.1 ,
DSI get their pixel internally from LTDC, so LTDC is mandatory (without any pins if used with DSI).
I'n not DT expert, but you might have a look to https://wiki.st.com/stm32mpu/wiki/LTDC_device_tree_configuration with examples used for DK2 boards
Note that on our boards, we usually define the LTDC pins as we have the options to use // display (e.g. for RGB->HDMI bridge)
Regards
2023-05-25 08:11 AM - edited 2023-11-20 04:35 AM
Hi @KChar.1 ,
DSI get their pixel internally from LTDC, so LTDC is mandatory (without any pins if used with DSI).
I'n not DT expert, but you might have a look to https://wiki.st.com/stm32mpu/wiki/LTDC_device_tree_configuration with examples used for DK2 boards
Note that on our boards, we usually define the LTDC pins as we have the options to use // display (e.g. for RGB->HDMI bridge)
Regards
2023-05-25 09:04 AM
Hey @PatrickF , thank you so much for this! Indeed I was confusing the hdmi_transmitter with the LTDC. I declared the ltdc without any pins on my DT and I can see that modetest -M works but it can not find any panels:
Encoders:
id crtc type possible crtcs possible clones
Connectors:
id encoder status name size (mm) modes encoders
CRTCs:
id fb pos size
35 0 (0,0) (0x0)
#0 nan 0 0 0 0 0 0 0 0 0 flags: ; type:
props:
24 VRR_ENABLED:
flags: range
values: 0 1
value: 0
28 GAMMA_LUT:
flags: blob
blobs:
value:
29 GAMMA_LUT_SIZE:
flags: immutable range
values: 0 4294967295
value: 256
Planes:
id crtc fb CRTC x,y x,y gamma size possible crtcs
31 0 0 0,0 0,0 0 0x00000001
formats: AR24 XR24 RG24 RG16 AR15 XR15 AR12 XR12 C8
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 1
30 IN_FORMATS:
flags: immutable blob
blobs:
value:
01000000000000000900000018000000
01000000400000004152323458523234
52473234524731364152313558523135
41523132585231324338202000000000
ff010000000000000000000000000000
0000000000000000
in_formats blob decoded:
AR24: LINEAR
XR24: LINEAR
RG24: LINEAR
RG16: LINEAR
AR15: LINEAR
XR15: LINEAR
AR12: LINEAR
XR12: LINEAR
C8 : LINEAR
33 alpha:
flags: range
values: 0 65535
value: 65535
34 zpos:
flags: immutable range
values: 0 0
value: 0
36 0 0 0,0 0,0 0 0x00000001
formats: AR24 RG24 RG16 AR15 AR12 C8
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 0
30 IN_FORMATS:
flags: immutable blob
blobs:
value:
01000000000000000600000018000000
01000000300000004152323452473234
52473136415231354152313243382020
3f000000000000000000000000000000
0000000000000000
in_formats blob decoded:
AR24: LINEAR
RG24: LINEAR
RG16: LINEAR
AR15: LINEAR
AR12: LINEAR
C8 : LINEAR
38 alpha:
flags: range
values: 0 65535
value: 65535
39 zpos:
flags: immutable range
values: 1 1
value: 1
Frame buffers:
id size pitch
When I try to load the panel manually with
# modprobe panel-orisetech-otm8009a
I get no errors.
I can see that there are no connectors on the modetest which makes me think that the dsi is not recognised. I leave my dsi dt entry below:
&dsi {
status = "okay";
ports {
port@0 {
reg = <0>;
dsi_in: endpoint {
remote-endpoint = <<dc_ep1_out>;
//remote-endpoint = <&dsi_in>;
};
};
port@1 {
reg = <1>;
dsi_out: endpoint {
remote-endpoint = <&panel_in>;
};
};
};
panel_otm8009a: panel-otm8009a@0 {
compatible = "orisetech,otm8009a";
reg = <0>;
reset-gpios = <&gpioe 9 GPIO_ACTIVE_LOW>;
power-supply = <&v3v3>;
status = "okay";
port {
panel_in: endpoint {
remote-endpoint = <&dsi_out>;
};
};
};
};
Any ideas on how to continue troubleshooting the issue?
2023-05-25 11:53 AM
I looked a bit closer to this and I realized that after changing the ldtc entry I forgot to change the DSI_RST entry to the correct config. Works fine now! Thank you so much @PatrickF