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.

AM3892 based board HDMI

Other Parts Discussed in Thread: AM3892, MSP430F2132, AM3894

Hello,

I have custom board based on TI AM3892 processor.  We've managed to run Linux + Arago FS on board through the agency of E2E Community and espesially Pavel Botev. The board's design is very similar to DM816x/CA816x/AM389x EVM but there are some valuable differences. Now we are trying to run HDMI.

I have a questions about syslink at first:

There is two processors on EVM: cortex A8 and MSP430F2132. On our board we have A8 only. As said in wiki pages syslink library is a funcional layer controlling the inter-processor communction between Cotex A8 and Cotex M3(http://processors.wiki.ti.com/index.php/DM816X_C6A816X_AM389X_VPSS_Video_Driver_User_Guide_PSP_04.00.00.12) (here is misspelling in your wiki page, Cotex instead of Cortex). Since I have only one processor on my board, do I need syslink module to run HDMI?

 

I tryed to load HDMI related modules without the syslink and I failed. What can be a reason of the issue?

During linux startup there are following error message, also same message we receive when trying to load vpss linux kernel module manually.

BUG: Your driver calls ioremap() on system memory. This leads
to architecturally unpredictable behaviour on ARMv6+, and ioremap()
will fail in the next kernel release. Please fix your driver.
------------[ cut here ]------------
WARNING: at arch/arm/mm/ioremap.c:211 __arm_ioremap_pfn_caller+0x58/0x190()
Modules linked in: vpss(+)
Backtrace:
[<c0049bb8>] (dump_backtrace+0x0/0x110) from [<c0385f2c>] (dump_stack+0x18/0x1c)
r7:00000000 r6:c004d054 r5:c043c621 r4:000000d3
[<c0385f14>] (dump_stack+0x0/0x1c) from [<c006c6cc>] (warn_slowpath_common+0x54/0x6c)
[<c006c678>] (warn_slowpath_common+0x0/0x6c) from [<c006c708>] (warn_slowpath_null+0x24/0x2c)
r9:d5c14000 r8:c04cab18 r7:bf016530 r6:000a0200 r5:00200000
r4:00000000
[<c006c6e4>] (warn_slowpath_null+0x0/0x2c) from [<c004d054>] (__arm_ioremap_pfn_caller+0x58/0x190)
[<c004cffc>] (__arm_ioremap_pfn_caller+0x0/0x190) from [<c004d210>] (__arm_ioremap_caller+0x64/0x6c)
[<c004d1ac>] (__arm_ioremap_caller+0x0/0x6c) from [<c005f0e4>] (omap_ioremap+0x60/0x64)
r6:00000000 r5:00200000 r4:a0200000
[<c005f084>] (omap_ioremap+0x0/0x64) from [<bf016530>] (vps_sbuf_init+0x108/0x1c0 [vpss])
r7:bf00f628 r6:00200000 r5:a0200000 r4:d5dce940
[<bf016428>] (vps_sbuf_init+0x0/0x1c0 [vpss]) from [<bf0000b0>] (vps_probe+0x4c/0x174 [vpss])
r8:c04dfc30 r7:d5e04000 r6:bf00f5c0 r5:c04cab20 r4:c04cab18
[<bf000064>] (vps_probe+0x0/0x174 [vpss]) from [<c01f40bc>] (platform_drv_probe+0x20/0x24)
r7:d5e04000 r6:bf00f12c r5:c04cab20 r4:c04cab20
[<c01f409c>] (platform_drv_probe+0x0/0x24) from [<c01f3028>] (driver_probe_device+0xd0/0x190)
[<c01f2f58>] (driver_probe_device+0x0/0x190) from [<c01f3150>] (__driver_attach+0x68/0x8c)
r7:d5e04000 r6:bf00f12c r5:c04cab54 r4:c04cab20
[<c01f30e8>] (__driver_attach+0x0/0x8c) from [<c01f27d4>] (bus_for_each_dev+0x50/0x84)
r7:d5e04000 r6:bf00f12c r5:c01f30e8 r4:00000000
[<c01f2784>] (bus_for_each_dev+0x0/0x84) from [<c01f2e4c>] (driver_attach+0x20/0x28)
r6:bf00f12c r5:bf00f118 r4:00000000
[<c01f2e2c>] (driver_attach+0x0/0x28) from [<c01f20ac>] (bus_add_driver+0xb4/0x234)
[<c01f1ff8>] (bus_add_driver+0x0/0x234) from [<c01f3488>] (driver_register+0xb0/0x13c)
[<c01f33d8>] (driver_register+0x0/0x13c) from [<c01f43a8>] (platform_driver_register+0x4c/0x60)
r9:d5c14000 r8:bf015000 r7:401e5000 r6:0001b3e0 r5:bf00f118
r4:00000000
[<c01f435c>] (platform_driver_register+0x0/0x60) from [<c01f43dc>] (platform_driver_probe+0x20/0x70)
[<c01f43bc>] (platform_driver_probe+0x0/0x70) from [<bf015030>] (vps_init+0x30/0x5c [vpss])
r5:bf00f49c r4:00000000
[<bf015000>] (vps_init+0x0/0x5c [vpss]) from [<c003b42c>] (do_one_initcall+0xd0/0x1a4)
[<c003b35c>] (do_one_initcall+0x0/0x1a4) from [<c0097de8>] (sys_init_module+0x9c/0x1bc)
[<c0097d4c>] (sys_init_module+0x0/0x1bc) from [<c0045e00>] (ret_fast_syscall+0x0/0x30)
r7:00000080 r6:00000000 r5:0001b3e0 r4:4008abe0
---[ end trace 4e31c9709dc48486 ]---
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
notify_shm_drv_sendevent failed! status = 0xfffffff0
notify_send_event failed! status = 0xfffffff0
VPSS_CORE : Failed to init fvid2 interface,
vpss: probe of vpss failed with error -22
VPSS_CORE : failed to register ti81xx-vpss driver 

 

Best regards,

Anton 

  • Hi,

    The status in log = 0xFFFFFFF0 (-15). (-15) is  NOTIFY_E_NOTINITIALIZED status in syslink. Doesn't it mean that syslink tryes to find other processor (there is no second processor on our board!!) and fails? 

    /* Check whether driver on other processor is initialized */
    if (obj->other_proc_ctrl->recv_init_status != \
    NOTIFYSHMDRIVER_INIT_STAMP) {
    /* This may be used for polling till other-side driver is ready,
    * so do not set failure reason. */
    status = NOTIFY_E_NOTINITIALIZED;
    goto exit;
    }

    Best regards,

    Anton 

  • Anton,

    You have ARM Cortex-A8, ARM Cortex-M3 and HDVPSS in AM3892 device. Check the AM389x (AM3892/AM3894) datasheet:

    http://www.ti.com/lit/ds/symlink/am3894.pdf

    The ARM Cortex-M3 is documented as Media Controller processor. The ARM Cortex-M3 has the responsibility of managing the HDVPSS.

    Regards,

    Pavel

  • Hi, Pavel

    As you remember the main reason to use Arago FS instead of filesystem from EVM was M3 firmloader stucking. I decided to dig this problem and I investigated that stuck occurs in prcm_config_app. This apllication stands in loop in function static void IVAHD0ClkEnable():

    (media-controller-utils_2_05_00_17\src\prcm_config\ti816x-evm\prcm_config_app.c)

    WR_MEM_32(CM_IVAHD0_CLKSTCTRL, 2); /*Enable Power Domain Transition*/
    while(RD_MEM_32(PM_IVAHD0_PWRSTST)!=0x37); /*Check Power is ON*/
    WR_MEM_32(CM_IVAHD0_IVAHD_CLKCTRL, 2); /*Enable IVHD0 Clocks*/
    WR_MEM_32(CM_IVAHD0_SL2_CLKCTRL, 2); /*Enable IVHD0 SL2 Clocks*/

    /*IVAHD0_GCLK is Active*/
     while(((RD_MEM_32(CM_IVAHD0_CLKSTCTRL)&0x100))!=0x100);  // here it falls in infinite loop 

     It means that some clocks couldn't be enabled.

    On our board we haven't  SERDES reference clock inputs as on EVM816. Could it be a reason? Is PCI used in communication with slaves M3?

    Also I can't find this register  CM_IVAHD0_CLKSTCTRL in AM389x datasheet. Does this register available in Davinci processor only?

    Best regards,

    Anton 

  • Anton,

    IVAHD is also known as HDVICP2 video accelerator. We have 3xIVAHD in DM8168 (IVAHD0, IVAHD1 and IVAHD2) and 0xIVAHD in AM3892 device. Check the wiki page below:

    http://processors.wiki.ti.com/index.php/DM816x_C6A816x_AM389x_Overview#Product_Matrix

    So the CM_IVAHD0_CLKSTCTRL and all other IVAHDx related registers are available for DM8168 (DaVinci) processor only.

    You can try to comment/remove the IVAHDx related code in prcm_config_app.c to see if that will fix the issue.

    Regards,

    Pavel

  • Pavel,

    I've commented those code parts. It seems that we have some problems with i2c.0

    On EVM i2c.0 used for external eeprom , on our board i2c.0 not used.

    Now it stucks in the following way:

    Loading HDVICP2 Firmware
    DM816X prcm_config_app version: 2.0.0.1
    Doing PRCM settings...
    PRCM Initialization completed
    SysLink version : 2.10.03.20
    SysLink module created on Date:Apr 29 2012 Time:20:45:11
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop> to start/stop the firmware
    ===Optional arguments===
    -mmap input memory map bin file name
    -i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 1 start Successful
    Loading HDVPSS Firmware
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop> to start/stop the firmware
    ===Optional arguments===
    -mmap input memory map bin file name
    -i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 2 start Successful
    HDMI W1 rev 2.0

     

    Best regards,

    Anton 

  • Anton,

    Can you try with not loading the HDVICP2 firmware. In file {file_system}/etc/init.d/load-hd-firmware.sh:

    echo "Loading HDVICP2 Firmware"
    prcm_config_app s
    modprobe syslink
    until [[ -e /dev/syslinkipc_ProcMgr && -e /dev/syslinkipc_ClientNotifyMgr ]]
    do                                                
           sleep 0.5
    done
     #firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvicp.xem3 start
     echo "Loading HDVPSS Firmware"
     firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvpss.xem3 start
     modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60,dvo2:1080p-60,hdcomp:1080p-60 i2c_mode=1
     modprobe ti81xxfb vram=0:24M,1:16M,2:6M
     fbset -depth 32 -rgba 8/16,8/8,8/0,0/0
     modprobe ti81xxhdmi

    Does it stuck now? If yes, at which line?

    Regards,

    Pavel


  • Pavel Botev said:

    Does it stuck now? If yes, at which line?

     

    Pavel,

    I've done, what you've adviced. But it still stuck at the same line:

    DM816X prcm_config_app version: 2.0.0.1
    Doing PRCM settings...
    PRCM Initialization completed
    SysLink version : 2.10.03.20
    SysLink module created on Date:Apr 29 2012 Time:20:45:11
    Loading HDVPSS (V4L2) Firmware
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop> to start/stop the firmware
    ===Optional arguments===
    -mmap input memory map bin file name
    -i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 2 start Successful
    HDMI W1 rev 2.0

     

    Regards,

    Anton 

     

  • Anton,

    This is what I have as console output when using EZSDK 5.04.00.11 on 816X/389X EVM board:

    INIT: Entering runlevel: 5
    SysLink version : 2.10.03.20
    SysLink module created on Date:Apr 29 2012 Time:20:45:11
    Loading HDVPSS Firmware
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id>         0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop>           to start/stop the firmware
    ===Optional arguments===
    -mmap                  input memory map bin file name
    -i2c                   0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version :  2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 2 start Successful
    HDMI W1 rev 2.0
    I2C No Ack

    Starting system message bus: dbus.
    Starting telnet daemon.
    Starting syslogd/klogd: done
    Starting thttpd.
    Starting PVR
    Starting Matrix GUI application.

     _____                    _____           _         _   
    |  _  |___ ___ ___ ___   |  _  |___ ___  |_|___ ___| |_
    |     |  _| .'| . | . |  |   __|  _| . | | | -_|  _|  _|
    |__|__|_| |__,|_  |___|  |__|  |_| |___|_| |___|___|_|  
                  |___|                    |___|            

    Arago Project http://arago-project.org dm816x-evm ttyO2

    Arago 2011.09 dm816x-evm ttyO2

    dm816x-evm login: root
    root@dm816x-evm:~#

    And this output is result of the following modification of the {root file system}/etc/init.d/load-hd-firmware.sh script:

    case "$1" in
        start)
            #echo "Loading HDVICP2 Firmware"
            #prcm_config_app s
            modprobe syslink
            until [[ -e /dev/syslinkipc_ProcMgr && -e /dev/syslinkipc_ClientNotifyMgr ]]
            do                                                
                sleep 0.5
            done
            #firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvicp.xem3 start
            echo "Loading HDVPSS Firmware"
            firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvpss.xem3 start
            modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60,dvo2:1080p-60,hdcomp:1080p-60 i2c_mode=1
            modprobe ti81xxfb vram=0:24M,1:16M,2:6M
            fbset -depth 32 -rgba 8/16,8/8,8/0,0/0
            modprobe ti81xxhdmi
          ;;

    Could you try exactly the same?

    Anton Skornyakob said:
    Loading HDVPSS (V4L2) Firmware

    This means you are using the {root filesystem}/usr/share/ti/ti-media-controller-utils/load-hd-v4l2-firmware.sh script, instead of the load-hd-firmware.sh script.

    The load-hd-v4l2-firmware.sh is loading the firmware for V4L2, while load-hd-firmware.sh script is for OMX. For more info check ti-ezsdk_dm816x-evm_5_04_00_11/docs/DM816x_EZ_Software_Developers_Guide.pdf section 6.11 How to change from OMX to V4L2 firmware for capture/display

    What are you planning to use, OMX or V4L2?

    Regards,

    Pavel

  • Pavel,

    I made the same, but issue state didn't changed. I've planned to use OMX, in fact I don't know why V4L2 shell script was called, I repackaged target fs and now it seems ok.

    Here is the log:
    INIT: Entering runlevel: 5
    SysLink version : 2.10.03.20
    SysLink module created on Date:Apr 29 2012 Time:20:45:11
    Loading HDVPSS Firmware
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop> to start/stop the firmware
    ===Optional arguments===
    -mmap input memory map bin file name
    -i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 2 start Successful
    HDMI W1 rev 2.0 

     

    Best regards,

    Anton 

  • Anton,

    Let us try to isolate the problem, thus to be sure the problem is in the HDMI driver. Please update the {root fs}/etc/init.d/load-hd-firmware.sh script as follows:

    case "$1" in
        start)
        #echo "Loading HDVICP2 Firmware"
        #prcm_config_app s
            #modprobe syslink
            #until [[ -e /dev/syslinkipc_ProcMgr && -e /dev/syslinkipc_ClientNotifyMgr ]]
            #do                                                
             #   sleep 0.5
            #done
            #firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvicp.xem3 start
            #echo "Loading HDVPSS Firmware"
            #firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm816x_hdvpss.xem3 start
            #modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60,dvo2:1080p-60,hdcomp:1080p-60 i2c_mode=1
            #modprobe ti81xxfb vram=0:24M,1:16M,2:6M
            #fbset -depth 32 -rgba 8/16,8/8,8/0,0/0
            #modprobe ti81xxhdmi
          ;;

    Thus you should be able to boot up successfully, right? After you boot up, you should load the kernel modules one by one:

    root@dm816x-evm:~# modprobe syslink

    root@dm816x-evm:~# firmware_loader 2 /usr/share/ti/ti-media-controller-utils/dm816x_hdvpss.xem3 start

    root@dm816x-evm:~# modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60,dvo2:1080p-60,hdcomp:1080p-60 i2c_mode=1 

    root@dm816x-evm:~# modprobe ti81xxfb vram=0:24M,1:16M,2:6M

    root@dm816x-evm:~# fbset -depth 32 -rgba 8/16,8/8,8/0,0/0

    root@dm816x-evm:~# modprobe ti81xxhdmi
    HDMI W1 rev 2.0
    I2C No Ack

    root@dm816x-evm:~#

    What happens on your side when you insert the hdmi module (# modprobe ti81xxhdmi) ?

    Regards,

    Pavel


  • Pavel Botev said:

    What happens on your side when you insert the hdmi module (# modprobe ti81xxhdmi) ?

     

    Pavel,

    this happens on my side: 

    root@dm816x-evm:~# modprobe ti81xxhdmi
    HDMI W1 rev 2.0 

     

    And then it stucks.

    Regards,

    Anton 

  • Anton,

    If you try with

    root@dm816x-evm:~# modprobe ti81xxhdmi debug=1

    or

    root@dm816x-evm:/lib/modules/2.6.37/kernel/drivers/video/ti81xx/ti81xxhdmi# insmod ti81xxhdmi.ko debug=1

    will be there different console output, with more detailed error messages?

    Can you try to find the piece of code in which the flow stuck, it should be something after the hdmi_lib_init() function (which seems to be fine). Does your flow go after hdmi_init() function?

    The hdmi_lib_init() is located at: ~/ti-ezsdk_dm816x-evm_5_04_00_11/board-support/linux-2.6.37-psp04.04.00.01/arch/arm/plat-omap/hdmi_lib.c file

    The hdmi_init() function is located at: ~/ti-ezsdk_dm816x-evm_5_04_00_11/board-support/linux-2.6.37-psp04.04.00.01/drivers/video/ti81xx/ti81xxhdmi/hdmi.c file

    Best regards,

    Pavel


  • Hi, Pavel  

    Pavel Botev said:

    If you try with

    root@dm816x-evm:~# modprobe ti81xxhdmi debug=1

    or

    root@dm816x-evm:/lib/modules/2.6.37/kernel/drivers/video/ti81xx/ti81xxhdmi# insmod ti81xxhdmi.ko debug=1

    will be there different console output, with more detailed error messages?

    Both modprobe and insmod with debug=1 produces the same messages:

     
    root@dm816x-evm:/lib/modules/2.6.37/kernel/drivers/video/ti81xx/ti81xxhdmi# insmod ti81xxhdmi.ko debug=1
    HDMI W1 rev 2.0

     

    Pavel Botev said:

    Can you try to find the piece of code in which the flow stuck, it should be something after the hdmi_lib_init() function (which seems to be fine). Does your flow go after hdmi_init() function?

    The hdmi_lib_init() is located at: ~/ti-ezsdk_dm816x-evm_5_04_00_11/board-support/linux-2.6.37-psp04.04.00.01/arch/arm/plat-omap/hdmi_lib.c file

    The hdmi_init() function is located at: ~/ti-ezsdk_dm816x-evm_5_04_00_11/board-support/linux-2.6.37-psp04.04.00.01/drivers/video/ti81xx/ti81xxhdmi/hdmi.c file

     

    I ve tried yet to insert several  printk("@some_debug_message@\n") in hdmi.c source file - before  hdmi_lib_init() and after. But I didn't see some of them in output. Ive made linux kernel rebuild and all modules rebuild. I've installed rebuilded modules into target filesystem. But can't see no one my debug printk(). I'm trying to solve this right now. 

     

    Best regards,

    Anton 

  • Hi, Pavel

    Finally I managed to solve previous stuck issue. Now we have the following output log. There are some pci missing function messages, we haven't pci on our board and I switched it off in linux config. Would HDMI work properly in this case?  

    UPD: Wow! Great! I see Starting Matrix GUI application on my HDMI display!

    Unfortunately mouse doesn't work there. 

    INIT: Entering runlevel: 5
    SysLink version : 2.10.03.20
    SysLink module created on Date:Apr 29 2012 Time:20:45:11
    Loading HDVPSS Firmware
    FIRMWARE: I2cInit will be done by M3
    FIRMWARE: Memory map bin file not passed
    Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
    ===Mandatory arguments===
    <Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
    <Location of Firmware> firmware binary file
    <start|stop> to start/stop the firmware
    ===Optional arguments===
    -mmap input memory map bin file name
    -i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
    FIRMWARE: isI2cInitRequiredOnM3: 1
    FIRMWARE: Default memory configuration is used
    MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
    FIRMWARE: Memory Configuration status : In Progress
    FIRMWARE: 2 start Successful
    HDMI W1 rev 2.0
    Starting system message bus: dbus.
    Starting telnet daemon.
    Starting syslogd/klogd: done
    Starting thttpd.
    Starting PVR
    pvrsrvkm: Unknown symbol pci_save_state (err 0)
    pvrsrvkm: Unknown symbol pci_request_region (err 0)
    pvrsrvkm: Unknown symbol pci_enable_device (err 0)
    pvrsrvkm: Unknown symbol pci_choose_state (err 0)
    pvrsrvkm: Unknown symbol pci_enable_msi_block (err 0)
    pvrsrvkm: Unknown symbol pci_get_device (err 0)
    pvrsrvkm: Unknown symbol pci_disable_msi (err 0)
    pvrsrvkm: Unknown symbol pci_set_power_state (err 0)
    pvrsrvkm: Unknown symbol pci_clear_master (err 0)
    pvrsrvkm: Unknown symbol pci_restore_state (err 0)
    pvrsrvkm: Unknown symbol pci_set_master (err 0)
    pvrsrvkm: Unknown symbol pci_disable_device (err 0)
    pvrsrvkm: Unknown symbol pci_release_region (err 0)
    insmod: error inserting '/lib/modules/2.6.37/kernel/drivers/gpu/pvr/pvrsrvkm.ko': -1 Unknown symbol in module
    pvrsrvkm: Unknown symbol pci_save_state (err 0)
    pvrsrvkm: Unknown symbol pci_request_region (err 0)
    pvrsrvkm: Unknown symbol pci_enable_device (err 0)
    pvrsrvkm: Unknown symbol pci_choose_state (err 0)
    pvrsrvkm: Unknown symbol pci_enable_msi_block (err 0)
    pvrsrvkm: Unknown symbol pci_get_device (err 0)
    pvrsrvkm: Unknown symbol pci_disable_msi (err 0)
    pvrsrvkm: Unknown symbol pci_set_power_state (err 0)
    pvrsrvkm: Unknown symbol pci_clear_master (err 0)
    pvrsrvkm: Unknown symbol pci_restore_state (err 0)
    pvrsrvkm: Unknown symbol pci_set_master (err 0)
    pvrsrvkm: Unknown symbol pci_disable_device (err 0)
    pvrsrvkm: Unknown symbol pci_release_region (err 0)
    WARNING: Error inserting vpss (/lib/modules/2.6.37/kernel/drivers/video/ti81xx/vpss/vpss.ko): Unknown symbol in module, or unknopvrsrvkm: Unknown symbol pci_save_state (err 0)
    wn parameter (sepvrsrvkm: Unknown symbol pci_request_region (err 0)
    e dmesg)
    FATAL:pvrsrvkm: Unknown symbol pci_enable_device (err 0)
    Error insertingpvrsrvkm: Unknown symbol pci_choose_state (err 0)
    omaplfb (/lib/mpvrsrvkm: Unknown symbol pci_enable_msi_block (err 0)
    odules/2.6.37/kepvrsrvkm: Unknown symbol pci_get_device (err 0)
    rnel/drivers/gpupvrsrvkm: Unknown symbol pci_disable_msi (err 0)
    /pvr/omaplfb.ko)pvrsrvkm: Unknown symbol pci_set_power_state (err 0)
    : Unknown symbolpvrsrvkm: Unknown symbol pci_clear_master (err 0)
    in module, or unknown parameterpvrsrvkm: Unknown symbol pci_restore_state (err 0)
    (see dmesg)
    pvrsrvkm: Unknown symbol pci_set_master (err 0)
    pvrsrvkm: Unknown symbol pci_disable_device (err 0)
    pvrsrvkm: Unknown symbol pci_release_region (err 0)
    FATAL: Error inserting bufferclass_ti (/lib/modules/2.6.37/kernel/drivers/gpu/pvr/bufferclass_ti.ko): Unknown symbol in module, or unknown parameter (see dmesg)
    BusyBox v1.13.2 (2012-04-29 22:45:10 IST) multi-call binary

    Usage: mknod [OPTIONS] NAME TYPE MAJOR MINOR

    Create a special file (block, character, or pipe)

    Options:
    -m Create the special file using the specified mode (default a=rw)
    TYPEs include:
    b: Make a block device
    c or u: Make a character device
    p: Make a named pipe (MAJOR and MINOR are ignoredUnhandled fault: external abort on non-linefetch (0x1018) at 0x40256014
    )

    chmod: /dev/pvrsrvkm: No such file or directory
    Bus error
    Starting Matrix GUI application.

    _____ _____ _ _
    | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
    | | _| .'| . | . | | __| _| . | | | -_| _| _|
    |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
    |___| |___|

    Arago Project http://arago-project.org dm816x-evm ttyO2

    Arago 2011.09 dm816x-evm ttyO2

    dm816x-evm login:

     

    Best regards,

    Anton 

  • Hi Anton,

    This issue seems similar to already discussed issues. Could you please examine the below threads, where you might find a working solution:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/125276/452276.aspx

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/178776/830085.aspx

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/243168.aspx

    http://processors.wiki.ti.com/index.php/SGXDbg#Unable_to_install_the_kernel_modules_.28pvrsrvkm.ko_or_omaplfb.ko.29

    Regards,

    Pavel

  • Pavel,

    Thank for you help,

    I will open new thread for USB and mouse/keyboard issues.  

    Best regards,

    Anton 

  • Pavel

    I have one additional question about hdmi and video.

    When I interconnect my board and 1920x1080 display with HDMI interface everything is ok.

    When I interconnect my board and the same 1920x1080 display with DVI interface via HDMI-DVI connector everything is also ok.  

    But when I connect my board to non 1920x1080 display without HDMI interface using HDMI-DVI connector it doesn't work. While when I connect same display with other HDMI provided devices vid HDMI-DVI connector it works.

    Is it possible to connect display with DVI interface? 

     

    Additionally I faced an issue that device loading continue stucks if I cut of displayt in the same place. Also in this case there are debug message, I suggest it produced by fbset and caused by some error in ti81xxfb :

    open /dev/fb0: No such file or directory  

    Best regards,

    Anton 

  • Anton,

    Anton Skornyakob said:
    Is it possible to connect display with DVI interface? 

    I checked the AM389x TRM/datasheet, per my inderstanding, DVI can be used only through the HDMI. You can not use DVI without HDMI.

    AM389x TRM:

    chapter 10 HDMI

    The HDMI module provides the following main features:
    • HDMI 1.3, HDCP 1.2, and DVI 1.0 compliant

    AM389x datasheet:

    8.9 High-Definition Multimedia Interface (HDMI)
    The device includes an HDMI 1.3a-compliant transmitter for digital video and audio data to display devices. The HDMI interface consists of a digital HDMI transmitter core with TMDS encoder, a core wrapper with interface logic and control registers, and a transmit PHY, with the following features:
    • DVI 1.0 compliant (only RGB pixel format)

    Regards,

    Pavel





  • Anton,

    Anton Skornyakob said:

    Additionally I faced an issue that device loading continue stucks if I cut of displayt in the same place. Also in this case there are debug message, I suggest it produced by fbset and caused by some error in ti81xxfb :

    open /dev/fb0: No such file or directory  

    Could you please provide full log about when/how exactly this error/warning message is produced? When you have this message, your boot process stuck, and you can not proceed, is that correct?

    /dev/fb0 is created by the framebuffer driver (FBDEV) ti81xxfb.ko:

    http://processors.wiki.ti.com/index.php/DM816X_AM389X_VPSS_Video_Driver_User_Guide

    FB0 - A single buffer of size 1920*1080*4*2 bytes, can be changed through bootargs

    FBDEV driver supports only memory mapped buffers. Driver allocates one physically contiguous buffers for each node, which can support up to 1920x1080 resolution 32 bpp format. By default, driver only allocates the memory for FB0(dev/fb0) node.

    Frame Buffer Driver

    This driver is registered with the FBDEV subsystem, and is responsible for managing the graphics layer frame buffer. Driver creates /dev/fb0, /dev/fb1 and /dev/fb2 as the device nodes. Application can open these device nodes to open the driver and negotiate parameters with the driver through frame buffer ioctls. Application maps driver allocated buffers in the application memory space and fills them for the driver to display.

    Opening and Closing of Driver

    • FBDEV Driver

    The driver will expose three software channels (/dev/fb0, /dev/fb1, /dev/fb2) for the graphics pipeline.

    /* Open a graphics Display logical channel in blocking mode */ 
    fd = open ("/dev/fb0", O_RDWR);
    if (fd == -1) {
    perror("failed to open display device\n");
    return -1;
    }
    fb0 -- => graphics0 - - => hdmi_venc(display0)->on_chip_hdmi output

    BR

    Pavel

  •  Hi, Pavel 

    Pavel Botev said:

    Could you please provide full log about when/how exactly this error/warning message is produced? When you have this message, your boot process stuck, and you can not proceed, is that correct?

    Exactly not correct. There are strange a bit situation, sometimes I receive this message right before it stucks, sometimes not. I offer not to think about this message for some time, because..

    I finaly managed to add debug messages into HDMI on-chip module driver and now I know where we stuck.

    Here is the calls queue before it stucks: 

    hdmi_init()  (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    hdmi_enable_display()   (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    hdmi_start_display()   (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    hdmi_set_power()  (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    hdmi_power_on()   (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    hdmi_get_edid()  (drivers/video/ti81xx/ti81xxhdmi/hdmi.c)

    HDMI_CORE_DDC_READEDID()   (arch\arm\plat-omap\hdmi_lib.c)

    read_edid()   (arch\arm\plat-omap\hdmi_lib.c)

    hdmi_core_ddc_edid()   (arch\arm\plat-omap\hdmi_lib.c)

     

    So here, in function  hdmi_core_ddc_edid()  we stuck in infinite loop in this block of code:

    while (((FLD_GET(hdmi_read_reg(ins, sts), 4, 4) == 1) ||
         (FLD_GET(hdmi_read_reg(ins, sts), 2, 2) == 0)) && j < 128) {
                           if (FLD_GET(hdmi_read_reg(ins, sts), 2, 2) == 0) {
                                  /* FIFO not empty */
                                 pEDID[i++] = FLD_GET(
                                 hdmi_read_reg(ins, HDMI_CORE_DDC_DATA), 7, 0);
                                 j++;
                          }
     }  

    It means that IN_PROG bit of DDC I2C Status Register (10.3.2.155 DDC I2C Status Register) is always in DDC operation in progress state (0x1 bit value)

    Also it means that we didn't go into above block of code, cuz condition was false: 

    if (FLD_GET(l, 5, 5) == 1) {
          printk("I2C No Ack\n\r");
          /* Abort transaction */
          REG_FLD_MOD(ins, HDMI_CORE_DDC_CMD, 0xf, 3, 0);
          while (FLD_GET(hdmi_read_reg(ins, sts), 4, 4) == 1);
          hdmi_read_reg(ins, sts);
          return -1;
    }

    (FLD_GET(l, 5, 5) == 1) condition was false, so HDMI transmitter receive an ACK from slave during address or data write (10.3.2.155 DDC I2C Status Register)

    But display wasn't connected. have you got any idea?  


    BR,

    Anton 

  • Hi Anton,

    I will check this with our HDMI driver team.

    Regards,

    Pavel

  • Anton,

    Can this be a hardware issue, as the software is working fine on the DM816X/AM389X EVM, but stuck on the AM3892 custom board?

    Here is one thread with hardware issue on DM816x HDMI based custom board which might be in help:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/257973/904568.aspx#904568

    Best regards,

    Pavel

  • Hi, Pavel 

    Pavel Botev said:

    Can this be a hardware issue, as the software is working fine on the DM816X/AM389X EVM, but stuck on the AM3892 custom board?

    Yes, it really was hardware issue, hardware engineer has made an mistake in hdmi i2c clock pin pull up. And it caused an issue with getting ACK on HDMI i2c while display wasn't connected. 

    BR,

    Anton 

  • Pavel,

    is it possible to run Matrix GUI application on connected non-hdmi display(DVI)  with resoulution 1600x900 for example?

    If not, is there any demo application to run with same connected display? 

     

    BR,

    Anton 

  • Anton,

    We have some info in that thread: http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/182131.aspx

    http://processors.wiki.ti.com/index.php/TI81XX_VPSS_Video_Driver_User_Guide#VPSS_Library:_display0

    Set the right VENC mode,default 1080p-60.Check drivers/video/ti81xx/vpss/sysfs.h to get name of the supported modes

    In ti-ezsdk_dm816x-evm_5_04_00_11/board-support/linux-2.6.37-psp04.04.00.01/drivers/video/ti81xx/vpss/sysfs.h file, for DVI resolutions we have:

    /**********************************************************
      The name in the followig arrays are the value used in the sysfs.
    **********************************************************/

    /*used for mode sysfs*/
    static const struct dc_vencmode_info vmode_info[] = {

    /*UXGA*/
        {"1600x1200@60", FVID2_STD_UXGA_60,
            {FVID2_STD_UXGA_60, 1600, 1200, FVID2_SF_PROGRESSIVE,
            162000, 60, 64, 304, 192, 1, 46, 3},
            TI81xx_MODE_DVI
        },

    .........

    {"1440x900@60", FVID2_STD_1440_900_60,
            {FVID2_STD_CUSTOM, 1440, 900, FVID2_SF_PROGRESSIVE,
            106500, 60, 152, 232, 80, 6, 25, 3},
            TI81xx_MODE_DVI
        },

    ...

    };

    I see we have 1600x1200 and 1440x900, but we do not have 1600x900 for DVI.

    BR

    Pavel

  • Pavel,

     

    Pavel Botev said:

    We have some info in that thread: http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/182131.aspx

    http://processors.wiki.ti.com/index.php/TI81XX_VPSS_Video_Driver_User_Guide#VPSS_Library:_display0

    Set the right VENC mode,default 1080p-60.Check drivers/video/ti81xx/vpss/sysfs.h to get name of the supported modes

    Great! I successfully managed to change resolution, it was quite easy.

     

    Pavel Botev said:
    I see we have 1600x1200 and 1440x900, but we do not have 1600x900 for DVI.
     

    But is it possible to add my custom resolution? 1600x900, for example?

    BR,

    Anton 

  • Anton,

    Anton Skornyakob said:
    But is it possible to add my custom resolution? 1600x900, for example?

    I found something for AM387x device, but it should work also for AM389x device. have a look on that thread:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/162411/696256.aspx#696256

    echo "-----------------------------------------------"
    echo "              1600x900@60                      "
    echo "-----------------------------------------------"
    #Disable graphics0 pipeline
    echo 0 > /sys/devices/platform/vpss/graphics0/enabled
    #Disable hdmi VENC
    echo 0 > /sys/devices/platform/vpss/display0/enabled

    #Set the new VENC mode
    echo 97750,1600/48/80/32,900/3/18/5,1 > /sys/devices/platform/vpss/display0/timings

    #Enable HDMI VENC
    echo 1 > /sys/devices/platform/vpss/display0/enabled
    #Enable graphics0 pipeline
    echo 1 > /sys/devices/platform/vpss/graphics0/enabled

    You can try if this approach will work for you also.

    Regards,

    Pavel

  • Hi, Pavel

     I faced some resolution issue. When I change resolution mode to 1440x900@60 the matrix gui application looks  like the frequency value is mistaken. This display normal resolution is 1440x900.

    Default full hd resolution works properly, but I need to produce non full hd resolution image. 

    I've attached an image for you.

      

     

    Another interesting moment was when I made a mistake in resolution changing shell script 

    # here was my misspelling

    echo 1 > /sys/devices/platform/vpss/graphics0/enabled   
    echo 0 > /sys/devices/platform/vpss/display0/enabled
    echo $1 > /sys/devices/platform/vpss/display0/mode
    echo 1 > /sys/devices/platform/vpss/display0/enabled
    echo 1 > /sys/devices/platform/vpss/graphics0/enabled 

     

    In result device stucked but the resolution was correct. 

     

      

    Best regards,

    Anton 

  • Anton,

    Could you provide the exact steps you are using to set the 1440x900 resolution. Below you can find two threads discussing this resolution, and might be in help:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/162411/694706.aspx#694706

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/t/100862.aspx

    Regards,

    Pavel

  • Pavel, 

    Pavel Botev said:
    Could you provide the exact steps you are using to set the 1440x900 resolution.

    sure, here it is:

    1. Connect device via HDMI cable + HDMI-DVI connector to 1440x900 DVI supporting display, start up.

    2. load linux kernel with filesystem provided by ti (as you remember there is some comments in load firmware script in /etc/init.d and PCI support disabled in kernel config)

    3. perform following sequence, 1440x900@60 is a mode taken from drivers\video\ti81xx\vpss\sysfs.h: 

    echo 0 > /sys/devices/platform/vpss/graphics0/enabled 
    echo 0 > /sys/devices/platform/vpss/display0/enabled

    echo 1440x900@60 > /sys/devices/platform/vpss/display0/mode

    echo 1 > /sys/devices/platform/vpss/display0/enabled
    echo 1 > /sys/devices/platform/vpss/graphics0/enabled  

     4. Enjoy matrix application gui on display 

     

    Best regards,

    Anton 

  • Anton,

    What about the below sequence, does it make any difference?

     
    echo 0 > /sys/devices/platform/vpss/graphics0/enabled
     
    echo 0 > /sys/devices/platform/vpss/display0/enabled

     
    echo 106500,1440/80/232/152,900/3/25/6,1 > /sys/devices/platform/vpss/display0/timings

     
    echo 1 > /sys/devices/platform/vpss/display0/enabled
     
    echo 1 > /sys/devices/platform/vpss/graphics0/enabled

  • Pavel, 

    Pavel Botev said:

    What about the below sequence, does it make any difference?

    unfortunately not, it produces the same result 

     

    Best regards,

    Anton 

  • Hello,

    You could try:

    /etc/init.d/matrix-gui-e stop
    /etc/init.d/pvr-init stop
    echo 0 > /sys/devices/platform/vpss/display0/enabled
    echo 106500,1440/80/232/152,900/3/25/6,1 > /sys/devices/platform/vpss/display0/timings
    echo 1 > /sys/devices/platform/vpss/display0/enabled
    fbset -xres 1440 -yres 900 -vxres 1440 -vyres 900
    /etc/init.d/matrix-gui-e start
    /etc/init.d/pvr-init start
    cat /sys/devices/platform/vpss/display0/mode
    1440x900@59


    Best Regards,

    Margarita

  • Hi, Margarita

    It works great, thank you! Could you try to explain please what was the reason of mistaken resolution on my display?


      

     

    Best regards,

    Anton

  • Hello,

    In your case, you should set the right timing, timing information is dependent on the display.

    For more information you could check:

    http://processors.wiki.ti.com/index.php/DM816X_AM389X_VPSS_Video_Driver_User_Guide

    You should set fb too.

    fbset - show and modify frame buffer device settings. fbset is a system utility to show or change the settings of the frame buffer device. The frame buffer device provides a simple and unique interface to access different kinds of graphic displays.

    Best Regards,

    Margarita