Skip to contentSkip to conversation

Separate generic header usage from ARCH_MULTIPLATFORM

PATCH Superseded Jonathan Austin 4 participants 10 messages May 14, 2013 – May 23, 2013

Subsystems (6)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover Separate generic header usage from ARCH_MULTIPLATFORM

The original aim of this series was to restore the ability to build a NOMMU kernel for Versatile Express, something that was lost when we converted ARCH_VEXPRESS for ARCH_MULTIPLATFORM.

In order to do this, it is necessary to abstract the use of generic headers from selection of ARCH_MULTIPLATFORM so that the two can be used separately. This is necessary becuase building a multiplatform kernel for processors without and MMU doesn't make sense (it is necessary to hardcode certain mem-map related data) and the versatile express can host NOMMU processors.

This series performs this separation, and then goes on to add a 'dummy' ARCH_VEXPRESS_NOMMU platform that can be selected as standalone platform.

Patch 2 was sent to the list as an RFC some time ago where it was ACKd, but alone is not sufficient to solve the problem, hence this follow-up series.

Changes since V1:
- Rebase on to 3.10-rc1: fixup conflict from CONFIG_UNCOMPRESS_INCLUDE-foo

Jonathan Austin (3):
ARM: allow platforms to use generic headers without
ARCH_MULTIPLATFORM
ARM: nommu: re-enable use of vexpress without ARCH_MULTIPLATFORM
ARM: vexpress-nommu: add a Makefile.boot to restore single-platform
build

 arch/arm/Kconfig                     |   21 +++++++++++++++++++++
 arch/arm/Kconfig.debug               |    4 ++--
 arch/arm/Makefile                    |    2 +-
 arch/arm/include/asm/timex.h         |    2 +-
 arch/arm/mach-mvebu/Makefile         |    2 +-
 arch/arm/mach-omap2/Makefile         |    2 +-
 arch/arm/mach-vexpress/Makefile      |    2 +-
 arch/arm/mach-vexpress/Makefile.boot |    4 ++++
 arch/arm/plat-omap/Makefile          |    2 +-
 arch/arm/plat-orion/Makefile         |    2 +-
 arch/arm/plat-versatile/Makefile     |    2 +-
 11 files changed, 35 insertions(+), 10 deletions(-)
 create mode 100644 arch/arm/mach-vexpress/Makefile.boot
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

CC Rob Herring <[email protected]>
CC Pawel Moll <[email protected]>
CC Jason Cooper <[email protected]>
CC Andrew Lunn <[email protected]>
CC Gregory Clement <[email protected]>
CC Tony Lindgren <[email protected]>
CC Stephen Boyd <[email protected]>
CC Will Deacon <[email protected]>
---
 arch/arm/Kconfig                 |    4 ++++
 arch/arm/Kconfig.debug           |    4 ++--
 arch/arm/Makefile                |    2 +-
 arch/arm/include/asm/timex.h     |    2 +-
 arch/arm/mach-mvebu/Makefile     |    2 +-
 arch/arm/mach-omap2/Makefile     |    2 +-
 arch/arm/mach-vexpress/Makefile  |    2 +-
 arch/arm/plat-omap/Makefile      |    2 +-
 arch/arm/plat-orion/Makefile     |    2 +-
 arch/arm/plat-versatile/Makefile |    2 +-
 10 files changed, 14 insertions(+), 10 deletions(-)
arch/arm/Kconfig +4 -0
index d423d58..408eb33 100644
@@ -206,6 +206,9 @@ config NEED_RET_TO_USER
 config ARCH_MTD_XIP
 	bool
 
+config ARM_GENERIC_HEADERS
+	bool
+
 config VECTORS_BASE
 	hex
 	default 0xffff0000 if MMU || CPU_HIGH_VECTOR
@@ -295,6 +298,7 @@ config ARCH_MULTIPLATFORM
 	select MULTI_IRQ_HANDLER
 	select SPARSE_IRQ
 	select USE_OF
+	select ARM_GENERIC_HEADERS
 
 config ARCH_INTEGRATOR
 	bool "ARM Ltd. Integrator family"
arch/arm/Kconfig.debug +2 -2
index 1d41908..ede909b 100644
@@ -652,13 +652,13 @@ config DEBUG_LL_INCLUDE
 
 config DEBUG_UNCOMPRESS
 	bool
-	default y if ARCH_MULTIPLATFORM && DEBUG_LL && \
+	default y if ARM_GENERIC_HEADERS && DEBUG_LL && \
 		     !DEBUG_OMAP2PLUS_UART && \
 		     !DEBUG_TEGRA_UART
 
 config UNCOMPRESS_INCLUDE
 	string
-	default "debug/uncompress.h" if ARCH_MULTIPLATFORM
+	default "debug/uncompress.h" if ARM_GENERIC_HEADERS
 	default "mach/uncompress.h"
 
 config EARLY_PRINTK
arch/arm/Makefile +1 -1
index 4737408..ab0416f 100644
@@ -229,7 +229,7 @@ endif
 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))
 
-ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
+ifneq ($(CONFIG_ARM_GENERIC_HEADERS),y)
 ifeq ($(KBUILD_SRC),)
 KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
 else
arch/arm/include/asm/timex.h +1 -1
index 83f2aa8..586a9c2 100644
@@ -12,7 +12,7 @@
 #ifndef _ASMARM_TIMEX_H
 #define _ASMARM_TIMEX_H
 
-#ifdef CONFIG_ARCH_MULTIPLATFORM
+#ifdef CONFIG_ARM_GENERIC_HEADERS
 #define CLOCK_TICK_RATE 1000000
 #else
 #include <mach/timex.h>
arch/arm/mach-mvebu/Makefile +1 -1
index 2d04f0e..d3c0e0b 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-orion/include
 
 AFLAGS_coherency_ll.o		:= -Wa,-march=armv7-a
arch/arm/mach-omap2/Makefile +1 -1
index 55a9d67..ab204bc 100644
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-omap/include
 
 # Common support
arch/arm/mach-vexpress/Makefile +1 -1
index 42703e8..6768e7f 100644
@@ -1,7 +1,7 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-versatile/include
 
 obj-y					:= v2m.o
arch/arm/plat-omap/Makefile +1 -1
index 3119941..3e1ba10 100644
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/arch/arm/plat-omap/include
 
 # Common support
 obj-y := sram.o dma.o counter_32k.o
arch/arm/plat-orion/Makefile +1 -1
index 9433605..79a042ed 100644
@@ -1,7 +1,7 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
 orion-gpio-$(CONFIG_GPIOLIB)      += gpio.o
 obj-$(CONFIG_PLAT_ORION_LEGACY)   += irq.o pcie.o time.o common.o mpp.o
arch/arm/plat-versatile/Makefile +1 -1
index f88d448..19495c6 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
 obj-$(CONFIG_PLAT_VERSATILE_CLOCK) += clock.o
 obj-$(CONFIG_PLAT_VERSATILE_CLCD) += clcd.o
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

Quoted 5 lines · Jonathan Austin

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

Quoted 8 lines

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

I find this name confusing. It is no headers you are selecting and generic is a bit overused IMHO. So how about something like NEED_NO_MACH_HEADERS to somewhat align to the other header related config options (e.g. NEED_MACH_GPIO_H).

Rob

Quoted 163 lines
CC Rob Herring <[email protected]>
CC Pawel Moll <[email protected]>
CC Jason Cooper <[email protected]>
CC Andrew Lunn <[email protected]>
CC Gregory Clement <[email protected]>
CC Tony Lindgren <[email protected]>
CC Stephen Boyd <[email protected]>
CC Will Deacon <[email protected]>
---
 arch/arm/Kconfig                 |    4 ++++
 arch/arm/Kconfig.debug           |    4 ++--
 arch/arm/Makefile                |    2 +-
 arch/arm/include/asm/timex.h     |    2 +-
 arch/arm/mach-mvebu/Makefile     |    2 +-
 arch/arm/mach-omap2/Makefile     |    2 +-
 arch/arm/mach-vexpress/Makefile  |    2 +-
 arch/arm/plat-omap/Makefile      |    2 +-
 arch/arm/plat-orion/Makefile     |    2 +-
 arch/arm/plat-versatile/Makefile |    2 +-
 10 files changed, 14 insertions(+), 10 deletions(-)
arch/arm/Kconfig +4 -0
index d423d58..408eb33 100644
@@ -206,6 +206,9 @@ config NEED_RET_TO_USER
 config ARCH_MTD_XIP
 	bool
 
+config ARM_GENERIC_HEADERS
+	bool
+
 config VECTORS_BASE
 	hex
 	default 0xffff0000 if MMU || CPU_HIGH_VECTOR
@@ -295,6 +298,7 @@ config ARCH_MULTIPLATFORM
 	select MULTI_IRQ_HANDLER
 	select SPARSE_IRQ
 	select USE_OF
+	select ARM_GENERIC_HEADERS
 
 config ARCH_INTEGRATOR
 	bool "ARM Ltd. Integrator family"
arch/arm/Kconfig.debug +2 -2
index 1d41908..ede909b 100644
@@ -652,13 +652,13 @@ config DEBUG_LL_INCLUDE
 
 config DEBUG_UNCOMPRESS
 	bool
-	default y if ARCH_MULTIPLATFORM && DEBUG_LL && \
+	default y if ARM_GENERIC_HEADERS && DEBUG_LL && \
 		     !DEBUG_OMAP2PLUS_UART && \
 		     !DEBUG_TEGRA_UART
 
 config UNCOMPRESS_INCLUDE
 	string
-	default "debug/uncompress.h" if ARCH_MULTIPLATFORM
+	default "debug/uncompress.h" if ARM_GENERIC_HEADERS
 	default "mach/uncompress.h"
 
 config EARLY_PRINTK
arch/arm/Makefile +1 -1
index 4737408..ab0416f 100644
@@ -229,7 +229,7 @@ endif
 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))
 
-ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
+ifneq ($(CONFIG_ARM_GENERIC_HEADERS),y)
 ifeq ($(KBUILD_SRC),)
 KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
 else
arch/arm/include/asm/timex.h +1 -1
index 83f2aa8..586a9c2 100644
@@ -12,7 +12,7 @@
 #ifndef _ASMARM_TIMEX_H
 #define _ASMARM_TIMEX_H
 
-#ifdef CONFIG_ARCH_MULTIPLATFORM
+#ifdef CONFIG_ARM_GENERIC_HEADERS
 #define CLOCK_TICK_RATE 1000000
 #else
 #include <mach/timex.h>
arch/arm/mach-mvebu/Makefile +1 -1
index 2d04f0e..d3c0e0b 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-orion/include
 
 AFLAGS_coherency_ll.o		:= -Wa,-march=armv7-a
arch/arm/mach-omap2/Makefile +1 -1
index 55a9d67..ab204bc 100644
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-omap/include
 
 # Common support
arch/arm/mach-vexpress/Makefile +1 -1
index 42703e8..6768e7f 100644
@@ -1,7 +1,7 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
 	-I$(srctree)/arch/arm/plat-versatile/include
 
 obj-y					:= v2m.o
arch/arm/plat-omap/Makefile +1 -1
index 3119941..3e1ba10 100644
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/arch/arm/plat-omap/include
 
 # Common support
 obj-y := sram.o dma.o counter_32k.o
