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.

SYS/BIOS and DSPLINK compatibility

Other Parts Discussed in Thread: OMAPL138, OMAP3530

Can someone tell me if it is possible to use DSPLINK with SYS/BIOS?

I have just done a migration of my OMAPL138 project from DSP/BIOS to SYS/BIOS and I notice that the linker cannot locate _HWI_restore amongst other things. That would indicate to me that DSPLINK needs DSP/BIOS.

Thanks

Iain

  • Iain,

    Yes, DSPLink has components for the DSP that contain DSP/BIOS usage.  SysLink is written to SYS/BIOS.

    SYS/BIOS contains a DSP/BIOS "legacy" layer that allows DSP/BIOS-coded applications to be built on top of SYS/BIOS, although I don't know if that legacy layer will work for DSPLink.  Even though you have already converted your project from DSP/BIOS to SYS/BIOS, you still could give it a try for satisfying your DSPLink usage.  If that doesn't pan out, then you will need to convert to SysLink.

    There is a document for migrating from DSP/BIOS to SYS/BIOS, which also contains information about the legacy support.  This document is linked to by the SYS/BIOS release notes, look for the link named "Migrating a DSP/BIOS 5 Application to SYS/BIOS 6" in the "Documentation" section.  Here's a link to release notes from a recent SYS/BIOS release: http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_30_03_46/exports/docs/Bios_6_30_03_46_release_notes.html
    and here is a link to a Forum thread discussing this issue, although not in the context of DSPLink or SysLink: http://e2e.ti.com/support/embedded/bios/f/355/t/87035.aspx

    Regards,

    - Rob

     

     

  • Rob,

    Thanks for this info.

    I have tried to build my app with DSPLINK but some of the reference are for DSP/BIOS functions so I am coming to the conclusion that I have to migrate to SYSLINK.

    Regards Iain

  • Iain,

    I believe your conclusion above is correct.  While it might be possible to fit the square peg of DSPLink into the round hole of SYS/BIOS legacy support, it's not a good fit and could lead to unforseen, hard-to-solve difficulties.  The basic message is "if you use SYS/BIOS you need to use SysLink".

    In case you don't already have it, here's a link to a migration guide: http://processors.wiki.ti.com/index.php/SysLink_MigrationGuide

    Please don't hesitate to come back to the Forums for help in migrating to SysLink.

    Regards,

    - Rob

     

  • I am in an odd situation where I have existing SYS/BIOS code running on a 6472 DSP and would like to port it to the DSP running on the OMAP3530.  The problem here is that I am using a 3.0 kernel on the linux side of the OMAP so I can't use syslink.  

    So now I am stuck with SYS/BIOS code for the DSP and a kernel that can only run DSPLink.  If TI would update SysLink to support newer kernel's this wouldn't be an issue. Why does the older DSPLink product work in newer kernels but the newer syslink does not?

  • Are you getting an error when using SysLink with Linux 3.x kernel?  Though there's no TI-provided SDK for OMAP3 on Linux 3.x, several customers have gotten it to work, perhaps with minor changes.

    Chris

  • From what I can tell, it will work with the 3.2 kernel.  They added iommu_get/put back in that version.  I am unfortunately stuck with a 3.0 kernel which does not have these functions.  Somehow my kernel is too old AND too new for syslink :)

    Right now I am investigating how I can either get a 2.6 or 3.2 kernel in my build

  • Kevin Alden said:
    From what I can tell, it will work with the 3.2 kernel.  They added iommu_get/put back in that version

    Kevin,

    I was curious about it going away and then coming back, so I went to my usual Linux database to check things out.  From the Free Electrons LXR (Linux Cross Referencer) it appears to me that iommu_get() existed up until 3.1 and went away in 3.2 and onwards.  It appears to exist in 3.0 (the version you're using), here's where I saw it: http://lxr.free-electrons.com/ident?v=3.0;a=arm;i=iommu_get.  Perhaps you could double-check your investigation of its existence.

    So, it looks like SysLink needs to be modified for Linux v3.2 and up, but should be OK for 3.0 (at least as far as iommu_get/put is concerned).

    Regards,

    - Rob

     

  • that is odd.  uname reports kernel 3.0.0 so I'm not sure whats going on.  I'll keep investigating.

  • so it looks like my kernel branch is taken from here http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=tree;hb=refs/heads/omap-3.0-pm

    This is what ettus is using for the USRP build environment.  The git repo says 2.6, but the branch itself is labeled 3.0.

    Anyways, it looks like there are iommu calls for omap here: http://www.sakoman.com/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=blob;f=arch/arm/plat-omap/iommu.c;h=34fc31ee9081ff8624d77dfb664ebe059d4c9343;hb=refs/heads/omap-3.0-pm

    They must not be getting built into my kernel for some reason though.  The patch provided with the syslink source attempts ro resolve this problem by patching arch/arm/mach-omap2/omap3-iommu.c which i don't have in my kernel.

  • After some manual patching I was able to force my kernel to try and build this support in.  Unfortunately, a number of sub functions are missing.  It seems that my kernel does not have complete support for iommu on omap3 even though some of the code for it is there.

  • I've gotten it working.  My kernel needed the following options turned on:

    CONFIG_OMAP_IOMMU

    CONFIG_OMAP_IOMMU_IVA2

    Unfortunately, these are hidden options and the kernel build system wouldnt let me enable them in the kernel config.  I made the following patch to get things rolling:

    --- a/arch/arm/mach-omap2/omap-iommu.c 2012-12-03 09:38:34.348863812 -0500
    +++ b/arch/arm/mach-omap2/omap-iommu.c 2012-12-03 10:10:53.740142683 -0500
    @@ -37,7 +37,7 @@
    .da_end = 0xFFFFF000,
    },
    },
    -#if defined(CONFIG_OMAP_IOMMU_IVA2)
    +/* #if defined(CONFIG_OMAP_IOMMU_IVA2) */
    {
    .base = 0x5d000000,
    .irq = 28,
    @@ -49,7 +49,7 @@
    .da_end = 0xFFFFF000,
    },
    },
    -#endif
    +/* #endif */
    };
    #define NR_OMAP3_IOMMU_DEVICES ARRAY_SIZE(omap3_devices)
    static struct platform_device *omap3_iommu_pdev[NR_OMAP3_IOMMU_DEVICES];


    --- a/arch/arm/mach-omap2/Makefile 2012-12-03 11:54:57.722787303 -0500
    +++ b/arch/arm/mach-omap2/Makefile 2012-12-03 11:55:11.918924746 -0500
    @@ -2,6 +2,8 @@
    # Makefile for the linux kernel.
    #

    +CONFIG_OMAP_IOMMU=y
    +
    # Common support
    obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o \
    common.o gpio.o dma.o wd_timer.o


    --- a/arch/arm/plat-omap/Makefile 2012-11-27 18:24:25.000000000 -0500
    +++ b/arch/arm/plat-omap/Makefile 2012-12-03 15:10:05.341740051 -0500
    @@ -2,6 +2,8 @@
    # Makefile for the linux kernel.
    #

    +CONFIG_OMAP_IOMMU=y
    +
    # Common support
    obj-y := common.o sram.o clock.o devices.o dma.o mux.o \
    usb.o fb.o io.o counter_32k.o