From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 13 Dec 2017 16:45:32 -0800 From: Bjorn Andersson Subject: Re: [PATCH v2 04/16] remoteproc: introduce rproc_find_carveout_by_da Message-ID: <20171214004532.GF17344@builder> References: <1512060411-729-1-git-send-email-loic.pallardy@st.com> <1512060411-729-5-git-send-email-loic.pallardy@st.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1512060411-729-5-git-send-email-loic.pallardy@st.com> To: Loic Pallardy Cc: ohad@wizery.com, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, arnaud.pouliquen@st.com, benjamin.gaignard@linaro.org List-ID: 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 > --- > 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