Re: [PATCH v2 04/16] remoteproc: introduce rproc_find_carveout_by_da

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu 30 Nov 08:46 PST 2017, Loic Pallardy wrote:

> This patch provides a new function to find a carveout according
> to a device address (da).
> If match found, this function returns CPU virtual address corresponding
> to specified da.
> 
> Signed-off-by: Loic Pallardy <loic.pallardy@xxxxxx>
> ---
>  drivers/remoteproc/remoteproc_core.c | 42 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index 279320a..78525d1 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -211,6 +211,48 @@ void *rproc_da_to_va(struct rproc *rproc, u64 da, int len)
>  }
>  EXPORT_SYMBOL(rproc_da_to_va);
>  
> +/**
> + * rproc_find_carveout_by_da() - lookup the carveout region for a remoteproc address
> + * @rproc: handle of a remote processor
> + * @da: remoteproc device address to find
> + * @len: length of the memory region @da is pointing to
> + *
> + * Platform driver has the capability to register some pre-allacoted carveout
> + * (physically contiguous memory regions) before rproc firmware loading and
> + * associated resource table analysis. These regions may be dedicated memory
> + * regions internal to the coprocessor or specified DDR region with specific
> + * attributes
> + *
> + * This function is a helper function with which we can go over the
> + * allocated carveouts and translate specific device addresse to virtual
> + * addresse so we can fill firmware resource table.
> + *
> + * The function returns a valid virtual address on success or NULL on failure.
> + */
> +void *rproc_find_carveout_by_da(struct rproc *rproc, u64 da, int len)

The name suggest that this returns a struct rproc_mem_entry *, but the
implementation is just a duplicate of rproc_da_to_va.

I think I prefer that we just use the name based lookup in the
subsequent patch, alternatively I think this should be made to return
the carveout and one could then use da_to_va if you need a reference
within that carveout.

> +{
> +	struct rproc_mem_entry *carveout;
> +	void *va = NULL;
> +
> +	list_for_each_entry(carveout, &rproc->carveouts, node) {
> +		int offset = da - carveout->da;
> +
> +		/* try next carveout if da is too small */
> +		if (offset < 0)
> +			continue;
> +
> +		/* try next carveout if da is too large */
> +		if (offset + len > carveout->len)
> +			continue;
> +
> +		va = carveout->va + offset;
> +
> +		break;
> +	}
> +
> +	return va;
> +}

Regards,
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-remoteproc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux