All of lore.kernel.org
 help / color / mirror / Atom feed
From: Loic PALLARDY <loic.pallardy@st.com>
To: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: "ohad@wizery.com" <ohad@wizery.com>,
	"linux-remoteproc@vger.kernel.org"
	<linux-remoteproc@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Arnaud POULIQUEN <arnaud.pouliquen@st.com>,
	"benjamin.gaignard@linaro.org" <benjamin.gaignard@linaro.org>
Subject: RE: [PATCH v2 05/16] remoteproc: modify rproc_handle_carveout to support preallocated region
Date: Fri, 12 Jan 2018 07:56:27 +0000	[thread overview]
Message-ID: <0bbc0455b6ee45cdb0ebab04117b6a40@SFHDAG7NODE2.st.com> (raw)
In-Reply-To: <20171214005917.GG17344@builder>



> -----Original Message-----
> From: Bjorn Andersson [mailto:bjorn.andersson@linaro.org]
> Sent: Thursday, December 14, 2017 1:59 AM
> To: Loic PALLARDY <loic.pallardy@st.com>
> Cc: ohad@wizery.com; linux-remoteproc@vger.kernel.org; linux-
> kernel@vger.kernel.org; Arnaud POULIQUEN <arnaud.pouliquen@st.com>;
> benjamin.gaignard@linaro.org
> Subject: Re: [PATCH v2 05/16] remoteproc: modify rproc_handle_carveout to
> support preallocated region
> 
> On Thu 30 Nov 08:46 PST 2017, Loic Pallardy wrote:
> 
> > In current version rproc_handle_carveout function support only dynamic
> > region allocation.
> > This patch extends rproc_handle_carveout function to support different
> carveout
> > configurations:
> > - fixed DA and fixed PA: check if already part of pre-registered carveouts
> > (platform driver). If no, return error.
> > - fixed DA and any PA: check if already part of pre-allocated carveouts
> > (platform driver). If not found and rproc supports iommu, continue with
> > dynamic allocation (DA will be used for iommu programming), else return
> > error as no way to force DA.
> > - any DA and any PA: use original dynamic allocation
> >
> > Signed-off-by: Loic Pallardy <loic.pallardy@st.com>
> > ---
> >  drivers/remoteproc/remoteproc_core.c | 40
> ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 40 insertions(+)
> >
> > diff --git a/drivers/remoteproc/remoteproc_core.c
> b/drivers/remoteproc/remoteproc_core.c
> > index 78525d1..515a17a 100644
> > --- a/drivers/remoteproc/remoteproc_core.c
> > +++ b/drivers/remoteproc/remoteproc_core.c
> > @@ -184,6 +184,10 @@ void *rproc_da_to_va(struct rproc *rproc, u64 da,
> int len)
> >  	struct rproc_mem_entry *carveout;
> >  	void *ptr = NULL;
> >
> > +	/*
> > +	 * da_to_va platform driver is deprecated. Driver should register
> > +	 * carveout thanks to rproc_add_carveout function
> > +	 */
> 
> I think this comment is unrelated to the rest of this patch. I also
> think that at the end of the carveout-rework we should have a patch
> removing this ops.

I'll remove this comment and add a da_to_va clean-up patch at the end of the series

