Commit a0e157af authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

ARM: s3c64xx: prepare initcalls for multiplatform



In a multiplatform kernel, each initcall is run regardless
of the platform it is meant for, so it must not attempt to
access SoC-specific registers.

This adds 'if (soc_is_s3c64xx)' to all initcalls that are
specific to the s3c64xx platform, to prevent them from breaking
other platforms once we can build them into a combined kernel.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Reviewed-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
parent 0f20e456
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -208,7 +208,7 @@ void __init s3c64xx_init_io(struct map_desc *mach_desc, int size)
static __init int s3c64xx_dev_init(void)
static __init int s3c64xx_dev_init(void)
{
{
	/* Not applicable when using DT. */
	/* Not applicable when using DT. */
	if (of_have_populated_dt())
	if (of_have_populated_dt() || !soc_is_s3c64xx())
		return 0;
		return 0;


	subsys_system_register(&s3c64xx_subsys, NULL);
	subsys_system_register(&s3c64xx_subsys, NULL);
@@ -413,7 +413,7 @@ static int __init s3c64xx_init_irq_eint(void)
	int irq;
	int irq;


	/* On DT-enabled systems EINTs are handled by pinctrl-s3c64xx driver. */
	/* On DT-enabled systems EINTs are handled by pinctrl-s3c64xx driver. */
	if (of_have_populated_dt())
	if (of_have_populated_dt() || !soc_is_s3c64xx())
		return -ENODEV;
		return -ENODEV;


	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
+4 −1
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@


#include <asm/cpuidle.h>
#include <asm/cpuidle.h>


#include <plat/cpu.h>
#include <mach/map.h>
#include <mach/map.h>


#include "regs-sys.h"
#include "regs-sys.h"
@@ -57,6 +58,8 @@ static struct cpuidle_driver s3c64xx_cpuidle_driver = {


static int __init s3c64xx_init_cpuidle(void)
static int __init s3c64xx_init_cpuidle(void)
{
{
	if (soc_is_s3c64xx())
		return cpuidle_register(&s3c64xx_cpuidle_driver, NULL);
		return cpuidle_register(&s3c64xx_cpuidle_driver, NULL);
	return 0;
}
}
device_initcall(s3c64xx_init_cpuidle);
device_initcall(s3c64xx_init_cpuidle);
+1 −1
Original line number Original line Diff line number Diff line
@@ -113,7 +113,7 @@ static struct syscore_ops s3c64xx_irq_syscore_ops = {
static __init int s3c64xx_syscore_init(void)
static __init int s3c64xx_syscore_init(void)
{
{
	/* Appropriate drivers (pinctrl, uart) handle this when using DT. */
	/* Appropriate drivers (pinctrl, uart) handle this when using DT. */
	if (of_have_populated_dt())
	if (of_have_populated_dt() || !soc_is_s3c64xx())
		return 0;
		return 0;


	register_syscore_ops(&s3c64xx_irq_syscore_ops);
	register_syscore_ops(&s3c64xx_irq_syscore_ops);
+4 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@


#include <linux/platform_data/spi-s3c64xx.h>
#include <linux/platform_data/spi-s3c64xx.h>


#include <plat/cpu.h>
#include "crag6410.h"
#include "crag6410.h"


static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = {
static struct s3c64xx_spi_csinfo wm0010_spi_csinfo = {
@@ -399,6 +400,9 @@ static struct i2c_driver wlf_gf_module_driver = {


static int __init wlf_gf_module_register(void)
static int __init wlf_gf_module_register(void)
{
{
	if (!soc_is_s3c64xx())
		return 0;

	return i2c_add_driver(&wlf_gf_module_driver);
	return i2c_add_driver(&wlf_gf_module_driver);
}
}
device_initcall(wlf_gf_module_register);
device_initcall(wlf_gf_module_register);
+4 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/amba/pl08x.h>
#include <linux/amba/pl08x.h>
#include <linux/of.h>
#include <linux/of.h>


#include <plat/cpu.h>
#include <mach/irqs.h>
#include <mach/irqs.h>
#include <mach/map.h>
#include <mach/map.h>


@@ -230,6 +231,9 @@ static AMBA_AHB_DEVICE(s3c64xx_dma1, "dma-pl080s.1", 0,


static int __init s3c64xx_pl080_init(void)
static int __init s3c64xx_pl080_init(void)
{
{
	if (!soc_is_s3c64xx())
		return 0;

	/* Set all DMA configuration to be DMA, not SDMA */
	/* Set all DMA configuration to be DMA, not SDMA */
	writel(0xffffff, S3C64XX_SDMA_SEL);
	writel(0xffffff, S3C64XX_SDMA_SEL);


Loading