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.

OMAP5 ducati codecs using libdce, rpmsg-dce not connecting

I'm using GLSDK: ti-glsdk_omap5-uevm_6_03_00_01 which has kernel 3.8.13. I'm using a fully custom file system (not Ubuntu).

This version of the GLSDK appears to have had the omapdce staging driver removed. Has it been replaced by something else?

I'm trying to get gstreamer gst-ducati plugin to work, so have built libdce and ported omapdce rpmsg plugin over from an earlier GLSDK. I have also built the IPU M4 executable.

After loading all the modules, hotplug loads the M4 executable seemingly correctly. Loading the rpmsg-client-sample module runs the "hello world" ping correctly I think:

# modprobe rpmsg_client_sample
[839446.892059] rpmsg_client_sample rpmsg0: new channel: 0x400 -> 0x32!
[839446.898803] rpmsg_client_sample rpmsg1: new channel: 0x401 -> 0x33!
[839446.898956] rpmsg_client_sample rpmsg0: incoming msg 1 (src: 0x32)
[839446.898956] rpmsg_sample_cb68 65 6c 6c 6f 20 77 6f 72 6c 64 21 hello world!
[839446.899169] rpmsg_client_sample rpmsg0: incoming msg 2 (src: 0x32)
[839446.899169] rpmsg_sample_cb68 65 6c 6c 6f 20 77 6f 72 6c 64 21 hello world!
[839446.899383] rpmsg_client_sample rpmsg0: incoming msg 3 (src: 0x32)

...snip

Loading omapdce seem to register the driver, but the dce is never probed. It seems like rpmsg-dce never gets created on the bus. This could be some failure in the M4 code I suppose.

As a result the dce plugin never gets loaded and attempts to get the base ioctl address for DCE from the driver only gets EINVAL, indicating plugin not present.

Here are the modules I have loaded:

rpmsg_client_sample 1375 0 - Live 0xbf0e0000
omapdce 22231 0 - Live 0xbf0d6000 (C)
rpmsg_proto 5132 0 - Live 0xbf0d1000
omap_remoteproc 2323 1 - Live 0xbf06f000
remoteproc 18216 2 rpmsg_proto,omap_remoteproc, Live 0xbf055000
virtio_rpmsg_bus 8441 3 rpmsg_client_sample,omapdce,rpmsg_proto, Live 0xbf04f000
omapdrm_pvr 318176 0 - Live 0xbf000000 (O)

I'm not sure where to look next. Has the OMAP5 DCE API been tested on this GLSDK? What else might I be missing on the Linux side? I feel like I should be starting to debug on the M4 side, but I'm currently assuming that that code is supposed to work okay.

  • Perhaps this might help:

    # cat /debug/remoteproc/remoteproc0/trace0 
    [0][      0.000] 16 Resource entries at 0x3000
    [0][      0.000] IPU starting..
    [0][      0.000] 
    [0][      0.000] 
    [0][      0.000]  **** IPUMM VERSION INFO **** 
    [0][      0.000] 
    [0][      0.000] Compile DATE Apr 30 2014 TIME 15:57:39 
    [0][      0.000] GIT IPUMM 
    [0][      0.000]        BRANCH :  
    [0][      0.000]        TAG : fatal: Not a git repository (or any parent up to mount parent /home) 
    [0][      0.000]        COMMIT-ID : fatal: 
    [0][      0.000] 
    [0][      0.000] ** IPUMM VERSION INFO END ** 
    [0][      0.000] Trace level PA 0x95f5487c Trace Level 0                   
    [0][      0.000] Trace Usage: level:[0-4: 0-no trace, 1-err, 2-debug, 3-info, 4-CE,FC,IPC traces] 
    [0][      0.000] 
    [0][      0.000] Trace Buffer PA 0x98a00000 kpi_control (PA 0x95f4fba8 value 0x0)
    [1][      0.000] copyTask 50: Entered...:
    [0][      0.000] OMAPRPC: registered channel: rpmsg-dce
    [1][      0.000] registering rpmsg-client-sample:sample-desc service on 50 with HOST
    [1][      0.000] copyTask 51: Entered...:
    [0][      0.000] OMAPRPC: Returning Object @8020c470
    [1][      0.000] registering rpmsg-client-sample:sample-desc service on 51 with HOST
    [0][      0.000] loadTask: started
    [0][      0.000]   SLEEP_TICKS: 1000
    [0][      0.000]   Load_hwiEnabled: 0
    [1][      0.000] OMAPRPC: connecting from local endpoint 59 to port 59
    [0][      0.000]   Load_swiEnabled: 0
    [0][      0.000]   Load_taskEnabled: 1
    [0][      0.000]   Load_updateInIdle: 1
    [1][      0.000] registering rpmsg-rpc:rpmsg-dce service on 59 with HOST
    [0][      0.000]   Load_windowInMs: 11
    [1][      0.000] OMAPRPC: started channel on port: 59
    [0][      1.000] loadTask: cpu load = 27%
    [0][      2.000] loadTask: cpu load = 22%
    

    It appears that rpmsg-dce is registered in the IPU. I don't understand why rpmsg_probe() in dce.c doesn't get called then?

    Any hints?

    Thanks,

    Nick

  • The trick here is using libdce2. I didn't find that in the documentation anywhere, but switching to this version has got me a lot further. I now can open connections to the codecs with my test code, though as yet I haven't pushed any data through - I need to update my buffer management code to use BOs.

    I think I have enough to move forward on to gstreamer plugins now though.