Skip to contentSkip to conversation

arch/arm/mach-* late_initcall cleanup

PATCH New Shawn Guo 10 participants 34 messages May 2, 2012 – May 8, 2012

Subsystems (14)
lore
Share & tools
lore

Shawn Guo

author
#0 lore raw

cover arch/arm/mach-* late_initcall cleanup

This series tries to clean up those late_initcall in arch/arm/mach-*, which will be a blocker for single kernel build for multiple platforms. Even on single platform, for example imx, where we already have single kernel image for imx3, imx5 and imx6 families, late_initcall does not scale. We have to detect soc type in the late_initcall to do soc sepcific late initialization.

Changes since v1:
* Drop the changes on some files that to be removed per platform maintainers' request.
* Drop at91 patch
* Add one missing ep93xx board file (Thanks to Hartley)
* Add back one lost bit for imx (Thanks to Sascha)

Shawn Guo (15):
ARM: provide a late_initcall hook for platform initialization
ARM: davinci: use machine specific hook for late init
ARM: ep93xx: use machine specific hook for late init
ARM: exynos: use machine specific hook for late init
ARM: imx: use machine specific hook for late init
ARM: msm: use machine specific hook for late init
ARM: omap1: use machine specific hook for late init
ARM: omap2: use machine specific hook for late init
ARM: pnx4008: use machine specific hook for late init
ARM: prima2: use machine specific hook for late init
ARM: s3c64xx: use machine specific hook for late init
ARM: sa1100: use machine specific hook for late init
ARM: shmobile: use machine specific hook for late init
ARM: tegra: use machine specific hook for late init
ARM: ux500: use machine specific hook for late init

 arch/arm/include/asm/mach/arch.h             |    1 +
 arch/arm/kernel/setup.c                      |    8 +++
 arch/arm/mach-davinci/board-da830-evm.c      |    1 +
 arch/arm/mach-davinci/board-da850-evm.c      |    1 +
 arch/arm/mach-davinci/board-dm355-evm.c      |    1 +
 arch/arm/mach-davinci/board-dm355-leopard.c  |    1 +
 arch/arm/mach-davinci/board-dm365-evm.c      |    1 +
 arch/arm/mach-davinci/board-dm644x-evm.c     |    1 +
 arch/arm/mach-davinci/board-dm646x-evm.c     |    1 +
 arch/arm/mach-davinci/board-mityomapl138.c   |    1 +
 arch/arm/mach-davinci/board-neuros-osd2.c    |    1 +
 arch/arm/mach-davinci/board-omapl138-hawk.c  |    1 +
 arch/arm/mach-davinci/board-sffsdr.c         |    1 +
 arch/arm/mach-davinci/board-tnetv107x-evm.c  |    1 +
 arch/arm/mach-davinci/clock.c                |    3 +-
 arch/arm/mach-davinci/common.c               |    7 +++
 arch/arm/mach-davinci/cpufreq.c              |    3 +-
 arch/arm/mach-davinci/include/mach/common.h  |   19 ++++++++
 arch/arm/mach-davinci/pm.c                   |    3 +-
 arch/arm/mach-ep93xx/adssphere.c             |    1 +
 arch/arm/mach-ep93xx/core.c                  |    5 ++
 arch/arm/mach-ep93xx/crunch.c                |    4 +-
 arch/arm/mach-ep93xx/edb93xx.c               |    8 +++
 arch/arm/mach-ep93xx/gesbc9312.c             |    1 +
 arch/arm/mach-ep93xx/include/mach/platform.h |    7 +++
 arch/arm/mach-ep93xx/micro9.c                |    4 ++
 arch/arm/mach-ep93xx/simone.c                |    1 +
 arch/arm/mach-ep93xx/snappercl15.c           |    1 +
 arch/arm/mach-ep93xx/ts72xx.c                |    1 +
 arch/arm/mach-ep93xx/vision_ep9307.c         |    1 +
 arch/arm/mach-exynos/common.c                |    5 ++
 arch/arm/mach-exynos/common.h                |    7 +++
 arch/arm/mach-exynos/mach-armlex4210.c       |    1 +
 arch/arm/mach-exynos/mach-exynos4-dt.c       |    1 +
 arch/arm/mach-exynos/mach-exynos5-dt.c       |    1 +
 arch/arm/mach-exynos/mach-nuri.c             |    1 +
 arch/arm/mach-exynos/mach-origen.c           |    1 +
 arch/arm/mach-exynos/mach-smdk4x12.c         |    1 +
 arch/arm/mach-exynos/mach-smdkv310.c         |    1 +
 arch/arm/mach-exynos/mach-universal_c210.c   |    1 +
 arch/arm/mach-exynos/pm_domains.c            |    3 +-
 arch/arm/mach-imx/cpu-imx5.c                 |    6 +--
 arch/arm/mach-imx/imx51-dt.c                 |    1 +
 arch/arm/mach-imx/mach-cpuimx51.c            |    1 +
 arch/arm/mach-imx/mach-cpuimx51sd.c          |    1 +
 arch/arm/mach-imx/mach-mx51_3ds.c            |    1 +
 arch/arm/mach-imx/mach-mx51_babbage.c        |    1 +
 arch/arm/mach-imx/mach-mx51_efikamx.c        |   42 +++++++++--------
 arch/arm/mach-imx/mach-mx51_efikasb.c        |   28 +++++++-----
 arch/arm/mach-imx/mach-pcm037.c              |    6 +++
 arch/arm/mach-imx/mach-pcm037_eet.c          |    5 +-
 arch/arm/mach-imx/mm-imx5.c                  |    5 ++
 arch/arm/mach-imx/pcm037.h                   |    6 +++
 arch/arm/mach-msm/board-halibut.c            |    6 +++
 arch/arm/mach-msm/board-mahimahi.c           |    6 +++
 arch/arm/mach-msm/board-msm7x27.c            |    9 ++++
 arch/arm/mach-msm/board-msm7x30.c            |    8 +++
 arch/arm/mach-msm/board-msm8960.c            |    7 +++
 arch/arm/mach-msm/board-msm8x60.c            |   10 ++++
 arch/arm/mach-msm/board-qsd8x50.c            |    7 +++
 arch/arm/mach-msm/board-sapphire.c           |    6 +++
 arch/arm/mach-msm/board-trout.c              |    6 +++
 arch/arm/mach-msm/include/mach/board.h       |    6 +++
 arch/arm/mach-msm/smd_debug.c                |    3 +-
 arch/arm/mach-omap1/board-ams-delta.c        |    8 +++-
 arch/arm/mach-omap1/board-fsample.c          |    1 +
 arch/arm/mach-omap1/board-generic.c          |    1 +
 arch/arm/mach-omap1/board-h2.c               |    1 +
 arch/arm/mach-omap1/board-h3.c               |    1 +
 arch/arm/mach-omap1/board-htcherald.c        |    1 +
 arch/arm/mach-omap1/board-innovator.c        |    1 +
 arch/arm/mach-omap1/board-nokia770.c         |    1 +
 arch/arm/mach-omap1/board-osk.c              |    1 +
 arch/arm/mach-omap1/board-palmte.c           |    1 +
 arch/arm/mach-omap1/board-palmtt.c           |    1 +
 arch/arm/mach-omap1/board-palmz71.c          |    1 +
 arch/arm/mach-omap1/board-perseus2.c         |    1 +
 arch/arm/mach-omap1/board-sx1.c              |    1 +
 arch/arm/mach-omap1/board-voiceblue.c        |    1 +
 arch/arm/mach-omap1/common.h                 |   10 ++++
 arch/arm/mach-omap1/io.c                     |    5 ++
 arch/arm/mach-omap1/serial.c                 |    3 +-
 arch/arm/mach-omap2/board-2430sdp.c          |    1 +
 arch/arm/mach-omap2/board-3430sdp.c          |    1 +
 arch/arm/mach-omap2/board-3630sdp.c          |    1 +
 arch/arm/mach-omap2/board-4430sdp.c          |    1 +
 arch/arm/mach-omap2/board-am3517crane.c      |    1 +
 arch/arm/mach-omap2/board-am3517evm.c        |    1 +
 arch/arm/mach-omap2/board-apollon.c          |    1 +
 arch/arm/mach-omap2/board-cm-t35.c           |    2 +
 arch/arm/mach-omap2/board-cm-t3517.c         |    1 +
 arch/arm/mach-omap2/board-devkit8000.c       |    1 +
 arch/arm/mach-omap2/board-generic.c          |    1 +
 arch/arm/mach-omap2/board-h4.c               |    1 +
 arch/arm/mach-omap2/board-igep0020.c         |    2 +
 arch/arm/mach-omap2/board-ldp.c              |    1 +
 arch/arm/mach-omap2/board-n8x0.c             |    3 +
 arch/arm/mach-omap2/board-omap3beagle.c      |    1 +
 arch/arm/mach-omap2/board-omap3evm.c         |    1 +
 arch/arm/mach-omap2/board-omap3logic.c       |    2 +
 arch/arm/mach-omap2/board-omap3pandora.c     |    1 +
 arch/arm/mach-omap2/board-omap3stalker.c     |    1 +
 arch/arm/mach-omap2/board-omap3touchbook.c   |    1 +
 arch/arm/mach-omap2/board-omap4panda.c       |    1 +
 arch/arm/mach-omap2/board-overo.c            |    1 +
 arch/arm/mach-omap2/board-rm680.c            |    2 +
 arch/arm/mach-omap2/board-rx51.c             |    1 +
 arch/arm/mach-omap2/board-ti8168evm.c        |    2 +
 arch/arm/mach-omap2/board-zoom.c             |    2 +
 arch/arm/mach-omap2/common.h                 |   47 +++++++++++++++++++
 arch/arm/mach-omap2/io.c                     |   63 ++++++++++++++++++++++++++
 arch/arm/mach-omap2/mux.c                    |    3 +-
 arch/arm/mach-omap2/pm.c                     |    3 +-
 arch/arm/mach-omap2/pm24xx.c                 |   17 ++-----
 arch/arm/mach-omap2/pm34xx.c                 |    7 +---
 arch/arm/mach-omap2/pm44xx.c                 |    6 +--
 arch/arm/mach-pnx4008/core.c                 |   12 +++++
 arch/arm/mach-pnx4008/pm.c                   |    4 +-
 arch/arm/mach-prima2/common.h                |    6 +++
 arch/arm/mach-prima2/pm.c                    |    3 +-
 arch/arm/mach-prima2/prima2.c                |    6 +++
 arch/arm/mach-s3c64xx/common.c               |    5 ++
 arch/arm/mach-s3c64xx/common.h               |    7 +++
 arch/arm/mach-s3c64xx/mach-anw6410.c         |    1 +
 arch/arm/mach-s3c64xx/mach-crag6410.c        |    1 +
 arch/arm/mach-s3c64xx/mach-hmt.c             |    1 +
 arch/arm/mach-s3c64xx/mach-mini6410.c        |    1 +
 arch/arm/mach-s3c64xx/mach-ncp.c             |    1 +
 arch/arm/mach-s3c64xx/mach-real6410.c        |    1 +
 arch/arm/mach-s3c64xx/mach-smartq5.c         |    1 +
 arch/arm/mach-s3c64xx/mach-smartq7.c         |    1 +
 arch/arm/mach-s3c64xx/mach-smdk6400.c        |    1 +
 arch/arm/mach-s3c64xx/mach-smdk6410.c        |    1 +
 arch/arm/mach-s3c64xx/pm.c                   |    3 +-
 arch/arm/mach-sa1100/assabet.c               |    1 +
 arch/arm/mach-sa1100/badge4.c                |    1 +
 arch/arm/mach-sa1100/cerf.c                  |    1 +
 arch/arm/mach-sa1100/collie.c                |    1 +
 arch/arm/mach-sa1100/generic.c               |    4 ++
 arch/arm/mach-sa1100/generic.h               |    7 +++
 arch/arm/mach-sa1100/h3100.c                 |    1 +
 arch/arm/mach-sa1100/h3600.c                 |    1 +
 arch/arm/mach-sa1100/hackkit.c               |    1 +
 arch/arm/mach-sa1100/jornada720.c            |    1 +
 arch/arm/mach-sa1100/lart.c                  |    1 +
 arch/arm/mach-sa1100/nanoengine.c            |    1 +
 arch/arm/mach-sa1100/pleb.c                  |    1 +
 arch/arm/mach-sa1100/pm.c                    |    4 +-
 arch/arm/mach-sa1100/shannon.c               |    1 +
 arch/arm/mach-sa1100/simpad.c                |    1 +
 arch/arm/mach-shmobile/Makefile              |    2 +-
 arch/arm/mach-shmobile/board-ag5evm.c        |    1 +
 arch/arm/mach-shmobile/board-ap4evb.c        |    1 +
 arch/arm/mach-shmobile/board-bonito.c        |    1 +
 arch/arm/mach-shmobile/board-g3evm.c         |    1 +
 arch/arm/mach-shmobile/board-g4evm.c         |    1 +
 arch/arm/mach-shmobile/board-kota2.c         |    1 +
 arch/arm/mach-shmobile/board-mackerel.c      |    1 +
 arch/arm/mach-shmobile/board-marzen.c        |    1 +
 arch/arm/mach-shmobile/common.c              |   24 ++++++++++
 arch/arm/mach-shmobile/cpuidle.c             |    3 +-
 arch/arm/mach-shmobile/include/mach/common.h |   14 ++++++
 arch/arm/mach-shmobile/suspend.c             |    3 +-
 arch/arm/mach-tegra/board-dt-tegra20.c       |    1 +
 arch/arm/mach-tegra/board-dt-tegra30.c       |    1 +
 arch/arm/mach-tegra/board-harmony.c          |    1 +
 arch/arm/mach-tegra/board-paz00.c            |    1 +
 arch/arm/mach-tegra/board-seaboard.c         |    3 +
 arch/arm/mach-tegra/board-trimslice.c        |    1 +
 arch/arm/mach-tegra/board.h                  |   14 ++++++
 arch/arm/mach-tegra/clock.c                  |    3 +-
 arch/arm/mach-tegra/common.c                 |    6 +++
 arch/arm/mach-tegra/powergate.c              |    4 +-
 arch/arm/mach-ux500/board-mop500.c           |    4 ++
 arch/arm/mach-ux500/clock.c                  |    6 +--
 arch/arm/mach-ux500/clock.h                  |   12 +++++
 arch/arm/mach-ux500/cpu.c                    |    6 +++
 arch/arm/mach-ux500/include/mach/setup.h     |    1 +
 arch/arm/plat-mxc/include/mach/common.h      |    7 +++
 179 files changed, 614 insertions(+), 106 deletions(-)
 create mode 100644 arch/arm/mach-shmobile/common.c
Signature · 1 line
1.7.5.4
author
#1 lore raw

PATCH 1/15 ARM: provide a late_initcall hook for platform initialization

This allows platforms to set up things that need to be done at late_initcall time.

---
 arch/arm/include/asm/mach/arch.h |    1 +
 arch/arm/kernel/setup.c          |    8 ++++++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/include/asm/mach/arch.h +1 -0
index d7692ca..0b1c94b 100644
@@ -43,6 +43,7 @@ struct machine_desc {
 	void			(*init_irq)(void);
 	struct sys_timer	*timer;		/* system tick timer	*/
 	void			(*init_machine)(void);
+	void			(*init_late)(void);
 #ifdef CONFIG_MULTI_IRQ_HANDLER
 	void			(*handle_irq)(struct pt_regs *);
 #endif
arch/arm/kernel/setup.c +8 -0
index ebfac78..549f036 100644
@@ -800,6 +800,14 @@ static int __init customize_machine(void)
 }
 arch_initcall(customize_machine);
 
