All of lore.kernel.org
 help / color / mirror / Atom feed
From: olof@lixom.net (Olof Johansson)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH] ARM: initial multiplatform support
Date: Fri, 24 Aug 2012 14:27:19 -0700	[thread overview]
Message-ID: <20120824212719.GA16828@quad.lixom.net> (raw)
In-Reply-To: <1345837852-10277-1-git-send-email-robherring2@gmail.com>

Hi,

A few comments below.

On Fri, Aug 24, 2012 at 02:50:52PM -0500, Rob Herring wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> This lets us build a multiplatform kernel for experimental purposes.
> However, it will not be useful for any real work, because it relies
> on a number of useful things to be disabled for now:
> 
> * SMP support is turned off because of conflicting symbols.
>   Marc Zyngier has proposed a solution by adding a new SOC
>   operations structure to hold indirect function pointers
>   for these, but that work is currently stalled

On what? Review? or something else? It'd be nice to get some movement
going on it again. I guess we'll bring it up next week.

> * We turn on SPARSE_IRQ unconditionally, which is not supported
>   on most platforms. Each of them is currently in a different
>   state, but most are being worked on.
> 
> * A common clock framework is in place since v3.4 but not yet
>   being used. Work on this is on its way.
> 
> * DEBUG_LL for early debugging is currently disabled.

Being able to turn it on for one platform just to debug a boot issue is
still very useful. It's how powerpc handles it -- even if you can do a
multiplatform kernel, for the low level debug console you have to pick
one static entry.  Still useful during development.

> * THUMB2_KERNEL does not work with allyesconfig because the
>   kernel gets too big

Ironic, but understandable.

> ---
>  arch/arm/Kconfig                              |  107 +++++++++++++++----------
>  arch/arm/Makefile                             |   16 ++--
>  arch/arm/mach-multi/Kconfig                   |   42 ++++++++++
>  arch/arm/mach-multi/Makefile                  |    1 +
>  arch/arm/mach-multi/include/mach/gpio.h       |    1 +
>  arch/arm/mach-multi/include/mach/timex.h      |    3 +
>  arch/arm/mach-multi/include/mach/uncompress.h |   10 +++
>  arch/arm/mach-vexpress/Makefile               |    1 +
>  arch/arm/plat-versatile/Makefile              |    2 +
>  9 files changed, 136 insertions(+), 47 deletions(-)
>  create mode 100644 arch/arm/mach-multi/Kconfig
>  create mode 100644 arch/arm/mach-multi/Makefile
>  create mode 100644 arch/arm/mach-multi/include/mach/gpio.h
>  create mode 100644 arch/arm/mach-multi/include/mach/timex.h
>  create mode 100644 arch/arm/mach-multi/include/mach/uncompress.h
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index e91c7cd..e841262 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -255,22 +255,18 @@ choice
>  	prompt "ARM system type"
>  	default ARCH_VERSATILE
>  
> -config ARCH_SOCFPGA
> -	bool "Altera SOCFPGA family"
> -	select ARCH_WANT_OPTIONAL_GPIOLIB
> -	select ARM_AMBA
> -	select ARM_GIC
> -	select CACHE_L2X0
> -	select CLKDEV_LOOKUP
> +config ARCH_MULTIPLATFORM
> +	bool "Allow multiple platforms to be selected"
> +	select USE_OF

Should this be a toplevel config option and the choice menu disabled if it's
set, instead of a meta-platform?

> @@ -1028,6 +999,58 @@ config ARCH_ZYNQ
>  	  Support for Xilinx Zynq ARM Cortex A9 Platform
>  endchoice
>  
> +source "arch/arm/mach-multi/Kconfig"
> +
> +config ARCH_SOCFPGA
> +	bool "Altera SOCFPGA family" if ARCH_MULTI_V7
> +	select ARCH_WANT_OPTIONAL_GPIOLIB
> +	select ARM_AMBA
> +	select ARM_GIC
> +	select CACHE_L2X0
> +	select CLKDEV_LOOKUP
> +	select COMMON_CLK
> +	select CPU_V7
> +	select DW_APB_TIMER
> +	select DW_APB_TIMER_OF
> +	select GENERIC_CLOCKEVENTS
> +	select GPIO_PL061 if GPIOLIB
> +	select HAVE_ARM_SCU
> +	select SPARSE_IRQ
> +	select USE_OF

