omapl138: VirtQueue: Add vdev status synchronization logic
authorSuman Anna <s-anna@ti.com>
Tue, 26 Mar 2019 23:00:55 +0000 (18:00 -0500)
committerSam Nelson <sam.nelson@ti.com>
Tue, 21 May 2019 19:56:15 +0000 (15:56 -0400)
commite3ac95416510d12a08f550289d1c069a9e30c7eb
tree0a85f6b95db0c34c6febe9af98f2be6240e2a20d
parent75d8759d614bcf2d8ea9d0476f9d933abd79f695
omapl138: VirtQueue: Add vdev status synchronization logic

The VirtQueue objects are currently initialized using the vring
addresses from the corresponding vring entries in the resource
table. The memory for vrings is always allocated on the Linux
kernel at runtime, and the resource table entry is updated with
the corresponding allocated address.

This allocation always used to happen during the vdev resource
handling previously on the Linux kernel side, but this behavior
has changed in newer Linux kernels > 4.19. The memory is allocated
now after all the resources are handled, and the resource table
is updated only when the virtio_rpmsg_bus driver is probed, and
only if a FW_RSC_ADDR_ANY is passed in the resource table. This
driver can be installed after the remoteproc is up, which results
in the RTOS code using a stale value.

Resolve this by adding a synchronization logic for the vdev
status (set during virtio_rpmsg_bus probe on kernel-side). The
synchronization is added during the creation of the first VirtQueue
object. This can probably be done in module startup as well since
the VirtQueue code on OMAPL138 is a XDC module, but the design
follows the non-XDC usage as on DRA7xx/AM57xx platforms.

Signed-off-by: Suman Anna <s-anna@ti.com>
packages/ti/ipc/family/omapl138/VirtQueue.c