+static int __init init_machine_late(void)
+{
+	if (machine_desc->init_late)
+		machine_desc->init_late();
+	return 0;
+}
+late_initcall(init_machine_late);
+
 #ifdef CONFIG_KEXEC
 static inline unsigned long long get_total_mem(void)
 {
Signature · 1 line
1.7.5.4
author
#2 lore raw

PATCH 1/15 ARM: provide a late_initcall hook for platform initialization

Quoted 4 lines · Shawn Guo

This allows platforms to set up things that need to be done at late_initcall time.

Cc Russell King <[email protected]>

Hi Russell,

I think it's a bit easier to have this patch go through arm-soc tree together with other patches in the series. May I have you ack on this patch to do that?

Regards,
Shawn

Quoted 41 lines
---
 arch/arm/include/asm/mach/arch.h |    1 +
 arch/arm/kernel/setup.c          |    8 ++++++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/include/asm/mach/arch.h +1 -0
index d7692ca..0b1c94b 100644
@@ -43,6 +43,7 @@ struct machine_desc {
 	void			(*init_irq)(void);
 	struct sys_timer	*timer;		/* system tick timer	*/
 	void			(*init_machine)(void);
+	void			(*init_late)(void);
 #ifdef CONFIG_MULTI_IRQ_HANDLER
 	void			(*handle_irq)(struct pt_regs *);
 #endif
arch/arm/kernel/setup.c +8 -0
index ebfac78..549f036 100644
@@ -800,6 +800,14 @@ static int __init customize_machine(void)
 }
 arch_initcall(customize_machine);
 
+static int __init init_machine_late(void)
+{
+	if (machine_desc->init_late)
+		machine_desc->init_late();
+	return 0;
+}
+late_initcall(init_machine_late);
+
 #ifdef CONFIG_KEXEC
 static inline unsigned long long get_total_mem(void)
 {
Signature · 1 line
1.7.5.4
author
#3 lore raw

PATCH 1/15 ARM: provide a late_initcall hook for platform initialization

Quoted 4 lines · Shawn Guo
Quoted 3 lines · Shawn Guo

This allows platforms to set up things that need to be done at late_initcall time.

Quoted 8 lines
Quoted 1 line
Cc Russell King <[email protected]>

Hi Russell,

I think it's a bit easier to have this patch go through arm-soc tree together with other patches in the series. May I have you ack on this patch to do that?

Or you prefer to have this patch go to your patch tracker? Please let me know your preference.

Signature · 2 lines
Regards,
Shawn
#4 lore raw

PATCH 1/15 ARM: provide a late_initcall hook for platform initialization

In reply to Shawn Guo
Quoted 11 lines · Shawn Guo
Quoted 4 lines · Shawn Guo

This allows platforms to set up things that need to be done at late_initcall time.

Cc Russell King <[email protected]>

Hi Russell,

I think it's a bit easier to have this patch go through arm-soc tree together with other patches in the series. May I have you ack on this patch to do that?

#5 lore raw

PATCH 1/15 ARM: provide a late_initcall hook for platform initialization

In reply to Shawn Guo
Quoted 33 lines · Shawn Guo

This allows platforms to set up things that need to be done at late_initcall time.

---
 arch/arm/include/asm/mach/arch.h |    1 +
 arch/arm/kernel/setup.c          |    8 ++++++++
 2 files changed, 9 insertions(+), 0 deletions(-)
arch/arm/include/asm/mach/arch.h +1 -0
index d7692ca..0b1c94b 100644
@@ -43,6 +43,7 @@ struct machine_desc {
 	void			(*init_irq)(void);
 	struct sys_timer	*timer;		/* system tick timer	*/
 	void			(*init_machine)(void);
+	void			(*init_late)(void);
 #ifdef CONFIG_MULTI_IRQ_HANDLER
 	void			(*handle_irq)(struct pt_regs *);
 #endif
arch/arm/kernel/setup.c +1 -0
index ebfac78..549f036 100644
@@ -800,6 +800,14 @@ static int __init customize_machine(void)
 }
 arch_initcall(customize_machine);
 
+static int __init init_machine_late(void)

arch/arm/kernel/setup.c static int __init customize_machine(void) · line 813

Quoted 10 lines
arch/arm/kernel/setup.c +7 -0
+{
+	if (machine_desc->init_late)
+		machine_desc->init_late();
+	return 0;
+}
+late_initcall(init_machine_late);
+
 #ifdef CONFIG_KEXEC
 static inline unsigned long long get_total_mem(void)
 {
author
#6 lore raw

PATCH 2/15 ARM: davinci: use machine specific hook for late init

In reply to Shawn Guo
Cc Sekhar Nori <[email protected]>
Cc Kevin Hilman <[email protected]>
---
 arch/arm/mach-davinci/board-da830-evm.c     |    1 +
 arch/arm/mach-davinci/board-da850-evm.c     |    1 +
 arch/arm/mach-davinci/board-dm355-evm.c     |    1 +
 arch/arm/mach-davinci/board-dm355-leopard.c |    1 +
 arch/arm/mach-davinci/board-dm365-evm.c     |    1 +
 arch/arm/mach-davinci/board-dm644x-evm.c    |    1 +
 arch/arm/mach-davinci/board-dm646x-evm.c    |    1 +
 arch/arm/mach-davinci/board-mityomapl138.c  |    1 +
 arch/arm/mach-davinci/board-neuros-osd2.c   |    1 +
 arch/arm/mach-davinci/board-omapl138-hawk.c |    1 +
 arch/arm/mach-davinci/board-sffsdr.c        |    1 +
 arch/arm/mach-davinci/board-tnetv107x-evm.c |    1 +
 arch/arm/mach-davinci/clock.c               |    3 +--
 arch/arm/mach-davinci/common.c              |    7 +++++++
 arch/arm/mach-davinci/cpufreq.c             |    3 +--
 arch/arm/mach-davinci/include/mach/common.h |   19 +++++++++++++++++++
 arch/arm/mach-davinci/pm.c                  |    3 +--
 17 files changed, 41 insertions(+), 6 deletions(-)
arch/arm/mach-davinci/board-da830-evm.c +1 -0
index dc1afe5..0031864 100644
@@ -681,6 +681,7 @@ MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137/AM17x EVM")
 	.init_irq	= cp_intc_init,
 	.timer		= &davinci_timer,
 	.init_machine	= da830_evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= da8xx_restart,
 MACHINE_END
arch/arm/mach-davinci/board-da850-evm.c +1 -0
index a70de24..280cbed 100644
@@ -1411,6 +1411,7 @@ MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM")
 	.init_irq	= cp_intc_init,
 	.timer		= &davinci_timer,
 	.init_machine	= da850_evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= da8xx_restart,
 MACHINE_END
arch/arm/mach-davinci/board-dm355-evm.c +1 -0
index 82ed753..1c7b1f4 100644
@@ -357,6 +357,7 @@ MACHINE_START(DAVINCI_DM355_EVM, "DaVinci DM355 EVM")
 	.init_irq     = davinci_irq_init,
 	.timer	      = &davinci_timer,
 	.init_machine = dm355_evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-dm355-leopard.c +1 -0
index d74a8b3..8e77032 100644
@@ -276,6 +276,7 @@ MACHINE_START(DM355_LEOPARD, "DaVinci DM355 leopard")
 	.init_irq     = davinci_irq_init,
 	.timer	      = &davinci_timer,
 	.init_machine = dm355_leopard_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-dm365-evm.c +1 -0
index 5bce2b8..688a9c5 100644
@@ -618,6 +618,7 @@ MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
 	.init_irq	= davinci_irq_init,
 	.timer		= &davinci_timer,
 	.init_machine	= dm365_evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-dm644x-evm.c +1 -0
index 3683306..d34ed55 100644
@@ -825,6 +825,7 @@ MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")
 	.init_irq     = davinci_irq_init,
 	.timer	      = &davinci_timer,
 	.init_machine = davinci_evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-dm646x-evm.c +1 -0
index d72ab94..f213359 100644
@@ -798,6 +798,7 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
 	.init_irq     = davinci_irq_init,
 	.timer        = &davinci_timer,
 	.init_machine = evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-mityomapl138.c +1 -0
index 672d820..beecde3 100644
@@ -572,6 +572,7 @@ MACHINE_START(MITYOMAPL138, "MityDSP-L138/MityARM-1808")
 	.init_irq	= cp_intc_init,
 	.timer		= &davinci_timer,
 	.init_machine	= mityomapl138_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= da8xx_restart,
 MACHINE_END
arch/arm/mach-davinci/board-neuros-osd2.c +1 -0
index a772bb4..5de69f2 100644
@@ -278,6 +278,7 @@ MACHINE_START(NEUROS_OSD2, "Neuros OSD2")
 	.init_irq	= davinci_irq_init,
 	.timer		= &davinci_timer,
 	.init_machine = davinci_ntosd2_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-omapl138-hawk.c +1 -0
index 45e8157..dc1208e 100644
@@ -343,6 +343,7 @@ MACHINE_START(OMAPL138_HAWKBOARD, "AM18x/OMAP-L138 Hawkboard")
 	.init_irq	= cp_intc_init,
 	.timer		= &davinci_timer,
 	.init_machine	= omapl138_hawk_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= da8xx_restart,
 MACHINE_END
arch/arm/mach-davinci/board-sffsdr.c +1 -0
index 76e67509..9078acf 100644
@@ -157,6 +157,7 @@ MACHINE_START(SFFSDR, "Lyrtech SFFSDR")
 	.init_irq     = davinci_irq_init,
 	.timer	      = &davinci_timer,
 	.init_machine = davinci_sffsdr_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END
arch/arm/mach-davinci/board-tnetv107x-evm.c +1 -0
index 5f14e30..ac4e003 100644
@@ -282,6 +282,7 @@ MACHINE_START(TNETV107X, "TNETV107X EVM")
 	.init_irq	= cp_intc_init,
 	.timer		= &davinci_timer,
 	.init_machine	= tnetv107x_evm_board_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= tnetv107x_restart,
 MACHINE_END
arch/arm/mach-davinci/clock.c +1 -2
index 008772e..34668ea 100644
@@ -213,7 +213,7 @@ EXPORT_SYMBOL(clk_unregister);
 /*
  * Disable any unused clocks left on by the bootloader
  */
-static int __init clk_disable_unused(void)
+int __init davinci_clk_disable_unused(void)
 {
 	struct clk *ck;
 
@@ -237,7 +237,6 @@ static int __init clk_disable_unused(void)
 
 	return 0;
 }
-late_initcall(clk_disable_unused);
 #endif
 
 static unsigned long clk_sysclk_recalc(struct clk *clk)
arch/arm/mach-davinci/common.c +7 -0
index cb9b2e4..64b0f65 100644
@@ -117,3 +117,10 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
 err:
 	panic("davinci_common_init: SoC Initialization failed\n");
 }
+
+void __init davinci_init_late(void)
+{
+	davinci_cpufreq_init();
+	davinci_pm_init();
+	davinci_clk_disable_unused();
+}
arch/arm/mach-davinci/cpufreq.c +1 -2
index 031048f..4729eaa 100644
@@ -240,10 +240,9 @@ static struct platform_driver davinci_cpufreq_driver = {
 	.remove = __exit_p(davinci_cpufreq_remove),
 };
 
-static int __init davinci_cpufreq_init(void)
+int __init davinci_cpufreq_init(void)
 {
 	return platform_driver_probe(&davinci_cpufreq_driver,
 							davinci_cpufreq_probe);
 }
-late_initcall(davinci_cpufreq_init);
 
arch/arm/mach-davinci/include/mach/common.h +19 -0
index 5cd39a4..bdc4aa8 100644
@@ -84,6 +84,25 @@ extern struct davinci_soc_info davinci_soc_info;
 extern void davinci_common_init(struct davinci_soc_info *soc_info);
 extern void davinci_init_ide(void);
 void davinci_restart(char mode, const char *cmd);
+void davinci_init_late(void);
+
+#ifdef CONFIG_DAVINCI_RESET_CLOCKS
+int davinci_clk_disable_unused(void);
+#else
+static inline int davinci_clk_disable_unused(void) { return 0; }
+#endif
+
+#ifdef CONFIG_CPU_FREQ
+int davinci_cpufreq_init(void);
+#else
+static inline int davinci_cpufreq_init(void) { return 0; }
+#endif
+
+#ifdef CONFIG_SUSPEND
+int davinci_pm_init(void);
+#else
+static inline int davinci_pm_init(void) { return 0; }
+#endif
 
 /* standard place to map on-chip SRAMs; they *may* support DMA */
 #define SRAM_VIRT	0xfffe0000
arch/arm/mach-davinci/pm.c +1 -2
index 04c49f7..eb8360b 100644
@@ -152,8 +152,7 @@ static struct platform_driver davinci_pm_driver = {
 	.remove = __exit_p(davinci_pm_remove),
 };
 
-static int __init davinci_pm_init(void)
+int __init davinci_pm_init(void)
 {
 	return platform_driver_probe(&davinci_pm_driver, davinci_pm_probe);
 }
-late_initcall(davinci_pm_init);
Signature · 1 line
1.7.5.4
#7 lore raw

PATCH 2/15 ARM: davinci: use machine specific hook for late init

Hi Shawn,

Quoted 9 lines · Shawn Guo
Cc Sekhar Nori <[email protected]>
Cc Kevin Hilman <[email protected]>
arch/arm/mach-davinci/board-dm646x-evm.c +0 -0
index d72ab94..f213359 100644

arch/arm/mach-davinci/board-dm646x-evm.c MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM") · line 804

Quoted 7 lines
arch/arm/mach-davinci/board-dm646x-evm.c +1 -0
@@ -798,6 +798,7 @@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVinci DM6467T EVM")
 	.init_irq     = davinci_irq_init,
 	.timer        = &davinci_timer,
 	.init_machine = evm_init,
+	.init_late	= davinci_init_late,
 	.dma_zone_size	= SZ_128M,
 	.restart	= davinci_restart,
 MACHINE_END

There is another machine defined in the board-dm646x-evm.c file which needs to be updated too. You can apply the following diff.

(quoted diff) +0 -0

b/arch/arm/mach-davinci/board-dm646x-index f213359..958679a 100644

arch/arm/mach-davinci/board-dm646x-evm.c +1 -0
@@ -788,6 +788,7 @@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVinci DM646x EVM")
        .init_irq     = davinci_irq_init,
        .timer        = &davinci_timer,
        .init_machine = evm_init,
+       .init_late      = davinci_init_late,
        .dma_zone_size  = SZ_128M,
        .restart        = davinci_restart,
 MACHINE_END

With this fixed, please also add my:

Thanks,
Sekhar

author
#8 lore raw

PATCH 2/15 ARM: davinci: use machine specific hook for late init

Quoted 4 lines · Sekhar Nori

With this fixed, please also add my:

Problem fixed, ack added. Thanks, Sekhar.

Signature · 2 lines
Regards,
Shawn
author
#9 lore raw

PATCH 3/15 ARM: ep93xx: use machine specific hook for late init

In reply to Shawn Guo
Cc Hartley Sweeten <[email protected]>
Cc Ryan Mallon <[email protected]>
---
 arch/arm/mach-ep93xx/adssphere.c             |    1 +
 arch/arm/mach-ep93xx/core.c                  |    5 +++++
 arch/arm/mach-ep93xx/crunch.c                |    4 +---
 arch/arm/mach-ep93xx/edb93xx.c               |    8 ++++++++
 arch/arm/mach-ep93xx/gesbc9312.c             |    1 +
 arch/arm/mach-ep93xx/include/mach/platform.h |    7 +++++++
 arch/arm/mach-ep93xx/micro9.c                |    4 ++++
 arch/arm/mach-ep93xx/simone.c                |    1 +
 arch/arm/mach-ep93xx/snappercl15.c           |    1 +
 arch/arm/mach-ep93xx/ts72xx.c                |    1 +
 arch/arm/mach-ep93xx/vision_ep9307.c         |    1 +
 11 files changed, 31 insertions(+), 3 deletions(-)
arch/arm/mach-ep93xx/adssphere.c +1 -0
index 2d45947..a472777 100644
@@ -41,5 +41,6 @@ MACHINE_START(ADSSPHERE, "ADS Sphere board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= adssphere_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
arch/arm/mach-ep93xx/core.c +5 -0
index 8d25895..365a90b 100644
@@ -904,3 +904,8 @@ void ep93xx_restart(char mode, const char *cmd)
 	while (1)
 		;
 }
+
+void __init ep93xx_init_late(void)
+{
+	crunch_init();
+}
arch/arm/mach-ep93xx/crunch.c +1 -3
index 74753e2..a4a2ab9 100644
@@ -79,12 +79,10 @@ static struct notifier_block crunch_notifier_block = {
 	.notifier_call	= crunch_do,
 };
 
-static int __init crunch_init(void)
+int __init crunch_init(void)
 {
 	thread_register_notifier(&crunch_notifier_block);
 	elf_hwcap |= HWCAP_CRUNCH;
 
 	return 0;
 }
-
-late_initcall(crunch_init);
arch/arm/mach-ep93xx/edb93xx.c +8 -0
index da9047d..d74c5cd 100644
@@ -255,6 +255,7 @@ MACHINE_START(EDB9301, "Cirrus Logic EDB9301 Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -268,6 +269,7 @@ MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -281,6 +283,7 @@ MACHINE_START(EDB9302A, "Cirrus Logic EDB9302A Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -294,6 +297,7 @@ MACHINE_START(EDB9307, "Cirrus Logic EDB9307 Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -307,6 +311,7 @@ MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -320,6 +325,7 @@ MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -333,6 +339,7 @@ MACHINE_START(EDB9315, "Cirrus Logic EDB9315 Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -346,6 +353,7 @@ MACHINE_START(EDB9315A, "Cirrus Logic EDB9315A Evaluation Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= edb93xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
arch/arm/mach-ep93xx/gesbc9312.c +1 -0
index fcdffbe..437c341 100644
@@ -41,5 +41,6 @@ MACHINE_START(GESBC9312, "Glomation GESBC-9312-sx")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= gesbc9312_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
arch/arm/mach-ep93xx/include/mach/platform.h +7 -0
index 602bd87..1ecb040 100644
@@ -53,5 +53,12 @@ void ep93xx_init_devices(void);
 extern struct sys_timer ep93xx_timer;
 
 void ep93xx_restart(char, const char *);
+void ep93xx_init_late(void);
+
+#ifdef CONFIG_CRUNCH
+int crunch_init(void);
+#else
+static inline int crunch_init(void) { return 0; }
+#endif
 
 #endif
arch/arm/mach-ep93xx/micro9.c +4 -0
index dc431c5..3d7cdab 100644
@@ -85,6 +85,7 @@ MACHINE_START(MICRO9, "Contec Micro9-High")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= micro9_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -98,6 +99,7 @@ MACHINE_START(MICRO9M, "Contec Micro9-Mid")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= micro9_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -111,6 +113,7 @@ MACHINE_START(MICRO9L, "Contec Micro9-Lite")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= micro9_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
@@ -124,6 +127,7 @@ MACHINE_START(MICRO9S, "Contec Micro9-Slim")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= micro9_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
 #endif
arch/arm/mach-ep93xx/simone.c +1 -0
index f40c298..33dc079 100644
@@ -86,5 +86,6 @@ MACHINE_START(SIM_ONE, "Simplemachines Sim.One Board")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= simone_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
arch/arm/mach-ep93xx/snappercl15.c +1 -0
index 0c00852..eb28237 100644
@@ -183,5 +183,6 @@ MACHINE_START(SNAPPER_CL15, "Bluewater Systems Snapper CL15")
 	.handle_irq	= vic_handle_irq,
 	.timer 		= &ep93xx_timer,
 	.init_machine	= snappercl15_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
arch/arm/mach-ep93xx/ts72xx.c +1 -0
index 5ea7909..d4ef339 100644
@@ -252,5 +252,6 @@ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= ts72xx_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
arch/arm/mach-ep93xx/vision_ep9307.c +1 -0
index ba156eb..2905a49 100644
@@ -367,5 +367,6 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307")
 	.handle_irq	= vic_handle_irq,
 	.timer		= &ep93xx_timer,
 	.init_machine	= vision_init_machine,
+	.init_late	= ep93xx_init_late,
 	.restart	= ep93xx_restart,
 MACHINE_END
Signature · 1 line
1.7.5.4
#10 lore raw

PATCH 3/15 ARM: ep93xx: use machine specific hook for late init

Quoted 4 lines · Shawn Guo
Cc Hartley Sweeten <[email protected]>
Cc Ryan Mallon <[email protected]>
Quoted 13 lines
---
 arch/arm/mach-ep93xx/adssphere.c             |    1 +
 arch/arm/mach-ep93xx/core.c                  |    5 +++++
 arch/arm/mach-ep93xx/crunch.c                |    4 +---
 arch/arm/mach-ep93xx/edb93xx.c               |    8 ++++++++
 arch/arm/mach-ep93xx/gesbc9312.c             |    1 +
 arch/arm/mach-ep93xx/include/mach/platform.h |    7 +++++++
 arch/arm/mach-ep93xx/micro9.c                |    4 ++++
 arch/arm/mach-ep93xx/simone.c                |    1 +
 arch/arm/mach-ep93xx/snappercl15.c           |    1 +
 arch/arm/mach-ep93xx/ts72xx.c                |    1 +
 arch/arm/mach-ep93xx/vision_ep9307.c         |    1 +
 11 files changed, 31 insertions(+), 3 deletions(-)

Shawn,

I'm ok with these changes for ep93xx.

I'm not sure what tree this patch was based on but you will have some fuzz issues with linux-next due to some other changes to core.c, snappercl15.c, and ts72xx.c. Just wanted to make sure you were aware of this.

Regards,
Hartley

author
#11 lore raw

PATCH 3/15 ARM: ep93xx: use machine specific hook for late init

Quoted 6 lines · H Hartley Sweeten

Shawn,

I'm ok with these changes for ep93xx.

Thanks, Hartley.

Quoted 5 lines

I'm not sure what tree this patch was based on but you will have some fuzz issues with linux-next due to some other changes to core.c, snappercl15.c, and ts72xx.c. Just wanted to make sure you were aware of this.

Noted. I will send the series to arm-soc and hopefully Arnd and Olof will have it sorted out there.

Signature · 2 lines
Regards,
Shawn
author
#12 lore raw

PATCH 4/15 ARM: exynos: use machine specific hook for late init

In reply to Shawn Guo
---
 arch/arm/mach-exynos/common.c              |    5 +++++
 arch/arm/mach-exynos/common.h              |    7 +++++++
 arch/arm/mach-exynos/mach-armlex4210.c     |    1 +
 arch/arm/mach-exynos/mach-exynos4-dt.c     |    1 +
 arch/arm/mach-exynos/mach-exynos5-dt.c     |    1 +
 arch/arm/mach-exynos/mach-nuri.c           |    1 +
 arch/arm/mach-exynos/mach-origen.c         |    1 +
 arch/arm/mach-exynos/mach-smdk4x12.c       |    1 +
 arch/arm/mach-exynos/mach-smdkv310.c       |    1 +
 arch/arm/mach-exynos/mach-universal_c210.c |    1 +
 arch/arm/mach-exynos/pm_domains.c          |    3 +--
 11 files changed, 21 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/common.c +5 -0
index 8614aab..16da001 100644
@@ -285,6 +285,11 @@ void exynos5_restart(char mode, const char *cmd)
 	__raw_writel(0x1, EXYNOS_SWRESET);
 }
 
+void __init exynos_init_late(void)
+{
+	exynos_pm_late_initcall();
+}
+
 /*
  * exynos_map_io
  *
arch/arm/mach-exynos/common.h +7 -0
index 677b546..aed2eeb 100644
@@ -19,6 +19,13 @@ void exynos4_init_irq(void);
 void exynos5_init_irq(void);
 void exynos4_restart(char mode, const char *cmd);
 void exynos5_restart(char mode, const char *cmd);
+void exynos_init_late(void);
+
+#ifdef CONFIG_PM_GENERIC_DOMAINS
+int exynos_pm_late_initcall(void);
+#else
+static int exynos_pm_late_initcall(void) { return 0; }
+#endif
 
 #ifdef CONFIG_ARCH_EXYNOS4
 void exynos4_register_clocks(void);
arch/arm/mach-exynos/mach-armlex4210.c +1 -0
index d726fcd..40eaa8c5 100644
@@ -214,6 +214,7 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210")
 	.map_io		= armlex4210_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= armlex4210_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.restart	= exynos4_restart,
 MACHINE_END
arch/arm/mach-exynos/mach-exynos4-dt.c +1 -0
index 8245f1c..e7e9743 100644
@@ -83,6 +83,7 @@ DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)")
 	.map_io		= exynos4210_dt_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= exynos4210_dt_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.dt_compat	= exynos4210_dt_compat,
 	.restart        = exynos4_restart,
arch/arm/mach-exynos/mach-exynos5-dt.c +1 -0
index 4711c89..5b1ab97 100644
@@ -72,6 +72,7 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
 	.map_io		= exynos5250_dt_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= exynos5250_dt_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.dt_compat	= exynos5250_dt_compat,
 	.restart        = exynos5_restart,
arch/arm/mach-exynos/mach-nuri.c +1 -0
index b4f1f90..5d68532 100644
@@ -1350,6 +1350,7 @@ MACHINE_START(NURI, "NURI")
 	.map_io		= nuri_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= nuri_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.reserve        = &nuri_reserve,
 	.restart	= exynos4_restart,
arch/arm/mach-exynos/mach-origen.c +1 -0
index 878d4c9..263ba44 100644
@@ -735,6 +735,7 @@ MACHINE_START(ORIGEN, "ORIGEN")
 	.map_io		= origen_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= origen_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.reserve	= &origen_reserve,
 	.restart	= exynos4_restart,
arch/arm/mach-exynos/mach-smdk4x12.c +1 -0
index d00e4f0..763967d 100644
@@ -303,6 +303,7 @@ MACHINE_START(SMDK4412, "SMDK4412")
 	.map_io		= smdk4x12_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= smdk4x12_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.restart	= exynos4_restart,
 MACHINE_END
arch/arm/mach-exynos/mach-smdkv310.c +1 -0
index 83b91fa..f9d2b31 100644
@@ -393,6 +393,7 @@ MACHINE_START(SMDKC210, "SMDKC210")
 	.map_io		= smdkv310_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= smdkv310_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.restart	= exynos4_restart,
 MACHINE_END
arch/arm/mach-exynos/mach-universal_c210.c +1 -0
index 7ebf79c..7c34886 100644
@@ -1112,6 +1112,7 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
 	.map_io		= universal_map_io,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= universal_machine_init,
+	.init_late	= exynos_init_late,
 	.timer		= &exynos4_timer,
 	.reserve        = &universal_reserve,
 	.restart	= exynos4_restart,
arch/arm/mach-exynos/pm_domains.c +1 -2
index 13b3068..e9fafcf 100644
@@ -193,9 +193,8 @@ static __init int exynos4_pm_init_power_domain(void)
 }
 arch_initcall(exynos4_pm_init_power_domain);
 
-static __init int exynos_pm_late_initcall(void)
+int __init exynos_pm_late_initcall(void)
 {
 	pm_genpd_poweroff_unused();
 	return 0;
 }
-late_initcall(exynos_pm_late_initcall);
Signature · 1 line
1.7.5.4
author
#13 lore raw

PATCH 5/15 ARM: imx: use machine specific hook for late init

In reply to Shawn Guo
Cc Sascha Hauer <[email protected]>
---
 arch/arm/mach-imx/cpu-imx5.c            |    6 +---
 arch/arm/mach-imx/imx51-dt.c            |    1 +
 arch/arm/mach-imx/mach-cpuimx51.c       |    1 +
 arch/arm/mach-imx/mach-cpuimx51sd.c     |    1 +
 arch/arm/mach-imx/mach-mx51_3ds.c       |    1 +
 arch/arm/mach-imx/mach-mx51_babbage.c   |    1 +
 arch/arm/mach-imx/mach-mx51_efikamx.c   |   42 +++++++++++++++++--------------
 arch/arm/mach-imx/mach-mx51_efikasb.c   |   28 +++++++++++---------
 arch/arm/mach-imx/mach-pcm037.c         |    6 ++++
 arch/arm/mach-imx/mach-pcm037_eet.c     |    5 +--
 arch/arm/mach-imx/mm-imx5.c             |    5 +++
 arch/arm/mach-imx/pcm037.h              |    6 ++++
 arch/arm/plat-mxc/include/mach/common.h |    7 +++++
 13 files changed, 71 insertions(+), 39 deletions(-)
arch/arm/mach-imx/cpu-imx5.c +1 -5
index aa15c51..8eb15a2 100644
@@ -62,11 +62,8 @@ EXPORT_SYMBOL(mx51_revision);
  * Dependent on link order - so the assumption is that vfp_init is called
  * before us.
  */
-static int __init mx51_neon_fixup(void)
+int __init mx51_neon_fixup(void)
 {
-	if (!cpu_is_mx51())
-		return 0;
-
 	if (mx51_revision() < IMX_CHIP_REVISION_3_0 &&
 			(elf_hwcap & HWCAP_NEON)) {
 		elf_hwcap &= ~HWCAP_NEON;
@@ -75,7 +72,6 @@ static int __init mx51_neon_fixup(void)
 	return 0;
 }
 
-late_initcall(mx51_neon_fixup);
 #endif
 
 static int get_mx53_srev(void)
arch/arm/mach-imx/imx51-dt.c +1 -0
index 5cca5739..da4f4f5 100644
@@ -115,6 +115,7 @@ DT_MACHINE_START(IMX51_DT, "Freescale i.MX51 (Device Tree Support)")
 	.handle_irq	= imx51_handle_irq,
 	.timer		= &imx51_timer,
 	.init_machine	= imx51_dt_init,
+	.init_late	= imx51_init_late,
 	.dt_compat	= imx51_dt_board_compat,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-cpuimx51.c +1 -0
index 944025d..4bd7c76 100644
@@ -297,5 +297,6 @@ MACHINE_START(EUKREA_CPUIMX51, "Eukrea CPUIMX51 Module")
 	.handle_irq = imx51_handle_irq,
 	.timer = &mxc_timer,
 	.init_machine = eukrea_cpuimx51_init,
+	.init_late	= imx51_init_late,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-cpuimx51sd.c +1 -0
index 9fbe923..0b8770f 100644
@@ -335,5 +335,6 @@ MACHINE_START(EUKREA_CPUIMX51SD, "Eukrea CPUIMX51SD")
 	.handle_irq = imx51_handle_irq,
 	.timer = &mxc_timer,
 	.init_machine = eukrea_cpuimx51sd_init,
+	.init_late	= imx51_init_late,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-mx51_3ds.c +1 -0
index 83eab41..3c5b163 100644
@@ -175,5 +175,6 @@ MACHINE_START(MX51_3DS, "Freescale MX51 3-Stack Board")
 	.handle_irq = imx51_handle_irq,
 	.timer = &mx51_3ds_timer,
 	.init_machine = mx51_3ds_init,
+	.init_late	= imx51_init_late,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-mx51_babbage.c +1 -0
index e4b822e..f3b0115 100644
@@ -426,5 +426,6 @@ MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")
 	.handle_irq = imx51_handle_irq,
 	.timer = &mx51_babbage_timer,
 	.init_machine = mx51_babbage_init,
+	.init_late	= imx51_init_late,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-mx51_efikamx.c +23 -19

57 lines not on this page · raw message

arch/arm/mach-imx/mach-mx51_efikasb.c +16 -12
index 24aded9..e73db38 100644
@@ -211,22 +211,25 @@ static void mx51_efikasb_power_off(void)
 
 static int __init mx51_efikasb_power_init(void)
 {
-	if (machine_is_mx51_efikasb()) {
-		pwgt1 = regulator_get(NULL, "pwgt1");
-		pwgt2 = regulator_get(NULL, "pwgt2");
-		if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
-			regulator_enable(pwgt1);
-			regulator_enable(pwgt2);
-		}
-		gpio_request(EFIKASB_POWEROFF, "poweroff");
-		pm_power_off = mx51_efikasb_power_off;
-
-		regulator_has_full_constraints();
+	pwgt1 = regulator_get(NULL, "pwgt1");
+	pwgt2 = regulator_get(NULL, "pwgt2");
+	if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
+		regulator_enable(pwgt1);
+		regulator_enable(pwgt2);
 	}
+	gpio_request(EFIKASB_POWEROFF, "poweroff");
+	pm_power_off = mx51_efikasb_power_off;
+
+	regulator_has_full_constraints();
 
 	return 0;
 }
-late_initcall(mx51_efikasb_power_init);
+
+static void __init mx51_efikasb_init_late(void)
+{
+	imx51_init_late();
+	mx51_efikasb_power_init();
+}
 
 /* 01     R1.3 board
    10     R2.0 board */
@@ -287,6 +290,7 @@ MACHINE_START(MX51_EFIKASB, "Genesi Efika Smartbook")
 	.init_irq = mx51_init_irq,
 	.handle_irq = imx51_handle_irq,
 	.init_machine =  efikasb_board_init,
+	.init_late = mx51_efikasb_init_late,
 	.timer = &mx51_efikasb_timer,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-pcm037.c +6 -0
index 5fddf94..3aba3a9 100644
@@ -694,6 +694,11 @@ static void __init pcm037_reserve(void)
 			MX3_CAMERA_BUF_SIZE);
 }
 
+static void __init pcm037_init_late(void)
+{
+	pcm037_eet_init_devices();
+}
+
 MACHINE_START(PCM037, "Phytec Phycore pcm037")
 	/* Maintainer: Pengutronix */
 	.atag_offset = 0x100,
@@ -704,5 +709,6 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037")
 	.handle_irq = imx31_handle_irq,
 	.timer = &pcm037_timer,
 	.init_machine = pcm037_init,
+	.init_late = pcm037_init_late,
 	.restart	= mxc_restart,
 MACHINE_END
arch/arm/mach-imx/mach-pcm037_eet.c +2 -3
index 1b7606b..11ffa81 100644
@@ -160,9 +160,9 @@ static const struct gpio_keys_platform_data
 	.rep		= 0, /* No auto-repeat */
 };
 
-static int __init eet_init_devices(void)
+int __init pcm037_eet_init_devices(void)
 {
-	if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET)
+	if (pcm037_variant() != PCM037_EET)
 		return 0;
 
 	mxc_iomux_setup_multiple_pins(pcm037_eet_pins,
@@ -176,4 +176,3 @@ static int __init eet_init_devices(void)
 
 	return 0;
 }
-late_initcall(eet_init_devices);
arch/arm/mach-imx/mm-imx5.c +5 -0
index e10f391..d6b7e9f 100644
@@ -234,3 +234,8 @@ void __init imx53_soc_init(void)
 	platform_device_register_simple("imx31-audmux", 0, imx53_audmux_res,
 					ARRAY_SIZE(imx53_audmux_res));
 }
