All,
To continue the discussion of the resource table evolution from 12/19, I have created the following wiki page:
https://github.com/OpenAMP/open-amp/wiki/Resource-Table-Evolution
Please add your ideas to this wiki page, especially the ones that we have discussed to some degree already.
Alternatively, you can start a discussion on this list and then you can capture your summary on the wiki page.
Thanks,
Bill
---------------------------------------------------
William A. Mills
Chief Technologist, Open Source
Texas Instruments, Processors
20250 Century Blvd, Suit 300
Germantown MD, 20874
(work/mobile) +1-240-643-0836
Hi Ed,
On 1/3/20 7:59 PM, Ed Mooring via Openamp-rp wrote:
> On the December 19 call, I committed to sending the instructions I had
> provided to the Linaro LITE team to build a bootable image that can be
> used to develop and test OpenAMP with Linux on Xilinx QEMU.
>
> I am using this setup to work with Paul Sokolovsky on getting CI for
> OpenAMP on QEMU using LAVA.
>
> This is a first cut. Feedback is welcome.
>
> Regards,
> Ed M
> This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
>
>
As you sent the instructions as an attachment I can't reply inline but I
will fake it.
> # Building the image
>
> In the build directory (<path to repo>/build):
>
> $ bitbake openamp-image-minimal
>
To get this at least started I used:
$ MACHINE=zcu102-zynqmp bitbake openamp-image-minimal
The instructions above leaves a default machine of qemuzynq which does
not exist. There is a qemu-zynq7 but I don't think that is right.
>From the name of the output image I am inferring that you want the
zcu102-zynqmp machine.
Please confirm or deny this assumption. Thanks.
**** What version for openamp/* git sources?
Right now I have the three dirs in the openamp dir as follows:
bill@rocky:~/w/proj/openamp/ci-xilinx$ for d in openamp/*; do (echo "***
$d"; cd $d; git remote -v; git status); done
*** openamp/embeddedsw
origin https://github.com/Xilinx/embeddedsw.git (fetch)
origin https://github.com/Xilinx/embeddedsw.git (push)
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
*** openamp/libmetal
origin https://github.com/Xilinx/libmetal.git (fetch)
origin https://github.com/Xilinx/libmetal.git (push)
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
*** openamp/open-amp
origin https://github.com/Xilinx/open-amp.git (fetch)
origin https://github.com/Xilinx/open-amp.git (push)
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Can you please document what you are using and have tested.
Thanks,
Bill
Hi Ed,
On the 12/19 call you said you had build instructions for the R5 that
you had sent to the LITE group. You took an action item to post them
here as well. Can you do that please? It would be very helpful.
More comments below...
On 11/25/19 8:47 PM, Ed Mooring via Openamp-rp wrote:
> Here is the README for the Docker Container discussed in today's call:
> # Running the container:
>
> docker run -it xilinx-qemu
>
You had previously said to use the image named:
edmooring/qemu:xilinx-qemu
I tried running as you had it above (just xilinx-qemu) and it did not
find the image. The old name still works but has not been updated in 8
weeks.
Am I missing something? Have you published a new docker image somewhere
I can't find?
> This boots a Linux image (with ramdisk) and a device tree.
> The image contains the OpenAMP demo firmware images and
> examples.
>
> Alternatively,
>
> docker run -it -v <path_to_tftpboot_directory>:/tftpboot xilinx-qemu
>
> adds <path_to_tftpboot_directory> on the host system as /tftpboot
> inside the container, allowing a user to fetch arbitrary files, including
> Linux executables and firmware images, from within the container.
>
> # Running the OpenAMP echo test example
>
> * Log in to the emulated Linux as root (password is also "root").
> * Set up the R5 firmware: echo image_echo_test >/sys/class/remoteproc/remoteproc0/firmware
> * Start the R5: echo start >/sys/class/remoteproc/remoteproc0/state
> * Run the example: echo_test
>
Thanks for this. I have tested it myself and added it to the wiki.
> # Random notes:
>
> The version of QEMU that this uses is built from the xilinx-v2019.1
> tag on GitHub for Debian Stretch. Debian Stretch was chosen for the base
> of this container because Linaro uses it extensively and this way the
> executables are compatible across the various Linaro containers.
Thanks,
Bill
On the December 19 call, I committed to sending the instructions I had
provided to the Linaro LITE team to build a bootable image that can be
used to develop and test OpenAMP with Linux on Xilinx QEMU.
I am using this setup to work with Paul Sokolovsky on getting CI for
OpenAMP on QEMU using LAVA.
This is a first cut. Feedback is welcome.
Regards,
Ed M
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
Hello,
We have our normal meeting tomorrow as agreed last meeting.
I have updated the wiki page[1] with Notes from Last meeting and some potrencial agenda items for this week.
If you have other agenda items please reply to this e-mail and/or edit the wiki page.
So far we have:
* 64 bit support in Resource Tables
* Discuss Ben's patches?
* Discuss chair/host for Jan 2 or cancel (Bill is on vacation)
Thanks,
Bill
[1] https://github.com/OpenAMP/open-amp/wiki/OpenAMP-remoteproc-Subgroup-Meetin…
---------------------------------------------------
William A. Mills
Chief Technologist, Open Source
Texas Instruments, Processors
20250 Century Blvd, Suit 300
Germantown MD, 20874
(work/mobile) +1-240-643-0836
Hi all,
As stated in some previous OpenAMP meeting, we encountered a
limitation with remoteproc resource table. Indeed, all resources
are encoded using 32 bits fields whereas the memory accessible
on our processor is above the 32 bits boundary.
For instance, when the physical address is 0x1_0000_0000, then
this PA can't be inserted in the resource table or it will be
truncated to 0. This can temporarily be workarounded by using
device tree dma-ranges (at least on Linux) to have a correct DA
but the PA will still be truncated. Moreover, this only work
if you can remap the 64 bits memory zone to a 32 bits one (this
almost implies to have an IOMMU in front of the device).
Since 64 bits systems are now pretty common, it seems clear that
we need to modify the resource table to support 64 bits addresses.
In the same time, it will also be necessary to use 64 bits storage
for virtio device features. Some of them already need more than
32 bits (virtio-net features for instance).
Both modifications requires to handle versionning in the resource
table.
The following suggestions are mainly a RFC ! Please feel free
to comment any of the proposed modifications.
Versionning
-----------
Currently, the supported version is "1".
I propose to increment this number (version 2 ?) which will allow
to add necessary evolutions for 64 bits support. This version
should probably support both old format and new 64 bits support
(comments are welcomed).
64 bits addresses
-----------------
Since most of the systems are now using 64bits addresses, it is
necessary to support such configuration
There are various problems which occurs when modifying these fields
- Retro compatibility (We probably must keep it)
- Fields alignment (Some architecture might not handle misalignment)
- 32 bit remote vs 64 bits master
Regarding the retrocompatibility, it appears clear that modifiying
existing resources is probably not feasible due to missing
reserved fields. It will probably be necessary to create a
secondary type of resources which are almost the same as the 32bits
one. For instance for a vdev, we will have the "classic" rsc flavor:
struct fw_rsc_carveout {
u32 da;
u32 pa;
u32 len;
u32 flags;
u32 reserved;
u8 name[32];
} __packed;
And the 64 bits one:
struct fw_rsc_carveout_64 {
u64 da;
u64 pa;
u32 len;
u32 flags;
u32 reserved;
u8 name[32];
} __packed;
This does not seems really ideal and adds a lot of duplication but
I do not have (yet) any better idea (again, comments are welcomed !).
However, what should we do with the other fields ? Let them on 32
bits or change them all to use 64 bits ? If keeping some of them on
32bits, this can lead to misaligned members (since they are packed,
the compiler will force the alignment). Since some architecture do
not support that well, it's probably better to ensure all fields
will be aligned on their natural type boundary. it also means that
all structures sizes must be a multiple of 8 bytes.
If we don't want to guarantee alignment, then I do not have yet
a clear picture of what it would involve on various drivers which
accesses the memory of the resource table (rproc, virtio for the
config space, etc) and what are their assumptions about that.
If this can be accepted, then the question of the 64 bits master
versus the 32 bits remote can be addressed. I think this is probably
orthogonal to the fact we can have 64 bits addresses in the resource
table. Indeed, if both PA and DA are stored using 64 bits, then,
there is no limitation on what can be done on theses addresses.
For instance, on Linux Kernel, the device tree can allow remapping
64 bits to 32 bits using dma-ranges.
Features
--------
In virtio, the set of features is a bitfield of 64 bits. The current
virtio-rproc implementation only allows for 32bits features. This
is already limiting since virtio-net needs more than 32 bits
(VIRTIO_NET_F_STANDBY and VIRTIO_NET_F_SPEED_DUPLEX).
So these fields (gfeatures, etc) will also need to be udated to 64
bits variants. It might also be a good idea to keep in mind that
future evolutions will probably extend the available features.
Comments are welcomed !
Regards,
Clément Léger
Add proof of concept demo showing the use of RPMsg payloads
with payload information as pointer to large buffer in a
contiguously laid out memory space between APU and RPU with RPMsg
userspace on the APU side and baremetal on the RPU side.
Ben Levinsky (6):
apps: add out of band rpmsg echo demo
apps: oob echo: change message to timestamp and fix alignment
apps: oob echo : remove unused variables and fix apu side waiting
apps: oob echo: move code common in multiple files to header
apps: oob echo: remove commented out line
apps: oob echo: change packet fields to unsigned int
All,
We have an openamp remoteproc sub group call this Thursday 12/05 in our normal timeslot.
What topics should we discuss?
I won't have time to make progress on the Staging tree or CI loop from last time so I don't see value in reviting them this time.
Suman has posted a writeup for rpmsg-proto to this list.
https://lists.openampproject.org/pipermail/openamp-rp/attachments/20191125/…
This is the socket based interface to rpmsg that TI has been using for several years.
We could discuss this on Thursday.
What else should we discuss?
Thanks,
Bill
---------------------------------------------------
William A. Mills
Chief Technologist, Open Source
Texas Instruments, Processors
20450 Century Blvd
Germantown MD, 20871
(work/mobile) +1-240-643-0836
Here is the README for the Docker Container discussed in today's call:
# Running the container:
docker run -it xilinx-qemu
This boots a Linux image (with ramdisk) and a device tree.
The image contains the OpenAMP demo firmware images and
examples.
Alternatively,
docker run -it -v <path_to_tftpboot_directory>:/tftpboot xilinx-qemu
adds <path_to_tftpboot_directory> on the host system as /tftpboot
inside the container, allowing a user to fetch arbitrary files, including
Linux executables and firmware images, from within the container.
# Running the OpenAMP echo test example
* Log in to the emulated Linux as root (password is also "root").
* Set up the R5 firmware: echo image_echo_test >/sys/class/remoteproc/remoteproc0/firmware
* Start the R5: echo start >/sys/class/remoteproc/remoteproc0/state
* Run the example: echo_test
# Random notes:
The version of QEMU that this uses is built from the xilinx-v2019.1
tag on GitHub for Debian Stretch. Debian Stretch was chosen for the base
of this container because Linaro uses it extensively and this way the
executables are compatible across the various Linaro containers.
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.