Syslink driver error persists, how to solve it?

Hi, 

I am working with Codec Engine image1_copy example with EZSDK 5 05 01 04, evm8168. I have encountered the backtrace and ioremap error when running the example.

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.

I have done the following:

Rebuild the syslink driver, insert it into the kernel with this script:

CMEM_MODPARAMS="phys_start=0xa0000000 phys_end=0xa07fffff pools=8x614400" 

if [ -e syslink.ko ]
then
modprobe syslink TRACE=0 TRACEFAILURE=1 TRACEENTER=1
fi

if [ -e /dev/syslinkipc ]
then
for dev in `ls /dev/syslinkipc`; do
chmod 666 /dev/syslinkipc/$dev
done
fi

if [ -e cmemk.ko ]
then
modprobe cmemk $CMEM_MODPARAMS
fi

Also reduced Linux memory to different sizes MEM=169M, 168M, 128M.

Is there something else I am missing? I would like to know if cmem bootargs can affect syslink driver at runtime, also if there are other Linux Kernel bootargs considerations a may be not got into account, if they are how can i set them. Regards

- Jose L.

  • Hi,

    Getting an ioremap() on system memory error likely indicates that a section of your DSP memory is overlapping with the memory assigned to Linux kernel.

    In your linux kernel bootargs, check and see the memory given to the Linux kernel via one or more  'mem= ...' arguments, for example:

       'mem=256M@0x80000000'
    or
       'mem=256M'

    (the latter just will assume start address=0x80000000) will give Linux kernel 256MB starting at 0x80000000. You want to make sure that the memory assigned to the DSP is not included in the range of memory assigned to Linux. You can create holes to assign to DSP or other non-linux users of memory by having multiple 'mem=' arguments. For example,

    mem=256M@0x80000000 mem=254M@0x90200000

    will give Linux 256MB of memory [0x8000 0000-0x8FFF FFFF] leave an unassigned 2MB hole @0x90000000, which for example can be memory assigned to the DSP, and then the second mem argument will give Linux the 254MB memory starting at 0x9020 0000.

    Hope this helps,

    Murat

     

     

     

    Can you change this environment variable so that Linux memory will not overlap with the DSP memory?

     

  • In reply to raormanrat:

    Hi Murat, thanks for your fast reply.

    Maybe I am asuming too much about my board memory configuration, as if it is using the exact memory map for the EZSDK.

    Happens that when I used the genserver wizard I set the memory configuration as default, like this one:

    DDR3 0x01800000 24MB

    DDRALGHEAP 0x00800000 8MB. 

    The example works, so the error  is more like a warning in case of misbehavior.

    As a fresh start i will review EZSDK memory map, have it in mind when i set the DSP server memory configuration and the Linux Kernel partition size, if I am understanding you the "@" character defines the exact physical address where this partition will be. 

    But first i'll just set mem=256M@0x80000000 to see what happens

    - Jose L.

  • In reply to Jose Lopez1:

    Murat, 

    I have made what you suggested,  through bootargs I assigned 2 splitted Linux Memory blocks. mem=168M@0x80000000 mem=128M@0x8c800000 to have a 20MB memory hole for the DSP, now the syslink driver doesnt complain. Thank you for your help.

    - Jose L.

  • In reply to Jose Lopez1:

    That's great Jose,

    Thanks for confirming that the suggestion fixed the issue.

    Murat