+
+void __init imx51_init_late(void)
+{
+	mx51_neon_fixup();
+}
arch/arm/mach-imx/pcm037.h +6 -0
index d692972..7d16769 100644
@@ -8,4 +8,10 @@ enum pcm037_board_variant {
 
 extern enum pcm037_board_variant pcm037_variant(void);
 
+#ifdef CONFIG_MACH_PCM037_EET
+int pcm037_eet_init_devices(void);
+#else
+static inline int pcm037_eet_init_devices(void) { return 0; }
+#endif
+
 #endif
arch/arm/plat-mxc/include/mach/common.h +7 -0
index 0319c4a..cf663d8 100644
@@ -53,6 +53,7 @@ extern void imx35_soc_init(void);
 extern void imx50_soc_init(void);
 extern void imx51_soc_init(void);
 extern void imx53_soc_init(void);
+extern void imx51_init_late(void);
 extern void epit_timer_init(struct clk *timer_clk, void __iomem *base, int irq);
 extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int);
 extern int mx1_clocks_init(unsigned long fref);
@@ -149,4 +150,10 @@ extern void imx6q_pm_init(void);
 static inline void imx6q_pm_init(void) {}
 #endif
 
+#ifdef CONFIG_NEON
+extern int mx51_neon_fixup(void);
+#else
+static inline int mx51_neon_fixup(void) { return 0; }
+#endif
+
 #endif
