I've the same conditions as in my earlier post: http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/257457.aspx
In Short: A DM8168 custum board with 1GB RAM (on only one EMIF) EZDSK 5_05_02_00 with LINUX PSP 04.04.00.01.
The current bootarg settings for loading the VPSS driver contain: notifyk.vpssm3_sva=0xBF900000
For starting the VPSS, framebuffer and HDMI driver I perform the following steps:
- prcm_config s
- insmod syslink.ko
- firmware_loader 1 dm816x_hdvicp.xem3 start
- firmware_loader 2 dm816x_hdvpss.xem3 start
- insmod vpss.ko sbufaddr=0xBFB00000 mode=hdmi:1080p-60,dvo2:1080p-60,hdcomp:1080p-60
- insmod ti81xxfb.ko vram=0:24M,1:16M,2:6M
- fbset -depth 32 -rgba 8/16,8/8,8/0,0/0
- insmod ti81xxhdmi.ko
The firmware and modules are loaded fine, but running every HDMI example I can't see anything on the connected monitor. (But I can read the EDID information via "cat /sys/devices/platform/vpss/display0/edid")
Between the DM8168 and the HDMI connector our custom board has the same TPD12S521 port protection chip as the EVM.
The same steps as described executed on the EVM lead to a working monitor. So I digged deeper and did a "dmesg | grep hdmi" after hot plugging the same HDMI monitor to the EVM as to our custom board.
Here is the output from EVM:
hdmi: Enter HDMI_W1_GlobalInitVars()
hdmi: Enter HDMI_Core_GlobalInitVars()
hdmi: Enter HDMI_W1_ConfigVideoResolutionTiming()
hdmi: Enter HDMI_W1_ConfigVideoInterface()
hdmi: HDMI_WP_AUDIO_CFG = 0x1030006
hdmi: HDMI_WP_AUDIO_CFG2 = 0x20c0
hdmi: HDMI_WP_AUDIO_CTRL = 0x20
hdmi: Enter DSS_HDMI_CORE_SW_RESET_ASSERT ()
hdmi: Enter DSS_HDMI_CORE_POWER_DOWN_DISABLE()
hdmi: Enter DSS_HDMI_CORE_SW_RESET_RELEASE()
hdmi: Enter HDMI_W1_StartVideoFrame ()
hdmi: Irqenable 60000011
hdmi: 40 hpd
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 60 hdmi_core_intr1
hdmi: 3 hdmi_core_intr2
hdmi: 9 hdmi_core_intr3
hdmi: 87 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: first hpd
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 0 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 85 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 1 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 87 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 1 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 85 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
And here from custom board:
found best resolution: 1440x900 (25)
Extension block present db 2 21
84
Extension block present db 1 21
84
Extension block present db 3 21
84
Extension block present db 3 21
84
Extension block present db 3 21
84
hdmi: Enter HDMI_W1_GlobalInitVars()
hdmi: Enter HDMI_Core_GlobalInitVars()
hdmi: Enter HDMI_W1_ConfigVideoResolutionTiming()
hdmi: Enter HDMI_W1_ConfigVideoInterface()
hdmi: HDMI_WP_AUDIO_CFG = 0x1030006
hdmi: HDMI_WP_AUDIO_CFG2 = 0x20c0
hdmi: HDMI_WP_AUDIO_CTRL = 0x20
hdmi: Enter DSS_HDMI_CORE_SW_RESET_ASSERT ()
hdmi: Enter DSS_HDMI_CORE_POWER_DOWN_DISABLE()
hdmi: Enter DSS_HDMI_CORE_SW_RESET_RELEASE()
hdmi: Enter HDMI_W1_StartVideoFrame ()
hdmi: Irqenable 60000011
hdmi: 40 hpd
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 3 hdmi_core_intr2
hdmi: f hdmi_core_intr3
hdmi: 83 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: first hpd
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 1 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 81 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 1 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 83 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
hdmi: -------------DEBUG-------------------
hdmi: 1 hdmi_wp_irqstatus
hdmi: 1 hdmi_core_intr_state
hdmi: 40 hdmi_core_intr1
hdmi: 1 hdmi_core_intr2
hdmi: 1 hdmi_core_intr3
hdmi: 81 hdmi_core_sys_sys_stat
hdmi: -------------DEBUG-------------------
It is basically the same execept the "Extension block present" stuff, and the (I think) more important difference in the hdmi_core_intr1 (HDMI Core interrupt register content) and the hdmi_core_sys_sys_stat (HDMI Core System State Register). The EVM gets 0x60 in the interrupt register when the monitor is plugged in for the first time, which means HPD (Hot Plug Detect either unplug or plug) and RSEN (Receiver sense has changed, Vcc is applied to or removedfrm attached HDMI receiver). On our custom board it's only 0x40 meaning HPD.
And as you can see, the following status register contents also differ only in bit 2 (0x04) meaning RSEN (0 = No receiver connected, 1 = Receiver connected and powered on)
So, basically the plug in of the monitor leads to a change of the hot plug detect pin, but the receiver sense keeps 0.
I can't see, why there is this difference between our board and the EVM since (from my point of view) the software (driver modules and M3 firmware) and hardware (same TPD12S521 chip, HDMI cable, HDMI monitor) is the same.
Measuring with an oscilloscope showed, that the TDMS clock output on our board is not clocking at all. Do I need to activate that clock by software, shouldn't that be done by HDMI driver module?
I'd appreciate any help you could give me.