Commit bd51de53 authored by Arnd Bergmann's avatar Arnd Bergmann

ARM: exynos: enable multiplatform support

This makes it possible to enable the exynos platform as part of a
multiplatform kernel, in addition to keeping the single-platform
exynos support.

The multiplatform variant has a number of limitations at the moment:

* It only supports DT-enabled machines. This is not a problem in
  the long run, as non-DT machines for exynos are going away.
  The main problem here is that the gpio code and the exynos_eint
  irqchip are not multiplatform capable but still required for
  ATAGS based boot.
* The watchdog driver is still missing a conversion.
* sparsemem and memory_holes are currently not supported in
  multiplatform.

The the multiplatform aware ARCH_EXYNOS Kconfig symbol is disabled
for now, as dependent patches are still pending in other
subsystem trees. We will enable it once everything comes together.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent b9d7c5d3
...@@ -853,18 +853,11 @@ config ARCH_S5PV210 ...@@ -853,18 +853,11 @@ config ARCH_S5PV210
help help
Samsung S5PV210/S5PC110 series based systems Samsung S5PV210/S5PC110 series based systems
config ARCH_EXYNOS config ARCH_EXYNOS_SINGLE
bool "Samsung EXYNOS" bool "Samsung EXYNOS"
select ARCH_HAS_CPUFREQ
select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_HAS_HOLES_MEMORYMODEL
select ARCH_SPARSEMEM_ENABLE select ARCH_SPARSEMEM_ENABLE
select CLKDEV_LOOKUP
select CPU_V7
select GENERIC_CLOCKEVENTS
select HAVE_CLK
select HAVE_S3C2410_I2C if I2C
select HAVE_S3C2410_WATCHDOG if WATCHDOG select HAVE_S3C2410_WATCHDOG if WATCHDOG
select HAVE_S3C_RTC if RTC_CLASS
select NEED_MACH_GPIO_H select NEED_MACH_GPIO_H
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
help help
......
...@@ -4,7 +4,7 @@ CONFIG_KALLSYMS_ALL=y ...@@ -4,7 +4,7 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSG is not set
CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_EXYNOS_SINGLE=y
CONFIG_S3C_LOWLEVEL_UART_PORT=1 CONFIG_S3C_LOWLEVEL_UART_PORT=1
CONFIG_MACH_SMDKC210=y CONFIG_MACH_SMDKC210=y
CONFIG_MACH_ARMLEX4210=y CONFIG_MACH_ARMLEX4210=y
......
...@@ -7,6 +7,20 @@ ...@@ -7,6 +7,20 @@
# Configuration options for the EXYNOS4 # Configuration options for the EXYNOS4
config ARCH_EXYNOS
# TODO: make this visible after all drivers are converted
bool "Samsung EXYNOS" if ARCH_MULTI_V7 && BROKEN
default ARCH_EXYNOS_SINGLE
select ARCH_HAS_CPUFREQ
select CLKDEV_LOOKUP
select CPU_V7
select GENERIC_CLOCKEVENTS
select HAVE_CLK
select HAVE_S3C2410_I2C if I2C
select HAVE_S3C_RTC if RTC_CLASS
help
Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
if ARCH_EXYNOS if ARCH_EXYNOS
menu "SAMSUNG EXYNOS SoCs Support" menu "SAMSUNG EXYNOS SoCs Support"
...@@ -19,6 +33,9 @@ config ARCH_EXYNOS4 ...@@ -19,6 +33,9 @@ config ARCH_EXYNOS4
help help
Samsung EXYNOS4 SoCs based systems Samsung EXYNOS4 SoCs based systems
config ARCH_EXYNOS4_SINGLE
def_bool ARCH_EXYNOS4 && ARCH_EXYNOS_SINGLE
config ARCH_EXYNOS5 config ARCH_EXYNOS5
bool "SAMSUNG EXYNOS5" bool "SAMSUNG EXYNOS5"
select HAVE_SMP select HAVE_SMP
...@@ -35,7 +52,7 @@ config CPU_EXYNOS4210 ...@@ -35,7 +52,7 @@ config CPU_EXYNOS4210
select PM_GENERIC_DOMAINS select PM_GENERIC_DOMAINS
select S5P_PM if PM select S5P_PM if PM
select S5P_SLEEP if PM select S5P_SLEEP if PM
select SAMSUNG_DMADEV select SAMSUNG_DMADEV if ARCH_EXYNOS_SINGLE
help help
Enable EXYNOS4210 CPU support Enable EXYNOS4210 CPU support
...@@ -45,7 +62,7 @@ config SOC_EXYNOS4212 ...@@ -45,7 +62,7 @@ config SOC_EXYNOS4212
depends on ARCH_EXYNOS4 depends on ARCH_EXYNOS4
select S5P_PM if PM select S5P_PM if PM
select S5P_SLEEP if PM select S5P_SLEEP if PM
select SAMSUNG_DMADEV select SAMSUNG_DMADEV if ARCH_EXYNOS_SINGLE
help help
Enable EXYNOS4212 SoC support Enable EXYNOS4212 SoC support
...@@ -53,7 +70,7 @@ config SOC_EXYNOS4412 ...@@ -53,7 +70,7 @@ config SOC_EXYNOS4412
bool "SAMSUNG EXYNOS4412" bool "SAMSUNG EXYNOS4412"
default y default y
depends on ARCH_EXYNOS4 depends on ARCH_EXYNOS4
select SAMSUNG_DMADEV select SAMSUNG_DMADEV if ARCH_EXYNOS_SINGLE
help help
Enable EXYNOS4412 SoC support Enable EXYNOS4412 SoC support
...@@ -64,7 +81,7 @@ config SOC_EXYNOS5250 ...@@ -64,7 +81,7 @@ config SOC_EXYNOS5250
select S5P_PM if PM select S5P_PM if PM
select S5P_SLEEP if PM select S5P_SLEEP if PM
select S5P_DEV_MFC select S5P_DEV_MFC
select SAMSUNG_DMADEV select SAMSUNG_DMADEV if ARCH_EXYNOS_SINGLE
help help
Enable EXYNOS5250 SoC support Enable EXYNOS5250 SoC support
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
# http://www.samsung.com/ # http://www.samsung.com/
# #
# Licensed under GPLv2 # Licensed under GPLv2
ccflags-$(CONFIG_ARCH_MULTIPLATFORM) += -I$(srctree)/$(src)/include -I$(srctree)/arch/arm/plat-samsung/include
obj-y := obj-y :=
obj-m := obj-m :=
...@@ -48,12 +49,12 @@ obj-$(CONFIG_MACH_EXYNOS5_DT) += mach-exynos5-dt.o ...@@ -48,12 +49,12 @@ obj-$(CONFIG_MACH_EXYNOS5_DT) += mach-exynos5-dt.o
# device support # device support
obj-y += dev-uart.o obj-y += dev-uart.o
obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o obj-$(CONFIG_ARCH_EXYNOS4_SINGLE) += dev-audio.o
obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o
obj-$(CONFIG_EXYNOS_DEV_DMA) += dma.o obj-$(CONFIG_EXYNOS_DEV_DMA) += dma.o
obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o
obj-$(CONFIG_ARCH_EXYNOS) += setup-i2c0.o obj-$(CONFIG_ARCH_EXYNOS_SINGLE) += setup-i2c0.o
obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o
obj-$(CONFIG_EXYNOS4_SETUP_FIMD0) += setup-fimd0.o obj-$(CONFIG_EXYNOS4_SETUP_FIMD0) += setup-fimd0.o
obj-$(CONFIG_EXYNOS4_SETUP_I2C1) += setup-i2c1.o obj-$(CONFIG_EXYNOS4_SETUP_I2C1) += setup-i2c1.o
......
...@@ -368,6 +368,9 @@ static void __init exynos4_map_io(void) ...@@ -368,6 +368,9 @@ static void __init exynos4_map_io(void)
else else
iotable_init(exynos4_iodesc1, ARRAY_SIZE(exynos4_iodesc1)); iotable_init(exynos4_iodesc1, ARRAY_SIZE(exynos4_iodesc1));
if (!IS_ENABLED(CONFIG_EXYNOS_ATAGS))
return
/* initialize device information early */ /* initialize device information early */
exynos4_default_sdhci0(); exynos4_default_sdhci0();
exynos4_default_sdhci1(); exynos4_default_sdhci1();
...@@ -570,6 +573,8 @@ static void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no) ...@@ -570,6 +573,8 @@ static void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)
s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no); s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
} }
#ifdef CONFIG_EXYNOS_ATAGS
static void __iomem *exynos_eint_base; static void __iomem *exynos_eint_base;
static DEFINE_SPINLOCK(eint_lock); static DEFINE_SPINLOCK(eint_lock);
...@@ -875,3 +880,4 @@ static int __init exynos_init_irq_eint(void) ...@@ -875,3 +880,4 @@ static int __init exynos_init_irq_eint(void)
return 0; return 0;
} }
arch_initcall(exynos_init_irq_eint); arch_initcall(exynos_init_irq_eint);
#endif
...@@ -13,6 +13,10 @@ config PLAT_SAMSUNG ...@@ -13,6 +13,10 @@ config PLAT_SAMSUNG
help help
Base platform code for all Samsung SoC based systems Base platform code for all Samsung SoC based systems
config PLAT_SAMSUNG_SINGLE
def_bool PLAT_SAMSUNG && !ARCH_MULTIPLATFORM
config PLAT_S5P config PLAT_S5P
bool bool
depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS) depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
...@@ -23,7 +27,7 @@ config PLAT_S5P ...@@ -23,7 +27,7 @@ config PLAT_S5P
select GIC_NON_BANKED if ARCH_EXYNOS4 select GIC_NON_BANKED if ARCH_EXYNOS4
select NO_IOPORT select NO_IOPORT
select PLAT_SAMSUNG select PLAT_SAMSUNG
select S3C_GPIO_TRACK select S3C_GPIO_TRACK if PLAT_SAMSUNG_SINGLE
select S5P_GPIO_DRVSTR select S5P_GPIO_DRVSTR
select SAMSUNG_CLKSRC select SAMSUNG_CLKSRC
select SAMSUNG_GPIOLIB_4BIT select SAMSUNG_GPIOLIB_4BIT
...@@ -178,6 +182,7 @@ config S5P_DEV_UART ...@@ -178,6 +182,7 @@ config S5P_DEV_UART
config S3C_ADC config S3C_ADC
bool "ADC common driver support" bool "ADC common driver support"
depends on PLAT_SAMSUNG_SINGLE
help help
Core support for the ADC block found in the Samsung SoC systems Core support for the ADC block found in the Samsung SoC systems
for drivers such as the touchscreen and hwmon to use to share for drivers such as the touchscreen and hwmon to use to share
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
# #
# Licensed under GPLv2 # Licensed under GPLv2
ccflags-$(CONFIG_ARCH_MULTI_V7) += -I$(srctree)/$(src)/include
ccflags-$(CONFIG_ARCH_EXYNOS) += -I$(srctree)/arch/arm/mach-exynos/include
obj-y := obj-y :=
obj-m := obj-m :=
obj-n := dummy.o obj-n := dummy.o
...@@ -34,7 +37,7 @@ obj-$(CONFIG_S3C_ADC) += adc.o ...@@ -34,7 +37,7 @@ obj-$(CONFIG_S3C_ADC) += adc.o
obj-y += platformdata.o obj-y += platformdata.o
obj-y += devs.o obj-$(CONFIG_PLAT_SAMSUNG_SINGLE) += devs.o
obj-y += dev-uart.o obj-y += dev-uart.o
obj-$(CONFIG_S5P_DEV_MFC) += s5p-dev-mfc.o obj-$(CONFIG_S5P_DEV_MFC) += s5p-dev-mfc.o
obj-$(CONFIG_S5P_DEV_UART) += s5p-dev-uart.o obj-$(CONFIG_S5P_DEV_UART) += s5p-dev-uart.o
...@@ -51,9 +54,10 @@ obj-$(CONFIG_S3C_DMA) += dma.o s3c-dma-ops.o ...@@ -51,9 +54,10 @@ obj-$(CONFIG_S3C_DMA) += dma.o s3c-dma-ops.o
obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o
# PM support # PM support
obj-$(CONFIG_PM) += pm.o obj-$(CONFIG_PM) += pm.o
ifdef CONFIG_PLAT_SAMSUNG_SINGLE
obj-$(CONFIG_PM) += pm-gpio.o obj-$(CONFIG_PM) += pm-gpio.o
endif
obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o
obj-$(CONFIG_SAMSUNG_WAKEMASK) += wakeup-mask.o obj-$(CONFIG_SAMSUNG_WAKEMASK) += wakeup-mask.o
......
...@@ -166,6 +166,7 @@ extern void s3c_pm_check_store(void); ...@@ -166,6 +166,7 @@ extern void s3c_pm_check_store(void);
*/ */
extern void s3c_pm_configure_extint(void); extern void s3c_pm_configure_extint(void);
#ifdef CONFIG_PLAT_SAMSUNG_SINGLE
/** /**
* samsung_pm_restore_gpios() - restore the state of the gpios after sleep. * samsung_pm_restore_gpios() - restore the state of the gpios after sleep.
* *
...@@ -181,6 +182,10 @@ extern void samsung_pm_restore_gpios(void); ...@@ -181,6 +182,10 @@ extern void samsung_pm_restore_gpios(void);
* Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios(). * Save the GPIO states for resotration on resume. See samsung_pm_restore_gpios().
*/ */
extern void samsung_pm_save_gpios(void); extern void samsung_pm_save_gpios(void);
#else
#define samsung_pm_restore_gpios() do { } while(0)
#define samsung_pm_save_gpios() do { } while(0)
#endif
extern void s3c_pm_save_core(void); extern void s3c_pm_save_core(void);
extern void s3c_pm_restore_core(void); extern void s3c_pm_restore_core(void);
...@@ -57,7 +57,7 @@ obj-$(CONFIG_GPIO_PL061) += gpio-pl061.o ...@@ -57,7 +57,7 @@ obj-$(CONFIG_GPIO_PL061) += gpio-pl061.o
obj-$(CONFIG_GPIO_PXA) += gpio-pxa.o obj-$(CONFIG_GPIO_PXA) += gpio-pxa.o
obj-$(CONFIG_GPIO_RC5T583) += gpio-rc5t583.o obj-$(CONFIG_GPIO_RC5T583) += gpio-rc5t583.o
obj-$(CONFIG_GPIO_RDC321X) += gpio-rdc321x.o obj-$(CONFIG_GPIO_RDC321X) += gpio-rdc321x.o
obj-$(CONFIG_PLAT_SAMSUNG) += gpio-samsung.o obj-$(CONFIG_PLAT_SAMSUNG_SINGLE) += gpio-samsung.o
obj-$(CONFIG_ARCH_SA1100) += gpio-sa1100.o obj-$(CONFIG_ARCH_SA1100) += gpio-sa1100.o
obj-$(CONFIG_GPIO_SCH) += gpio-sch.o obj-$(CONFIG_GPIO_SCH) += gpio-sch.o
obj-$(CONFIG_GPIO_SODAVILLE) += gpio-sodaville.o obj-$(CONFIG_GPIO_SODAVILLE) += gpio-sodaville.o
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment