As my previous reply said, I have tried it. But it still failed.
BTW, there is always one information when stop DSP core.
Is it normal?
FXNF_run() at fxn.s62:69 0x118037B4 (FXN_F_run does not contain frame information)
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.
Hi,
The uart console will be halted when DSP/BIOS task shift.
My customer found that the console will be halted in below scenario.
1. Run Linux in ARM9;
2. Connect ARM9-core;
3. Connect C674x-core;
4. Load hello.out into DSP and run;
It used DSP/BIOS hello example for test.
When run DSP core, the uart console is active;
But it will be halted when stop DSP core running.
The uart console:
For hello project, I modified memory base address and length for DDR in order to avoid DDR memory confliction with ARM9 Linux.
Hi Gary,
Try to change the memory to internal DSP RAM L1/L2/L3 (shared RAM -> Which is not used by Linux) to run the hello program in DSP core.
IRAM is OK.
But why it doesn't work, even using DDR memory which is not used by Linux?
Hi Gary,
I'm sure that you won't face problem when we use shared RAM (L3).
While Linux accessing the DDR, I'm not sure that we are not accessing the Linux's DDR part.
We can confirm by Linux bootup log.
Kernel command line: mem=32M console=/dev/ttyS2,115200 ip=dhcp nfsroot=10.100.1.94:/usr/local/filesystem_omapl138 root=/dev/nfs rw rt
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 32MB = 32MB total
Memory: 26972k/26972k available, 5796k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc2800000 - 0xff000000 ( 968 MB)
lowmem : 0xc0000000 - 0xc2000000 ( 32 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc04d0000 (4896 kB)
.init : 0xc04d0000 - 0xc04fc000 ( 176 kB)
.data : 0xc04fc000 - 0xc0538d20 ( 244 kB)
.bss : 0xc0538d44 - 0xc0556c4c ( 120 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:245
How about your linux bootup log ?
ARM better to avoid peripherals which is owned DSP respectively.
So that we can avoid unexpected behavior.
Below is my linux boot up logs:
Kernel command line: console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw ip=off mem=32M@0xc0000000 mem=64M@0xc4000000 rootwait
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 32MB 64MB = 96MB total
Memory: 92348k/92348k available, 5956k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc8800000 - 0xff000000 ( 872 MB)
lowmem : 0xc0000000 - 0xc8000000 ( 128 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc0475000 (4532 kB)
.init : 0xc0475000 - 0xc049d000 ( 160 kB)
.data : 0xc049e000 - 0xc04cf760 ( 198 kB)
.bss : 0xc04cf784 - 0xc04eca6c ( 117 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:245
I'm confused that I have set linux memory map as
mem=32M@0xc0000000 mem=64M@0xc4000000.
So it should be OK if I set DDR base 0xc3000000 and 0x80000 length for DSP.
But it still fails.
I tried to modify Linux memory map as below and test it again.
It still failed.
The log:
Booting Linux on physical CPU 0
Linux version 3.3.0 (gtbldadm@ubuntu-12) (gcc version 4.5.3 20110311 (prerelease) (GCC) ) #1 PREEMPT Tue Nov 5 20:19:32 EST 2013
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: AM18x/OMAP-L138 lcdk board
Memory policy: ECC disabled, Data cache writeback
BUG: mapping for 0x80000000 at 0xfffe0000 out of vmalloc space
DaVinci da850/omap-l138/am18x variant 0x1
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
Kernel command line: console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw ip=off mem=32M rootwait
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 32MB = 32MB total
Memory: 27396k/27396k available, 5372k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc2800000 - 0xff000000 ( 968 MB)
lowmem : 0xc0000000 - 0xc2000000 ( 32 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc0475000 (4532 kB)
.init : 0xc0475000 - 0xc049d000 ( 160 kB)
.data : 0xc049e000 - 0xc04cf760 ( 198 kB)
.bss : 0xc04cf784 - 0xc04eca6c ( 117 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:245
Hi Gary,
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc2800000 - 0xff000000 ( 968 MB)
lowmem : 0xc0000000 - 0xc2000000 ( 32 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc0475000 (4532 kB)
The provided "0xc7000000" memory address is used & allocated for virtual address mapping of linux which you are using DSP program.
According to what your mentioned, it should avoid the DDR memory of Linux.
With refering to my log information, the address bank between 0xc2000000~0xc28000000 should be ok for DSP.
But it actually fails according to my test result right now.
Hi Gary,
I'm confused that I have set linux memory map as
mem=32M@0xc0000000 mem=64M@0xc4000000.
So it should be OK if I set DDR base 0xc3000000 and 0x80000 length for DSP.
I think, you can use "0xc3000000" as base address for DSP program.
The below table gives the configurations about linux memory map.
syslink_2_21_03_11/examples/ex01_helloworld/shared/config.bld
/* Memory Map for ti.platforms.evmOMAPL138
*
* C000_0000 - C7FF_FFFF 800_0000 ( 128 MB) External Memory
* ------------------------------------------------------------------------
* C000_0000 - C1FF_FFFF 200_0000 ( 32 MB) Linux
* C200_0000 - C200_FFFF 1_0000 ( 64 KB) SR_0 (ipc)
* C201_0000 - C2FF_FFFF FF_0000 ( ~15 MB) --------
* C300_0000 - C37F_FFFF 80_0000 ( 8 MB) DSP_PROG (code, data)
* C380_0000 - C3FF_FFFF 80_0000 ( 8 MB) --------
* C400_0000 - C7FF_FFFF 400_0000 ( 64 MB) Linux
*/
Please try it let me know the status.
Hi Gary Wu,
I know this is not an answer for your question. But still, need some clarification.
First, we would like to understand your project requirement. ( i.e, why do you need to run the linux on ARM9 and then run hello world project on DSP core. ) Do you looking for establishing a communication between both the cores ( ARM and DSP ) ? or looking for any resource management between both the cores ?
By any chance you tried out the syslink examples? (Inter-Processor Communication (IPC) software to communicate between Linux and DSP applications.)
One of the modules of Syslink is "system manager".
The Ipc module (System Manager) provides a means of integrating all the individual Processor Managers and IPCs into a single comprehensive product. It also provides management of system resources such as system memory.
For more information on syslink, please visit http://processors.wiki.ti.com/index.php/SysLink_UserGuide#Modules0
Regards,
shankari
Hi all,
The issue has been fixed after chaning timer for SYS/BIOS.
The root cause is that timer0 is used in Linux and SYS/BIOS at the same time.
http://processors.wiki.ti.com/index.php/OMAP-L1_Linux_Drivers_Usage#Timers
Hi Gary,
Thanks for your update.
I've seen one more post like this.
http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/p/383164/1350634.aspx#1350634