Zynq UltraScale+ ZCU102 with both remote processors?

324 views
Skip to first unread message

Duane Murphy

unread,
Jun 15, 2018, 8:19:17 PM6/15/18
to open-amp
Can OpenAMP be used to connect to two remote processors at the same time?

The ZCU102 has two R5 processors and a 4 A53 cores. We would like to run linux on the A53 cores and connect and run remote processes on the both R5 cores. 

Please correct my description as I may be off in the weeds or missed an important part.

The linux OpenAMP implementation uses sockets to communicate to the application. The sockets are connected to by the first remote process. How would the second remote process connect?

My work so far has been with linux-to-linux which seems to have this limitation. If I want to simulate two remote processors as two remote applications I would need two more pairs of sockets. For example:

{ "unixs:/tmp/openamp.event.0", -1, NULL, 0 },
{ "unixs:/tmp/openamp.event.1", -1, NULL, 0 },
{ "unix:/tmp/openamp.event.0", -1, NULL, 0 },
{ "unix:/tmp/openamp.event.1", -1, NULL, 0 },

would connect the master and one remote application, while 

{ "unixs:/tmp/openamp.event.2", -1, NULL, 0 },
{ "unixs:/tmp/openamp.event.3", -1, NULL, 0 },
{ "unix:/tmp/openamp.event.2", -1, NULL, 0 },
{ "unix:/tmp/openamp.event.3", -1, NULL, 0 },

would be used to connect the master and the second remote application.

How does this work with multiple remote cores with the ZCU102?

How can I make remote proc connections to both R5 processors?

Thanks,
 ...Duane Murphy

Duane Murphy

unread,
Jun 15, 2018, 8:30:04 PM6/15/18
to open-amp
Answering my own question ...

In the case of the ZCU102, the linux driver would not be used. Rather the zynqmp driver would be used which uses the hardware infrastructure between the A53 and R5.

If I wanted to simulate this capability (two remote processors) with linux-to-linux mode, would expanding the ipi_table and rproc_table in platform_info.c be the right direction?

Jiaying Liang

unread,
Jun 16, 2018, 2:09:34 PM6/16/18
to open...@googlegroups.com

Hi Duane

 

From: open...@googlegroups.com [mailto:open...@googlegroups.com] On Behalf Of Duane Murphy
Sent: Friday, June 15, 2018 5:30 PM
To: open-amp <open...@googlegroups.com>
Subject: [open-amp] Re: Zynq UltraScale+ ZCU102 with both remote processors?

 

Answering my own question ...

 

In the case of the ZCU102, the linux driver would not be used. Rather the zynqmp driver would be used which uses the hardware infrastructure between the A53 and R5.

[Wendy] You can either use the RPMsg + remoteproc driver implementation or OpenAMP library (RPMsg, virtio + remoteproc in userspace) implementation for this case.

If you chose to use RPMsg + remoteproc in kernel space implementation, the remoteproc linux kernel driver will load firmware on RPU before you can use RPMsg for connection.

 

If I wanted to simulate this capability (two remote processors) with linux-to-linux mode, would expanding the ipi_table and rproc_table in platform_info.c be the right direction?

[Wendy] you can take a look at: https://github.com/OpenAMP/open-amp/blob/master/apps/machine/zynqmp /platform_info.c you will need to have two IPI information (two IPI UIO devices, and two vring UIO devices, and two shared buffer UIO devices for different RPUs.

 

Best Regards,

Wendy


On Friday, June 15, 2018 at 5:19:17 PM UTC-7, Duane Murphy wrote:

Can OpenAMP be used to connect to two remote processors at the same time?

 

The ZCU102 has two R5 processors and a 4 A53 cores. We would like to run linux on the A53 cores and connect and run remote processes on the both R5 cores. 

 

Please correct my description as I may be off in the weeds or missed an important part.

 

The linux OpenAMP implementation uses sockets to communicate to the application. The sockets are connected to by the first remote process. How would the second remote process connect?

 

My work so far has been with linux-to-linux which seems to have this limitation. If I want to simulate two remote processors as two remote applications I would need two more pairs of sockets. For example:

 

   { "unixs:/tmp/openamp.event.0", -1, NULL, 0 },

   { "unixs:/tmp/openamp.event.1", -1, NULL, 0 },

   { "unix:/tmp/openamp.event.0", -1, NULL, 0 },

   { "unix:/tmp/openamp.event.1", -1, NULL, 0 },

 

would connect the master and one remote application, while 

 

   { "unixs:/tmp/openamp.event.2", -1, NULL, 0 },

   { "unixs:/tmp/openamp.event.3", -1, NULL, 0 },

   { "unix:/tmp/openamp.event.2", -1, NULL, 0 },

   { "unix:/tmp/openamp.event.3", -1, NULL, 0 },

 