> 
> >  	if (rproc->ops->da_to_va) {
> >  		ptr = rproc->ops->da_to_va(rproc, da, len);
> >  		if (ptr)
> > @@ -677,6 +681,7 @@ static int rproc_handle_carveout(struct rproc
> *rproc,
> >  	struct rproc_mem_entry *carveout, *mapping;
> >  	struct device *dev = &rproc->dev;
> >  	dma_addr_t dma;
> > +	phys_addr_t pa;
> >  	void *va;
> >  	int ret;
> >
> > @@ -698,6 +703,41 @@ static int rproc_handle_carveout(struct rproc
> *rproc,
> >  	if (!carveout)
> >  		return -ENOMEM;
> >
> > +	/* Check carveout rsc already part of a registered carveout */
> > +	if (rsc->da != FW_RSC_ADDR_ANY) {
> 
> As mentioned before, I consider it perfectly viable for rsc->da to be
> ANY and the driver providing a fixed carveout.

Yes I'll change sequence to lookup by name first and then verify exact parameters matching , not only da definition.

> 
> > +		va = rproc_find_carveout_by_da(rproc, rsc->da, rsc->len);
> > +
> > +		if (va) {
> 
> In a system with an iommu it's possible that rsc->len is larger than
> some carveout->len and va is NULL here so we fall through, allocate some
> memory and remap a segment of the carveout. (Or hopefully fails
> attempting).
> 
> > +			/* Registered region found */
> > +			pa = rproc_va_to_pa(va);
> > +			if (rsc->pa != FW_RSC_ADDR_ANY && rsc->pa !=
> (u32)pa) {
> > +				/* Carveout doesn't match request */
> > +				dev_err(dev->parent,
> > +					"Failed to find carveout fitting da and
> pa\n");
> > +				return -ENOMEM;
> > +			}
> > +
> > +			/* Update rsc table with physical address */
> > +			rsc->pa = (u32)pa;
> > +
> > +			/* Update carveouts list */
> > +			carveout->va = va;
> > +			carveout->len = rsc->len;
> > +			carveout->da = rsc->da;
> > +			carveout->priv = (void *)CARVEOUT_RSC;
> > +
> > +			list_add_tail(&carveout->node, &rproc->carveouts);
> 
> rproc_find_carveout_by_da() will return a reference into a carveout, now
> we add another overlapping carveout into the same list.
> 
> 
> I think it would be saner to not allow the resource table to describe
> subsets of carveouts registered by the driver.
> 
> In which case this would better find a carveout by name or exact da,
> then check that the pa, da, len and rsc->flags are adequate.

Agree
/Loic
> 
> > +
> > +			return 0;
> > +		}
> > +
> > +		if (!rproc->domain) {
> 
> Currently this function ignore invalid values of da when !domain, so I
> think it would be good you can submit this sanity check in it's own
> patch so that anyone bisecting this would know why their broken firmware
> suddenly isn't loadable.
> 
> > +			dev_err(dev->parent,
> > +				"Bad carveout rsc configuration\n");
> > +			return -ENOMEM;
> > +		}
> > +	}
> > +
> 
> Regards,
> Bjorn

  reply	other threads:[~2018-01-12  7:56 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-30 16:46 [PATCH v2 00/16] remoteproc: add fixed memory region support Loic Pallardy
2017-11-30 16:46 ` Loic Pallardy
2017-11-30 16:46 ` [PATCH v2 01/16] remoteproc: add rproc_va_to_pa function Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  0:30   ` Bjorn Andersson
2018-01-12  7:43     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 02/16] remoteproc: add release ops in rproc_mem_entry struct Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  0:34   ` Bjorn Andersson
2018-01-12  7:43     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 03/16] remoteproc: introduce rproc_add_carveout function Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  0:36   ` Bjorn Andersson
2018-01-12  7:45     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 04/16] remoteproc: introduce rproc_find_carveout_by_da Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  0:45   ` Bjorn Andersson
2018-01-12  7:48     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 05/16] remoteproc: modify rproc_handle_carveout to support preallocated region Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  0:59   ` Bjorn Andersson
2018-01-12  7:56     ` Loic PALLARDY [this message]
2018-10-23 17:40       ` Suman Anna
2018-10-23 19:09         ` Loic PALLARDY
2018-10-23 19:12           ` Suman Anna
2017-11-30 16:46 ` [PATCH v2 06/16] remoteproc: modify vring allocation " Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:09   ` Bjorn Andersson
2018-01-12  8:13     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 07/16] remoteproc: st: add reserved memory support Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:15   ` Bjorn Andersson
2018-01-12  8:19     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 08/16] remoteproc: add name in rproc_mem_entry struct Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:21   ` Bjorn Andersson
2018-01-12  8:19     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 09/16] remoteproc: add memory device management support Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-11-30 16:46 ` [PATCH v2 10/16] remoteproc: add memory device registering in rproc_add_carveout Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:29   ` Bjorn Andersson
2018-01-15  9:09     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 11/16] remoteproc: introduce rproc_find_carveout_by_name function Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:32   ` Bjorn Andersson
2018-01-15  9:10     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 12/16] remoteproc: look-up memory-device for vring allocation Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  1:44   ` Bjorn Andersson
2018-01-15 20:44     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 13/16] remoteproc: look-up memory-device for virtio device allocation Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  5:32   ` Bjorn Andersson
2018-01-15 20:57     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 14/16] remoteproc: look-up pre-registered carveout by name for carveout allocation Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  5:34   ` Bjorn Andersson
2018-01-15 20:59     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 15/16] remoteproc: st: associate memory device to memory regions Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy
2017-12-14  5:37   ` Bjorn Andersson
2018-01-15 21:04     ` Loic PALLARDY
2017-11-30 16:46 ` [PATCH v2 16/16] rpmsg: virtio: allocate buffer from parent Loic Pallardy
2017-11-30 16:46   ` Loic Pallardy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0bbc0455b6ee45cdb0ebab04117b6a40@SFHDAG7NODE2.st.com \
    --to=loic.pallardy@st.com \
    --cc=arnaud.pouliquen@st.com \
    --cc=benjamin.gaignard@linaro.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=ohad@wizery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.