[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAL_JsqKtNJdjWF6i05kXPzZn7NwOTGW-2jbhcPGQc_deJKuQ0A@mail.gmail.com>
Date: Tue, 1 Jun 2021 10:34:29 -0500
From: Rob Herring <robh@...nel.org>
To: Randy Dunlap <rdunlap@...radead.org>
Cc: devicetree@...r.kernel.org, Frank Rowand <frowand.list@...il.com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Christoph Hellwig <hch@....de>
Subject: Re: [PATCH] of: Drop reserved mem dependency on DMA_DECLARE_COHERENT
and DMA_CMA
On Fri, May 28, 2021 at 5:32 PM Randy Dunlap <rdunlap@...radead.org> wrote:
>
> On 5/28/21 3:09 PM, Randy Dunlap wrote:
> > On 5/27/21 3:32 PM, Rob Herring wrote:
> >> Reserved memory regions can be used for more than just DMA regions, so
> >> only enabling on DMA_DECLARE_COHERENT (via HAS_DMA) or DMA_CMA is wrong.
> >> This effectively doesn't matter except for the few cases arches select
> >> NO_DMA.
> >>
> >> At least, these users of RESERVEDMEM_OF_DECLARE depend on reserved memory
> >> support:
> >>
> >> arch/riscv/mm/init.c:RESERVEDMEM_OF_DECLARE(elfcorehdr, "linux,elfcorehdr", elfcore_hdr_setup);
> >> drivers/memory/tegra/tegra210-emc-table.c:RESERVEDMEM_OF_DECLARE(tegra210_emc_table, "nvidia,tegra210-emc-table",
> >> drivers/soc/fsl/qbman/bman_ccsr.c:RESERVEDMEM_OF_DECLARE(bman_fbpr, "fsl,bman-fbpr", bman_fbpr);
> >> drivers/soc/fsl/qbman/qman_ccsr.c:RESERVEDMEM_OF_DECLARE(qman_fqd, "fsl,qman-fqd", qman_fqd);
> >> drivers/soc/fsl/qbman/qman_ccsr.c:RESERVEDMEM_OF_DECLARE(qman_pfdr, "fsl,qman-pfdr", qman_pfdr);
> >>
> >> Let's simplify things and enable OF_RESERVED_MEM when OF_EARLY_FLATTREE is
> >> enabled.
> >>
> >> Cc: Christoph Hellwig <hch@....de>
> >> Signed-off-by: Rob Herring <robh@...nel.org>
> >
> > Hi Rob,
> >
> > I'm OK with this patch, but with or without this patch,
> > compiling kernel/dma/coherent.c without HAS_IOMEM (!)
> > has build errors:
> >
> > s390-linux-ld: kernel/dma/coherent.o: in function `dma_init_coherent_memory':
> > coherent.c:(.text+0x5ae): undefined reference to `memremap'
> > s390-linux-ld: coherent.c:(.text+0x7a4): undefined reference to `memunmap'
> > s390-linux-ld: kernel/dma/coherent.o: in function `dma_declare_coherent_memory':
> > coherent.c:(.text+0xd84): undefined reference to `memunmap'
> >
> >
> > along with a slew of other build errors (arch/s390/, CONFIG_PCI is not set,
> > CONFIG_HAS_IOMEM is not set):
> >
> > s390-linux-ld: drivers/irqchip/irq-al-fic.o: in function `al_fic_init_dt':
> > irq-al-fic.c:(.init.text+0x6a0): undefined reference to `iounmap'
> > s390-linux-ld: drivers/char/xillybus/xillybus_of.o: in function `xilly_drv_probe':
> > xillybus_of.c:(.text+0x2c8): undefined reference to `devm_platform_ioremap_resource'
> > s390-linux-ld: drivers/pcmcia/cistpl.o: in function `set_cis_map':
> > cistpl.c:(.text+0x87a): undefined reference to `ioremap'
> > s390-linux-ld: cistpl.c:(.text+0x99a): undefined reference to `iounmap'
> > s390-linux-ld: cistpl.c:(.text+0xa34): undefined reference to `iounmap'
> > s390-linux-ld: cistpl.c:(.text+0xaa6): undefined reference to `ioremap'
> > s390-linux-ld: drivers/pcmcia/cistpl.o: in function `release_cis_mem':
> > cistpl.c:(.text+0x2976): undefined reference to `iounmap'
> > s390-linux-ld: drivers/of/address.o: in function `of_iomap':
> > address.c:(.text+0x1f02): undefined reference to `ioremap'
> > s390-linux-ld: drivers/of/address.o: in function `of_io_request_and_map':
> > address.c:(.text+0x2030): undefined reference to `ioremap'
> >
>
> Oops, sorry. I should have said that this is also with my
> experimental path that I thought you suggested earlier this
> week (although I could have misunderstood you):
Yes, that's what I'd like, but no doubt that change alone will make
things worse.
> --- linux-next-20210526.orig/drivers/of/Kconfig
> +++ linux-next-20210526/drivers/of/Kconfig
> @@ -64,7 +64,7 @@ config OF_DYNAMIC
>
> config OF_ADDRESS
> def_bool y
> - depends on !SPARC && (HAS_IOMEM || UML)
> + depends on !SPARC
>
> config OF_IRQ
> def_bool y
>
> [rebuild]
>
> OK, even without this small patch, the result is about the same (just
> a few different function names):
>
> s390-linux-ld: kernel/dma/coherent.o: in function `dma_init_coherent_memory':
> coherent.c:(.text+0x5ae): undefined reference to `memremap'
> s390-linux-ld: coherent.c:(.text+0x7a4): undefined reference to `memunmap'
> s390-linux-ld: kernel/dma/coherent.o: in function `dma_declare_coherent_memory':
> coherent.c:(.text+0xd84): undefined reference to `memunmap'
>
> s390-linux-ld: drivers/irqchip/irq-al-fic.o: in function `al_fic_init_dt':
> irq-al-fic.c:(.init.text+0x64): undefined reference to `of_iomap'
> s390-linux-ld: irq-al-fic.c:(.init.text+0x6a0): undefined reference to `iounmap'
> s390-linux-ld: drivers/char/xillybus/xillybus_of.o: in function `xilly_drv_probe':
> xillybus_of.c:(.text+0x2c8): undefined reference to `devm_platform_ioremap_resource'
> s390-linux-ld: drivers/pcmcia/cistpl.o: in function `set_cis_map':
> cistpl.c:(.text+0x87a): undefined reference to `ioremap'
> s390-linux-ld: cistpl.c:(.text+0x99a): undefined reference to `iounmap'
> s390-linux-ld: cistpl.c:(.text+0xa34): undefined reference to `iounmap'
> s390-linux-ld: cistpl.c:(.text+0xaa6): undefined reference to `ioremap'
> s390-linux-ld: drivers/pcmcia/cistpl.o: in function `release_cis_mem':
> cistpl.c:(.text+0x2976): undefined reference to `iounmap'
Empty stubs for ioremap, iounmap, memremap, and memunmap would fix all
these, right? Though maybe adding stubs is more complicated than I'm
thinking given all the architecture specifics.
Rob
Powered by blists - more mailing lists