Signature · 1 line
1.7.5.4
maintainer
#14 lore raw

PATCH 5/15 ARM: imx: use machine specific hook for late init

Quoted 17 lines · Shawn Guo
Cc Sascha Hauer <[email protected]>
---
 arch/arm/mach-imx/cpu-imx5.c            |    6 +---
 arch/arm/mach-imx/imx51-dt.c            |    1 +
 arch/arm/mach-imx/mach-cpuimx51.c       |    1 +
 arch/arm/mach-imx/mach-cpuimx51sd.c     |    1 +
 arch/arm/mach-imx/mach-mx51_3ds.c       |    1 +
 arch/arm/mach-imx/mach-mx51_babbage.c   |    1 +
 arch/arm/mach-imx/mach-mx51_efikamx.c   |   42 +++++++++++++++++--------------
 arch/arm/mach-imx/mach-mx51_efikasb.c   |   28 +++++++++++---------
 arch/arm/mach-imx/mach-pcm037.c         |    6 ++++
 arch/arm/mach-imx/mach-pcm037_eet.c     |    5 +--
 arch/arm/mach-imx/mm-imx5.c             |    5 +++
 arch/arm/mach-imx/pcm037.h              |    6 ++++
 arch/arm/plat-mxc/include/mach/common.h |    7 +++++
 13 files changed, 71 insertions(+), 39 deletions(-)
Signature · 4 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
author
#15 lore raw

PATCH 6/15 ARM: msm: use machine specific hook for late init

In reply to Shawn Guo
Cc David Brown <[email protected]>
Cc Daniel Walker <[email protected]>
Cc Bryan Huntsman <[email protected]>
---
 arch/arm/mach-msm/board-halibut.c      |    6 ++++++
 arch/arm/mach-msm/board-mahimahi.c     |    6 ++++++
 arch/arm/mach-msm/board-msm7x27.c      |    9 +++++++++
 arch/arm/mach-msm/board-msm7x30.c      |    8 ++++++++
 arch/arm/mach-msm/board-msm8960.c      |    7 +++++++
 arch/arm/mach-msm/board-msm8x60.c      |   10 ++++++++++
 arch/arm/mach-msm/board-qsd8x50.c      |    7 +++++++
 arch/arm/mach-msm/board-sapphire.c     |    6 ++++++
 arch/arm/mach-msm/board-trout.c        |    6 ++++++
 arch/arm/mach-msm/include/mach/board.h |    6 ++++++
 arch/arm/mach-msm/smd_debug.c          |    3 +--
 11 files changed, 72 insertions(+), 2 deletions(-)
arch/arm/mach-msm/board-halibut.c +6 -0
index 26aac36..4fa3e99 100644
@@ -94,6 +94,11 @@ static void __init halibut_map_io(void)
 	msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
+static void __init halibut_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)")
 	.atag_offset	= 0x100,
 	.fixup		= halibut_fixup,
@@ -101,5 +106,6 @@ MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)")
 	.init_early	= halibut_init_early,
 	.init_irq	= halibut_init_irq,
 	.init_machine	= halibut_init,
+	.init_late	= halibut_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-mahimahi.c +6 -0
index 5a4882f..cf1f89a 100644
@@ -71,6 +71,11 @@ static void __init mahimahi_map_io(void)
 	msm_clock_init();
 }
 
+static void __init mahimahi_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 extern struct sys_timer msm_timer;
 
 MACHINE_START(MAHIMAHI, "mahimahi")
@@ -79,5 +84,6 @@ MACHINE_START(MAHIMAHI, "mahimahi")
 	.map_io		= mahimahi_map_io,
 	.init_irq	= msm_init_irq,
 	.init_machine	= mahimahi_init,
+	.init_late	= mahimahi_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-msm7x27.c +9 -0
index 6d84ee7..451ab1d 100644
@@ -128,11 +128,17 @@ static void __init msm7x2x_map_io(void)
 #endif
 }
 
+static void __init msm7x2x_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(MSM7X27_SURF, "QCT MSM7x27 SURF")
 	.atag_offset	= 0x100,
 	.map_io		= msm7x2x_map_io,
 	.init_irq	= msm7x2x_init_irq,
 	.init_machine	= msm7x2x_init,
+	.init_late	= msm7x2x_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
 
@@ -141,6 +147,7 @@ MACHINE_START(MSM7X27_FFA, "QCT MSM7x27 FFA")
 	.map_io		= msm7x2x_map_io,
 	.init_irq	= msm7x2x_init_irq,
 	.init_machine	= msm7x2x_init,
+	.init_late	= msm7x2x_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
 
@@ -149,6 +156,7 @@ MACHINE_START(MSM7X25_SURF, "QCT MSM7x25 SURF")
 	.map_io		= msm7x2x_map_io,
 	.init_irq	= msm7x2x_init_irq,
 	.init_machine	= msm7x2x_init,
+	.init_late	= msm7x2x_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
 
@@ -157,5 +165,6 @@ MACHINE_START(MSM7X25_FFA, "QCT MSM7x25 FFA")
 	.map_io		= msm7x2x_map_io,
 	.init_irq	= msm7x2x_init_irq,
 	.init_machine	= msm7x2x_init,
+	.init_late	= msm7x2x_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-msm7x30.c +8 -0
index db81ed5..6095d35 100644
@@ -120,6 +120,11 @@ static void __init msm7x30_map_io(void)
 	msm_clock_init(msm_clocks_7x30, msm_num_clocks_7x30);
 }
 
+static void __init msm7x30_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
 	.atag_offset = 0x100,
 	.fixup = msm7x30_fixup,
@@ -127,6 +132,7 @@ MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
 	.map_io = msm7x30_map_io,
 	.init_irq = msm7x30_init_irq,
 	.init_machine = msm7x30_init,
+	.init_late = msm7x30_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -137,6 +143,7 @@ MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA")
 	.map_io = msm7x30_map_io,
 	.init_irq = msm7x30_init_irq,
 	.init_machine = msm7x30_init,
+	.init_late = msm7x30_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -147,5 +154,6 @@ MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID")
 	.map_io = msm7x30_map_io,
 	.init_irq = msm7x30_init_irq,
 	.init_machine = msm7x30_init,
+	.init_late = msm7x30_init_late,
 	.timer = &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-msm8960.c +7 -0
index ed35981..65f4a1d 100644
@@ -93,6 +93,11 @@ static void __init msm8960_rumi3_init(void)
 	platform_add_devices(rumi3_devices, ARRAY_SIZE(rumi3_devices));
 }
 
+static void __init msm8960_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR")
 	.fixup = msm8960_fixup,
 	.reserve = msm8960_reserve,
@@ -101,6 +106,7 @@ MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR")
 	.timer = &msm_timer,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8960_sim_init,
+	.init_late = msm8960_init_late,
 MACHINE_END
 
 MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3")
@@ -111,5 +117,6 @@ MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3")
 	.timer = &msm_timer,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8960_rumi3_init,
+	.init_late = msm8960_init_late,
 MACHINE_END
 
arch/arm/mach-msm/board-msm8x60.c +10 -0
index 962e711..62f2c93 100644
@@ -68,6 +68,11 @@ static void __init msm8x60_init(void)
 {
 }
 
+static void __init msm8x60_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 #ifdef CONFIG_OF
 static struct of_dev_auxdata msm_auxdata_lookup[] __initdata = {
 	{}
@@ -106,6 +111,7 @@ MACHINE_START(MSM8X60_RUMI3, "QCT MSM8X60 RUMI3")
 	.init_irq = msm8x60_init_irq,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8x60_init,
+	.init_late = msm8x60_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -116,6 +122,7 @@ MACHINE_START(MSM8X60_SURF, "QCT MSM8X60 SURF")
 	.init_irq = msm8x60_init_irq,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8x60_init,
+	.init_late = msm8x60_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -126,6 +133,7 @@ MACHINE_START(MSM8X60_SIM, "QCT MSM8X60 SIMULATOR")
 	.init_irq = msm8x60_init_irq,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8x60_init,
+	.init_late = msm8x60_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -136,6 +144,7 @@ MACHINE_START(MSM8X60_FFA, "QCT MSM8X60 FFA")
 	.init_irq = msm8x60_init_irq,
 	.handle_irq = gic_handle_irq,
 	.init_machine = msm8x60_init,
+	.init_late = msm8x60_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -145,6 +154,7 @@ DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)")
 	.map_io = msm8x60_map_io,
 	.init_irq = msm8x60_init_irq,
 	.init_machine = msm8x60_dt_init,
+	.init_late = msm8x60_init_late,
 	.timer = &msm_timer,
 	.dt_compat = msm8x60_fluid_match,
 MACHINE_END
arch/arm/mach-msm/board-qsd8x50.c +7 -0
index 7e8909c..dd625aa 100644
@@ -191,11 +191,17 @@ static void __init qsd8x50_init(void)
 	qsd8x50_init_mmc();
 }
 
+static void __init qsd8x50_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF")
 	.atag_offset = 0x100,
 	.map_io = qsd8x50_map_io,
 	.init_irq = qsd8x50_init_irq,
 	.init_machine = qsd8x50_init,
+	.init_late = qsd8x50_init_late,
 	.timer = &msm_timer,
 MACHINE_END
 
@@ -204,5 +210,6 @@ MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5")
 	.map_io = qsd8x50_map_io,
 	.init_irq = qsd8x50_init_irq,
 	.init_machine = qsd8x50_init,
+	.init_late = qsd8x50_init_late,
 	.timer = &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-sapphire.c +6 -0
index 4a8ea0d..2e569ab 100644
@@ -101,6 +101,11 @@ static void __init sapphire_map_io(void)
 	msm_clock_init();
 }
 
+static void __init sapphire_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(SAPPHIRE, "sapphire")
 /* Maintainer: Brian Swetland <[email protected]> */
 	.atag_offset    = 0x100,
@@ -108,5 +113,6 @@ MACHINE_START(SAPPHIRE, "sapphire")
 	.map_io         = sapphire_map_io,
 	.init_irq       = sapphire_init_irq,
 	.init_machine   = sapphire_init,