would be used to connect the master and the second remote application.

 

How does this work with multiple remote cores with the ZCU102?

 

How can I make remote proc connections to both R5 processors?

 

Thanks,

 ...Duane Murphy

 

--
You received this message because you are subscribed to the Google Groups "open-amp" group.
To unsubscribe from this group and stop receiving emails from it, send an email to open-amp+u...@googlegroups.com.
To post to this group, send email to open...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Duane Murphy

unread,
Jun 18, 2018, 4:56:47 PM6/18/18
to open-amp


On Saturday, June 16, 2018 at 11:09:34 AM UTC-7, Jiaying Liang wrote:

Hi Duane

 

From: open...@googlegroups.com [mailto:open...@googlegroups.com] On Behalf Of Duane Murphy
Sent: Friday, June 15, 2018 5:30 PM
To: open-amp <open...@googlegroups.com>
Subject: [open-amp] Re: Zynq UltraScale+ ZCU102 with both remote processors?

 

Answering my own question ...

 

In the case of the ZCU102, the linux driver would not be used. Rather the zynqmp driver would be used which uses the hardware infrastructure between the A53 and R5.

[Wendy] You can either use the RPMsg + remoteproc driver implementation or OpenAMP library (RPMsg, virtio + remoteproc in userspace) implementation for this case.

If you chose to use RPMsg + remoteproc in kernel space implementation, the remoteproc linux kernel driver will load firmware on RPU before you can use RPMsg for connection.


[Duane] How do I choose which implementation to use? Is there examples for each one? 
 

 

If I wanted to simulate this capability (two remote processors) with linux-to-linux mode, would expanding the ipi_table and rproc_table in platform_info.c be the right direction?

[Wendy] you can take a look at: https://github.com/OpenAMP/open-amp/blob/master/apps/machine/zynqmp /platform_info.c you will need to have two IPI information (two IPI UIO devices, and two vring UIO devices, and two shared buffer UIO devices for different RPUs.


[Duane] You are describing the changes needed for the zynqmp implementation. I want to clarify that distinct remote_proc structures will be needed from the master process in order to communicate to two different RPUs.

I'm also working on testing the infrastructure using the linux-to-linux communication model. In linux-to-linux case, I would also need parallel data for each communication path to the remote process?

I see that I would need to double the ipi_table. Do I also need to use different vring0_path ("openamp.vrings") and and shm_path ("openamp.shm")?

Thank you for your clarification.

sunnyl...@gmail.com

unread,
Jun 18, 2018, 6:20:41 PM6/18/18
to open-amp
On Monday, June 18, 2018 at 1:56:47 PM UTC-7, Duane Murphy wrote:
> On Saturday, June 16, 2018 at 11:09:34 AM UTC-7, Jiaying Liang wrote:
>
>
>
>
>
>
>
>
>
>
> Hi Duane
>
>  
>
>
>
>
>
>
>
> From: open...@googlegroups.com [mailto:open...@googlegroups.com]
> On Behalf Of Duane Murphy
>
> Sent: Friday, June 15, 2018 5:30 PM
>
> To: open-amp <open...@googlegroups.com>
>
> Subject: [open-amp] Re: Zynq UltraScale+ ZCU102 with both remote processors?
>
>
>
>  
>
>
>
> Answering my own question ...
>
>
>
>  
>
>
>
>
> In the case of the ZCU102, the linux driver would not be used. Rather the zynqmp driver would be used which uses the hardware infrastructure between the A53 and R5.
>
> [Wendy] You can either use the RPMsg + remoteproc driver implementation or OpenAMP library (RPMsg, virtio + remoteproc in userspace) implementation for
> this case.
>
> If you chose to use RPMsg + remoteproc in kernel space implementation, the remoteproc linux kernel driver will load firmware on RPU before you can use RPMsg
> for connection.
>
>
> [Duane] How do I choose which implementation to use? Is there examples for each one? 
[Wendy] For RPMsg + remoteproc in kernel implementation, RPMsg virtio kernel implementation relies on remoteproc kernel implementation. RPMsg virtio kernel implementation has the following limitations:
* only supports Linux kernel as the virtio master that is Linux kernel needs to be the one to initialize the virtio device and allocate the RPMsg shared buffers
* by default, when you start remoteproc, it will always loads firmware on the target and start the remote processor, unless you update your remoteproc device driver not to do that.


* OpenAMP RPMsg library in Linux userspace, the remote can boot independently, and the Linux can be the virtio slave, it uses UIO underline to access the shared memory.

Best Regards,
Wendy
Reply all
Reply to author
Forward
0 new messages