arch/arm/plat-orion/Makefile +1 -1
index 9433605..79a042ed 100644
@@ -1,7 +1,7 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
 orion-gpio-$(CONFIG_GPIOLIB)      += gpio.o
 obj-$(CONFIG_PLAT_ORION_LEGACY)   += irq.o pcie.o time.o common.o mpp.o
arch/arm/plat-versatile/Makefile +1 -1
index f88d448..19495c6 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
 obj-$(CONFIG_PLAT_VERSATILE_CLOCK) += clock.o
 obj-$(CONFIG_PLAT_VERSATILE_CLCD) += clcd.o
maintainer
#3 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

Quoted 11 lines · Rob Herring
Quoted 10 lines · Jonathan Austin

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

Quoted 8 lines
Quoted 3 lines

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

I find this name confusing. It is no headers you are selecting and generic is a bit overused IMHO. So how about something like NEED_NO_MACH_HEADERS to somewhat align to the other header related config options (e.g. NEED_MACH_GPIO_H).

Hmm it _looks_ like this won't allow the drivers again to #include <plat/*.h> and <mach/*.h>. Have you checked that?

It might be worth checking as we really don't want to go back there again.. Currently arch/arm/Makefile has:

ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
ifeq ($(KBUILD_SRC),)
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs)) else
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs)) endif
endif

So you may need to do something there to prevent drivers from again including machdirs and platdirs.

Regards,

Tony

#4 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

Hi Tony,

Quoted 35 lines · Tony Lindgren
Quoted 11 lines · Rob Herring
Quoted 10 lines · Jonathan Austin

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

Quoted 8 lines
Quoted 3 lines

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

I find this name confusing. It is no headers you are selecting and generic is a bit overused IMHO. So how about something like NEED_NO_MACH_HEADERS to somewhat align to the other header related config options (e.g. NEED_MACH_GPIO_H).

Hmm it _looks_ like this won't allow the drivers again to #include <plat/*.h> and <mach/*.h>. Have you checked that?

It might be worth checking as we really don't want to go back there again.. Currently arch/arm/Makefile has:

ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
ifeq ($(KBUILD_SRC),)
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs)) else
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs)) endif
endif

Quoted 3 lines

So you may need to do something there to prevent drivers from again including machdirs and platdirs.

