From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751438AbdLNAph (ORCPT ); Wed, 13 Dec 2017 19:45:37 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:34051 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750751AbdLNApf (ORCPT ); Wed, 13 Dec 2017 19:45:35 -0500 X-Google-Smtp-Source: ACJfBotM+9vxR9zlAm3YkkdPuJUG65SjpMoG4y4LOH+uT7NUXzwtbEYnCX8C/+oXG5H5Uj8QQHBs0g== Date: Wed, 13 Dec 2017 16:45:32 -0800 From: Bjorn Andersson 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 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> User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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