mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-03 18:23:34 +00:00
remoteproc: ops: Add elf section size as input parameter to device_to_virt api
Introduce a new parameter "size" that accepts size of the region to remoteproc ops callback device_to_virt(). This can enforce more checks on the region that device_to_virt() is dealing with. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Tested-by: Fabien Dessenne <fabien.dessenne@st.com> Reviewed-by: Fabien Dessenne <fabien.dessenne@st.com>
This commit is contained in:
parent
240b932010
commit
c08eb93626
4 changed files with 17 additions and 5 deletions
|
@ -86,7 +86,8 @@ int rproc_elf32_load_image(struct udevice *dev, unsigned long addr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ops->device_to_virt)
|
if (ops->device_to_virt)
|
||||||
dst = ops->device_to_virt(dev, (ulong)dst);
|
dst = ops->device_to_virt(dev, (ulong)dst,
|
||||||
|
phdr->p_memsz);
|
||||||
|
|
||||||
dev_dbg(dev, "Loading phdr %i to 0x%p (%i bytes)\n",
|
dev_dbg(dev, "Loading phdr %i to 0x%p (%i bytes)\n",
|
||||||
i, dst, phdr->p_filesz);
|
i, dst, phdr->p_filesz);
|
||||||
|
|
|
@ -306,9 +306,11 @@ static int sandbox_testproc_ping(struct udevice *dev)
|
||||||
* sandbox_testproc_device_to_virt() - Convert device address to virtual address
|
* sandbox_testproc_device_to_virt() - Convert device address to virtual address
|
||||||
* @dev: device to operate upon
|
* @dev: device to operate upon
|
||||||
* @da: device address
|
* @da: device address
|
||||||
|
* @size: Size of the memory region @da is pointing to
|
||||||
* @return converted virtual address
|
* @return converted virtual address
|
||||||
*/
|
*/
|
||||||
static void *sandbox_testproc_device_to_virt(struct udevice *dev, ulong da)
|
static void *sandbox_testproc_device_to_virt(struct udevice *dev, ulong da,
|
||||||
|
ulong size)
|
||||||
{
|
{
|
||||||
u64 paddr;
|
u64 paddr;
|
||||||
|
|
||||||
|
|
|
@ -107,11 +107,13 @@ static int stm32_copro_set_hold_boot(struct udevice *dev, bool hold)
|
||||||
* stm32_copro_device_to_virt() - Convert device address to virtual address
|
* stm32_copro_device_to_virt() - Convert device address to virtual address
|
||||||
* @dev: corresponding STM32 remote processor device
|
* @dev: corresponding STM32 remote processor device
|
||||||
* @da: device address
|
* @da: device address
|
||||||
|
* @size: Size of the memory region @da is pointing to
|
||||||
* @return converted virtual address
|
* @return converted virtual address
|
||||||
*/
|
*/
|
||||||
static void *stm32_copro_device_to_virt(struct udevice *dev, ulong da)
|
static void *stm32_copro_device_to_virt(struct udevice *dev, ulong da,
|
||||||
|
ulong size)
|
||||||
{
|
{
|
||||||
fdt32_t in_addr = cpu_to_be32(da);
|
fdt32_t in_addr = cpu_to_be32(da), end_addr;
|
||||||
u64 paddr;
|
u64 paddr;
|
||||||
|
|
||||||
paddr = dev_translate_dma_address(dev, &in_addr);
|
paddr = dev_translate_dma_address(dev, &in_addr);
|
||||||
|
@ -120,6 +122,12 @@ static void *stm32_copro_device_to_virt(struct udevice *dev, ulong da)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end_addr = cpu_to_be32(da + size - 1);
|
||||||
|
if (dev_translate_dma_address(dev, &end_addr) == OF_BAD_ADDR) {
|
||||||
|
dev_err(dev, "Unable to convert address %ld\n", da + size - 1);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return phys_to_virt(paddr);
|
return phys_to_virt(paddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,9 +122,10 @@ struct dm_rproc_ops {
|
||||||
*
|
*
|
||||||
* @dev: Remote proc device
|
* @dev: Remote proc device
|
||||||
* @da: Device address
|
* @da: Device address
|
||||||
|
* @size: Size of the memory region @da is pointing to
|
||||||
* @return virtual address.
|
* @return virtual address.
|
||||||
*/
|
*/
|
||||||
void * (*device_to_virt)(struct udevice *dev, ulong da);
|
void * (*device_to_virt)(struct udevice *dev, ulong da, ulong size);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Accessor */
|
/* Accessor */
|
||||||
|
|
Loading…
Add table
Reference in a new issue