cancel
Showing results for 
Search instead for 
Did you mean: 

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?

Tilo
Associate

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.

1 REPLY 1
ArnaudP
Senior

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