+	.init_late      = sapphire_init_late,
 	.timer          = &msm_timer,
 MACHINE_END
arch/arm/mach-msm/board-trout.c +6 -0
index d4060a3..bbe13f1 100644
@@ -98,6 +98,11 @@ static void __init trout_map_io(void)
 	msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
+static void __init trout_init_late(void)
+{
+	smd_debugfs_init();
+}
+
 MACHINE_START(TROUT, "HTC Dream")
 	.atag_offset	= 0x100,
 	.fixup		= trout_fixup,
@@ -105,5 +110,6 @@ MACHINE_START(TROUT, "HTC Dream")
 	.init_early	= trout_init_early,
 	.init_irq	= trout_init_irq,
 	.init_machine	= trout_init,
+	.init_late	= trout_init_late,
 	.timer		= &msm_timer,
 MACHINE_END
arch/arm/mach-msm/include/mach/board.h +6 -0
index 2ce8f1f..435f8ed 100644
@@ -47,4 +47,10 @@ int __init msm_add_sdcc(unsigned int controller,
 			struct msm_mmc_platform_data *plat,
 			unsigned int stat_irq, unsigned long stat_irq_flags);
 
+#if defined(CONFIG_MSM_SMD) && defined(CONFIG_DEBUG_FS)
+int smd_debugfs_init(void);
+#else
+static inline int smd_debugfs_init(void) { return 0; }
+#endif
+
 #endif
arch/arm/mach-msm/smd_debug.c +1 -2
index c56df9e..8056b3e 100644
@@ -216,7 +216,7 @@ static void debug_create(const char *name, umode_t mode,
 	debugfs_create_file(name, mode, dent, fill, &debug_ops);
 }
 
-static int smd_debugfs_init(void)
+int __init smd_debugfs_init(void)
 {
 	struct dentry *dent;
 
@@ -234,7 +234,6 @@ static int smd_debugfs_init(void)
 	return 0;
 }
 
-late_initcall(smd_debugfs_init);
 #endif
 
 
Signature · 1 line
1.7.5.4
#16 lore raw

PATCH 6/15 ARM: msm: use machine specific hook for late init

Quoted 4 lines · Shawn Guo
Cc David Brown <[email protected]>
Cc Daniel Walker <[email protected]>
Cc Bryan Huntsman <[email protected]>
Quoted 13 lines
---
 arch/arm/mach-msm/board-halibut.c      |    6 ++++++
 arch/arm/mach-msm/board-mahimahi.c     |    6 ++++++
 arch/arm/mach-msm/board-msm7x27.c      |    9 +++++++++
 arch/arm/mach-msm/board-msm7x30.c      |    8 ++++++++
 arch/arm/mach-msm/board-msm8960.c      |    7 +++++++
 arch/arm/mach-msm/board-msm8x60.c      |   10 ++++++++++
 arch/arm/mach-msm/board-qsd8x50.c      |    7 +++++++
 arch/arm/mach-msm/board-sapphire.c     |    6 ++++++
 arch/arm/mach-msm/board-trout.c        |    6 ++++++
 arch/arm/mach-msm/include/mach/board.h |    6 ++++++
 arch/arm/mach-msm/smd_debug.c          |    3 +--
 11 files changed, 72 insertions(+), 2 deletions(-)
Signature · 2 lines
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
author
#17 lore raw

PATCH 7/15 ARM: omap1: use machine specific hook for late init

In reply to Shawn Guo
Cc Tony Lindgren <[email protected]>
---
 arch/arm/mach-omap1/board-ams-delta.c |    8 +++++++-
 arch/arm/mach-omap1/board-fsample.c   |    1 +
 arch/arm/mach-omap1/board-generic.c   |    1 +
 arch/arm/mach-omap1/board-h2.c        |    1 +
 arch/arm/mach-omap1/board-h3.c        |    1 +
 arch/arm/mach-omap1/board-htcherald.c |    1 +
 arch/arm/mach-omap1/board-innovator.c |    1 +
 arch/arm/mach-omap1/board-nokia770.c  |    1 +
 arch/arm/mach-omap1/board-osk.c       |    1 +
 arch/arm/mach-omap1/board-palmte.c    |    1 +
 arch/arm/mach-omap1/board-palmtt.c    |    1 +
 arch/arm/mach-omap1/board-palmz71.c   |    1 +
 arch/arm/mach-omap1/board-perseus2.c  |    1 +
 arch/arm/mach-omap1/board-sx1.c       |    1 +
 arch/arm/mach-omap1/board-voiceblue.c |    1 +
 arch/arm/mach-omap1/common.h          |   10 ++++++++++
 arch/arm/mach-omap1/io.c              |    5 +++++
 arch/arm/mach-omap1/serial.c          |    3 +--
 18 files changed, 37 insertions(+), 3 deletions(-)
arch/arm/mach-omap1/board-ams-delta.c +7 -1
index c1b681e..f2f8a58 100644
@@ -595,7 +595,12 @@ gpio_free:
 	gpio_free(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
 	return err;
 }
-late_initcall(late_init);
+
+static void __init ams_delta_init_late(void)
+{
+	omap1_init_late();
+	late_init();
+}
 
 static void __init ams_delta_map_io(void)
 {
@@ -611,6 +616,7 @@ MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= ams_delta_init,
+	.init_late	= ams_delta_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-fsample.c +1 -0
index 80bd43c..a77ee57 100644
@@ -383,6 +383,7 @@ MACHINE_START(OMAP_FSAMPLE, "OMAP730 F-Sample")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_fsample_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-generic.c +1 -0
index 9a5fe58..e75e2d5 100644
@@ -88,6 +88,7 @@ MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_generic_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-h2.c +1 -0
index 553a2e5..04cf994 100644
@@ -446,6 +446,7 @@ MACHINE_START(OMAP_H2, "TI-H2")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= h2_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-h3.c +1 -0
index 4c19f4c..a11ef0a 100644
@@ -439,6 +439,7 @@ MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= h3_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-htcherald.c +1 -0
index 60c06ee..118a9d4 100644
@@ -605,6 +605,7 @@ MACHINE_START(HERALD, "HTC Herald")
 	.reserve	= omap_reserve,
 	.init_irq       = omap1_init_irq,
 	.init_machine   = htcherald_init,
+	.init_late	= omap1_init_late,
 	.timer          = &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-innovator.c +1 -0
index 67d7fd5..7970223 100644
@@ -457,6 +457,7 @@ MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= innovator_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-nokia770.c +1 -0
index d21dcc2..7212ae9 100644
@@ -255,6 +255,7 @@ MACHINE_START(NOKIA770, "Nokia 770")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_nokia770_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-osk.c +1 -0
index a5f85dd..da8d872 100644
@@ -574,6 +574,7 @@ MACHINE_START(OMAP_OSK, "TI-OSK")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= osk_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-palmte.c +1 -0
index a60e6c2..949b62a 100644
@@ -267,6 +267,7 @@ MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_palmte_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-palmtt.c +1 -0
index 8d85487..7f1e1cf 100644
@@ -313,6 +313,7 @@ MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_palmtt_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-palmz71.c +1 -0
index a2c5abc..0711685 100644
@@ -330,6 +330,7 @@ MACHINE_START(OMAP_PALMZ71, "OMAP310 based Palm Zire71")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_palmz71_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-perseus2.c +1 -0
index 76d4ee0..512989b 100644
@@ -345,6 +345,7 @@ MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_perseus2_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-sx1.c +1 -0
index f34cb74..3b7b82b 100644
@@ -407,6 +407,7 @@ MACHINE_START(SX1, "OMAP310 based Siemens SX1")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= omap_sx1_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= omap1_restart,
 MACHINE_END
arch/arm/mach-omap1/board-voiceblue.c +1 -0
index 37232d0..afd67f0 100644
@@ -294,6 +294,7 @@ MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
 	.reserve	= omap_reserve,
 	.init_irq	= omap1_init_irq,
 	.init_machine	= voiceblue_init,
+	.init_late	= omap1_init_late,
 	.timer		= &omap1_timer,
 	.restart	= voiceblue_restart,
 MACHINE_END
arch/arm/mach-omap1/common.h +10 -0
index af658ad..0b77e6d 100644
@@ -52,8 +52,18 @@ static inline void omap16xx_map_io(void)
 }
 #endif
 
+#ifdef CONFIG_OMAP_SERIAL_WAKE
+int omap_serial_wakeup_init(void);
+#else
+static inline int omap_serial_wakeup_init(void)
+{
+	return 0;
+}
+#endif
+
 void omap1_init_early(void);
 void omap1_init_irq(void);
+void omap1_init_late(void);
 void omap1_restart(char, const char *);
 
 extern struct sys_timer omap1_timer;
arch/arm/mach-omap1/io.c +5 -0
index d969a72..cf811f2 100644
@@ -138,6 +138,11 @@ void __init omap1_init_early(void)
 	omap_init_consistent_dma_size();
 }
 
+void __init omap1_init_late(void)
+{
+	omap_serial_wakeup_init();
+}
+
 /*
  * NOTE: Please use ioremap + __raw_read/write where possible instead of these
  */
arch/arm/mach-omap1/serial.c +1 -2
index 93ae8f2..6809c9e 100644
@@ -237,7 +237,7 @@ static void __init omap_serial_set_port_wakeup(int gpio_nr)
 	enable_irq_wake(gpio_to_irq(gpio_nr));
 }
 
-static int __init omap_serial_wakeup_init(void)
+int __init omap_serial_wakeup_init(void)
 {
 	if (!cpu_is_omap16xx())
 		return 0;
@@ -251,7 +251,6 @@ static int __init omap_serial_wakeup_init(void)
 
 	return 0;
 }
-late_initcall(omap_serial_wakeup_init);
 
 #endif	/* CONFIG_OMAP_SERIAL_WAKE */
 
Signature · 1 line
1.7.5.4
author
#18 lore raw

PATCH 8/15 ARM: omap2: use machine specific hook for late init

In reply to Shawn Guo
Cc Tony Lindgren <[email protected]>
---
 arch/arm/mach-omap2/board-2430sdp.c        |    1 +
 arch/arm/mach-omap2/board-3430sdp.c        |    1 +
 arch/arm/mach-omap2/board-3630sdp.c        |    1 +
 arch/arm/mach-omap2/board-4430sdp.c        |    1 +
 arch/arm/mach-omap2/board-am3517crane.c    |    1 +
 arch/arm/mach-omap2/board-am3517evm.c      |    1 +
 arch/arm/mach-omap2/board-apollon.c        |    1 +
 arch/arm/mach-omap2/board-cm-t35.c         |    2 +
 arch/arm/mach-omap2/board-cm-t3517.c       |    1 +
 arch/arm/mach-omap2/board-devkit8000.c     |    1 +
 arch/arm/mach-omap2/board-generic.c        |    1 +
 arch/arm/mach-omap2/board-h4.c             |    1 +
 arch/arm/mach-omap2/board-igep0020.c       |    2 +
 arch/arm/mach-omap2/board-ldp.c            |    1 +
 arch/arm/mach-omap2/board-n8x0.c           |    3 +
 arch/arm/mach-omap2/board-omap3beagle.c    |    1 +
 arch/arm/mach-omap2/board-omap3evm.c       |    1 +
 arch/arm/mach-omap2/board-omap3logic.c     |    2 +
 arch/arm/mach-omap2/board-omap3pandora.c   |    1 +
 arch/arm/mach-omap2/board-omap3stalker.c   |    1 +
 arch/arm/mach-omap2/board-omap3touchbook.c |    1 +
 arch/arm/mach-omap2/board-omap4panda.c     |    1 +
 arch/arm/mach-omap2/board-overo.c          |    1 +
 arch/arm/mach-omap2/board-rm680.c          |    2 +
 arch/arm/mach-omap2/board-rx51.c           |    1 +
 arch/arm/mach-omap2/board-ti8168evm.c      |    2 +
 arch/arm/mach-omap2/board-zoom.c           |    2 +
 arch/arm/mach-omap2/common.h               |   47 +++++++++++++++++++++
 arch/arm/mach-omap2/io.c                   |   63 ++++++++++++++++++++++++++++
 arch/arm/mach-omap2/mux.c                  |    3 +-
 arch/arm/mach-omap2/pm.c                   |    3 +-
 arch/arm/mach-omap2/pm24xx.c               |   17 ++-----
 arch/arm/mach-omap2/pm34xx.c               |    7 +---
 arch/arm/mach-omap2/pm44xx.c               |    6 +--
 34 files changed, 154 insertions(+), 27 deletions(-)
arch/arm/mach-omap2/board-2430sdp.c +1 -0
index e658f83..99ca6ba 100644
@@ -303,6 +303,7 @@ MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= omap_2430sdp_init,
+	.init_late	= omap2430_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-3430sdp.c +1 -0
index da75f23..8ceb480 100644
@@ -635,6 +635,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_3430sdp_init,
+	.init_late	= omap3430_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-3630sdp.c +1 -0
index 6ef350d..2dc9ba5 100644
@@ -217,6 +217,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_sdp_init,
+	.init_late	= omap3630_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-4430sdp.c +1 -0
index 130ab00..3f6cf22 100644
@@ -969,6 +969,7 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
 	.init_irq	= gic_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= omap_4430sdp_init,
+	.init_late	= omap4430_init_late,
 	.timer		= &omap4_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-am3517crane.c +1 -0
index c3851e8..7231020 100644
@@ -100,6 +100,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= am3517_crane_init,
+	.init_late	= am35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-am3517evm.c +1 -0
index 3645285..ae50e11 100644
@@ -402,6 +402,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= am3517_evm_init,
+	.init_late	= am35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-apollon.c +1 -0
index 768ece2..502c31e 100644
@@ -356,6 +356,7 @@ MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= omap_apollon_init,
+	.init_late	= omap2420_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-cm-t35.c +2 -0
index 909a8b9..f975061 100644
@@ -686,6 +686,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= cm_t35_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -698,6 +699,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730")
 	.init_irq       = omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine   = cm_t3730_init,
+	.init_late     = omap3630_init_late,
 	.timer          = &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-cm-t3517.c +1 -0
index 9e66e16..a33ad46 100644
@@ -303,6 +303,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= cm_t3517_init,
+	.init_late	= am35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-devkit8000.c +1 -0
index a2010f0..f616c8c 100644
@@ -664,6 +664,7 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= devkit8000_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_secure_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-generic.c +1 -0
index 098d183..56ffcc9 100644
@@ -158,6 +158,7 @@ DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
 	.init_irq	= omap_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= omap4_init,
+	.init_late	= omap4430_init_late,
 	.timer		= &omap4_timer,
 	.dt_compat	= omap4_boards_compat,
 	.restart	= omap_prcm_restart,
arch/arm/mach-omap2/board-h4.c +1 -0
index 0bbbabe..876becf 100644
@@ -398,6 +398,7 @@ MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= omap_h4_init,
+	.init_late	= omap2420_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-igep0020.c +2 -0
index 930c0d3..21df74e 100644
@@ -684,6 +684,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= igep_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -696,6 +697,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= igep_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-ldp.c +1 -0
index 1b60495..ef9e829 100644
@@ -442,6 +442,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_ldp_init,
+	.init_late	= omap3430_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-n8x0.c +3 -0
index 518091c..8ca14e8 100644
@@ -694,6 +694,7 @@ MACHINE_START(NOKIA_N800, "Nokia N800")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= n8x0_init_machine,
+	.init_late	= omap2420_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -706,6 +707,7 @@ MACHINE_START(NOKIA_N810, "Nokia N810")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= n8x0_init_machine,
+	.init_late	= omap2420_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -718,6 +720,7 @@ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
 	.init_irq	= omap2_init_irq,
 	.handle_irq	= omap2_intc_handle_irq,
 	.init_machine	= n8x0_init_machine,
