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.

AM620-Q1: Is Reset Isolation for MCU Domain is so called FFI (freedom from interference) ?

Part Number: AM620-Q1


Tool/software:

Hi, Dear Expert

This is concept question, need your double check

We have an sample code (Reset Isolation - MCU Domain), I think it's FFI (freedom from interference) demo, isn't?

https://dev.ti.com/tirex/explore/content/mcu_plus_sdk_am62x_10_01_00_33/docs/api_guide_am62x/EXAMPLES_DRIVERS_RESET_ISOLATION.html

When MCU enter Reset Isolation (FFI?!),

(1) Main and MCU domain peripheral can not access each other, isn't

(2) Any IPC service (ex:RPMSG) will be disable, isn't?

Thank You.

Gibbs

  • Hello Gibbs,

    I am looking at your queries and you may expect reply in one or two days .

    Regards,

    Anil.

  • We have an sample code (Reset Isolation - MCU Domain), I think it's FFI (freedom from interference) demo, isn't?

    Hello Gibbs,

    Yes, you are correct.

    The above example can be used to showcase that the MCU domain can still be isolated from the MAIN domain after the Reset.

    (1) Main and MCU domain peripheral can not access each other, isn't

    Yes, by default, in the Reset Isolation MCU+SDK example , the cross domain peripherals usage  is restricted.

    So, that IPC does not work out in between the cores.

    But if the customer wants the Reset isolation along with the IPC and Cross domain peripherals, then we can configure the MCU domain as Partially Isolated.

    In this mode , the MCU core will still be isolated when the MAIN domain gets the Reset and cross domain peripherals usage is allowed.

    If you control these flags below, then the cross domain peripherals usage  will work and the MCU core gets isolated from the MAIN domain after the Reset.

        pscMain2MCUDisable = 0;
        /* Disabling MCU2Main PSC. This would restrict the MCU domain from accessing
        Main domain peripherals/registers. Care must be taken no MCU domain cores access
        Main domain registers after this */
        pscMCU2MainDisable = 0;

    Regards,

    Anil.

  • Hi, Anil

    Thanks your replies & information sharing.

    I think customer wants MCU works in "Reset Isolation", but they also hope RPMSG keep working between MCUSS M4 & A53.

    that's why I create this thread.

    I will let customer know this information & wait their feedback

    Thanks

    Gibbs

  • Hello Gibbs,

    If the customer wants the Reset Isolation and IPC in between M4F and A53, then they should go with the steps below and this works for them.

    Please let me know if you need any help 

    But if the customer wants the Reset isolation along with the IPC and Cross domain peripherals, then we can configure the MCU domain as Partially Isolated.

    In this mode , the MCU core will still be isolated when the MAIN domain gets the Reset and cross domain peripherals usage is allowed.

    If you control these flags below, then the cross domain peripherals usage  will work and the MCU core gets isolated from the MAIN domain after the Reset.

    Regards,

    Anil.

  • Hello ,

    Can you please confirm you integrated the Reset Isolation example into your application ?

    Before the WarmReset, Is  IPC communication working ?

    Regards,
    Anil.

  • Hello Anil,

    1.Yes, I'm sure it's integrated.

    2.Before the WarmReset,IPC  communication is working.

    (Sincerely sorry, just because of my negligence, I used the wrong signature.)

    Regards,

    Devin.

  • Hello Devin,

    Now I understand the issue. Actually, the Linux Table IPC information is available on the DDR memory.

    Once you reset the MAIN domain, the DDR content is also lost. So, the IPC does not work when this buffer is cleared.

    Next Steps :

    To fix this issue, you are already resetting the main domain from MCU M4F. So, first take the copy of Linux Resource table data (DDR) and move DDR data to M4F DRAM memory. Do reset the MAIN domain.

    Once SBL is started , then copy M4F DRAM data to the DDR for the IPC resource table memory.

    The below link is also similar to the issue faced on the AM62A devices and fixed based on the above solution.

    Please check it out and let me know if you still need any help.

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1366786/am62a7-after-configuring-reset_isolation-on-r5fmcu-ipc-fails-after-core-a-reboots

    Regards,

    Anil.

  • Hello Anil,

    First of all, thank you for your reply that solved my confusion about RPMSG not being able to resume communication.

    But instead of using SBL, we use SPL.What to do in this case?

    Regards,

    Devin.

  • Hello Devin,

    Can you please confirm did  you use the SD boot mode ?

    I am not familiar to SPL and is it not possible to move DRAM data to DDR in the SPL like as SBL ?

    Regards,

    Anil.

  • Hello Devin,

    I talked with other experts on this and they also suggested the same thing we can do in the SPL and there are no issues.

    Regards,

    Anil.

  • Hello Anil,

    Ok, I see.

    I'll try this method,thanks!

    Regards,

    Devin.

  • Hello Anil,

    I would also like to ask,

    Once SBL is started , then copy M4F DRAM data to the DDR for the IPC resource table memory.

    how to copy data when Uboot is started?

    Regards,

    Devin.

  • Hi, Anil

    Thanks your suggestion

    Follow your comment,

    >>  copy M4F DRAM data to the DDR for the IPC resource table memory.

    Ref this link,

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_06_00_42/exports/docs/linux/Foundational_Components_IPC62x.html

    I assume we do not have SW API for "IPC resource table" backup or restore, so we need to implement this function by ourselves, isn't?

    I think IPC resource table is located in address 0x9cb00000 + 1MB length, isn't?

    I think the story should be like as below with "FFI + MCU reset A Core"

    (1) Set these parameter in MCU SW. this can let MCU M4 core warn reset A Core

    pscMain2MCUDisable = 0;
    pscMCU2MainDisable = 0

    (2) If A core know system go to FFI, A Core (Linux) should be backup "IPC resource table" in any storage in any time. (ex, eMMC)

    (3) Once A core reset happen by M core trigger, U-BOOT or SBL(TIBOOT3) should be restore "IPC resource table" to DDR first

    (4) Basically, M core does not need to reload firmware and keep RPMsg communication in this case

    If some thing wrong, please correct me.

    Thank You again

    Gibbs

  • Hello Gibbs,

    (2) If A core know system go to FFI, A Core (Linux) should be backup "IPC resource table" in any storage in any time. (ex, eMMC)

    The above steps are correct, but we need to change a few changes.

    (3) Once A core reset happen by M core trigger, U-BOOT or SBL(TIBOOT3) should be restore "IPC resource table" to DDR first

    Yes, you are correct. This change can be made in the U-BOOT or SBL.

    If  customer faces any issues in the U-BOOT and doing the same step in the A53 core Application is also fine.

    Make sure that before the Linux core sends a IPC message to the M4F core, the IPC table data must be placed in the DDR.

    I think IPC resource table is located in address 0x9cb00000 + 1MB length, isn't?

    I think the story should be like as below with "FFI + MCU reset A Core"

    We need to back up the 4KB memory enough, and the address location must be started from the address below 

    /* Resource table must be placed at the start of DDR_IPC_RESOURCE_TABLE_LINUX when M4 core is early booting with Linux */

    DDR_IPC_RESOURCE_TABLE_LINUX : ORIGIN = 0x9CC00000 , LENGTH = 0x1000

    Please let me know if you face any issues .

    Regards,

    Anil.

  • Hello Anil,

    Now it seems that all we need to do is back up the resource table.

    But when I access 0x9CC00000 to make a copy,the program appeared to become unresponsive。I would like to ask you how to read and write this address.

    Regards,

    Devin.

  • Hello Devin,

    Please let me know where you are doing the above copy of operation in the Linux application or u-boot?

    Regards,

    Anil.

  • Hello Anil,

    I'm doing the copy operation on the M4 core.

    Steps:

       1.Use memcpy() to access the 0x9CC00000 backup resource table.

       2.Configuration isolation model and call SOC_generateSwWarmResetMainDomainFromMcuDomain() reset the Main Domain.

       3.Use memcpy() to restore the resource table.

    However, RPMSG still cannot re-communicate after the Main domain is reset.

    Are the steps correct?

    Regards,

    Devin.

  • Hello Devin,

    The DDR memory can't be accessed directly from the M4F core .

    So, you need to use the RAT configuration while using the DDR memory.

    Please follow the steps below FAQ on how to use the DDR from M4F core .

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1187962/faq-sk-am62-how-to-execute-code-from-external-memory-using-m4f-core

    Regards,

    Anil.

  • Hello Anil,

    I have configured RAT, but unfortunately the result is still the same.Is it the resource table address that needs to be translated?

    I found  AddrTranslateP_getLocalAddr in the link you shared,So I used this function to translate the resource table address 0x9CC00000.

    But the log prints: Table Addr:9cc00000 => Local Address:0.

    Regards,

    Devin.

  • Hello Devin,

    Please read the FAQ and all the steps are there.

    An example is also attached in the FAQ.

    We need to add DDR memory to the MPU region settings.

    Later, just pass the DDR memory location(9cc00000 ) to AddrTranslateP_getLocalAddr API .

    Move the data in to the local address .

    Regards,

    Anil.

  • Hello Anil,

    Thank you for your response,Now it prints: Table Addr:9cc00000 => Local Address:9cc00000,But RPMSG still fails to recover the communication.

    Let me tell you my key steps(Based on my RAT and MPU already configured):

     1.RPMessage_ResourceTable linuxResourceTable_back,use this struct to back up the resource table.

     2.memcpy(&linuxResourceTable_back,localAddr,sizeof(linuxResourceTable_back)),back up the resource table.

     3.SOC_enableResetIsolation (pscMain2MCUDisable, pscMCU2MainDisable,psMCU2DMDisable,debugIsolationEnable),the parameters are 1,0,0,1,       respectively.

     4.Call SOC_generateSwWarmResetMainDomainFromMcuDomain API(The operation of 3 and 4 is consistent with the example).

     5.memcpy(localAddr,&linuxResourceTable_back,sizeof(linuxResourceTable_back)),recover the data of the resource table.

    I would like to ask you, what is wrong with my steps? or what else do I need to do.

    Regards,

    Devin

  • Hello Devin,

    I am looking at your reply and you may expect reply by end of the day.

    Regards,

    Anil.

  • Hello Devin,

    The above steps seem ok, and please share the M4F core example with only the Reset Isolation code to look at your code changes.

    And, please confirm which is the boot mode you are using and which version of MCU+SDK you are using ?

    Regards,

    Anil.

  • Hello Anil,

    1.The first image is the example code,the second is my code.

       I set the values of pscMCU2MainDisable and psMCU2DMDisable to 0, because a value of 1 for these parameters will cause me to not see subsequent logs.

    share the M4F core example with only the Reset Isolation code to look at your code changes

     .

    2.We start the M4 core in the Uboot phase.

    which is the boot mode you are using

    3.The version is 10.00.00.14.

    which version of MCU+SDK you are using

    Regards,

    Devin.

  • Hello Devin,

    I need the project where you are doing the memcopy operation for the Linux table and how they are recovering once the Reset is happened .

    If you share the project, I can check in all directions and will provide suggestions.

    If you share partial files , then your time and my time will be wasted on this issue.

    I am asking for which boot mode is it OSPI or emmc. or SD boot mode ?

    Regards,

    Anil.

  • Hello Anil,

    1.In the second image above, there is the backup of the resource table using memcopy and the recovery of the resource table after reset SOC.

    where you are doing the memcopy operation for the Linux table and how they are recovering once the Reset is happened

    I'm really sorry. Due to consulting security and company regulations, I can't share the whole project with you, but I can share with you the test code I used. I combined RPMSG routine with warm reset routine to test whether the communication can be restored after reset.

    2.The boot mode is emmc.

    I am asking for which boot mode is it OSPI or emmc. or SD boot mode ?

    Regards,

    Devin.

  • Hello Devin,

    Please share the snippet of the resetReqIsr function as well.

    As per the above comments, the local address has the DDR content at the 0x9CC00000 location.

    So, I am not checking your RAT and MPU region settings. If possible, share them. I can look at them as well.

    You need to allocate a 4KB dedicated memory location for storing DDR Linux tables in to the M4F RAM memory and not able to use this 4KB memory by the M4F application .

    Is this approach OK for you ?

    Regards,

    Anil.

  • Hello Anil,

    1.I didn't make any changes to the resetRealsr function.

    Please share the snippet of the resetReqIsr function as well.

     2.After the code : localAddr = AddrTranslateP_getLocalAddr(table_addr);

        Log printing:Table Addr:0x9CC00000 => Local Address:0x9CC00000,Is this address translation correct?

    the local address has the DDR content at the 0x9CC00000 location.

     3.I share you all the RAT and MPU configurations.

    checking your RAT and MPU region settings

     RAT:

      

    MPU:

     4.I would like to ask how to do it in detail. Should it be configured in linker.cmd or should it allocate a 4K space in the code,or some other way?

    allocate a 4KB dedicated memory location for storing DDR Linux tables in to the M4F RAM

    Regards,

    Devin.

  • Hello Devin,

    The current code above changes do not work because data is being copied to the M4F RAM from DDR .

    However, we do not know whether this reset has been fully propagated or not .

    If the SoC goes through a reset, it starts from the RBL → SBL → Application sequence.

    During this process, we must wait for DDR initialization.

    Once DDR initialization is complete, we need to move the local M4F memory to DDR.

    This step should be performed at SBL Stage 2, before the A53 core runs.

    Step 1: Define a 4KB Memory for Storing the Linux Table

    Modify the linker command file to define a dedicated memory region:

        M4F_DRAM_LINUX_BAKUP_TABLE         : ORIGIN = 0x00030000 , LENGTH = 0x1000
            M4F_DRAM : ORIGIN = 0x00031000 , LENGTH = 0xF000
        .bss.ipc_backup_linux_table    (NOLOAD) : {} > M4F_DRAM_LINUX_BAKUP_TABLE

    Step 2: Convert DDR Address Space to Local Memory View

    Use RAT (Region Address Translation) and the Address Translate Function to convert DDR address space to local memory.
    • The existing above RAT configuration seems correct.
    • You can verify it by checking if the local memory address correctly reflects DDR content or not .

    Step 3: Access MAIN Domain Peripherals from the MCU Domain
    • The MAIN2MCU and MCU2MAIN bridge flags are correctly set, and no changes are required.
    • All MAIN2MCU and MCU2MAIN bridge flags remain unchanged.

    Step 4: Move DDR Content to the M4F Core
    • After initializing the M4F core, copy the DDR content to the M4F core.
    • This needs to be done only once and does not require repeated execution.

    Step 5: Move M4F DRAM Memory to DDR
    • This step should be executed just before the Linux core runs (SBL Stage 2).

    The M4F DRAM memory is located at 0x30000 in M4F memory view .
    When DM R5F needs to use this memory, it should reference at 0x05040000.

    Modify the code as follows:

    #define IPC_LINUX_TABLe_BACKUP
    
            if (Bootloader_socIsMCUResetIsoEnabled())
            {
                #ifdef IPC_LINUX_TABLe_BACKUP
                memcpy(0x05040000,0x9CC00000,0x1000);
                #endif
            }

    Step 6: Compile and Flash the Software
    • Compile SBL and Applications.
    • Flash SBL and Applications 

    Please let me know if you need any further clarifications.

    Please share the Test Results .

    Regards,
    Anil

  • Hello Anil,

    Unfortunately, the test results are still the same.

    it starts from the RBL → SBL → Application sequence.

    Our startup process is not like this,we use SPL,could such a distinction lead to a bias in the test results?

    This step should be executed just before the Linux core runs

    How do I tell if the current stage is before the Linux core is running,through the Bootloader_socIsMCUResetIsoEnabled function?

    Regards,

    Devin.

  • Hello Devin,

    The data moving from M4F DRAM memory to DDR step needs to be done after the Reset is propagated.

    If this step is not correct, then the IPC does not work out.

    Step 5: Move M4F DRAM Memory to DDR

    So, is it ok for you to do this step to the A53 core Application rather than SBL or SPL ?

    Step 4: Move DDR Content to the M4F Core
    • After initializing the M4F core, copy the DDR content to the M4F core.
    • This needs to be done only once and does not require repeated execution.

    Can you please confirm the Linux Table DDR content has been moved to the M4F memory location at 0x30000 ?

    Regards,

    Anil.

  • Hello Anil,

    So, is it ok for you to do this step to the A53 core Application rather than SBL or SPL ?

    Do you mean to ask me to perform step5 in the uboot phase?

    And I found another problem:It appears that during the execution of the code, the resetRealsr function is not being invoked.

    Regards,

    Devin.

  • Hello Devin,

    Do you mean to ask me to perform step5 in the uboot phase?

    I am saying the A53 core Linux Application .

    Regards,

    Anil.

  • HI Anil:

       Should I change the device tree to match the linker mapfiles` change?

  • Hello Devin,

    Seems that you are not following my steps, and we need to connect one time to fix your issue quickly .

    Before that, I need to check with other experts where we can add backup of M4F DRAM to DDR in u boot.

    Please check with your FAE and try to arrange a meeting by tomorrow, after 11AM IST time.

    Regards,

    Anil.

  • Hi, Anil & Devin

    Because of personal business trip, sorry late join discussion again.

    Hi, Devin.

    Base on you "system design", you need to consider two things,

    (1) If reset isolation is for "MCU only mode", you can backup "IPC resource table" in MCU SRAM, because MCU always alive.

    (2) If your function is also entering deep sleep mode and then wakeup, you may need to backup "IPC resource table" & "MCU context" to eMMC, because SoC and MCU also shutdown, you will lost all data.

    As far as I know, your system is eMMC boots

    Base on previous discussion, I think it is base on "item 1". because your case is in MCU only mode with partial isolation, you try to warn reset SoC (A53), and see linux reboot, the root cause for RPMSG failed is seems that bootloader do not load  "backup" "IPC resource table" when reboots.

    Before you have meeting with our AE, I recommend you can create another "new project", test it and share with us. because we need to check it step by step.

    * How do you make sure you back up correct "IPC resource table"?  How to check it ? any error?

    * Once SoC (A53) wakeup, how to restore "IPC resource table" when A53 boots? I saw Anil already give you some comment, it seems also do modify some code in u-boot (tiboot3)

     

    Recommend finish item 1 & test ok first, and then deep discussion item 2 user case.

    you can also mail your project to me.

    Hello, Anil

    If I say something wrong , please correct me.

    Thank You Very Much

    Gibbs

  • Hello Gibbs,

    Thanks for the above reply and your all steps are correct ..

    I shared all the steps above, and we need to confirm if the customer is doing properly or not.

    Even if I join a call by tomorrow, I can check the same above.

    And see if you are are able to help and so that we can skip the call.

    Regards,

    Anil.

  • Hello Gibbs/Dev,

    I looked at the bootflow of AM62X. Please look at the link below.

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components/U-Boot/UG-General-Info.html#boot-flow

    Here, the DM firmware is running before the b-boot and A53 Linux starts.

    So, instead of doing the 5th step in the SBL or u-boot, we can move this step to the DM Firmware application.

    This also works for you.

    Now, you should follow the same steps below except step 5 and step 6.

    Step 5 : 

    Take the DM R5F example, which is already you are using in your application.

    In that application, do the MEMCPY call after all the driver init.

    Customer need to integrate #include changes as well in the DM R5F Application to fix the compiler erros.

    Compile the DM R5F application 

    Step 6 : 

    After completing the DM R5F application,

    Flash the updated DM application.

    Please follow all these steps. If  still do not work out in customer Hw , I can connect to online debug.

    Step 1: Define a 4KB Memory for Storing the Linux Table

    Modify the linker command file to define a dedicated memory region:

    Fullscreen
    1
    2
    3
    M4F_DRAM_LINUX_BAKUP_TABLE : ORIGIN = 0x00030000 , LENGTH = 0x1000
    M4F_DRAM : ORIGIN = 0x00031000 , LENGTH = 0xF000
    .bss.ipc_backup_linux_table (NOLOAD) : {} > M4F_DRAM_LINUX_BAKUP_TABLE
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Step 2: Convert DDR Address Space to Local Memory View

    Use RAT (Region Address Translation) and the Address Translate Function to convert DDR address space to local memory.
    • The existing above RAT configuration seems correct.
    • You can verify it by checking if the local memory address correctly reflects DDR content or not .

    Step 3: Access MAIN Domain Peripherals from the MCU Domain
    • The MAIN2MCU and MCU2MAIN bridge flags are correctly set, and no changes are required.
    • All MAIN2MCU and MCU2MAIN bridge flags remain unchanged.

    Step 4: Move DDR Content to the M4F Core
    • After initializing the M4F core, copy the DDR content to the M4F core.
    • This needs to be done only once and does not require repeated execution.

    Regards,

    Anil.

  • Hello Anil.

    First, I want to thank you for your quick response.

    It looks like you want to change the R5 core code, we are not using the R5 core as a general purpose MCU, but as a device manager.

    So we do not want to change the R5 core code. Maybe we can find another way?

    I have made PPT of steps 1 to 4 and sent it to Gibbs. Have you received it? Is there any problem with my operation?

    Regards,

    Devin.

  • Hi, Devin

    I think you need to reference these two link first, because I think you may have concept problem for SBL/SPL boots.

    https://dev.ti.com/tirex/explore/content/am62x_academy_10_00_00_01/am62x_academy_10_00_00_01/source/multicore/booting-and-disabling/boot-flows.html

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/10_00_07_04/exports/docs/linux/Foundational_Components/U-Boot/UG-General-Info.html#boot-flow

    I think Anil is right,

    Once main domain (SoC) reset, it will reload DM R5 FW & SYSFW, and then start SPL (u-boot) later.

    So the best way (timing) is try to do recover IPC resource table is in DM R5.

    Because in this step, DDR is already finish init. 

    by the way, I do not receive you slides (PPT)

    I can arrange another personal meeting with you when I get your slides.

    Gibbs  

  • Hi, Gibbs

    I need to state a fact:

    We use R5 as a safety core, We do not have the source code for R5 core, We were told not to make changes to the R5 core.

    So, would you like to share the source code with us so that we can modify it ourselves, or you can modify it.

    Regards,

    Devin.

  • Hello Devin,

    The added patch does not create any problems with your low-power mode of operation and this is just moving data from DDR memory to M4F RAM during the DM FW initiations and not in runtime.

    Typically, if you use the MCU+SDK 10 version in your application, then take the DM example from the path below.

    C:\ti\mcu_plus_sdk_am62x_10_00_00_14\examples\drivers\ipc\ipc_rpmsg_echo\am62x-sk

    Step 5 : 

    Take the DM R5F example, which is already you are using in your application.

    In that application, do the MEMCPY call after all the driver init.

    Customer need to integrate #include changes as well in the DM R5F Application to fix the compiler erros.

    Compile the DM R5F application 

    Later, add the above my patch into the DM R5F application.

    Compile the DM R5F application 

    Finally, load the DM R5F update bin file from the Linux core.

    https://dev.ti.com/tirex/explore/node?node=A__AXsPVjrUN0EAU1ezb.8iuQ__AM62-ACADEMY__uiYMDcq__LATEST

    Regards,

    Anil.

  • Hello Anil / Gibbs,

    Typically, if you use the MCU+SDK 10 version in your application, then take the DM example from the path below.

    C:\ti\mcu_plus_sdk_am62x_10_00_00_14\examples\drivers\ipc\ipc_rpmsg_echo\am62x-sk

    The example we used has a different path than yours,

    C:\ti\mcu_plus_sdk_am62x_10_00_00_14\examples\drivers\ipc\ipc_rpmsg_echo_linux\am62x-sk-lp\r5fss0-0_freertos 

    May I ask if this path is also OK?

    Finally, load the DM R5F update bin file from the Linux core.

    To which directory should we push the .out file generated after compilation?

    @Gibbs,I would like to reply to your question in the PPT here:

    [Gibbs]:Why not use uint64_t?? Is it wrong?

    As you can see from the LOG, if you use uint64_t, the translated address output is 0.

    But if I use uint32_t, its translated address is 0x9CC00000.

    [Gibbs]:Why not use Rpmessage_ResourceTable memcopy?

                  How about erase Rpmessage_ResourceTable in DDR, and check IPC works or not? If IPC works failed, it means you copy the right memory region.

    I printed the address of Rpmessage_ResourceTable, which is actually 0x9CC00000.

    And I used your test method.When I erase localAddr, RPMessage failed to initialize.  

    As you can see from the log, the address is correct.

    Regards,

    Devin.

  • May I ask if this path is also OK?

    Hello Devin,

    You can take the above example and this is fine.

    @Gibbs,I would like to reply to your question in the PPT here:

    [Gibbs]:Why not use uint64_t?? Is it wrong?

    Please use the 32bit . 

    Regards,

    Anil.

  • Hi, Anil

    Because this discussion context is too long, so I try to conclusion critical steps to make sure both you and us have the same idea.

    This should be an summarize, I think it can help anyone whom has related problems.

    How to Backup linux Resource Table to M4 SRAM and Recover it when A53 reboot?

    Step 0: Make sure M4 "partial" MCU isolation is enable, and then you can issue an warm reset command to A53 from MCUSS
    KEY Parameter as below
    (1) pscMain2MCUDiable = 1;
    (2) pscMCU2MainDiable = 0;
    (3) PSMCU2DMDisable = 0;
    (4) SOC_enableResetIsolation(pscMain2MCUDiable, pscMCU2MainDiable, PSMCU2DMDisable, debugIsolationEnable)
    (5) SOC_generateSwWarmResetMainDomainFromMcuDomain() reset Main Domain.

    Step 1: Define a 4KB Memory for Storing the Linux Table
    Once M4 applications runs, M4 need to backup "linuxResourceTable" from DDR to internal SRAM, you need to define an special memory region (SRAM) to store it.
    (1) Modify link.cmd in M4 project code

    Step 2: Convert DDR Address Space to "Local Memory View (M4)"
    (1) RAT: Let M4 core maps DDR memory region, and access linuxResourceTable in DDR.
    (2) MPU: Add MPU region to allow M4 core execution from DDR

    Step 3: Move DDR Content to the M4F Core
    (1) memcpy(&linuxResourceTable_back,localAddr,sizeof(linuxResourceTable_back))

    Step 4: Move M4F DRAM Memory to DDR
    Once A53 reset (Got warm reset from MCUSS), we use R5 DM to recover "linuxResourceTabl" from M4 SRAM to DDR
    Because R5 DM must reload when main domain (A53) reboot
    (1) R5 Example code, "ipc_rpmsg_echo" already include sciserver init (DM), so we can re-build & modify this example, and replace the pre-build R5 FW
    (2) memcpy(0x05040000,0x9CC00000,0x1000), copy M4 SRAM  (linuxResourceTable) to DDR

    If anything wrong, please correct me.

    Thanks

    Gibbs

  • Hi Gibbs,

    I think what you said above is correct.

    But I still have a question:

    (1) R5 Example code, "ipc_rpmsg_echo" already include sciserver init (DM), so we can re-build & modify this example, and replace the pre-build R5 FW

    @Anil

    Finally, load the DM R5F update bin file from the Linux core.

    Since I've never burned R5 code before, how do I push the generated .out file into the bin to make it work after I've modified the R5 code?

    Regards,

    Devin.

  • Hello Gibbs, 

    The above steps are correct.

    @Devin, please follow the steps below. Here, the steps belong to CDD_IPC integration and the same procedure is valid for your use case as well.

    First, you need to compile the above IPC example in the release build, and you will get the .out file.

    Later, from the link below, you can follow the steps from 5 to 12.

    Please let me know if you stuck anywhere .

    https://software-dl.ti.com/mcu-plus-sdk/esd/PLATFORM_SW_MCAL/AM62xx/10.01.00.02/ug_cdd_ipc_top.html#:%7E:text=SDK%2DLINUX%2DAM62X-,Recompiling%20the%20Linux%20image%20components%20with%20the%20MCAL%20AM62X%20cdd_ipc_app_rc_linux%20binary,-run%20gmake%20%2Ds

    Regards,

    Anil.

  • Hi, Anil

    This is status update,

    Because of function safety consideration, customer will not (persist) use partial isolation for different domain reset.

    Once "system" has reset requirement, they will reset entire SoC which include main & mcu domain. 

    But I hope (suggestion) we still have 101 related guide in SDK documents to help anyone whom have related requirements.

    I think we can pending this thread for one month, if no support need or update, and then close it.

    Many Thanks

    Gibbs

  • Because of function safety consideration, customer will not (persist) use partial isolation for different domain reset.

    Hello Gibbs ,

    The user wants to use IPC communication.

    In IPC, the shared memory used is DDR, which is located in the MAIN domain. Therefore, when IPC is required, the only feasible option is to go with partial isolation. In this configuration, the MCU domain can access MAIN domain peripherals and memories.

    However, if this approach violates the user’s safety requirements, then it is not recommended to proceed with it.

    I am closing this thread. Please open new threads for any further queries.

    Regards,

    Anil.