Hardware Abstraction Layer for FreeRTOS
|
#include <remoteproc.h>
Data Fields | |
u32 | type |
u32 | da |
u32 | pa |
u32 | len |
u32 | flags |
u32 | reserved |
u8 | name [32] |
struct fw_rsc_carveout - physically contiguous memory request
This resource entry requests the host to allocate a physically contiguous memory region.
These request entries should precede other firmware resource entries, as other entries might request placing other data objects inside these memory regions (e.g. data/code segments, trace resource entries, ...).
Allocating memory this way helps utilizing the reserved physical memory (e.g. CMA) more efficiently, and also minimizes the number of TLB entries needed to map it (in case rproc is using an IOMMU). Reducing the TLB pressure is important; it may have a substantial impact on performance.
If the firmware is compiled with static addresses, then da should specify the expected device address of this memory region. If da is set to FW_RSC_ADDR_ANY, then the host will dynamically allocate it, and then overwrite da with the dynamically allocated address.
We will always use da to negotiate the device addresses, even if it isn't using an iommu. In that case, though, it will obviously contain physical addresses.
Some remote processors needs to know the allocated physical address even if they do use an iommu. This is needed, e.g., if they control hardware accelerators which access the physical memory directly (this is the case with OMAP4 for instance). In that case, the host will overwrite pa with the dynamically allocated physical address. Generally we don't want to expose physical addresses if we don't have to (remote processors are generally not trusted), so we might want to change this to happen only when explicitly required by the hardware.
u32 fw_rsc_carveout::da |
device address
u32 fw_rsc_carveout::flags |
iommu protection flags
is used to provide IOMMU protection flags
u32 fw_rsc_carveout::len |
length (in bytes)
u8 fw_rsc_carveout::name[32] |
human-readable name of the requested memory region
should (optionally) contain a human readable name of this carveout region (mainly for debugging purposes).
u32 fw_rsc_carveout::pa |
physical address
u32 fw_rsc_carveout::reserved |
reserved (must be zero)
u32 fw_rsc_carveout::type |
resource type