Can I use only the rpmsg_lite.c sub component to write my M7 rpmsg firmware

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Can I use only the rpmsg_lite.c sub component to write my M7 rpmsg firmware

Jump to solution
1,033 Views
ababatola
Contributor III

Hello,

I am working on communication between the MPU and MCU of our imx8mp custom board and we want to make the MCU firmware bear metal.

From the RPMsg-Lite User's Guide guide, it says that it si possible to only use the rpmsg_lite.c sub component to communicate.

I want to know if this is true?

After I calll my  rpmsg_lite_remote_init()  and rpmsg_lite_create_ept() functions, for initialisation, the core M7 does boots and link is set up.  But when I include the rpmsg_lite_send() function to my code, the cortex m7 does not boot again.  Is this normal?  I am not using the message queue as this is dependant on the freeRTOS.

Thanks

 

0 Kudos
Reply
1 Solution
870 Views
ababatola
Contributor III

hi,

just to let you know that I have finally solved this problem.  The baremetal version works well on the rpmsg.

Thanks

View solution in original post

0 Kudos
Reply
5 Replies
871 Views
ababatola
Contributor III

hi,

just to let you know that I have finally solved this problem.  The baremetal version works well on the rpmsg.

Thanks

0 Kudos
Reply
952 Views
ababatola
Contributor III

hi,  @hector_delgado

Good day.

I would like to ask if you have been able to go through the line of code to see why it does not work?

Thanks.

0 Kudos
Reply
1,001 Views
hector_delgado
NXP TechSupport
NXP TechSupport

Hi @ababatola ,

I hope you are doing well!

I believe the bare metal environment is implemented in rpmsg_env_bm.c

I also recommend checking the following thread on GitHub RPMsg-Lite Bare Metal Example · Issue #45 · nxp-mcuxpresso/rpmsg-lite · GitHub

Let me know if you have any more questions.

Best regards,
Hector.

 

0 Kudos
Reply
995 Views
ababatola
Contributor III

Hi @hector_delgado 

Thanks for the reply.  

I have gone through the links you gave me.

I have implemented most of the steps and the ones I have not implemented, I have further implemented them.  I still have issues with the bare metal operation of the code.

When I include the rpmsg_ns_announce function, the image does not boot when I try to boot it .  

The Core M7 image runs till the 

rpmsg_ns_bind(hw_src_rpmsg::my_rpmsg, app_nameservice_isr_cb, ((void *)&data)); code.

That means tha when I start my linux image, the link is created.  However it does not work with the pinpong linux driver.

However, when I add the 

rpmsg_ns_announce(hw_src_rpmsg::my_rpmsg, hw_src_rpmsg::my_ept, RPMSG_LITE_NS_ANNOUNCE_STRING, (uint32_t)RL_NS_CREATE);

The core M7 image does not even start and I do not get any output at the serial terminal.  This is strange and I am not sure why.

I dug deeper abit and found out that the problem is at this point

rpmsg_ns_announce --> rpmsg_lite_send  ----> rpmsg_lite_format_message


/* Get rpmsg buffer for sending message. */
buffer = rpmsg_lite_dev->vq_ops->vq_tx_alloc(rpmsg_lite_dev->tvq, &buff_len, &idx);

this code hangs the system and does not allow the M7 image to boot.

Must the virtqueue layer also be "somehow" initialised?

The code works fine as a freeRTOS code before conversion to baremetal.

What can be responsible for this and how can I go forward beyond this point.

Thanks.

0 Kudos
Reply
923 Views
ababatola
Contributor III

Hi,

I would like to know if you have been able to look at my last message.

Thanks

0 Kudos
Reply