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.

PROCESSOR-SDK-AM62X: DVI signal is not detected by HDMI monitor

Part Number: PROCESSOR-SDK-AM62X
Other Parts Discussed in Thread: TFP410, AB15, SYSCONFIG

Hello,

Our custom board base on the TI AM62-sk evm board. It is using a Am6234 CPU, connected to a TFP410 converter to output DIV on HDMI connector.

We use the TI SDK 06.04

Here is the device-tree definition:

dvi0: connector {
    compatible = "dvi-connector";
    label = "dvi";
    digital;
    ddc-i2c-bus = <&main_i2c1>;
    type = "d";

    port {
        dvi_connector_in: endpoint {
            remote-endpoint = <&tfp410_out>;
        };
    };
 };

&main_i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&main_i2c1_pins_default>;
clock-frequency = <100000>;

tfp410: encoder@38 {

    compatible = "ti,tfp410";
    reg = <0x38>;
    gpios = <&main_gpio0 41 GPIO_ACTIVE_LOW>; /* 0, power-down */
    pinctrl-names = "default";
    pinctrl-0 = <&tfp410_pins>;
    ports {
        #address-cells = <1>;
        #size-cells = <0>;
            port@0 {
                reg = <0>;
                tfp410_in: endpoint@0 {
                    remote-endpoint = <&dpi1_out>;
                };
            };
            port@1 {
                reg = <1>;
                tfp410_out: endpoint@0 {
                    remote-endpoint = <&dvi_connector_in>;
                };
            };
    };
};

Here is the return of the command kmsprint:

When HDMI connector is unplugged:

root@am62xx-evm:~# kmsprint
Connector 0 (39) DVI-D-1 (disconnected)
Encoder 0 (38) NONE

When HDMI connector is plugged:
root@am62xx-evm:~# kmsprint
Connector 0 (39) DVI-D-1 (connected)
Encoder 0 (38) NONE

root@am62xx-evm:~# kmstest -c dvi
Connector 0/@39: DVI-D-1
Crtc 0/@37: 1440x900 106.500 1440/80/152/232/- 900/3/6/25/+ 60 (59.89) 0x6 0x48
Plane 0/@31: 0,0-1440x900
Fb 47 1440x900-XR24
Atomic test failed: -22

The TFP410 driver is enable as native in kernel configuration.

The TFP410 is used at address 0x38.

i2cdetect -y -r 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- 37 UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU UU -- -- -- -- -- --
50: 50 -- -- -- -- -- -- 57 -- 59 -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU
70: -- -- -- -- -- -- -- --

The TFP410 register are readable at the address 0x38 via i2ctools, when it is not defined in device tree.

The DDS DRM driver is well loaded at boot:

[    2.778175] [drm] Initialized tidss 1.0.0 20180215 for 30200000.dss on minor 0
[    2.863672] tidss 30200000.dss: [drm] fb0: tidssdrmfb frame buffer device

An frame buffer is available at /dev/fb0.

The display is well accessible at i2c address 0x50 an EDID can be read :

root@am62xx-evm:~# i2cdump -y 1 0x50
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 ff ff ff ff ff ff 00 10 ac 3d a0 53 33 33 30 ........??=?S330
10: 18 13 01 03 80 29 1a 78 ee ee 95 a3 54 4c 99 26 ?????)?x????TL?&
20: 0f 50 54 bf ef 80 95 00 71 4f 81 80 95 0f 81 00 ?PT????.qO?????.
30: 01 01 01 01 01 01 9a 29 a0 d0 51 84 22 30 50 98 ???????)??Q?"0P?
40: 36 00 98 ff 10 00 00 1c 00 00 00 ff 00 59 33 32 6.?.?..?.....Y32
50: 35 47 39 36 43 30 33 33 53 0a 00 00 00 fc 00 44 5G96C033S?...?.D
60: 45 4c 4c 20 31 39 30 39 57 0a 20 20 00 00 00 fd ELL 1909W? ...?
70: 00 38 4b 1e 53 0e 00 0a 20 20 20 20 20 20 00 b2 .8K?S?.? .?
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

The physical signal has been monitor with an oscillo :

VOUT0_DE (Data enable) seems to be drived correctly by the DSS on TFTP410 Pin n°2.

VOUT0_DATA0 Data 0 is also driven.

Coud you help me to solve the issue ?

1- Why encoder is set to NONE by the kmsprint command.

2- How figure out is the issue comes from hardware or linux ?

3- Could you provide a list of points to check to isolate the problem ?

Regards,

Alexis.

  • Hi Alexis,

    Let me check internally with our developer and get back to you.

    Regards,
    Krunal

  • Hi Krunal,

    Thank you. We had a parallel exchange with Alexis who realize that our AM62 SDK tfp410.c driver does not include the I2C communication with the TFP410 device. This may also cause the issue that he observed. Let's see what his feedback is.


    Best regards,
    François.

  • Hello,

    The driver of the TFP410 doesn't program the timing, so the default configuration is applied.

    Here are the driver comments:

    234         /*                                                                                                    

    235          * In I2C mode timings are configured through the I2C interface.                   

    236          * As the driver doesn't support I2C configuration yet, we just                       

    237          * go with the defaults (BSEL=1, DSEL=1, DKEN=0, EDGE=1).                          

    238          */

    1 - So I don't know if the device-tree you give in the link is using a i2c configuration for the TFP410 ?

    2 - Moreover the signal hdmi_hpd_pins_default and hdmi_pdn_pins_default are configure in the pmux as input.

    Our design wires the hdmi_hpd_pins to the HTPLG (Pin 9) of the TFP410, so it can't be an input of the AM62x.

    Is this signal must be wire to the AM62x, or is read from the register of the TFP410 by I2C by the driver.

    Our design wires the hdmi_pdn_pins_default to the AM62x GPIO0_41 and must be an output active low and not an input signal seen from the AM62x.

    The dvi-bridge define the PD as:

    powerdown-gpios = <&main_gpio0 127 GPIO_ACTIVE_LOW>;

    So it is an output active LOW.

    Could you clarify our must be define those signals in the pmux in the device tree ?

    - INPUT

    - OUTPUT

    - OUTPUT_PULLUP

    - OUTPUT_PULLDOWN ?

     

    Regards,

    Alexis.

  • Hi François, Krunal,

    I have modified my device tree similar to the link you provide :

    20 hdmi-connector {
    21 compatible = "hdmi-connector";
    22 label = "hdmi";
    23 digital;
    24 ddc-i2c-bus = <&main_i2c1>;
    25 type = "a";
    26
    27 port {
    28 hdmi_connector_in: endpoint {
    29 remote-endpoint = <&tfp410_out>;
    30 };
    31 };
    32 };
    33
    34 dvi-bridge {
    35 #address-cells = <1>;
    36 #size-cells = <0>;
    37
    38 compatible = "ti,tfp410";
    39 pinctrl-names = "default";
    40 pinctrl-0 = <&tfp410_pins>;
    41 powerdown-gpios = <&main_gpio0 41 GPIO_ACTIVE_LOW>;
    42 port@0 {
    43 reg = <0>;
    44 tfp410_in: endpoint@0 {
    45 remote-endpoint = <&dpi1_out>;
    46 };
    47 };
    48 port@1 {
    49 reg = <1>;
    50 tfp410_out: endpoint@0 {
    51 remote-endpoint = <&hdmi_connector_in>;
    52 };
    53 };
    54 };

    Here is the return of the command kmsprint, there is still no image on the HDMI monitor.

    root@am62xx-evm:~# kmsprint
    Connector 0 (39) HDMI-A-1 (connected)
    Encoder 0 (38) NONE
    Crtc 0 (37) 1440x900 106.500 1440/80/152/232 900/3/6/25 60 (59.89)
    Plane 0 (31) fb-id: 46 (crtcs: 0) 0,0 1440x900 -> 0,0 1440x900 (AR12 AB12 RA12 RG16 BG16 AR15 AB15 AR24 AB24 RA24 BA24 RG24 BG24 AR30 AB30 XR12 XB12 RX)
    FB 46 1440x900

    The command fbtest return no error:

    root@am62xx-evm:~# fbtest
    /dev/fb0: res 1440x900, virtual 1440x900, line_len 5760

    the command kmstest produce no error:

    root@am62xx-evm:~# kmstest -f XR24
    Connector 0/@39: HDMI-A-1
    Crtc 0/@37: 1440x900 106.500 1440/80/152/232/- 900/3/6/25/+ 60 (59.89) 0x6 0x48
    Plane 0/@31: 0,0-1440x900
    Fb 49 1440x900-XR24
    press enter to exit

    root@am62xx-evm:~# kmstest -c 1
    No connector '1'
    root@am62xx-evm:~# kmstest -c 0
    Connector 0/@39: HDMI-A-1
    Crtc 0/@37: 1440x900 106.500 1440/80/152/232/- 900/3/6/25/+ 60 (59.89) 0x6 0x48
    Plane 0/@31: 0,0-1440x900
    Fb 49 1440x900-XR24
    press enter to exit

    Regards,

    Alexis.

  • Hi Alexis,

    Is it possible to probe clock+data lines at outout of SoC or input of TFP41? Based on kmstest, it seems like the SW pieces are enabled correctly. If possible, enable the debug logs in Kernel config. 

    Regards,
    Krunal

  • Hi Alexis,

    Can you also probe the TFP410 clock output and see if the clock output frequency matches the required resolution?

    Thanks

    David

  • Hi Krunal,

    I got this error for the dvi-bridge :

    [ 1.129430] tfp410-bridge dvi-bridge: failed to parse powerdown gpio.

    Could you answer to my previous question regarding the signal hdmi_hpd_pins_default and hdmi_pdn_pins_default.

    How must I configure the signal ?

    Regards,

    Alexis.

  • Hi,

    Is this signal must be wire to the AM62x, or is read from the register of the TFP410 by I2C by the driver.

    -> It seems like TFP seems to take care of the hot plug signal and you don't need to wire to AM62x. 

    Moreover the signal hdmi_hpd_pins_default and hdmi_pdn_pins_default are configure in the pmux as input.

    -> It seems like a potential bug and I will inform the Jacinto SW dev about the power down signal. It makes sense for the signal to be output. Also, based on the driver, the signal is optional and as an experiment do not define it in the DT. However, ensure that the GPIO0_41 is pin muxed properly to output.

    Regards,
    Krunal

  • Hi David, Krunal,

    I set the video mode for the kernel parameter as "video=640x480".

    Then we captures the inputs signal coming for the AM62x to the TFP410.

    Signals are:
    C1 (YELLOW) : DE     (input)
    C2 (PINK)   : IDK+   (input)
    C3 (BLUE)   : DATA0  (input)
    C4 (GREEN)  : DATA16 (input)

    https://pasteboard.co/qR0Qw7yxMBm5.jpg

    https://pasteboard.co/ql5YJL5eG4pw.jpg

    https://pasteboard.co/gmUtAMFSWbuI.jpg

    But we don't have any data on the output of the TFP410 to the HDMI connector.

    Regards,

    Alexis.

  • Hi Krunal,

    I look at the tfp410 driver, and it seems that the powerdown signal is not optional.

    I got the error : "failed to parse powerdown gpio"

    So the DRM bridge is not added by the driver with the function drm_bridge_add(&dvi->bridge);

     

    	/* Get the powerdown GPIO. */
    	dvi->powerdown = devm_gpiod_get_optional(dev, "powerdown",
    						 GPIOD_OUT_HIGH);
    	if (IS_ERR(dvi->powerdown)) {
    		dev_err(dev, "failed to parse powerdown gpio\n");
    		return PTR_ERR(dvi->powerdown);
    	}
    
    	/*  Register the DRM bridge. */
    	drm_bridge_add(&dvi->bridge);
    
    	return 0;
    }

    I test the following syntax in the device tree:

    powerdown-gpios = <&main_gpio0 41 GPIO_ACTIVE_LOW>;                                                   
    powerdown-gpio = <&main_gpio0 41 GPIO_ACTIVE_LOW>;                                                    
    powerdown = <&main_gpio0 41 GPIO_ACTIVE_LOW>;

    But the driver raised always the error.

    Could you tell me what should be the good syntax.

    Regards,

    Alexis.

  • Hi Kunal,

    The GPIO 41 is configure in the device tree as followed:

    189     tfp410_pins: tfp410_pins {                                                                                                                                                                         
    190        pinctrl-single,pins = <                                                                               
    191        AM62X_IOPAD(0x00a8, PIN_OUTPUT, 7) /* (M21) GPMC0_CSn0.GPIO0_41 */                                
    193         >;                                                                                                    
    194     };

    Is that the expected configuration for the mux.

    Regards,

    Alexis.

  • Hi Alexis,

    Based on the devicetree-bindings (https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/Documentation/devicetree/bindings/display/bridge/ti,tfp410.yaml?h=ti-linux-5.10.y#n21), the property is called powerdown-gpios. 

    I also used sysconfig and generated the following:

    &main_pmx0 {
    mygpio1_pins_default: mygpio1-pins-default {
    pinctrl-single,pins = <
    AM62X_IOPAD(0x00a8, PIN_OUTPUT, 7) /* (J18) GPMC0_CSn0.GPIO0_41 */
    >;
    };
    };

    The above seems to match your DT so I don't see any mis configured property. The only thing that confuses me is why our Jacinto team addressed it as an PIN_INPUT and I am trying to get some clarification.  

    Regards,
    Krunal

  • Hi Krunal,

    We have review our design with the datasheet and didn't find any issue.

    We also compare our design to the beagleboard design: https://github.com/beagleboard/beagleboard-xm/blob/master/BeagleBoard-xM_SCH.pdf

    And we didn't detect any difference.

    We don't understand what issue can make the TFP410 to not output any data when input data are correctly provided.

    Could you ask to David, if he can help ?

    Regards,

    Alexis.

  • Hi Alexis,

    Even if you don't define that property, you get the same "I got the error : "failed to parse powerdown gpio""?

    Regards,
    Krunal

  • Hi Krunal,

    I removed the powerdown managment from the driver, to check if the behaviour changed, but configuring the PD via I2C in the CTL_1_MODE register.

    But there still not any HDMI signal from the TFP410.

    So the error "failed to parse powerdown gpio" should be ignored.

    More over I made a dump of the TFP410 registers before and after toggling the PD bit in CTL_1_MODE.

    Here are the results :

    # kmsprint

    Connector 0 (39) HDMI-A-1 (connected)

      Encoder 0 (38) NONE
        Crtc 0 (37) 1920x1200 154.000 1920/48/32/80 1200/3/6/26 60 (59.95)
          Plane 0 (31) fb-id: 46 (crtcs: 0) 0,0 1920x1200 -> 0,0 1920x1200 (AR12 AB12 RA12 RG16 BG16 AR15 A)

            FB 46 1920x1200

    Reg PD = 0
    VEN_ID: 0x01 0x4c
    DEV_ID: 0x04 0x10
    REV_ID: 0x00
    CTL_1_MODE: 0xbe
    CTL_2_MODE: 0x06
    CTL_3_MODE: 0xb0
    CFG: 0x00
    DE_DLY: 0x08
    DE_CTL: 0x00
    DE_TOP: 0x10
    DE_CNT: 0x0c 0x00
    DE_LIN: 0x08 0x00
    H_RES: 0x00 0x54
    V_RES: 0x00 0x30
    Reg PD = 1
    VEN_ID: 0x01 0x4c
    DEV_ID: 0x04 0x10
    REV_ID: 0x00
    CTL_1_MODE: 0xbf
    CTL_2_MODE: 0x06
    CTL_3_MODE: 0xb0
    CFG: 0x00
    DE_DLY: 0x08
    DE_CTL: 0x00
    DE_TOP: 0x10
    DE_CNT: 0x0c 0x00
    DE_LIN: 0x08 0x00
    H_RES: 0x07 0xff
    V_RES: 0x04 0xd3

    We can see that H_RES and V_RES changed :

    H_RES => 2047 lines

    V_RES => 1235 lines

    So it seems that the TFP410 component detect V_SYNC and H_SYNC pulses.

    I wonder if the H_RES and V_RES should match exactly the resolution 1920x1200.

    Could you check this point and help us to find the root cause of the problems ?

    We also need a feedback from an expert of the TFP410.

    Regards,

    Alexis.

  • Alexis

    When you measured the TFP410 HDMI output, do you have the 50ohm termination to 3.3V? If you do, can you check the HDMI clock frequency?

    Thanks

    David

  • Hi David,

    We found the issue the for the level of the TFADJ resistor was wrong.

    A component has not be mount correctly on our board.

    The issue is then fixed.

  • Hi Alexis,

    Thank you for the update. That's a relief!


    Best regards,
    François.