My company is developing a video application for the DM8148 with 2GB DDR2. We use CMEM buffers to exchange video frames with the DSP.
The current memory configuration is:
linux:
mem=364M mem=1020M@0xc0000000 vmalloc=576M
CMEM:
pools=40x2350080,2x4096,1x4202496 phys_start=0x9fc00000 phys_end=0xabc00000 allowOverlap=1
I would like to give the 1020M block @0xc0000000 that is currently used by linux to CMEM and the CMEM block at 0x9fc00000 which is actually 320MB to linux.
So far I haven't been able to get this to work and I've noticed the following problems, perhaps someone can shed some light on these for me.
1) CMEM kernel module fails to load with a 1020MB @ 0xc0000000 because vmalloc is too small, vmalloc seems to have a hard coded limit of 856MB.
2) CMEM kernel module loads with 192MB @ 0xc00000000 but my application fails, could it be that the DSP can't access this memory range?
I also tried configuring CMEM with 320MB @ 0x9fc00000 which requires me to increase the vmalloc size but I have had trouble with this too:
1) Kernel panic on boot if linux uses 1020MB@0cx0000000 and vmalloc is too large
2) CMEM kernel module fails to load with 320MB @ 0x9fc00000 and vmalloc increased to 664MB (calculated as old_vmalloc + new_CMEM_size - old_CMEM_size = 576MB + 320MB - 192MB)
3) CMEM kernel module loads with 320MB @ 0x9fc00000 and vmalloc increased to 864MB and my application runs but the ti81xxvo module fails to load.
So I'm basically back to square one using only 192MB for my video buffers, which is OK.. but I have ~1GB of memory that is essentially unused and I don't understand why the configuration changes I tried don't work as expected.