There's no need to keep these in the common arm/Kconfig now, is there? Might as
well push them out to the respective mach-*/Kconfig, that will cause less churn
on the common file and in general scale better.

> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 30eae87..c113e53 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -133,6 +133,9 @@ textofs-$(CONFIG_ARCH_MSM7X30) := 0x00208000
>  textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000
>  textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
>  
> +# multiplatform directory must be first
> +machine-$(CONFIG_ARCH_MULTIPLATFORM)	:= multi
> +
>  # Machine directory name.  This list is sorted alphanumerically
>  # by CONFIG_* macro name.
>  machine-$(CONFIG_ARCH_AT91)		:= at91
> @@ -145,7 +148,7 @@ machine-$(CONFIG_ARCH_EBSA110)		:= ebsa110
>  machine-$(CONFIG_ARCH_EP93XX)		:= ep93xx
>  machine-$(CONFIG_ARCH_GEMINI)		:= gemini
>  machine-$(CONFIG_ARCH_H720X)		:= h720x
> -machine-$(CONFIG_ARCH_HIGHBANK)		:= highbank
> +machine-$(CONFIG_ARCH_HIGHBANK)		+= highbank
>  machine-$(CONFIG_ARCH_INTEGRATOR)	:= integrator
>  machine-$(CONFIG_ARCH_IOP13XX)		:= iop13xx
>  machine-$(CONFIG_ARCH_IOP32X)		:= iop32x
> @@ -186,11 +189,11 @@ machine-$(CONFIG_ARCH_TEGRA)		:= tegra
>  machine-$(CONFIG_ARCH_U300)		:= u300
>  machine-$(CONFIG_ARCH_U8500)		:= ux500
>  machine-$(CONFIG_ARCH_VERSATILE)	:= versatile
> -machine-$(CONFIG_ARCH_VEXPRESS)		:= vexpress
> +machine-$(CONFIG_ARCH_VEXPRESS)		+= vexpress
>  machine-$(CONFIG_ARCH_VT8500)		:= vt8500
>  machine-$(CONFIG_ARCH_W90X900)		:= w90x900
>  machine-$(CONFIG_FOOTBRIDGE)		:= footbridge
> -machine-$(CONFIG_ARCH_SOCFPGA)		:= socfpga
> +machine-$(CONFIG_ARCH_SOCFPGA)		+= socfpga
>  machine-$(CONFIG_MACH_SPEAR1310)	:= spear13xx
>  machine-$(CONFIG_MACH_SPEAR1340)	:= spear13xx
>  machine-$(CONFIG_MACH_SPEAR300)		:= spear3xx
> @@ -230,14 +233,17 @@ MACHINE  := arch/arm/mach-$(word 1,$(machine-y))/
>  else
>  MACHINE  :=
>  endif
> +ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
> +MACHINE  :=
> +endif
>  
>  machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
>  platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))
>  
>  ifeq ($(KBUILD_SRC),)
> -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
> +KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(word 1,$(machdirs) $(platdirs)))
>  else
> -KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs))
> +KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(word 1,$(machdirs) $(platdirs)))
>  endif

Since the only purpose of mach-multi is to provide a few dummy header files,
how about adding those under arch/arm/include/ instead and do away with the
mach directory? They could then be prepended in front of these so the search
path would be in the right order.

