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.

Memory protection example for C6747

I am working with OMAP L137 EVM and wanted to evaluate memory protection in DSP/BIOS (MPC module).

In bios 5.33.03 directory there are examples for mpc, like mpc_task project. Mpc_task example is provided only for three platforms and not for C6747.

I have tried to port it to evm6747 and managed to build it but it doesn't seem to work correctly because this example is about to show BIOS exeception when one task is trying to write to protected memory. In my "ported" mpc_task project there is no exception. Task can write to memory which should be protected.

Are there any plans to provide mpc example for more platforms?

  • I would expect BIOS examples for the C6747 within a future version of BIOS, but I could not say when.

    As to the porting, I am curious what exactly you did to port it? If there is a C6747 configuration available to the TCF file than you should be able to port with a simple TCF file change to reference C6747 instead of the processor it originally referenced, which should also take care of any differences in memory map and accessing unique device hardware (i.e. timers and possibly any exception register differences).

  • Porting: yes, I meant changing tcf to evm6747 (which is already available) and changing memory map and all neccessary memory addresses which are used explicitly in the project. However, I guess there might be some bugs in MPC module for C6747.

    Function MPC_setBufferPA() might have a bug. For example if I want to set some protection to whole L1D memory I should call this function like this MPC_setBufferPA( (Ptr) 0x00F00000, 0x00008000,0,0). (0x00F00000 starting address of L1D, 0x00008000 - L1D length). After calling this function I should see all 32 register L1DMPPAxx reset. But only 8 registers are reset ( L1DMPPA00-L1DMPPA07)

    and when I call MPC_setBufferPA( (Ptr) 0x00F08000,0x00001000,0,0) it resets next register L1DMPPA08 but 0x00F08000-0x00F08FFF does not exist in 6747 memory map.

  • I have experienced the same problem. In my opinion MPC functions don't work correctly. I decided to make those functions by myself, and it works. I am only curious, where can I find information about L1D memory, like page size, and how L1DMPPA0 ... L1DMPPA31 registers correspond to specific pages in L1D memory. I'm not sure but it looks like L1D Region 0 doesn't exist, and only L1DMPPA16 ... L1DMPPA31 (Region 1) registers are used. In my opinion it looks like this:

    L1DMPPA16 <-> 0x00f0 0000  - 0x00f0 07ff

    L1DMPPA17 <-> 0x00f0 0800  - 0x00f0 0fff

    L1DMPPA18 <-> 0x00f0 1000  - 0x00f0 17ff

    L1DMPPA19 <-> 0x00f0 1800  - 0x00f0 1fff

    ....

    L1DMPPA30<-> 0x00f0 7000  - 0x00f0 77ff

    L1DMPPA31 <-> 0x00f0 7800  - 0x00f0 7fff,

    am I right?

     

    Best Regards,

    Grzegorz