+	.init_late	= omap2420_init_late,
 	.timer		= &omap2_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3beagle.c +1 -0
index 7be8d65..b6cd804 100644
@@ -565,6 +565,7 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3_beagle_init,
+	.init_late	= omap3_init_late,
 	.timer		= &omap3_secure_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3evm.c +1 -0
index 49df127..e98c230 100644
@@ -692,6 +692,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3_evm_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3logic.c +2 -0
index 9b3c141..8927927 100644
@@ -218,6 +218,7 @@ MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3logic_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -230,6 +231,7 @@ MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3logic_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3pandora.c +1 -0
index 33d995d..57aebee 100644
@@ -622,6 +622,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3pandora_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3stalker.c +1 -0
index 4dffc95..c05fe3a 100644
@@ -457,6 +457,7 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")
 	.init_irq		= omap3_init_irq,
 	.handle_irq		= omap3_intc_handle_irq,
 	.init_machine		= omap3_stalker_init,
+	.init_late		= omap35xx_init_late,
 	.timer			= &omap3_secure_timer,
 	.restart		= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap3touchbook.c +1 -0
index ae2251f..485d14d 100644
@@ -387,6 +387,7 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3_touchbook_init,
+	.init_late	= omap3430_init_late,
 	.timer		= &omap3_secure_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-omap4panda.c +1 -0
index 1b782ba..7ca817f 100644
@@ -582,6 +582,7 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
 	.init_irq	= gic_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= omap4_panda_init,
+	.init_late	= omap4430_init_late,
 	.timer		= &omap4_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-overo.c +1 -0
index 33aa391..af7ac0b 100644
@@ -571,6 +571,7 @@ MACHINE_START(OVERO, "Gumstix Overo")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= overo_init,
+	.init_late	= omap35xx_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-rm680.c +2 -0
index ae53d71..0ad1bb3 100644
@@ -151,6 +151,7 @@ MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= rm680_init,
+	.init_late	= omap3630_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -163,6 +164,7 @@ MACHINE_START(NOKIA_RM696, "Nokia RM-696 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= rm680_init,
+	.init_late	= omap3630_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-rx51.c +1 -0
index 27f01f0..5010f6d 100644
@@ -129,6 +129,7 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= rx51_init,
+	.init_late	= omap3430_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-ti8168evm.c +2 -0
index ab9a7a9..d4c8392 100644
@@ -52,6 +52,7 @@ MACHINE_START(TI8168EVM, "ti8168evm")
 	.init_irq	= ti81xx_init_irq,
 	.timer		= &omap3_timer,
 	.init_machine	= ti81xx_evm_init,
+	.init_late	= ti81xx_init_late,
 	.restart	= omap_prcm_restart,
 MACHINE_END
 
@@ -63,5 +64,6 @@ MACHINE_START(TI8148EVM, "ti8148evm")
 	.init_irq	= ti81xx_init_irq,
 	.timer		= &omap3_timer,
 	.init_machine	= ti81xx_evm_init,
+	.init_late	= ti81xx_init_late,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/board-zoom.c +2 -0
index 5c20bcc..4e7e561 100644
@@ -137,6 +137,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_zoom_init,
+	.init_late	= omap3430_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
@@ -149,6 +150,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_zoom_init,
+	.init_late	= omap3630_init_late,
 	.timer		= &omap3_timer,
 	.restart	= omap_prcm_restart,
 MACHINE_END
arch/arm/mach-omap2/common.h +47 -0

59 lines not on this page · raw message

arch/arm/mach-omap2/io.c +63 -0

87 lines not on this page · raw message

arch/arm/mach-omap2/mux.c +1 -2
index 65c3391..0ede4d6 100644
@@ -788,7 +788,7 @@ static void __init omap_mux_free_names(struct omap_mux *m)
 }
 
 /* Free all data except for GPIO pins unless CONFIG_DEBUG_FS is set */
-static int __init omap_mux_late_init(void)
+int __init omap_mux_late_init(void)
 {
 	struct omap_mux_partition *partition;
 	int ret;
@@ -823,7 +823,6 @@ static int __init omap_mux_late_init(void)
 
 	return 0;
 }
-late_initcall(omap_mux_late_init);
 
 static void __init omap_mux_package_fixup(struct omap_mux *p,
 					struct omap_mux *superset)
arch/arm/mach-omap2/pm.c +1 -2
index d0c1c96..9cb5ced 100644
@@ -295,7 +295,7 @@ static int __init omap2_common_pm_init(void)
 }
 postcore_initcall(omap2_common_pm_init);
 
-static int __init omap2_common_pm_late_init(void)
+int __init omap2_common_pm_late_init(void)
 {
 	/*
 	 * In the case of DT, the PMIC and SR initialization will be done using
@@ -322,4 +322,3 @@ static int __init omap2_common_pm_late_init(void)
 
 	return 0;
 }
-late_initcall(omap2_common_pm_late_init);
arch/arm/mach-omap2/pm24xx.c +5 -12
index 95442b6..b2758b8 100644
@@ -301,13 +301,10 @@ static void __init prcm_setup_regs(void)
 				WKUP_MOD, PM_WKEN);
 }
 
-static int __init omap2_pm_init(void)
+int __init omap2_pm_init(void)
 {
 	u32 l;
 
-	if (!cpu_is_omap24xx())
-		return -ENODEV;
-
 	printk(KERN_INFO "Power Management for OMAP2 initializing\n");
 	l = omap2_prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_REVISION_OFFSET);
 	printk(KERN_INFO "PRCM revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
@@ -373,17 +370,13 @@ static int __init omap2_pm_init(void)
 	 * These routines need to be in SRAM as that's the only
 	 * memory the MPU can see when it wakes up.
 	 */
-	if (cpu_is_omap24xx()) {
-		omap2_sram_idle = omap_sram_push(omap24xx_idle_loop_suspend,
-						 omap24xx_idle_loop_suspend_sz);
+	omap2_sram_idle = omap_sram_push(omap24xx_idle_loop_suspend,
+					 omap24xx_idle_loop_suspend_sz);
 
-		omap2_sram_suspend = omap_sram_push(omap24xx_cpu_suspend,
-						    omap24xx_cpu_suspend_sz);
-	}
+	omap2_sram_suspend = omap_sram_push(omap24xx_cpu_suspend,
+					    omap24xx_cpu_suspend_sz);
 
 	arm_pm_idle = omap2_pm_idle;
 
 	return 0;
 }
-
-late_initcall(omap2_pm_init);
arch/arm/mach-omap2/pm34xx.c +1 -6
index 703bd10..c769b88 100644
@@ -699,15 +699,12 @@ static void __init pm_errata_configure(void)
 	}
 }
 
-static int __init omap3_pm_init(void)
+int __init omap3_pm_init(void)
 {
 	struct power_state *pwrst, *tmp;
 	struct clockdomain *neon_clkdm, *per_clkdm, *mpu_clkdm, *core_clkdm;
 	int ret;
 
-	if (!cpu_is_omap34xx())
-		return -ENODEV;
-
 	if (!omap3_has_io_chain_ctrl())
 		pr_warning("PM: no software I/O chain control; some wakeups may be lost\n");
 
@@ -808,5 +805,3 @@ err2:
 err1:
 	return ret;
 }
-
-late_initcall(omap3_pm_init);
arch/arm/mach-omap2/pm44xx.c +1 -5
index 88562535..ea24174 100644
@@ -141,15 +141,12 @@ static void omap_default_idle(void)
  * Initializes all powerdomain and clockdomain target states
  * and all PRCM settings.
  */
-static int __init omap4_pm_init(void)
+int __init omap4_pm_init(void)
 {
 	int ret;
 	struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup;
 	struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm;
 
-	if (!cpu_is_omap44xx())
-		return -ENODEV;
-
 	if (omap_rev() == OMAP4430_REV_ES1_0) {
 		WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
 		return -ENODEV;
@@ -217,4 +214,3 @@ static int __init omap4_pm_init(void)
 err2:
 	return ret;
 }
-late_initcall(omap4_pm_init);
Signature · 1 line
1.7.5.4
author
#19 lore raw

PATCH 9/15 ARM: pnx4008: use machine specific hook for late init

In reply to Shawn Guo
Cc Russell King <[email protected]>
---
 arch/arm/mach-pnx4008/core.c |   12 ++++++++++++
 arch/arm/mach-pnx4008/pm.c   |    4 +---
 2 files changed, 13 insertions(+), 3 deletions(-)
arch/arm/mach-pnx4008/core.c +12 -0
index be4c928..a00d2f1 100644
@@ -265,6 +265,17 @@ static void pnx4008_restart(char mode, const char *cmd)
 	soft_restart(0);
 }
 
+#ifdef CONFIG_PM
+extern int pnx4008_pm_init(void);
+#else
+static inline int pnx4008_pm_init(void) { return 0; }
+#endif
+
+void __init pnx4008_init_late(void)
+{
+	pnx4008_pm_init();
+}
+
 extern struct sys_timer pnx4008_timer;
 
 MACHINE_START(PNX4008, "Philips PNX4008")
@@ -273,6 +284,7 @@ MACHINE_START(PNX4008, "Philips PNX4008")
 	.map_io 		= pnx4008_map_io,
 	.init_irq 		= pnx4008_init_irq,
 	.init_machine 		= pnx4008_init,
+	.init_late		= pnx4008_init_late,
 	.timer 			= &pnx4008_timer,
 	.restart		= pnx4008_restart,
 MACHINE_END
arch/arm/mach-pnx4008/pm.c +1 -3
index f3e60a0..26f8d06 100644
@@ -124,7 +124,7 @@ static const struct platform_suspend_ops pnx4008_pm_ops = {
 	.valid = pnx4008_pm_valid,
 };
 
-static int __init pnx4008_pm_init(void)
+int __init pnx4008_pm_init(void)
 {
 	u32 sram_size_to_allocate;
 
@@ -151,5 +151,3 @@ static int __init pnx4008_pm_init(void)
 	suspend_set_ops(&pnx4008_pm_ops);
 	return 0;
 }
-
-late_initcall(pnx4008_pm_init);
Signature · 1 line
1.7.5.4
author
#20 lore raw

PATCH 10/15 ARM: prima2: use machine specific hook for late init

In reply to Shawn Guo
---
 arch/arm/mach-prima2/common.h |    6 ++++++
 arch/arm/mach-prima2/pm.c     |    3 +--
 arch/arm/mach-prima2/prima2.c |    6 ++++++
 3 files changed, 13 insertions(+), 2 deletions(-)
arch/arm/mach-prima2/common.h +6 -0
index b28a930..60d826f 100644
@@ -24,4 +24,10 @@ static inline void sirfsoc_map_lluart(void)  {}
 extern void __init sirfsoc_map_lluart(void);
 #endif
 
+#ifdef CONFIG_SUSPEND
+extern int sirfsoc_pm_init(void);
+#else
+static inline int sirfsoc_pm_init(void) { return 0; }
+#endif
+
 #endif
arch/arm/mach-prima2/pm.c +1 -2
index 26ebb57..fb5a791 100644
@@ -85,12 +85,11 @@ static const struct platform_suspend_ops sirfsoc_pm_ops = {
 	.valid = suspend_valid_only_mem,
 };
 
-static int __init sirfsoc_pm_init(void)
+int __init sirfsoc_pm_init(void)
 {
 	suspend_set_ops(&sirfsoc_pm_ops);
 	return 0;
 }
-late_initcall(sirfsoc_pm_init);
 
 static const struct of_device_id pwrc_ids[] = {
 	{ .compatible = "sirf,prima2-pwrc" },
arch/arm/mach-prima2/prima2.c +6 -0
index 02b9c05..8f0429d 100644
@@ -25,6 +25,11 @@ void __init sirfsoc_mach_init(void)
 	of_platform_bus_probe(NULL, sirfsoc_of_bus_ids, NULL);
 }
 
+void __init sirfsoc_init_late(void)
+{
+	sirfsoc_pm_init();
+}
+
 static const char *prima2cb_dt_match[] __initdata = {
        "sirf,prima2-cb",
        NULL
@@ -39,6 +44,7 @@ MACHINE_START(PRIMA2_EVB, "prima2cb")
 	.timer		= &sirfsoc_timer,
 	.dma_zone_size	= SZ_256M,
 	.init_machine	= sirfsoc_mach_init,
+	.init_late	= sirfsoc_init_late,
 	.dt_compat      = prima2cb_dt_match,
 	.restart	= sirfsoc_restart,
 MACHINE_END
Signature · 1 line
1.7.5.4
author
#21 lore raw

PATCH 11/15 ARM: s3c64xx: use machine specific hook for late init

In reply to Shawn Guo
Cc Ben Dooks <[email protected]>
Cc Kukjin Kim <[email protected]>
---
 arch/arm/mach-s3c64xx/common.c        |    5 +++++
 arch/arm/mach-s3c64xx/common.h        |    7 +++++++
 arch/arm/mach-s3c64xx/mach-anw6410.c  |    1 +
 arch/arm/mach-s3c64xx/mach-crag6410.c |    1 +
 arch/arm/mach-s3c64xx/mach-hmt.c      |    1 +
 arch/arm/mach-s3c64xx/mach-mini6410.c |    1 +
 arch/arm/mach-s3c64xx/mach-ncp.c      |    1 +
 arch/arm/mach-s3c64xx/mach-real6410.c |    1 +
 arch/arm/mach-s3c64xx/mach-smartq5.c  |    1 +
 arch/arm/mach-s3c64xx/mach-smartq7.c  |    1 +
 arch/arm/mach-s3c64xx/mach-smdk6400.c |    1 +
 arch/arm/mach-s3c64xx/mach-smdk6410.c |    1 +
 arch/arm/mach-s3c64xx/pm.c            |    3 +--
 13 files changed, 23 insertions(+), 2 deletions(-)
arch/arm/mach-s3c64xx/common.c +5 -0
index b313380..be746e3 100644
@@ -384,3 +384,8 @@ void s3c64xx_restart(char mode, const char *cmd)
 	/* if all else fails, or mode was for soft, jump to 0 */
 	soft_restart(0);
 }
+
+void __init s3c64xx_init_late(void)
+{
+	s3c64xx_pm_late_initcall();
+}
arch/arm/mach-s3c64xx/common.h +7 -0
index 7a10be6..6cfc99b 100644
@@ -24,6 +24,7 @@ void s3c64xx_register_clocks(unsigned long xtal, unsigned armclk_limit);
 void s3c64xx_setup_clocks(void);
 
 void s3c64xx_restart(char mode, const char *cmd);
+void s3c64xx_init_late(void);
 
 #ifdef CONFIG_CPU_S3C6400
 
@@ -51,4 +52,10 @@ extern void s3c6410_init_clocks(int xtal);
 #define s3c6410_init NULL
 #endif
 
+#ifdef CONFIG_PM
+int __init s3c64xx_pm_late_initcall(void);
+#else
+static inline int s3c64xx_pm_late_initcall(void) { return 0; }
+#endif
+
 #endif /* __ARCH_ARM_MACH_S3C64XX_COMMON_H */
arch/arm/mach-s3c64xx/mach-anw6410.c +1 -0
index b86f277..8808aa5 100644
@@ -241,6 +241,7 @@ MACHINE_START(ANW6410, "A&W6410")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= anw6410_map_io,
 	.init_machine	= anw6410_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-crag6410.c +1 -0
