Messages in this thread | | | Subject | Re: [PATCH v15 12/12] of: Add plumbing for restricted DMA pool | From | Guenter Roeck <> | Date | Fri, 2 Jul 2021 06:48:54 -0700 |
| |
On 7/2/21 6:18 AM, Will Deacon wrote: > On Fri, Jul 02, 2021 at 12:39:41PM +0100, Robin Murphy wrote: >> On 2021-07-02 04:08, Guenter Roeck wrote: >>> On Thu, Jun 24, 2021 at 11:55:26PM +0800, Claire Chang wrote: >>>> If a device is not behind an IOMMU, we look up the device node and set >>>> up the restricted DMA when the restricted-dma-pool is presented. >>>> >>>> Signed-off-by: Claire Chang <tientzu@chromium.org> >>>> Tested-by: Stefano Stabellini <sstabellini@kernel.org> >>>> Tested-by: Will Deacon <will@kernel.org> >>> >>> With this patch in place, all sparc and sparc64 qemu emulations >>> fail to boot. Symptom is that the root file system is not found. >>> Reverting this patch fixes the problem. Bisect log is attached. >> >> Ah, OF_ADDRESS depends on !SPARC, so of_dma_configure_id() is presumably >> returning an unexpected -ENODEV from the of_dma_set_restricted_buffer() >> stub. That should probably be returning 0 instead, since either way it's not >> an error condition for it to simply do nothing. > > Something like below? >
Yes, that does the trick.
> Will > > --->8 > >>From 4d9dcb9210c1f37435b6088284e04b6b36ee8c4d Mon Sep 17 00:00:00 2001 > From: Will Deacon <will@kernel.org> > Date: Fri, 2 Jul 2021 14:13:28 +0100 > Subject: [PATCH] of: Return success from of_dma_set_restricted_buffer() when > !OF_ADDRESS > > When CONFIG_OF_ADDRESS=n, of_dma_set_restricted_buffer() returns -ENODEV > and breaks the boot for sparc[64] machines. Return 0 instead, since the > function is essentially a glorified NOP in this configuration. > > Cc: Claire Chang <tientzu@chromium.org> > Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> > Reported-by: Guenter Roeck <linux@roeck-us.net> > Suggested-by: Robin Murphy <robin.murphy@arm.com> > Link: https://lore.kernel.org/r/20210702030807.GA2685166@roeck-us.net > Signed-off-by: Will Deacon <will@kernel.org>
Tested-by: Guenter Roeck <linux@roeck-us.net>
> --- > drivers/of/of_private.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h > index 8fde97565d11..34dd548c5eac 100644 > --- a/drivers/of/of_private.h > +++ b/drivers/of/of_private.h > @@ -173,7 +173,8 @@ static inline int of_dma_get_range(struct device_node *np, > static inline int of_dma_set_restricted_buffer(struct device *dev, > struct device_node *np) > { > - return -ENODEV; > + /* Do nothing, successfully. */ > + return 0; > } > #endif > >
| |