Skip to main content
Visitor II
February 26, 2021
Question

Synchronizing earyl booted M4 FW with Linux: We would like to use the non-blocking method (kernel interrupt via ipcc if linux boot finish). Question: How send the interrupt on the Linux side? How to catch the ipcc interrupt on M4 FW side?

  • February 26, 2021
  • 1 reply
  • 672 views

Earyl booted M4 firmware via u-boot remoteproc.

Synchronizing Blocking method: 

At the moment we use the blocking method (OpenAMP_Init function through to 

synchronizing the early booted M4 firmware with Linux A7. 

Synchronizing Non-blocking method:

We would like to change this behevior to an non-blocking method.

    This topic has been closed for replies.

    1 reply

    ST Employee
    February 26, 2021

    hello Tilo,

    You are right the OpenAMP_Init is blocking until the Linux Kernel initializes the virtio structures in the resource table.

    When the Linux is ready to communicate, it generates an IPCC interrupt for the cortex-M4. So everything is already ready on Linux side.

    So If you want to implement the non blocking method you should:

    • at the M4 firmware startup: call MX_IPCC_Init and HAL_IPCC_ActivateNotification for the channel 1 to initialize the IPCC mailbox and enable associated interrupt;
    • ON IPCC interrupt: disable the IPPC interrupt by calling HAL_IPCC_DeActivateNotification and set a flag to manage the OpenAMP init out of interrupt context;
    • In main background code: call the OpenAMP_Init and start communication, when the flag is set.

    I hope this description will help you.

    best Regards

    Arnaud