If I've understood you correctly, then this patch already deals with this case (though it isn't hugely obvious from the diff...) by replacing CONFIG_ARCH_MULTIPLATFORM in your example above with CONFIG_ARM_GENERIC_HEADERS (soon to be renamed, as per Rob's suggestion).

Because ARCH_MULTIPLATFORM selects CONFIG_(FORMERLY_KNOWN_AS_)ARM_GENERIC_HEADERS it shouldn't be possible for anything multi-platform to start including <plat/*.h> and <mach/*.h> again.

This seems to be the right thing to do because it also makes it impossible to include <plat/*.h> and <mach/*.h> in !MULTIPLATFORM situations that don't need mach/plat headers, like the VEXPRESS_NOMMU case.

Is that what you were getting at? Please let me know if not...

Thanks,

Jonny

Quoted 4 lines

Regards,

Tony

maintainer
#5 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

Quoted 52 lines · Jonathan Austin

Hi Tony,

Quoted 35 lines · Tony Lindgren
Quoted 11 lines · Rob Herring
Quoted 10 lines · Jonathan Austin

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

Quoted 8 lines
Quoted 3 lines

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

I find this name confusing. It is no headers you are selecting and generic is a bit overused IMHO. So how about something like NEED_NO_MACH_HEADERS to somewhat align to the other header related config options (e.g. NEED_MACH_GPIO_H).

Hmm it _looks_ like this won't allow the drivers again to #include <plat/*.h> and <mach/*.h>. Have you checked that?

It might be worth checking as we really don't want to go back there again.. Currently arch/arm/Makefile has:

ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
ifeq ($(KBUILD_SRC),)
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs)) else
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs)) endif
endif

Quoted 3 lines

So you may need to do something there to prevent drivers from again including machdirs and platdirs.

If I've understood you correctly, then this patch already deals with this case (though it isn't hugely obvious from the diff...) by replacing CONFIG_ARCH_MULTIPLATFORM in your example above with CONFIG_ARM_GENERIC_HEADERS (soon to be renamed, as per Rob's suggestion).

Because ARCH_MULTIPLATFORM selects CONFIG_(FORMERLY_KNOWN_AS_)ARM_GENERIC_HEADERS it shouldn't be possible for anything multi-platform to start including <plat/*.h> and <mach/*.h> again.

Quoted 6 lines

This seems to be the right thing to do because it also makes it impossible to include <plat/*.h> and <mach/*.h> in !MULTIPLATFORM situations that don't need mach/plat headers, like the VEXPRESS_NOMMU case.

Is that what you were getting at? Please let me know if not...

Yes that's exactly what I was worried about as it was a bit hard to see from the patch. Thanks for checking it.

Regards,

Tony

#6 lore raw

PATCH v2 1/3 ARM: allow platforms to use generic headers without ARCH_MULTIPLATFORM

In reply to Rob Herring

Hi Rob,

Quoted 11 lines · Rob Herring
Quoted 10 lines · Jonathan Austin

Currently the use of generic mach headers is only is controlled by the same config option as selection of a multiplatform kernel (i.e. ARCH_MULTIPLATFORM). However, there are cases where it is valid to use the generic headers but still build a single platform kernel.

One such example is when using the vexpress platform with a core that does not have an MMU; a multiplatform kernel does not make sense, but use of the generic headers is required by the vexpress platform since 617276307cd4c ("ARM: vexpress: convert to multi-platform").

Quoted 8 lines
Quoted 3 lines

This patch untangles these two options by introducing a new ARM_GENERIC_HEADERS config option that ARCH_MULTIPLATFORM selects. Other platforms can now select ARM_GENERIC_HEADERS independently.

I find this name confusing. It is no headers you are selecting and generic is a bit overused IMHO. So how about something like NEED_NO_MACH_HEADERS to somewhat align to the other header related config options (e.g. NEED_MACH_GPIO_H).

NEED_NO_MACH_HEADERS is fine by me... Expresses things well.

I'll post a v3 around -rc3 with this changed.

Thanks,

Jonny

Quoted 168 lines

Rob

Quoted 163 lines
CC Rob Herring <[email protected]>
CC Pawel Moll <[email protected]>
CC Jason Cooper <[email protected]>
CC Andrew Lunn <[email protected]>
CC Gregory Clement <[email protected]>
CC Tony Lindgren <[email protected]>
CC Stephen Boyd <[email protected]>
CC Will Deacon <[email protected]>
---
  arch/arm/Kconfig                 |    4 ++++
  arch/arm/Kconfig.debug           |    4 ++--
  arch/arm/Makefile                |    2 +-
  arch/arm/include/asm/timex.h     |    2 +-
  arch/arm/mach-mvebu/Makefile     |    2 +-
  arch/arm/mach-omap2/Makefile     |    2 +-
  arch/arm/mach-vexpress/Makefile  |    2 +-
  arch/arm/plat-omap/Makefile      |    2 +-
  arch/arm/plat-orion/Makefile     |    2 +-
  arch/arm/plat-versatile/Makefile |    2 +-
  10 files changed, 14 insertions(+), 10 deletions(-)
arch/arm/Kconfig +4 -0
index d423d58..408eb33 100644
@@ -206,6 +206,9 @@ config NEED_RET_TO_USER
  config ARCH_MTD_XIP
  	bool
 
+config ARM_GENERIC_HEADERS
+	bool
+
  config VECTORS_BASE
  	hex
  	default 0xffff0000 if MMU || CPU_HIGH_VECTOR
@@ -295,6 +298,7 @@ config ARCH_MULTIPLATFORM
  	select MULTI_IRQ_HANDLER
  	select SPARSE_IRQ
  	select USE_OF
+	select ARM_GENERIC_HEADERS
 
  config ARCH_INTEGRATOR
  	bool "ARM Ltd. Integrator family"
arch/arm/Kconfig.debug +2 -2
index 1d41908..ede909b 100644
@@ -652,13 +652,13 @@ config DEBUG_LL_INCLUDE
 
  config DEBUG_UNCOMPRESS
  	bool
-	default y if ARCH_MULTIPLATFORM && DEBUG_LL && \
+	default y if ARM_GENERIC_HEADERS && DEBUG_LL && \
  		     !DEBUG_OMAP2PLUS_UART && \
  		     !DEBUG_TEGRA_UART
 
  config UNCOMPRESS_INCLUDE
  	string
-	default "debug/uncompress.h" if ARCH_MULTIPLATFORM
+	default "debug/uncompress.h" if ARM_GENERIC_HEADERS
  	default "mach/uncompress.h"
 
  config EARLY_PRINTK
arch/arm/Makefile +1 -1
index 4737408..ab0416f 100644
@@ -229,7 +229,7 @@ endif
  machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
  platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))
 
-ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
+ifneq ($(CONFIG_ARM_GENERIC_HEADERS),y)
  ifeq ($(KBUILD_SRC),)
  KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
  else
arch/arm/include/asm/timex.h +1 -1
index 83f2aa8..586a9c2 100644
@@ -12,7 +12,7 @@
  #ifndef _ASMARM_TIMEX_H
  #define _ASMARM_TIMEX_H
 
-#ifdef CONFIG_ARCH_MULTIPLATFORM
+#ifdef CONFIG_ARM_GENERIC_HEADERS
  #define CLOCK_TICK_RATE 1000000
  #else
  #include <mach/timex.h>
arch/arm/mach-mvebu/Makefile +1 -1
index 2d04f0e..d3c0e0b 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
  	-I$(srctree)/arch/arm/plat-orion/include
 
  AFLAGS_coherency_ll.o		:= -Wa,-march=armv7-a
arch/arm/mach-omap2/Makefile +1 -1
index 55a9d67..ab204bc 100644
@@ -2,7 +2,7 @@
  # Makefile for the linux kernel.
  #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
  	-I$(srctree)/arch/arm/plat-omap/include
 
  # Common support
arch/arm/mach-vexpress/Makefile +1 -1
index 42703e8..6768e7f 100644
@@ -1,7 +1,7 @@
  #
  # Makefile for the linux kernel.
  #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include \
  	-I$(srctree)/arch/arm/plat-versatile/include
 
  obj-y					:= v2m.o
arch/arm/plat-omap/Makefile +1 -1
index 3119941..3e1ba10 100644
@@ -2,7 +2,7 @@
  # Makefile for the linux kernel.
  #
 
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/arch/arm/plat-omap/include
 
  # Common support
  obj-y := sram.o dma.o counter_32k.o
arch/arm/plat-orion/Makefile +1 -1
index 9433605..79a042ed 100644
@@ -1,7 +1,7 @@
  #
  # Makefile for the linux kernel.
  #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
  orion-gpio-$(CONFIG_GPIOLIB)      += gpio.o
  obj-$(CONFIG_PLAT_ORION_LEGACY)   += irq.o pcie.o time.o common.o mpp.o
arch/arm/plat-versatile/Makefile +1 -1
index f88d448..19495c6 100644
@@ -1,4 +1,4 @@
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+ccflags-$(CONFIG_ARM_GENERIC_HEADERS) := -I$(srctree)/$(src)/include
 
  obj-$(CONFIG_PLAT_VERSATILE_CLOCK) += clock.o
  obj-$(CONFIG_PLAT_VERSATILE_CLCD) += clcd.o
#7 lore raw

PATCH v2 2/3 ARM: nommu: re-enable use of vexpress without ARCH_MULTIPLATFORM

In reply to Jonathan Austin

Since 617276307cd4c ("ARM: vexpress: convert to multi-platform") it has been impossible to select ARCH_VEXPRESS without ARCH_MULTIPLATFORM.

ARCH_MULTIPLATFORM doesn't make sense for NOMMU targets, not least because of the need to hard-code the memory map. However, it should still be possible to run NOMMU kernels on top of the Versatile Express by selecting it as the only platform.

This patch creates a shim ARCH_VEXPRESS_NOMMU config option in the 'choice' for "ARM system type" to make this possible again.

---
 arch/arm/Kconfig |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)
arch/arm/Kconfig +17 -0
index 408eb33..541d90e 100644
@@ -350,6 +350,23 @@ config ARCH_VERSATILE
 	help
 	  This enables support for ARM Ltd Versatile board.
 
+config ARCH_VEXPRESS_NOMMU
+	bool "ARM Ltd. Versatile Express family for NOMMU"
+	depends on !MMU
+	select ARCH_VEXPRESS
+	select SPARSE_IRQ
+	select ARM_GENERIC_HEADERS
+	help
+	  This option enables support for systems using Cortex processor based
+	  ARM core and logic (FPGA) tiles on the Versatile Express motherboard,
+	  in configurations WITHOUT an MMU. You must boot using a Flattened
+	  Device Tree - the traditional ATAGs boot method is not usable with
+	  this configuration.
+
+	  If your system has an MMU and you want to make use of it, you
+	  should instead choose to build a multiplatform kernel and
+	  select ARCH_VEXPRESS
+
 config ARCH_AT91
 	bool "Atmel AT91"
 	select ARCH_REQUIRE_GPIOLIB
Signature · 1 line
1.7.9.5
#8 lore raw

PATCH v2 2/3 ARM: nommu: re-enable use of vexpress without ARCH_MULTIPLATFORM

Quoted 8 lines · Jonathan Austin

Since 617276307cd4c ("ARM: vexpress: convert to multi-platform") it has been impossible to select ARCH_VEXPRESS without ARCH_MULTIPLATFORM.

ARCH_MULTIPLATFORM doesn't make sense for NOMMU targets, not least because of the need to hard-code the memory map. However, it should still be possible to run NOMMU kernels on top of the Versatile Express by selecting it as the only platform.

Quoted 8 lines

This patch creates a shim ARCH_VEXPRESS_NOMMU config option in the 'choice' for "ARM system type" to make this possible again.

Thanks!

Pawel

#9 lore raw

PATCH v2 3/3 ARM: vexpress-nommu: add a Makefile.boot to restore single-platform build

In reply to Jonathan Austin

When a single-platform kernel is built, a machine-specific Makefile.boot is expected. In the move to a multiplatform kernels this was removed for vexpress. Assuming AUTO_ZRELADDR is selected and a DT is used, the values recorded in it are no-longer required. However, the missing file breaks building of a single platform kernel for vexpress, such as when using vexpress and a platform without an MMU.

This patch re-instates Makefile.boot for vexpress in single platform configuration, fixing single-platform build. This change does not affect the multi-platform kernel.

---
 arch/arm/mach-vexpress/Makefile.boot |    4 ++++
 1 file changed, 4 insertions(+)
 create mode 100644 arch/arm/mach-vexpress/Makefile.boot
arch/arm/mach-vexpress/Makefile.boot new file +4 -0
new file mode 100644
index 0000000..8caa868
@@ -0,0 +1,4 @@
+# This is a dummy Makefile.boot for building ARCH_VEXPRESS as a standalone
+# platform as opposed with ARCH_MULTIPLATFORM. It is preferable to use
+# CONFIG_AUTO_ZRELADDR=y and DT but uncomment the line below if you need it.
+#   zreladdr-y	+= 0x00008000
Signature · 1 line
1.7.9.5