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.

AM5728: Proc SDK Linux CMEM Usage

Part Number: AM5728

AM5728 EVM
Proc SDK Linux 3.01

In arch/arm/boot/dts/am57xx-evm-cmem.dtsi we have dedicated 192 MB of memory to CMEM.  Furthermore, we've defined that memory to consist of a single 192 MB buffer, i.e. you either get all 192 MB or you get none.  That seems like a rather specific scenario.  Is there a specific demo/example that needs this 192 MB of DDR?  If it was for general purpose usage, I would expect a collection of various buffer sizes available rather than a single massive buffer.

  • Hi Brad,

    The software team have been notified. They will respond here.
  • Hi Brad,

    The 192MB of DDR is more like a CMEM pool, and you can use allocate a buffer from the pool using CMEM_alloc() function.

    Regards,
    Garrett
  • Hi Brad,

    On the AM57xx technical documents page is a application note for Processor SDK Linux multi-core customization. It covers where the CMEM pools are defined and how to modify them. Direct link here.

  • Garrett Ding said:
    The 192MB of DDR is more like a CMEM pool, and you can use allocate a buffer from the pool using CMEM_alloc() function.

    It is a CMEM pool.  More specifically, it is a pool consisting of a single 192 MB buffer.

    root@am57xx-evm:~# cat /proc/cmem

    Block 0: Pool 0: 1 bufs size 0xc000000 (0xc000000 requested)

    Why did we choose a single 192 MB buffer? Is there an application/example where we require a single contiguous 192MB buffer?  Here's the mapping I'm referring to:

                    cmem_block_0: cmem_block@0 {

                            reg = <0>;

                            memory-region = <&cmem_block_mem_0>;

                            cmem-buf-pools = <1 0x0 0x0c000000>;

                    };

    It seems like perhaps this would be more usable as twelve 16MB buffers like this:

                    cmem_block_0: cmem_block@0 {

                            reg = <0>;

                            memory-region = <&cmem_block_mem_0>;

                            cmem-buf-pools = <12  0x0 0x01000000>;

                    };

    It seems rather precise to specify a single 192MB buffer.  I want to understand if that is for a specific example, or if that is something we might look to improve.