• Not Answered

DSPLink fails in Linux 3.1

Hi,

We are using a custom made board based on a OMAP-L138.

After upgrading Linux kernel to 3.1 from 2.6.37, We are getting problem while trying to use the DSPLink module.

0x8000800c (DSP_EMEMORY) seems to be the error-code, but it should be enough memory.

No changes in either DSPLink (except built for different kerneln versions) or the DSP-application is made. It still works perfect in 2.6.37.

I have tried to set "mem=xxxM" as bootargs to the kernel, but it does not help. 

We are using DSPLink v1.65.00.03.

 

Any suggestions?

Thanks in advance

 

Debug output:

 

Entered PMGR_PROC_setup ()

    toSetup : 1

Entered LDRV_moduleInit ()

        linkCfg [0x5abc8]

Entered LDRV_getLinkCfg ()

        linkCfg [0x5abc8]

        knlLinkCfg      [0xbf192308]

Entered LDRV_getLinkDspCfg ()

        procId  [0x0]

        dspCfg  [0x5b0bc]

        knlLinkCfg      [0xc8b8c000]

Leaving LDRV_getLinkDspCfg ()   status [0x8000]

Leaving LDRV_getLinkGppCfg ()   status [0x8000]

Entered LDRV_PROC_moduleInit ()

Leaving LDRV_PROC_moduleInit ()         status [0x8000]

Entered LDRV_SMM_moduleInit ()

Leaving LDRV_SMM_moduleInit ()  status [0x8000]

Entered LDRV_MPCS_moduleInit ()

Entered LDRV_MPCS_OS_moduleInit ()

Leaving LDRV_MPCS_OS_moduleInit ()      status [0x8000]

Leaving LDRV_MPCS_moduleInit ()         status [0x8000]

Entered LDRV_MPLIST_moduleInit ()

Leaving LDRV_MPLIST_moduleInit ()       status [0x8000]

Entered LDRV_RINGIO_moduleInit ()

Leaving LDRV_RINGIO_moduleInit ()       status [0x8000]

Leaving LDRV_moduleInit ()      status [0x8000]

Entered PMGR_MSGQ_setup ()

Entered LDRV_MSGQ_setup ()

Leaving LDRV_MSGQ_setup ()      status [0x8000]

Leaving PMGR_MSGQ_setup ()      status [0x8000]

Leaving PMGR_PROC_setup ()      status [0x8000]

Entered PMGR_PROC_attach ()

        procId  [0x0]

        attr    [0x0]

Entered LDRV_init ()

        procId  [0x0]

        dspCfg  [0x0]

Leaving LDRV_init ()    status [0x8000]

Entered LDRV_PROC_init ()

        dspId   [0x0]

 DSP_init status [0x8000800c]

Entered LDRV_PROC_exit ()

        dspId   [0x0]

Assertion failed (dspState->halObject != NULL). File : /home/developer/projects/dsplink_linux_1_65_00_03/build/gpp/src/../../gpp/src/arch/DA8XXGEM/da8xxgem.c Line : 611

Leaving LDRV_PROC_exit ()       status [0x8000]

Leaving LDRV_PROC_init ()       status [0x8000800c]

Entered LDRV_exit ()

        procId  [0x0]

Leaving LDRV_exit ()    status [0x8000]

Leaving PMGR_PROC_attach ()     status [0x8000800c]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10000]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10001]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10002]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10003]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10004]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10005]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10006]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10007]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10008]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x10009]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000a]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000b]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000c]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000d]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000e]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_MSGQ_close ()

        msgqQueue       [0x1000f]

Leaving PMGR_MSGQ_close ()      status [0x8000800b]

Entered PMGR_PROC_getSetupRefCount ()

    PMGR_PROC_getSetupRefCount [1]

Leaving PMGR_PROC_getSetupRefCount ()

Entered PMGR_PROC_destroy ()

Entered PMGR_MSGQ_destroy ()

Entered LDRV_MSGQ_destroy ()

Leaving LDRV_MSGQ_destroy ()    status [0x8000]

Leaving PMGR_MSGQ_destroy ()    status [0x8000]

Entered LDRV_moduleExit ()

Entered LDRV_RINGIO_moduleExit ()

Leaving LDRV_RINGIO_moduleExit ()       status [0x8000]

Entered LDRV_MPLIST_moduleExit ()

Leaving LDRV_MPLIST_moduleExit ()       status [0x8000]

Entered LDRV_MPCS_moduleExit ()

Entered LDRV_MPCS_OS_moduleExit ()

Leaving LDRV_MPCS_OS_moduleExit ()      status [0x8000]

Leaving LDRV_MPCS_moduleExit ()         status [0x8000]

Entered LDRV_SMM_moduleExit ()

Leaving LDRV_SMM_moduleExit ()  status [0x8000]

Entered LDRV_PROC_moduleExit ()

Leaving LDRV_PROC_moduleExit ()         status [0x8000]

Entered LDRV_freeLinkDspCfg ()

        procId  [0x0]

        knlLinkCfg      [0xc8b8c000]

Leaving LDRV_freeLinkDspCfg ()  status [0x8000]

Entered LDRV_freeLinkGppCfg ()

        knlLinkCfg      [0xc8b8c000]

Leaving LDRV_freeLinkGppCfg ()  status [0x8000]

Leaving LDRV_moduleExit ()      status [0x8000]

Leaving PMGR_PROC_destroy ()    status [0x8008]

 

1 Reply

  •  

    The problem is fixed with an ugly hack...

    DSPLink is trying to call ioremap on System memory. This is not allowed in later versions of Linux kernels since it will cause problems on ARMv6+.

    This is no problem in out case, so I just removed the check.

     

    Texas Instruments, Is there any DSPLink updates out there that is just waiting to be released?

     

    diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c

    index ab50627..1a0d324 100644

    --- a/arch/arm/mm/ioremap.c

    +++ b/arch/arm/mm/ioremap.c

    @@ -204,8 +204,8 @@ void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn,

            /*

             * Don't allow RAM to be mapped - this causes problems with ARMv6+

             */

    -       if (WARN_ON(pfn_valid(pfn)))

    -               return NULL;

    +       //if (WARN_ON(pfn_valid(pfn)))

    +       //      return NULL;

     

            type = get_mem_type(mtype);

            if (!type)