index e20bf58..607d3f1 100644
@@ -811,6 +811,7 @@ MACHINE_START(WLF_CRAGG_6410, "Wolfson Cragganmore 6410")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= crag6410_map_io,
 	.init_machine	= crag6410_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-hmt.c +1 -0
index 521e07b..1bf6b9d 100644
@@ -272,6 +272,7 @@ MACHINE_START(HMT, "Airgoo-HMT")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= hmt_map_io,
 	.init_machine	= hmt_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-mini6410.c +1 -0
index c34c2ab..5aef599 100644
@@ -350,6 +350,7 @@ MACHINE_START(MINI6410, "MINI6410")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= mini6410_map_io,
 	.init_machine	= mini6410_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-ncp.c +1 -0
index 0efa2ba..cad2e05 100644
@@ -104,6 +104,7 @@ MACHINE_START(NCP, "NCP")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= ncp_map_io,
 	.init_machine	= ncp_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-real6410.c +1 -0
index be2a9a2..a88b60f 100644
@@ -331,6 +331,7 @@ MACHINE_START(REAL6410, "REAL6410")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= real6410_map_io,
 	.init_machine	= real6410_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-smartq5.c +1 -0
index 3f42431d..c5021d0 100644
@@ -152,6 +152,7 @@ MACHINE_START(SMARTQ5, "SmartQ 5")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= smartq_map_io,
 	.init_machine	= smartq5_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-smartq7.c +1 -0
index e5c09b6..aa9072a 100644
@@ -168,6 +168,7 @@ MACHINE_START(SMARTQ7, "SmartQ 7")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= smartq_map_io,
 	.init_machine	= smartq7_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-smdk6400.c +1 -0
index 5f09653..b0f4525 100644
@@ -93,6 +93,7 @@ MACHINE_START(SMDK6400, "SMDK6400")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= smdk6400_map_io,
 	.init_machine	= smdk6400_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/mach-smdk6410.c +1 -0
index d55bc96..315a8b4 100644
@@ -709,6 +709,7 @@ MACHINE_START(SMDK6410, "SMDK6410")
 	.handle_irq	= vic_handle_irq,
 	.map_io		= smdk6410_map_io,
 	.init_machine	= smdk6410_machine_init,
+	.init_late	= s3c64xx_init_late,
 	.timer		= &s3c24xx_timer,
 	.restart	= s3c64xx_restart,
 MACHINE_END
arch/arm/mach-s3c64xx/pm.c +1 -2
index 7d3e81b..7feb426 100644
@@ -365,10 +365,9 @@ static __init int s3c64xx_pm_initcall(void)
 }
 arch_initcall(s3c64xx_pm_initcall);
 
-static __init int s3c64xx_pm_late_initcall(void)
+int __init s3c64xx_pm_late_initcall(void)
 {
 	pm_genpd_poweroff_unused();
 
 	return 0;
 }
-late_initcall(s3c64xx_pm_late_initcall);
Signature · 1 line
1.7.5.4
author
#22 lore raw

PATCH 12/15 ARM: sa1100: use machine specific hook for late init

In reply to Shawn Guo
Cc Russell King <[email protected]>
---
 arch/arm/mach-sa1100/assabet.c    |    1 +
 arch/arm/mach-sa1100/badge4.c     |    1 +
 arch/arm/mach-sa1100/cerf.c       |    1 +
 arch/arm/mach-sa1100/collie.c     |    1 +
 arch/arm/mach-sa1100/generic.c    |    4 ++++
 arch/arm/mach-sa1100/generic.h    |    7 +++++++
 arch/arm/mach-sa1100/h3100.c      |    1 +
 arch/arm/mach-sa1100/h3600.c      |    1 +
 arch/arm/mach-sa1100/hackkit.c    |    1 +
 arch/arm/mach-sa1100/jornada720.c |    1 +
 arch/arm/mach-sa1100/lart.c       |    1 +
 arch/arm/mach-sa1100/nanoengine.c |    1 +
 arch/arm/mach-sa1100/pleb.c       |    1 +
 arch/arm/mach-sa1100/pm.c         |    4 +---
 arch/arm/mach-sa1100/shannon.c    |    1 +
 arch/arm/mach-sa1100/simpad.c     |    1 +
 16 files changed, 25 insertions(+), 3 deletions(-)
arch/arm/mach-sa1100/assabet.c +1 -0
index 375d3f7..d1dc7f1 100644
@@ -538,6 +538,7 @@ MACHINE_START(ASSABET, "Intel-Assabet")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= assabet_init,
+	.init_late	= sa11x0_init_late,
 #ifdef CONFIG_SA1111
 	.dma_zone_size	= SZ_1M,
 #endif
arch/arm/mach-sa1100/badge4.c +1 -0
index e0f0c03..b30fb99 100644
@@ -305,6 +305,7 @@ MACHINE_START(BADGE4, "Hewlett-Packard Laboratories BadgePAD 4")
 	.map_io		= badge4_map_io,
 	.nr_irqs	= SA1100_NR_IRQS,
 	.init_irq	= sa1100_init_irq,
+	.init_late	= sa11x0_init_late,
 	.timer		= &sa1100_timer,
 #ifdef CONFIG_SA1111
 	.dma_zone_size	= SZ_1M,
arch/arm/mach-sa1100/cerf.c +1 -0
index 4a61f60..09d7f4b 100644
@@ -134,5 +134,6 @@ MACHINE_START(CERF, "Intrinsyc CerfBoard/CerfCube")
 	.init_irq	= cerf_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= cerf_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/collie.c +1 -0
index c7f418b..ea5cff3 100644
@@ -401,5 +401,6 @@ MACHINE_START(COLLIE, "Sharp-Collie")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= collie_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/generic.c +4 -0
index 7c524b4..49468e6 100644
@@ -359,6 +359,10 @@ static int __init sa1100_init(void)
 
 arch_initcall(sa1100_init);
 
+void __init sa11x0_init_late(void)
+{
+	sa11x0_pm_init();
+}
 
 /*
  * Common I/O mapping:
arch/arm/mach-sa1100/generic.h +7 -0
index 9eb3b3c..a5b7c13 100644
@@ -11,6 +11,7 @@ extern void __init sa1100_map_io(void);
 extern void __init sa1100_init_irq(void);
 extern void __init sa1100_init_gpio(void);
 extern void sa11x0_restart(char, const char *);
+extern void sa11x0_init_late(void);
 
 #define SET_BANK(__nr,__start,__size) \
 	mi->bank[__nr].start = (__start), \
@@ -41,3 +42,9 @@ void sa11x0_register_mcp(struct mcp_plat_data *data);
 
 struct sa1100fb_mach_info;
 void sa11x0_register_lcd(struct sa1100fb_mach_info *inf);
+
+#ifdef CONFIG_PM
+int sa11x0_pm_init(void);
+#else
+static inline int sa11x0_pm_init(void) { return 0; }
+#endif
arch/arm/mach-sa1100/h3100.c +1 -0
index b2e8d0f..e1571ea 100644
@@ -110,6 +110,7 @@ MACHINE_START(H3100, "Compaq iPAQ H3100")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= h3100_mach_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
 
arch/arm/mach-sa1100/h3600.c +1 -0
index cb6659f..ba7a290 100644
@@ -160,6 +160,7 @@ MACHINE_START(H3600, "Compaq iPAQ H3600")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= h3600_mach_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
 
arch/arm/mach-sa1100/hackkit.c +1 -0
index 5535475..7f86bd9 100644
@@ -199,5 +199,6 @@ MACHINE_START(HACKKIT, "HackKit Cpu Board")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= hackkit_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/jornada720.c +1 -0
index ca7a7e8..e3084f4 100644
@@ -348,6 +348,7 @@ MACHINE_START(JORNADA720, "HP Jornada 720")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= jornada720_mach_init,
+	.init_late	= sa11x0_init_late,
 #ifdef CONFIG_SA1111
 	.dma_zone_size	= SZ_1M,
 #endif
arch/arm/mach-sa1100/lart.c +1 -0
index eb6534e..b775a0a 100644
@@ -147,6 +147,7 @@ MACHINE_START(LART, "LART")
 	.nr_irqs	= SA1100_NR_IRQS,
 	.init_irq	= sa1100_init_irq,
 	.init_machine	= lart_init,
+	.init_late	= sa11x0_init_late,
 	.timer		= &sa1100_timer,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/nanoengine.c +1 -0
index 8f6446b..41f69d9 100644
@@ -112,5 +112,6 @@ MACHINE_START(NANOENGINE, "BSE nanoEngine")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= nanoengine_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/pleb.c +1 -0
index 1602575..37fe0a0 100644
@@ -135,5 +135,6 @@ MACHINE_START(PLEB, "PLEB")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine   = pleb_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/pm.c +1 -3
index 2fa499e..690cf0c 100644
@@ -117,10 +117,8 @@ static const struct platform_suspend_ops sa11x0_pm_ops = {
 	.valid		= suspend_valid_only_mem,
 };
 
-static int __init sa11x0_pm_init(void)
+int __init sa11x0_pm_init(void)
 {
 	suspend_set_ops(&sa11x0_pm_ops);
 	return 0;
 }
-
-late_initcall(sa11x0_pm_init);
arch/arm/mach-sa1100/shannon.c +1 -0
index ca8bf59..5d33fc3 100644
@@ -104,5 +104,6 @@ MACHINE_START(SHANNON, "Shannon (AKA: Tuxscreen)")
 	.init_irq	= sa1100_init_irq,
 	.timer		= &sa1100_timer,
 	.init_machine	= shannon_init,
+	.init_late	= sa11x0_init_late,
 	.restart	= sa11x0_restart,
 MACHINE_END
arch/arm/mach-sa1100/simpad.c +1 -0
index 3efae03..fbd5359 100644
@@ -395,6 +395,7 @@ MACHINE_START(SIMPAD, "Simpad")
 	.map_io		= simpad_map_io,
 	.nr_irqs	= SA1100_NR_IRQS,
 	.init_irq	= sa1100_init_irq,
+	.init_late	= sa11x0_init_late,
 	.timer		= &sa1100_timer,
 	.restart	= sa11x0_restart,
 MACHINE_END
Signature · 1 line
1.7.5.4
author
#23 lore raw

PATCH 13/15 ARM: shmobile: use machine specific hook for late init

In reply to Shawn Guo
---
 arch/arm/mach-shmobile/Makefile              |    2 +-
 arch/arm/mach-shmobile/board-ag5evm.c        |    1 +
 arch/arm/mach-shmobile/board-ap4evb.c        |    1 +
 arch/arm/mach-shmobile/board-bonito.c        |    1 +
 arch/arm/mach-shmobile/board-g3evm.c         |    1 +
 arch/arm/mach-shmobile/board-g4evm.c         |    1 +
 arch/arm/mach-shmobile/board-kota2.c         |    1 +
 arch/arm/mach-shmobile/board-mackerel.c      |    1 +
 arch/arm/mach-shmobile/board-marzen.c        |    1 +
 arch/arm/mach-shmobile/common.c              |   24 ++++++++++++++++++++++++
 arch/arm/mach-shmobile/cpuidle.c             |    3 +--
 arch/arm/mach-shmobile/include/mach/common.h |   14 ++++++++++++++
 arch/arm/mach-shmobile/suspend.c             |    3 +--
 13 files changed, 49 insertions(+), 5 deletions(-)
 create mode 100644 arch/arm/mach-shmobile/common.c
arch/arm/mach-shmobile/Makefile +1 -1
index e7c2590..93d62fb 100644
@@ -3,7 +3,7 @@
 #
 
 # Common objects
-obj-y				:= timer.o console.o clock.o
+obj-y				:= timer.o console.o clock.o common.o
 
 # CPU objects
 obj-$(CONFIG_ARCH_SH7367)	+= setup-sh7367.o clock-sh7367.o intc-sh7367.o
arch/arm/mach-shmobile/board-ag5evm.c +1 -0
index cb224a3..a99e7e6 100644
@@ -598,5 +598,6 @@ MACHINE_START(AG5EVM, "ag5evm")
 	.init_irq	= sh73a0_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= ag5evm_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-ap4evb.c +1 -0
index b56dde2..522866d 100644
@@ -1440,5 +1440,6 @@ MACHINE_START(AP4EVB, "ap4evb")
 	.init_irq	= sh7372_init_irq,
 	.handle_irq	= shmobile_handle_irq_intc,
 	.init_machine	= ap4evb_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-bonito.c +1 -0
index 81fd95f..e6b1fd3 100644
@@ -500,5 +500,6 @@ MACHINE_START(BONITO, "bonito")
 	.init_irq	= r8a7740_init_irq,
 	.handle_irq	= shmobile_handle_irq_intc,
 	.init_machine	= bonito_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-g3evm.c +1 -0
index 39b6cf8..796fa00 100644
@@ -338,5 +338,6 @@ MACHINE_START(G3EVM, "g3evm")
 	.init_irq	= sh7367_init_irq,
 	.handle_irq	= shmobile_handle_irq_intc,
 	.init_machine	= g3evm_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-g4evm.c +1 -0
index 0e5a39c..f125732 100644
@@ -381,5 +381,6 @@ MACHINE_START(G4EVM, "g4evm")
 	.init_irq	= sh7377_init_irq,
 	.handle_irq	= shmobile_handle_irq_intc,
 	.init_machine	= g4evm_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-kota2.c +1 -0
index 200dcd4..f60f1b2 100644
@@ -521,5 +521,6 @@ MACHINE_START(KOTA2, "kota2")
 	.init_irq	= sh73a0_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= kota2_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-mackerel.c +1 -0
index f49e28a..4cd438f 100644
@@ -1623,5 +1623,6 @@ MACHINE_START(MACKEREL, "mackerel")
 	.init_irq	= sh7372_init_irq,
 	.handle_irq	= shmobile_handle_irq_intc,
 	.init_machine	= mackerel_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/board-marzen.c +1 -0
index ef0e13b..14de378 100644
@@ -98,5 +98,6 @@ MACHINE_START(MARZEN, "marzen")
 	.init_irq	= r8a7779_init_irq,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= marzen_init,
+	.init_late	= shmobile_init_late,
 	.timer		= &shmobile_timer,
 MACHINE_END
arch/arm/mach-shmobile/common.c new file +24 -0
new file mode 100644
index 0000000..608aba9
@@ -0,0 +1,24 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <mach/common.h>
+
+void __init shmobile_init_late(void)
+{
+	shmobile_suspend_init();
+	shmobile_cpuidle_init();
+}
arch/arm/mach-shmobile/cpuidle.c +1 -2
index 7e65591..7b541e9 100644
@@ -46,7 +46,7 @@ static struct cpuidle_driver shmobile_cpuidle_driver = {
 
 void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv);
 
-static int shmobile_cpuidle_init(void)
+int shmobile_cpuidle_init(void)
 {
 	struct cpuidle_device *dev = &shmobile_cpuidle_dev;
 	struct cpuidle_driver *drv = &shmobile_cpuidle_driver;
@@ -65,4 +65,3 @@ static int shmobile_cpuidle_init(void)
 
 	return 0;
 }
-late_initcall(shmobile_cpuidle_init);
arch/arm/mach-shmobile/include/mach/common.h +14 -0
index 83ad3fe..2a527c4 100644
@@ -83,4 +83,18 @@ extern void r8a7779_secondary_init(unsigned int cpu);
 extern int r8a7779_boot_secondary(unsigned int cpu);
 extern void r8a7779_smp_prepare_cpus(void);
 
+extern void shmobile_init_late(void);
+
+#ifdef CONFIG_SUSPEND
+int shmobile_suspend_init(void);
+#else
+static inline int shmobile_suspend_init(void) { return 0; }
+#endif
+
+#ifdef CONFIG_CPU_IDLE
+int shmobile_cpuidle_init(void);
+#else
+static inline int shmobile_cpuidle_init(void) { return 0; }
+#endif
+
 #endif /* __ARCH_MACH_COMMON_H */
