diff mbox series

of: Drop reserved mem dependency on DMA_DECLARE_COHERENT and DMA_CMA

Message ID 20210527223217.1572631-1-robh@kernel.org
State Accepted
Commit 1ee292a66e8199d234c8f8fa5cd3d2fef16fc97d
Headers show
Series of: Drop reserved mem dependency on DMA_DECLARE_COHERENT and DMA_CMA | expand

Commit Message

Rob Herring May 27, 2021, 10:32 p.m. UTC
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@lst.de>
Signed-off-by: Rob Herring <robh@kernel.org>

---
This is needed to prevent build break on UML with this patch:

https://lore.kernel.org/lkml/20210527193841.1284169-1-robh@kernel.org/

 drivers/of/Kconfig | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

-- 
2.27.0

Comments

Randy Dunlap May 28, 2021, 10:09 p.m. UTC | #1
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@lst.de>

> Signed-off-by: Rob Herring <robh@kernel.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'

> ---

> This is needed to prevent build break on UML with this patch:

> 

> https://lore.kernel.org/lkml/20210527193841.1284169-1-robh@kernel.org/

> 

>  drivers/of/Kconfig | 4 +---

>  1 file changed, 1 insertion(+), 3 deletions(-)

> 

> diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig

> index 18450437d5d5..3dfeae8912df 100644

> --- a/drivers/of/Kconfig

> +++ b/drivers/of/Kconfig

> @@ -75,9 +75,7 @@ config OF_NET

>  	def_bool y

>  

>  config OF_RESERVED_MEM

> -	bool

> -	depends on OF_EARLY_FLATTREE

> -	default y if DMA_DECLARE_COHERENT || DMA_CMA

> +	def_bool OF_EARLY_FLATTREE

>  

>  config OF_RESOLVE

>  	bool

> 



-- 
~Randy
Randy Dunlap May 28, 2021, 10:32 p.m. UTC | #2
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@lst.de>

>> Signed-off-by: Rob Herring <robh@kernel.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):

--- 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'


>> ---

>> This is needed to prevent build break on UML with this patch:

>>

>> https://lore.kernel.org/lkml/20210527193841.1284169-1-robh@kernel.org/

>>

>>  drivers/of/Kconfig | 4 +---

>>  1 file changed, 1 insertion(+), 3 deletions(-)

>>

>> diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig

>> index 18450437d5d5..3dfeae8912df 100644

>> --- a/drivers/of/Kconfig

>> +++ b/drivers/of/Kconfig

>> @@ -75,9 +75,7 @@ config OF_NET

>>  	def_bool y

>>  

>>  config OF_RESERVED_MEM

>> -	bool

>> -	depends on OF_EARLY_FLATTREE

>> -	default y if DMA_DECLARE_COHERENT || DMA_CMA

>> +	def_bool OF_EARLY_FLATTREE

>>  

>>  config OF_RESOLVE

>>  	bool

>>

> 

> 



-- 
~Randy
Rob Herring June 1, 2021, 3:34 p.m. UTC | #3
On Fri, May 28, 2021 at 5:32 PM Randy Dunlap <rdunlap@infradead.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@lst.de>

> >> Signed-off-by: Rob Herring <robh@kernel.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
diff mbox series

Patch

diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index 18450437d5d5..3dfeae8912df 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -75,9 +75,7 @@  config OF_NET
 	def_bool y
 
 config OF_RESERVED_MEM
-	bool
-	depends on OF_EARLY_FLATTREE
-	default y if DMA_DECLARE_COHERENT || DMA_CMA
+	def_bool OF_EARLY_FLATTREE
 
 config OF_RESOLVE
 	bool