This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM3358: NO HDMI display

Part Number: AM3358
Other Parts Discussed in Thread: TS3DV642, TS3DV642EVM

Tool/software: Linux

Hi All,

I have a custom board based on beaglebone's design with AM3358. I am using Sitara sdk 05.00.00.15. On my HDMI, I am only getting an output when I connect to a 32" tv or smaller displays, but when I connect to a 50" tv then it does not give any display. Plus, red and blue color also show up inverted on the 32" or any smaller size displays.

I have tried solutions mentioned in this link but it didn't work: 

What can cause this kind of issue?

Any help would be greatly appreciated.

  • Hello,

    Please refer the below guide:
    software-dl.ti.com/.../Foundational_Components_Graphics.html
    Chapter 3.9.10

    Hope this helps.

    BR
    Margarita
  • I have already gone through all of this and it did not help.

    I would really appreciate if you can suggest anything else.

    Thank you

  • Hello,

    Samer Abbas said:
    . Plus, red and blue color also show up inverted on the 32" or any smaller size displays.

    Did you made this changes about this issue:

    • /etc/powervr.ini: add DefaultPixelFormat=RGB565
    • /etc/weston.ini: add gbm-format=rgb565 at section [core]
    • /etc/profile.d/qt_env.sh: add export QT_QPA_EGLFS_INTEGRATION=none

    In uboot:

    => setenv optargs video=HDMI-A-1:1024x768
    => saveenv
    
    and in weston.ini
    [output]
    name=HDMI-A-1
    mode=1024x768

    Please take a look into this thread:
    https://e2e.ti.com/support/processors/f/791/p/601230/2231689#2231689

    Note: Another restriction of AM335x-based platform is that the width of display resolution must be multiple of 32
    Samer Abbas said:
    but when I connect to a 50" tv then it does not give any display

    What modetest demo shows?
    Please check the HDMI port on the display.

    Hope this helps.

    BR

    Margarita

  • Margarita Gashova said:

    Did you made this changes about this issue:

    • /etc/powervr.ini: add DefaultPixelFormat=RGB565
    • /etc/weston.ini: add gbm-format=rgb565 at section [core]
    • /etc/profile.d/qt_env.sh: add export QT_QPA_EGLFS_INTEGRATION=none

    In uboot:

    => setenv optargs video=HDMI-A-1:1024x768
    => saveenv
    
    and in weston.ini
    [output]
    name=HDMI-A-1
    mode=1024x768

    Yes I have already made these changes but nothing worked.

    Margarita Gashova said:

    Please take a look into this thread:
    https://e2e.ti.com/support/processors/f/791/p/601230/2231689#2231689

    I have tried changing blue-and-red-wiring = "crossed" in the device tree. It changes to rgb888 mode, but the colors still remain the same. As you can see in your suggested thread, the other user was also not able to change HDMI colors. Adding blue-and-red-wiring = crossed only swaps colors for lcd displays but it is not working for HDMI. I have tested on multiple Samsung, LG and Vizio TVs and I have gotten same results.

    Any other suggestions?

    Thanks!

  • This is my modetest with 50inch tv which doesn't show any display: 

    root@am335x-evm:~# modetest
    trying to open device 'i915'...failed
    trying to open device 'amdgpu'...failed
    trying to open device 'radeon'...failed
    trying to open device 'nouveau'...failed
    trying to open device 'vmwgfx'...failed
    trying to open device 'omapdrm'...failed
    trying to open device 'exynos'...failed
    trying to open device 'tilcdc'...done
    Encoders:
    id crtc type possible crtcs possible clones
    29 28 TMDS 0x00000001 0x00000000

    Connectors:
    id encoder status name size (mm) modes encoders
    30 29 connected HDMI-A-1 1100x620 19 9
    modes:
    name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
    1920x1080 24 1920 2558 2602 2750 1080 1084 1089 1125 74250 flags: phsync, pvsr
    1920x1080 24 1920 2558 2602 2750 1080 1084 1089 1125 74176 flags: phsync, pvsr
    1280x720 60 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync; r
    1280x720 60 1280 1390 1430 1650 720 725 730 750 74176 flags: phsync, pvsync; r
    1024x768 75 1024 1040 1136 1312 768 769 772 800 78750 flags: phsync, pvsync; r
    1024x768 70 1024 1048 1184 1328 768 771 777 806 75000 flags: nhsync, nvsync; r
    1024x768 60 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; r
    1440x480i 60 1440 1478 1602 1716 480 488 494 525 27000 flags: nhsync, nvsync,r
    800x600 75 800 816 896 1056 600 601 604 625 49500 flags: phsync, pvsync; typer
    800x600 72 800 856 976 1040 600 637 643 666 50000 flags: phsync, pvsync; typer
    800x600 60 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; typer
    720x480 60 720 736 798 858 480 489 495 525 27027 flags: nhsync, nvsync; type:r
    720x480 60 720 736 798 858 480 489 495 525 27000 flags: nhsync, nvsync; type:r
    720x480i 60 720 739 801 858 480 488 494 525 13514 flags: nhsync, nvsync, inter
    720x480i 60 720 739 801 858 480 488 494 525 13500 flags: nhsync, nvsync, inter
    640x480 75 640 656 720 840 480 481 484 500 31500 flags: nhsync, nvsync; type:r
    640x480 60 640 656 752 800 480 490 492 525 25200 flags: nhsync, nvsync; type:r
    640x480 60 640 656 752 800 480 490 492 525 25175 flags: nhsync, nvsync; type:r
    720x400 70 720 738 846 900 400 412 414 449 28320 flags: nhsync, pvsync; type:r
    props:
    1 EDID:
    flags: immutable blob
    blobs:

    value:
    00ffffffffffff00593a041001010101
    00180103806e3e782a97dda45651a124
    0a474aa5ce0001010101010101010101
    010101010101023a801871382d40582c
    450047684200001e6419004041002630
    18883600476842000018000000fc0045
    353030692d42310a20202020000000fd
    00384c1f500f000a20202020202001a7
    02032171490106070203059004202609
    07071507508301000067030c00100000
    1e023a801871382d40582c4500476842
    00001e011d007251d01e206e28550047
    684200001e8c0aa01451f01600267c43
    00476842000098000000000000000000
    00000000000000000000000000000000
    000000000000000000000000000000c9
    2 DPMS:
    flags: enum
    enums: On=0 Standby=1 Suspend=2 Off=3
    value: 0
    5 link-status:
    flags: enum
    enums: Good=0 Bad=1
    value: 0

    CRTCs:
    id fb pos size
    28 48 (0,0) (1024x768)
    1024x768 75 1024 1040 1136 1312 768 769 772 800 78750 flags: phsync, pvsync; r
    props:

    Planes:
    id crtc fb CRTC x,y x,y gamma size possible crtcs
    27 28 48 0,0 0,0 0 0x00000001
    formats: RG16 BG24 XB24
    props:
    6 type:
    flags: immutable enum
    enums: Overlay=0 Primary=1 Cursor=2
    value: 1

    Frame buffers:
    id size pitch

    Following is my modetest with 32inch tv which gives red and blue inverted:

    root@am335x-evm:~# modetest
    trying to open device 'i915'...failed
    trying to open device 'amdgpu'...failed
    trying to open device 'radeon'...failed
    trying to open device 'nouveau'...failed
    trying to open device 'vmwgfx'...failed
    trying to open device 'omapdrm'...failed
    trying to open device 'exynos'...failed
    trying to open device 'tilcdc'...done
    Encoders:
    id crtc type possible crtcs possible clones
    29 28 TMDS 0x00000001 0x00000000

    Connectors:
    id encoder status name size (mm) modes encoders
    30 29 connected HDMI-A-1 1600x900 16 9
    modes:
    name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
    1360x768 60 1360 1424 1536 1792 768 771 777 795 85500 flags: phsync, pvsync; r
    1920x1080 30 1920 2008 2052 2200 1080 1084 1089 1125 74250 flags: phsync, pvsr
    1920x1080 30 1920 2008 2052 2200 1080 1084 1089 1125 74176 flags: phsync, pvsr
    1920x1080 24 1920 2558 2602 2750 1080 1084 1089 1125 74250 flags: phsync, pvsr
    1920x1080 24 1920 2558 2602 2750 1080 1084 1089 1125 74176 flags: phsync, pvsr
    1152x864 60 1152 1216 1336 1520 864 865 868 895 81579 flags: nhsync, pvsync;
    1280x720 60 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync; r
    1280x720 60 1280 1390 1430 1650 720 725 730 750 74176 flags: phsync, pvsync; r
    1024x768 60 1024 1048 1184 1344 768 771 777 806 65000 flags: phsync, pvsync; r
    1024x768 60 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; r
    800x600 60 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; typer
    720x480 60 720 736 798 858 480 489 495 525 27027 flags: nhsync, nvsync; type:r
    720x480 60 720 736 798 858 480 489 495 525 27000 flags: nhsync, nvsync; type:r
    640x480 60 640 656 752 800 480 490 492 525 25200 flags: nhsync, nvsync; type:r
    640x480 60 640 656 752 800 480 490 492 525 25175 flags: nhsync, nvsync; type:r
    720x400 70 720 738 846 900 400 412 414 449 28320 flags: nhsync, pvsync; type:r
    props:
    1 EDID:
    flags: immutable blob
    blobs:

    value:
    00ffffffffffff001e6d010001010101
    0117010380a05a780aee91a3544c9926
    0f5054a1080031404540614071400101
    010101010101662150b051001b304070
    360040846300001e6419004041002630
    1888360040846300001e000000fd003a
    3e1e5310000a202020202020000000fc
    004c472054560a202020202020200170
    020319f1481022200584030201230957
    0767030c002000801e023a801871382d
    40582c040540846300001e011d801871
    1c1620582c250040846300009e011d00
    7251d01e206e28550040846300001e8c
    0ad08a20e02d10103e96004084630000
    18000000000000000000000000000000
    000000000000000000000000000000f8
    2 DPMS:
    flags: enum
    enums: On=0 Standby=1 Suspend=2 Off=3
    value: 0
    5 link-status:
    flags: enum
    enums: Good=0 Bad=1
    value: 0

    CRTCs:
    id fb pos size
    28 42 (0,0) (1024x768)
    1024x768 60 1024 1048 1184 1344 768 771 777 806 65000 flags: phsync, pvsync; r
    props:

    Planes:
    id crtc fb CRTC x,y x,y gamma size possible crtcs
    27 28 42 0,0 0,0 0 0x00000001
    formats: RG16 BG24 XB24
    props:
    6 type:
    flags: immutable enum
    enums: Overlay=0 Primary=1 Cursor=2
    value: 1

    Frame buffers:
    id size pitch

    Please let me know your thoughts!

    Thanks

  • Hello,

    Thank you!
    On first look the only difference that I see is :
    for 50" 1024x768 75 1024 1040 1136 1312 768 769 772 800 78750 and for 32" 1024x768 60 1024 1048 1184 1344 768 771 777 806 65000 .
    Let us check.
    We will get back to you.

    BR
    Margarita
  • I see you are reporting two problems - 

    1.  In 32" mode TV, the colors are inverted
    2. 50" TVs don't work

    Let's first focus to get the color problem resolved for 32" TV.

    Please share your  dts settings on the blue-and-red-wiring.  With the "straight" setting, AM3 supports RGB565, BGR888, and XBGR8888. 

    If an app uses RGB565, it looks correct. If an app uses XBGR8888, but draws XRGB8888, it has R and B swapped.

    Please kill Weston (if you are running same) and run below application -

    #kmsprint

    #kmstest -f RG16

    #kmstest -f XR24

    #kmstest -f BG16

    #kmstest -f XB2

    and share the output. 

    Please check this post on how I would like to see the output 

  • manisha said:

    Please share your  dts settings on the blue-and-red-wiring.  With the "straight" setting, AM3 supports RGB565, BGR888, and XBGR8888. 

    If an app uses RGB565, it looks correct. If an app uses XBGR8888, but draws XRGB8888, it has R and B swapped.

    I am just using the am335x-boneblack.dtb which comes with TI SDK in /boot folder of rootfs.

    manisha said:

    Please kill Weston (if you are running same) and run below application -

    #kmsprint

    #kmstest -f RG16

    #kmstest -f XR24

    #kmstest -f BG16

    #kmstest -f XB2

    root@am335x-evm:~# kmsprint
    Connector 0 (30) HDMI-A-1 (connected)
    Encoder 0 (29) TMDS
    Crtc 0 (28) 1360x768 85.500 1360/64/112/256 768/3/6/18 60 (60.02)
    Plane 0 (27) fb-id: 35 (crtcs: 0) 0,0 1360x768 -> 0,0 1360x768 (RG16 BG24 XB24)
    FB 35 1360x768

    root@am335x-evm:~# kmstest -f RG16
    Connector 0/@30: HDMI-A-1
    Crtc 0/@28 (plane 0/@27): 1360x768 85.500 1360/64/112/256 768/3/6/18 60 (60.02) 0x5 0x48
    Fb 41 1360x768-RG16
    press enter to exit

    root@am335x-evm:~# kmstest -f XR24
    [ 295.812574] alloc_contig_range: [9d300, 9d6fc) PFNs busy
    [ 295.818729] alloc_contig_range: [9d400, 9d7fc) PFNs busy
    [ 295.824471] alloc_contig_range: [9d400, 9d8fc) PFNs busy
    [ 295.838396] alloc_contig_range: [9d600, 9d9fc) PFNs busy
    Could not get primary plane for crtc '28'

    root@am335x-evm:~# kmstest -f BG16
    Could not get primary plane for crtc '28'

    root@am335x-evm:~# kmstest -f XB2
    Failed to parse fb option 'XB2'

  • Hi Manisha,

    So I fixed the color invert issue. In the device tree, I just removed the line blue-and-red-wiring="straight", and got the correct colors. I ran kmstest and found out that my board gives correct colors with RG24. Here is my output for kmtest:

    root@am335x-evm:~# kmsprint
    Connector 0 (30) HDMI-A-1 (connected)
    Encoder 0 (29) TMDS
    Crtc 0 (28) 1360x768 85.500 1360/64/112/256 768/3/6/18 60 (60.02)
    Plane 0 (27) fb-id: 35 (crtcs: 0) 0,0 1360x768 -> 0,0 1360x768 (RG16 RG24 XR24)
    FB 35 1360x768

    root@am335x-evm:~# kmstest -f RG24
    Connector 0/@30: HDMI-A-1
    Crtc 0/@28 (plane 0/@27): 1360x768 85.500 1360/64/112/256 768/3/6/18 60 (60.02) 0x5 0x48
    Fb 33 1360x768-RG24
    press enter to exit

     

    My bigger problem still exists as I am not able to get HDMI working on 50inch tv. 


    Also I am now seeing a purple color line on the left border of the display. The line starts showing as soon as Kernel starts loading, and stays there. You can see the purple line in the image below.

    But still by bigger problem is HDMI output not working with 50inch tv. I would really appreciate if you can help me out with this.

    Thank you

  • Hi,

    Glad you are able to fix the inverted color issue. Rather removing the blue-and-red-wiring="straight", you can also solve it by doing below settings.  

    blue-and-red-wiring = "crossed";

    For the 50" TV problem, it might be possible that the TV is not able to show all the modes that it advertises. You may want to try  specifying the used video mode to some standard mode that is supported by tilcdc, for instance 1280x720@60Hz.

    For frame-buffer-console that can be set by adding "video=HDMI-A-1:1280x720@60" to the kernel command line.

    Regards,

    Manisha

  • Hi Manisha,

    I tried blue-and-red-wiring = "crossed" but for some reason it did not work for me.

    I have tried 1280x720@60Hz, but it did not work with my custom board. The same PSDK image gives the HDMI output on 50 inch tv with beaglebone.
    What would cause this issue?

    Thank you
  • I would really appreciate if anyone can please help me resolve this issue. As HDMI display on all different types of TVs is very critical part of my application.

    One thing I would like to mention is, I am also using TS3DV642 as a HDMI switch at the output. TS3DV642 switches between output from TDA19988 and an incoming HDMI input from a laptop. 

    I am not sure if TS3DV642 is causing AM3358 not to output with the 50 inch tv or is it something else that's not working right.

    Please suggest anything.

    Thank you 

  • Samer,

    I do not recall seeing any discussion where you attempted to separate hardware from software issues.  My expertise is hardware.  You state that your custom board operates with a 32" TV and not with a 50" TV using an HDMI interface.  Do you see this on all prototypes?  How many have you built and how many have you tested?

    You state that you have a Beagle board.  Can you drive both 32" TVs and 50" TVs correctly from the Beagle board with the demo software?  If so, can you port the display portion of your code to run on the Beagle board to see if it still works with both TV sizes?

    Tom

  • Tom,

    My apologies for not discussing my hardware before.

    Tom Johnson 16214 said:

    You state that your custom board operates with a 32" TV and not with a 50" TV using an HDMI interface.  Do you see this on all prototypes?  How many have you built and how many have you tested?

    I have 3 prototypes and all of them are showing the same results.

    Tom Johnson 16214 said:

    You state that you have a Beagle board.  Can you drive both 32" TVs and 50" TVs correctly from the Beagle board with the demo software?  If so, can you port the display portion of your code to run on the Beagle board to see if it still works with both TV sizes?

    Yes I can drive both the 32" and 50" TVs correctly with beagle board with demo software. And yes I have tested the display portion of my code and it runs fine with both the TVs on beagle board.

  • Samer,

    That does appear to indicate a hardware design issue.  Please explain the differences between your design and the Beagle design regarding the HDMI interface.  Can you attach the HDMI portion of your schematic?  Be sure to include the connector, the HDMI switch, all isolation and level translation circuitry as well as the I2C control and level shifting circuitry.

    Tom

  • Tom,

    I am also using TDA19988 similar to beaglebone black with 16bpp mode. The output from TDA19988 in beagle goes directly to HDMI micro connector, but in my custom board the output goes to TS3DV642.

    TS3DV642 also has another input coming from a HDMI connector, and the output of TS3DV642 goes to a HDMI connector. The purpose of TS3DV642 is to switch between HDMI Inputs. The switching is controlled through a GPIO1_28 in AM3358.

    Here is my HDMI schematics:

      

    HDMI Switch schematics:

    Thanks

    TS3DV642

  • Samer,

    Do you see the same behavior when operating the 2 TV sizes at the lowest common frame rate and resolution?  What is the lowest common frame rate and resolution?  Do you see this same slower frame rate and resolution work with both TVs using the Beagle board?

    Tom

  • Tom,

    I am using default 1024x768@60, which works on beagle board with both the TVs, but on my custom board it only works with 32" TV. I have tried with multiple 50", 55" and 60" TVs of different brands and they all do not work with my board, where as they all work with beagle.

    I have also tried different resolutions supported by TDA19988 and tilcdc drivers, but none of them worked on my custom board with a 50" or bigger TV.

    Samer
  • Samer,

    Is there a lower frame rate or resolution option that is commonly supported? 1024x768@60 is still a high data rate. I am trying to understand if this is related to signal integrity of the implementation or whether this is an interconnect error. I did not see anything obviously wrong by looking at the schematic segments provided.

    Tom

  • Tom,

    Following are all the supported resolutions: 

    1920x1080@30
    1920x1080@24 (Audio)
    1324x768@60
    1280x1024@60
    1280x800@60
    1280x768@60
    1280x720@60 (Audio)
    1152x864@75
    1024x768@76
    1024x758@60
    800x600@60
    800x600@75
    640x480@75

    I have tried pretty much all of them and they did not work on 50" TV. On my PCB design, I did make sure to have 100ohm impedance on HDMI differential pairs.

    Thank you 

  • Samer,

    Have you verified the control channel?  When using the smaller TVs, do you see the resolution changing when you plug in the TV based on capabilities settings on the TV?  The HDMI interface supports hot-plug and capabilities negotiation.  Do you know if this is functional?  Can you monitor the I2C with a protocol analyzer to verify that the processor is communicating with the TVs?

    Is the HDMI interface on the larger TVs a different version from the one on the smaller TVs?  If so, do you know what is different?

    Tom

  • Tom Johnson 16214 said:

    Have you verified the control channel? 

    Can you explain which control channel?

    Tom Johnson 16214 said:

    When using the smaller TVs, do you see the resolution changing when you plug in the TV based on capabilities settings on the TV?  The HDMI interface supports hot-plug and capabilities negotiation.  Do you know if this is functional? 

    I can force the resolution or I can have my board pick the best compatible resolution based on TV's EDID information. Yes I do see the resolution changing when I let my board pick the resolution. For 32" TV it changes to 1360x768@60 and it works fine. For 50" TV it changes to 1920x1080@24 which works fine on beagle but not on my custom board.

    And yes hot-plug is functional.

    Tom Johnson 16214 said:

    Can you monitor the I2C with a protocol analyzer to verify that the processor is communicating with the TVs?

    I don't have a protocol analyzer to test that, but I was able to get EDID from both the TV's which should confirm that its communicating.

    Tom Johnson 16214 said:

    Is the HDMI interface on the larger TVs a different version from the one on the smaller TVs?  If so, do you know what is different?

    I am not sure if they are different versions, as smaller TV was manufactured in 2013 and 50" TV was manufactured in 2015.

    Thank you

  • Samer,

    Can you get correct functionality on the pass-through channel (HDMI_in to HDMI_out through the mux)?  Does it work with all of the TVs and video modes?

    Tom

  • Tom,

    Yes that works fine with all the TVs.

    Thanks
  • Samer,

    The debug points to a hardware problem between the TDA19988 and the TS3DV642.  The other path does not show the limitation.  I notice that you have transient suppressors on the diff pairs from the TDA19988. Why?  Do you also have transient suppressors on the signals at each HDMI connector?  Have you tried removing the extraneous transient suppressors?

    Tom

  • Tom,

    Transient suppressors were added for ESD protection. I do not have transient suppressors on the other HDMI input.
    I just removed transient suppressors from diff pairs at TDA19988, and it did not change anything. I am still not getting a display on 50" tv.

    Thanks
  • Samer,

    As a follow-on debug step, I recommend that you remove the TS3DV642 and wire across its pads to connect the TDA19988 directly to the HDMI_out connector.  This will add an impedance discontinuity to the diff pairs and it might not work at all.  However, if you can get it to operate at some of the slower transfer rates, you will obtain electrical connectivity identical to the Beagle board.  I want to prove that you can achieve equivalent operation with your custom board at these slower speeds with a direct connection.

    Tom

  • Tom,

    I don't think that is possible without a new board spin, as the pads on TS3DV642 are so small which makes it impossible to solder wires. I know TS3DV642 is not a problem, as I have tested it with beagle board through TS3DV642EVM and it works correctly with it.

    Any other suggestions?

    Thank you
  • Samer,

    There is something different about that path.  Since you can create an identical system using a Beagle board and a TS3DV642EVM, then I recommend that you set them up side by side in a static video test mode and then cross check them signal by signal to find a delta.  You should be running identical software and hardware configuration.  Be sure to include control signals and power supply pins in your cross-check.

    Tom

  • Samer,

    You may want to compare the clock, de, and sync-pulse polarities of your HW with respect to BBB. If they are different, then you will need to hack the driver to adjust for your configuration. 

    Regards,

    Manisha