arch/arm/mach-shmobile/suspend.c +1 -2
index 4d1b86a..47d83f7 100644
@@ -39,9 +39,8 @@ struct platform_suspend_ops shmobile_suspend_ops = {
 	.valid		= suspend_valid_only_mem,
 };
 
-static int __init shmobile_suspend_init(void)
+int __init shmobile_suspend_init(void)
 {
 	suspend_set_ops(&shmobile_suspend_ops);
 	return 0;
 }
-late_initcall(shmobile_suspend_init);
Signature · 1 line
1.7.5.4
author
#24 lore raw

PATCH 14/15 ARM: tegra: use machine specific hook for late init

In reply to Shawn Guo
Cc Colin Cross <[email protected]>
Cc Olof Johansson <[email protected]>
Cc Stephen Warren <[email protected]>
---
 arch/arm/mach-tegra/board-dt-tegra20.c |    1 +
 arch/arm/mach-tegra/board-dt-tegra30.c |    1 +
 arch/arm/mach-tegra/board-harmony.c    |    1 +
 arch/arm/mach-tegra/board-paz00.c      |    1 +
 arch/arm/mach-tegra/board-seaboard.c   |    3 +++
 arch/arm/mach-tegra/board-trimslice.c  |    1 +
 arch/arm/mach-tegra/board.h            |   14 ++++++++++++++
 arch/arm/mach-tegra/clock.c            |    3 +--
 arch/arm/mach-tegra/common.c           |    6 ++++++
 arch/arm/mach-tegra/powergate.c        |    4 +---
 10 files changed, 30 insertions(+), 5 deletions(-)
arch/arm/mach-tegra/board-dt-tegra20.c +1 -0
index 0952494..0f0da6c 100644
@@ -142,6 +142,7 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
 	.handle_irq	= gic_handle_irq,
 	.timer		= &tegra_timer,
 	.init_machine	= tegra_dt_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 	.dt_compat	= tegra20_dt_board_compat,
 MACHINE_END
arch/arm/mach-tegra/board-dt-tegra30.c +1 -0
index 5f7c03e..09d21b2 100644
@@ -80,6 +80,7 @@ DT_MACHINE_START(TEGRA30_DT, "NVIDIA Tegra30 (Flattened Device Tree)")
 	.handle_irq	= gic_handle_irq,
 	.timer		= &tegra_timer,
 	.init_machine	= tegra30_dt_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 	.dt_compat	= tegra30_dt_board_compat,
 MACHINE_END
arch/arm/mach-tegra/board-harmony.c +1 -0
index c00aadb..987115a 100644
@@ -191,5 +191,6 @@ MACHINE_START(HARMONY, "harmony")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_harmony_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
arch/arm/mach-tegra/board-paz00.c +1 -0
index 330afdf..2e8a4c6 100644
@@ -221,5 +221,6 @@ MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_paz00_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
arch/arm/mach-tegra/board-seaboard.c +3 -0
index d669847..273eaaa 100644
@@ -289,6 +289,7 @@ MACHINE_START(SEABOARD, "seaboard")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_seaboard_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
 
@@ -300,6 +301,7 @@ MACHINE_START(KAEN, "kaen")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_kaen_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
 
@@ -311,5 +313,6 @@ MACHINE_START(WARIO, "wario")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_wario_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
arch/arm/mach-tegra/board-trimslice.c +1 -0
index cd52820..0a2a0e5 100644
@@ -180,5 +180,6 @@ MACHINE_START(TRIMSLICE, "trimslice")
 	.handle_irq	= gic_handle_irq,
 	.timer          = &tegra_timer,
 	.init_machine   = tegra_trimslice_init,
+	.init_late	= tegra_init_late,
 	.restart	= tegra_assert_system_reset,
 MACHINE_END
arch/arm/mach-tegra/board.h +14 -0
index 75d1543..6501496 100644
@@ -32,5 +32,19 @@ void __init tegra_init_irq(void);
 void __init tegra_dt_init_irq(void);
 int __init tegra_pcie_init(bool init_port0, bool init_port1);
 
+void tegra_init_late(void);
+
+#ifdef CONFIG_DEBUG_FS
+int tegra_clk_debugfs_init(void);
+#else
+static inline int tegra_clk_debugfs_init(void) { return 0; }
+#endif
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) && defined(CONFIG_DEBUG_FS)
+int __init tegra_powergate_debugfs_init(void);
+#else
+static inline int tegra_powergate_debugfs_init(void) { return 0; }
+#endif
+
 extern struct sys_timer tegra_timer;
 #endif
arch/arm/mach-tegra/clock.c +1 -2
index 8dad8d1..58f981c 100644
@@ -642,7 +642,7 @@ static int clk_debugfs_register(struct clk *c)
 	return 0;
 }
 
-static int __init clk_debugfs_init(void)
+int __init tegra_clk_debugfs_init(void)
 {
 	struct clk *c;
 	struct dentry *d;
@@ -669,5 +669,4 @@ err_out:
 	return err;
 }
 
-late_initcall(clk_debugfs_init);
 #endif
arch/arm/mach-tegra/common.c +6 -0
index 22df10f..c90ec93 100644
@@ -132,3 +132,9 @@ void __init tegra30_init_early(void)
 	tegra_powergate_init();
 }
 #endif
+
+void __init tegra_init_late(void)
+{
+	tegra_clk_debugfs_init();
+	tegra_powergate_debugfs_init();
+}
arch/arm/mach-tegra/powergate.c +1 -3
index c238699..f5b12fb 100644
@@ -234,7 +234,7 @@ static const struct file_operations powergate_fops = {
 	.release	= single_release,
 };
 
-static int __init powergate_debugfs_init(void)
+int __init tegra_powergate_debugfs_init(void)
 {
 	struct dentry *d;
 	int err = -ENOMEM;
@@ -247,6 +247,4 @@ static int __init powergate_debugfs_init(void)
 	return err;
 }
 
-late_initcall(powergate_debugfs_init);
-
 #endif
Signature · 1 line
1.7.5.4
author
#26 lore raw

PATCH 15/15 ARM: ux500: use machine specific hook for late init

In reply to Shawn Guo
---
 arch/arm/mach-ux500/board-mop500.c       |    4 ++++
 arch/arm/mach-ux500/clock.c              |    6 ++----
 arch/arm/mach-ux500/clock.h              |   12 ++++++++++++
 arch/arm/mach-ux500/cpu.c                |    6 ++++++
 arch/arm/mach-ux500/include/mach/setup.h |    1 +
 5 files changed, 25 insertions(+), 4 deletions(-)
arch/arm/mach-ux500/board-mop500.c +4 -0
index 77d03c1..348ebd9 100644
@@ -722,6 +722,7 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform")
 	.timer		= &ux500_timer,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= mop500_init_machine,
+	.init_late	= ux500_init_late,
 MACHINE_END
 
 MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+")
@@ -731,6 +732,7 @@ MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+")
 	.timer		= &ux500_timer,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= hrefv60_init_machine,
+	.init_late	= ux500_init_late,
 MACHINE_END
 
 MACHINE_START(SNOWBALL, "Calao Systems Snowball platform")
@@ -741,6 +743,7 @@ MACHINE_START(SNOWBALL, "Calao Systems Snowball platform")
 	.timer		= &ux500_timer,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= snowball_init_machine,
+	.init_late	= ux500_init_late,
 MACHINE_END
 
 #ifdef CONFIG_MACH_UX500_DT
@@ -830,6 +833,7 @@ DT_MACHINE_START(U8500_DT, "ST-Ericsson U8500 platform (Device Tree Support)")
 	.timer		= &ux500_timer,
 	.handle_irq	= gic_handle_irq,
 	.init_machine	= u8500_init_machine,
+	.init_late	= ux500_init_late,
 	.dt_compat      = u8500_dt_board_compat,
 MACHINE_END
 #endif
arch/arm/mach-ux500/clock.c +2 -4
index ec35f0a..ce00f5e 100644
@@ -633,7 +633,7 @@ static int clk_debugfs_register(struct clk *c)
 	return 0;
 }
 
-static int __init clk_debugfs_init(void)
+int __init clk_debugfs_init(void)
 {
 	struct clk *c;
 	struct dentry *d;
@@ -655,7 +655,6 @@ err_out:
 	return err;
 }
 
-late_initcall(clk_debugfs_init);
 #endif /* defined(CONFIG_DEBUG_FS) */
 
 unsigned long clk_smp_twd_rate = 500000000;
@@ -694,12 +693,11 @@ static struct notifier_block clk_twd_cpufreq_nb = {
 	.notifier_call = clk_twd_cpufreq_transition,
 };
 
-static int clk_init_smp_twd_cpufreq(void)
+int clk_init_smp_twd_cpufreq(void)
 {
 	return cpufreq_register_notifier(&clk_twd_cpufreq_nb,
 				  CPUFREQ_TRANSITION_NOTIFIER);
 }
-late_initcall(clk_init_smp_twd_cpufreq);
 
 #endif
 
arch/arm/mach-ux500/clock.h +12 -0
index d776ada..65d27a1 100644
@@ -150,3 +150,15 @@ struct clk clk_##_name = {						\
 
 int __init clk_db8500_ed_fixup(void);
 int __init clk_init(void);
+
+#ifdef CONFIG_DEBUG_FS
+int clk_debugfs_init(void);
+#else
+static inline int clk_debugfs_init(void) { return 0; }
+#endif
+
+#ifdef CONFIG_CPU_FREQ
+int clk_init_smp_twd_cpufreq(void);
+#else
+static inline int clk_init_smp_twd_cpufreq(void) { return 0; }
+#endif
arch/arm/mach-ux500/cpu.c +6 -0
index d11f389..9856c57 100644
@@ -67,6 +67,12 @@ void __init ux500_init_irq(void)
 	clk_init();
 }
 
+void __init ux500_init_late(void)
+{
+	clk_debugfs_init();
+	clk_init_smp_twd_cpufreq();
+}
+
 static const char * __init ux500_get_machine(void)
 {
 	return kasprintf(GFP_KERNEL, "DB%4x", dbx500_partnumber());
arch/arm/mach-ux500/include/mach/setup.h +1 -0
index 3dc00ff..7b5d865 100644
@@ -22,6 +22,7 @@ extern struct device * __init u5500_init_devices(void);
 extern struct device * __init u8500_init_devices(void);
 
 extern void __init ux500_init_irq(void);
+extern void __init ux500_init_late(void);
 
 extern void __init u5500_sdi_init(struct device *parent);
 
Signature · 1 line
1.7.5.4
#29 lore raw

cover arch/arm/mach-* late_initcall cleanup

In reply to Shawn Guo
Quoted 6 lines · Shawn Guo

This series tries to clean up those late_initcall in arch/arm/mach-*, which will be a blocker for single kernel build for multiple platforms. Even on single platform, for example imx, where we already have single kernel image for imx3, imx5 and imx6 families, late_initcall does not scale. We have to detect soc type in the late_initcall to do soc sepcific late initialization.

Hi Shawn,

If you're targetting this at v3.5, I think we should get it into arm-soc as a staging branch to give it some more testing in linux-next ASAP.

If you send me a pull request, I can put it in and then we upgrade it to a proper branch for the next merge window when everyone is happy with it. Until then, you can send add-on patches or replacement pull requests. Most importantly, the first patch needs an Ack from Russell and we should see if there are any serious conflicts of the other patches with stuff in his tree. If so, we should put the branch into both the arm and the arm-soc tree before we send it off to Linus.

On a related note, do you plan to do the same thing for subsys_initcall?

Arnd

author
#30 lore raw

cover arch/arm/mach-* late_initcall cleanup

Quoted 8 lines · Arnd Bergmann
Quoted 6 lines · Shawn Guo

This series tries to clean up those late_initcall in arch/arm/mach-*, which will be a blocker for single kernel build for multiple platforms. Even on single platform, for example imx, where we already have single kernel image for imx3, imx5 and imx6 families, late_initcall does not scale. We have to detect soc type in the late_initcall to do soc sepcific late initialization.

Quoted 5 lines

Hi Shawn,

If you're targetting this at v3.5, I think we should get it into arm-soc as a staging branch to give it some more testing in linux-next ASAP.

Thanks for the reminding, Arnd. Yes, I'm targeting this at v3.5, since the imx cpuidle drivers from Rob Lee which targets at v3.5 depends on it.

Quoted 9 lines

If you send me a pull request, I can put it in and then we upgrade it to a proper branch for the next merge window when everyone is happy with it. Until then, you can send add-on patches or replacement pull requests. Most importantly, the first patch needs an Ack from Russell and we should see if there are any serious conflicts of the other patches with stuff in his tree. If so, we should put the branch into both the arm and the arm-soc tree before we send it off to Linus.

Ok. Will do immediately once I get back from Russell on the first patch.

Quoted 2 lines

On a related note, do you plan to do the same thing for subsys_initcall?

I was asked by Russell to clean up late_initcall when I was trying to propose some something to help imx cpuidle drivers, so I did not really plan to do the same thing for subsys_initcall. However, since you are asking, I think I can do it. But I would defer it a little bit until we have device tree kill some amount of board files.

Signature · 2 lines
Regards,
Shawn
#31 lore raw

cover arch/arm/mach-* late_initcall cleanup

Quoted 7 lines · Shawn Guo
Quoted 2 lines

On a related note, do you plan to do the same thing for subsys_initcall?

I was asked by Russell to clean up late_initcall when I was trying to propose some something to help imx cpuidle drivers, so I did not really plan to do the same thing for subsys_initcall. However, since you are asking, I think I can do it. But I would defer it a little bit until we have device tree kill some amount of board files.

Ok, fair enough. I don't see a reason to rush the subsys_initcall conversion, it just felt odd to do it for late_initcall first when there are so many more instances of subsys_initcall in arch/arm. We can also ask the next person who wants to add a subsys_initcall to do that work, so you don't have to do it all by yourself ;-)

Arnd

maintainer
#32 lore raw

cover arch/arm/mach-* late_initcall cleanup

In reply to Shawn Guo
Quoted 9 lines · Shawn Guo
Quoted 8 lines · Arnd Bergmann
Quoted 6 lines · Shawn Guo

This series tries to clean up those late_initcall in arch/arm/mach-*, which will be a blocker for single kernel build for multiple platforms. Even on single platform, for example imx, where we already have single kernel image for imx3, imx5 and imx6 families, late_initcall does not scale. We have to detect soc type in the late_initcall to do soc sepcific late initialization.

Quoted 8 lines
Quoted 5 lines

Hi Shawn,

If you're targetting this at v3.5, I think we should get it into arm-soc as a staging branch to give it some more testing in linux-next ASAP.

Thanks for the reminding, Arnd. Yes, I'm targeting this at v3.5, since the imx cpuidle drivers from Rob Lee which targets at v3.5 depends on it.

Sorro for being late in responding, these look good to me. For the omap parts:

Also ack to merge without my ack added for being late ;)

Tony

author
#33 lore raw

cover arch/arm/mach-* late_initcall cleanup

Quoted 5 lines · Tony Lindgren

Sorro for being late in responding, these look good to me. For the omap parts:

Thanks, Tony.

Quoted 2 lines

Also ack to merge without my ack added for being late ;)

It has not been merged yet. We are just trying to get it into linux-next for testing. Your ack has never been late, and I just added it.

Signature · 2 lines
Regards,
Shawn