> diff --git a/arch/arm/mach-multi/Kconfig b/arch/arm/mach-multi/Kconfig
> new file mode 100644
> index 0000000..0a6369f
> --- /dev/null
> +++ b/arch/arm/mach-multi/Kconfig
> @@ -0,0 +1,42 @@
> +menu "Multiple platform selection"
> +	depends on ARCH_MULTIPLATFORM
> +
> +comment "CPU Core family selection"
> +
> +config ARCH_MULTI_V4
> +	bool "ARMv4 based platforms (FA526, StrongARM)"
> +	select ARCH_MULTI_V4_V5
> +	depends on !ARCH_MULTI_V6_V7
> +
> +config ARCH_MULTI_V4T
> +	bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
> +	select ARCH_MULTI_V4_V5
> +	depends on !ARCH_MULTI_V6_V7
> +
> +config ARCH_MULTI_V5
> +	bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
> +	select ARCH_MULTI_V4_V5
> +	depends on !ARCH_MULTI_V6_V7
> +
> +config ARCH_MULTI_V4_V5
> +	bool
> +
> +config ARCH_MULTI_V6
> +	bool "ARMv6 based platforms (ARM11, Scorpion, ...)"
> +	select ARCH_MULTI_V6_V7

Does it make sense to add these before any platforms are ready? I'd argue no,
but I don't feel strongly about it.

> +config ARCH_MULTI_V7
> +	bool "ARMv7 based platforms (Cortex-A, PJ4, Krait)"
> +	default y
> +	select ARCH_MULTI_V6_V7
> +
> +config ARCH_MULTI_V6_V7
> +	bool
> +
> +config ARCH_MULTI_CPU_AUTO
> +	def_bool !(ARCH_MULTI_V4 || ARCH_MULTI_V4T || ARCH_MULTI_V6_V7)
> +	select ARCH_MULTI_V5
> +
> +endmenu
> +
> +comment "SoC family selection"
> diff --git a/arch/arm/mach-multi/Makefile b/arch/arm/mach-multi/Makefile
> new file mode 100644
> index 0000000..1bb8bf6
> --- /dev/null
> +++ b/arch/arm/mach-multi/Makefile
> @@ -0,0 +1 @@
> +# empty
> diff --git a/arch/arm/mach-multi/include/mach/gpio.h b/arch/arm/mach-multi/include/mach/gpio.h
> new file mode 100644
> index 0000000..40a8c17
> --- /dev/null
> +++ b/arch/arm/mach-multi/include/mach/gpio.h
> @@ -0,0 +1 @@
> +/* empty */
> diff --git a/arch/arm/mach-multi/include/mach/timex.h b/arch/arm/mach-multi/include/mach/timex.h
> new file mode 100644
> index 0000000..929b4c4
> --- /dev/null
> +++ b/arch/arm/mach-multi/include/mach/timex.h
> @@ -0,0 +1,3 @@
> +#ifndef CLOCK_TICK_RATE
> +#define CLOCK_TICK_RATE 1000000
> +#endif
> diff --git a/arch/arm/mach-multi/include/mach/uncompress.h b/arch/arm/mach-multi/include/mach/uncompress.h
> new file mode 100644
> index 0000000..a4dec68
> --- /dev/null
> +++ b/arch/arm/mach-multi/include/mach/uncompress.h
> @@ -0,0 +1,10 @@
> +#ifndef __MACH_UNCOMPRESS_H
> +#define __MACH_UNCOMPRESS_H
> +
> +/* no-op dummies for the uncompress debugging for multiplatform kernels */
> +
> +static inline void putc(int c) {}
> +static inline void flush(void) {}
> +static inline void arch_decomp_setup(void) {}
> +
> +#endif
> diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile
> index 90551b9..1666f6e 100644
> --- a/arch/arm/mach-vexpress/Makefile
> +++ b/arch/arm/mach-vexpress/Makefile
> @@ -1,6 +1,7 @@
>  #
>  # Makefile for the linux kernel.
>  #
> +ccflags-y := -I$(srctree)/$(src)/include -I$(srctree)/arch/arm/plat-versatile/include

cc-flags-$(CONFIG_ARCH_MULTIPLATFORM) here and for versatile?


-Olof

  parent reply	other threads:[~2012-08-24 21:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-24 19:50 [RFC PATCH] ARM: initial multiplatform support Rob Herring
2012-08-24 20:01 ` Stephen Warren
2012-08-24 21:27 ` Olof Johansson [this message]
2012-08-24 21:50   ` Rob Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120824212719.GA16828@quad.lixom.net \
    --to=olof@lixom.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.