On s390 systems (aka mainframes), it has classic channel devices for
networking and permanent storage that are currently even more common
than PCI devices. Hence it could have a fully functional s390 kernel
with CONFIG_PCI=n, then the relevant iomem mapping functions
[including ioremap(), devm_ioremap(), etc.] are not available.
In LKP error report at below on s390:
------
ld: kernel/dma/coherent.o: in function `dma_init_coherent_memory':
coherent.c:(.text+0x102): undefined reference to `memremap'
ld: coherent.c:(.text+0x226): undefined reference to `memunmap'
ld: kernel/dma/coherent.o: in function `dma_declare_coherent_memory':
coherent.c:(.text+0x8b8): undefined reference to `memunmap'
ld: kernel/dma/coherent.o: in function `dma_release_coherent_memory':
coherent.c:(.text+0x9aa): undefined reference to `memunmap'
------
In the config file, several Kconfig options are:
------
'# CONFIG_PCI is not set'
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_DMA_DECLARE_COHERENT=y
------
So, enabling OF_EARLY_FLATTREE will select DMA_DECLARE_COHERENT
and cause above building errors even though they are not needed
because CONFIG_PCI is disabled.
Here let OF_EARLY_FLATTREE depend on HAS_IOMEM so that it won't
be built to cause compiling error if PCI is unset.
Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
Signed-off-by: Baoquan He <[email protected]>
Cc: Rob Herring <[email protected]>
Cc: Frank Rowand <[email protected]>
Cc: [email protected]
---
drivers/of/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index e40f10bf2ba4..da9826accb1b 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -55,7 +55,7 @@ config OF_FLATTREE
config OF_EARLY_FLATTREE
bool
- select DMA_DECLARE_COHERENT if HAS_DMA
+ select DMA_DECLARE_COHERENT if HAS_DMA && HAS_IOMEM
select OF_FLATTREE
config OF_PROMTREE
--
2.34.1
On Fri, 07 Jul 2023 21:58:52 +0800, Baoquan He wrote:
> On s390 systems (aka mainframes), it has classic channel devices for
> networking and permanent storage that are currently even more common
> than PCI devices. Hence it could have a fully functional s390 kernel
> with CONFIG_PCI=n, then the relevant iomem mapping functions
> [including ioremap(), devm_ioremap(), etc.] are not available.
>
> In LKP error report at below on s390:
> ------
> ld: kernel/dma/coherent.o: in function `dma_init_coherent_memory':
> coherent.c:(.text+0x102): undefined reference to `memremap'
> ld: coherent.c:(.text+0x226): undefined reference to `memunmap'
> ld: kernel/dma/coherent.o: in function `dma_declare_coherent_memory':
> coherent.c:(.text+0x8b8): undefined reference to `memunmap'
> ld: kernel/dma/coherent.o: in function `dma_release_coherent_memory':
> coherent.c:(.text+0x9aa): undefined reference to `memunmap'
> ------
>
> In the config file, several Kconfig options are:
> ------
> '# CONFIG_PCI is not set'
> CONFIG_OF_EARLY_FLATTREE=y
> CONFIG_DMA_DECLARE_COHERENT=y
> ------
>
> So, enabling OF_EARLY_FLATTREE will select DMA_DECLARE_COHERENT
> and cause above building errors even though they are not needed
> because CONFIG_PCI is disabled.
>
> Here let OF_EARLY_FLATTREE depend on HAS_IOMEM so that it won't
> be built to cause compiling error if PCI is unset.
>
> Reported-by: kernel test robot <[email protected]>
> Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
> Signed-off-by: Baoquan He <[email protected]>
> Cc: Rob Herring <[email protected]>
> Cc: Frank Rowand <[email protected]>
> Cc: [email protected]
> ---
> drivers/of/Kconfig | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Applied, thanks!