Skip to contentSkip to conversation

ARM: mach-shmobile: sh7372 generic suspend/resume support

PATCH Superseded Magnus Damm 3 participants 10 messages Jul 7, 2011 – Mar 30, 2012

Subsystems (5)
lore
Share & tools
lore

Magnus Damm

author maintainer
#0 lore raw

PATCH 1/1 ARM: mach-shmobile: sh7372 generic suspend/resume support

From: Magnus Damm <[email protected]>

Convert the sh7372 Core Standby code to make use
of the new generic ARM cpu suspend/resume code.

---

Depends on code in the suspend branch of linux-2.6-arm git.

 arch/arm/mach-shmobile/include/mach/common.h |    3 
 arch/arm/mach-shmobile/pm-sh7372.c           |   38 +---
 arch/arm/mach-shmobile/sleep-sh7372.S        |  230 --------------------------
 3 files changed, 24 insertions(+), 247 deletions(-)
arch/arm/mach-shmobile/include/mach/common.h +1 -2
@@ -35,8 +35,7 @@ extern void sh7372_add_standard_devices(
 extern void sh7372_clock_init(void);
 extern void sh7372_pinmux_init(void);
 extern void sh7372_pm_init(void);
-extern void sh7372_cpu_suspend(void);
-extern void sh7372_cpu_resume(void);
+extern void sh7372_resume_core_standby(void);
 extern struct clk sh7372_extal1_clk;
 extern struct clk sh7372_extal2_clk;
 
arch/arm/mach-shmobile/pm-sh7372.c +17 -21
@@ -18,6 +18,7 @@
 #include <asm/system.h>
 #include <asm/io.h>
 #include <asm/tlbflush.h>
+#include <asm/suspend.h>
 #include <mach/common.h>
 
 #define SMFRAM 0xe6a70000
@@ -25,30 +26,25 @@
 #define SBAR 0xe6180020
 #define APARMBAREA 0xe6f10020
 
-static void sh7372_enter_core_standby(void)
+static int sh7372_do_idle_core_standby(unsigned long unused)
 {
-	void __iomem *smfram = (void __iomem *)SMFRAM;
-
-	__raw_writel(0, APARMBAREA); /* translate 4k */
-	__raw_writel(__pa(sh7372_cpu_resume), SBAR); /* set reset vector */
-	__raw_writel(0x10, SYSTBCR); /* enable core standby */
-
-	__raw_writel(0, smfram + 0x3c); /* clear page table address */
-
-	sh7372_cpu_suspend();
-	cpu_init();
-
-	/* if page table address is non-NULL then we have been powered down */
-	if (__raw_readl(smfram + 0x3c)) {
-		__raw_writel(__raw_readl(smfram + 0x40),
-			     __va(__raw_readl(smfram + 0x3c)));
+	cpu_do_idle(); /* WFI when SYSTBCR = 0x10 -> Core Standby */
+	return 0;
+}
 
-		flush_tlb_all();
-		set_cr(__raw_readl(smfram + 0x38));
-	}
+static void sh7372_enter_core_standby(void)
+{
+	/* set reset vector, translate 4k */
+	__raw_writel(__pa(sh7372_resume_core_standby), SBAR);
+	__raw_writel(0, APARMBAREA);
+
+	/* enter sleep mode with SYSTBCR to 0x10 */
+	__raw_writel(0x10, SYSTBCR);
+	cpu_suspend(0, sh7372_do_idle_core_standby);
+	__raw_writel(0, SYSTBCR);
 
-	__raw_writel(0, SYSTBCR); /* disable core standby */
-	__raw_writel(0, SBAR); /* disable reset vector translation */
+	 /* disable reset vector translation */
+	__raw_writel(0, SBAR);
 }
 
 #ifdef CONFIG_CPU_IDLE
arch/arm/mach-shmobile/sleep-sh7372.S +6 -218

231 lines not on this page · raw message

#1 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic suspend/resume

Quoted 4 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Convert the sh7372 Core Standby code to make use
of the new generic ARM cpu suspend/resume code.

Thanks. Only thing which stands out is:

arch/arm/mach-shmobile/sleep-sh7372.S line 42

Quoted 4 lines
arch/arm/mach-shmobile/sleep-sh7372.S +4 -0
+	.global sh7372_resume_core_standby
+sh7372_resume_core_standby:
+	ldr     pc, 1f
+1:	.long   cpu_resume - PAGE_OFFSET + PLAT_PHYS_OFFSET

Is this because sh7372_resume_core_standby must be ARM stuff, but cpu_resume may be Thumb?

I suspect we should make cpu_resume always be ARM instructions because I'd imagine a lot of firmware won't cope with Thumb entry.

author maintainer
#2 lore raw
In reply to Magnus Damm
Quoted 8 lines · Russell King - ARM Linux
Quoted 4 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Convert the sh7372 Core Standby code to make use
of the new generic ARM cpu suspend/resume code.

Thanks.  Only thing which stands out is:

Quoted 7 lines
Quoted 4 lines

+     .global sh7372_resume_core_standby +sh7372_resume_core_standby:
+     ldr     pc, 1f
+1:   .long   cpu_resume - PAGE_OFFSET + PLAT_PHYS_OFFSET

Is this because sh7372_resume_core_standby must be ARM stuff, but cpu_resume may be Thumb?

That may have something to do with it, but I suspect not. Perhaps you wonder why I'm not pointing the reset vector directly to cpu_resume()
- that's because we need the reset vector to be aligned to 4k.

Quoted 2 lines

I suspect we should make cpu_resume always be ARM instructions because I'd imagine a lot of firmware won't cope with Thumb entry.

So I can't guarantee this is 100% true, but I strongly suspect that the code above is what runs directly out of reset. No firmware involved.

I simply nicked the PA->VA conversion code from the SMP entry code in headsmp.S:

	.align  12

ENTRY(shmobile_secondary_vector)
ldr pc, 1f
1: .long secondary_startup - PAGE_OFFSET + PLAT_PHYS_OFFSET

Any suggestions?

Thanks for your help!

/ magnus

#3 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic suspend/resume

In reply to Magnus Damm
Quoted 15 lines · Magnus Damm
Quoted 13 lines · Russell King - ARM Linux
Quoted 4 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Convert the sh7372 Core Standby code to make use
of the new generic ARM cpu suspend/resume code.

Thanks.  Only thing which stands out is:

Quoted 4 lines

+     .global sh7372_resume_core_standby +sh7372_resume_core_standby:
+     ldr     pc, 1f
+1:   .long   cpu_resume - PAGE_OFFSET + PLAT_PHYS_OFFSET

Quoted 6 lines
Quoted 2 lines

Is this because sh7372_resume_core_standby must be ARM stuff, but cpu_resume may be Thumb?

That may have something to do with it, but I suspect not. Perhaps you wonder why I'm not pointing the reset vector directly to cpu_resume()
- that's because we need the reset vector to be aligned to 4k.

Wouldn't a simple branch instruction do here? Branches are relative (within 24-bit) so you wouldn't need any games with v:p stuff. You may have to put that in .data so that it can reach cpu_resume if you're using a large initramfs image.

Quoted 8 lines

I simply nicked the PA->VA conversion code from the SMP entry code in headsmp.S:

	.align  12

ENTRY(shmobile_secondary_vector)
ldr pc, 1f
1: .long secondary_startup - PAGE_OFFSET + PLAT_PHYS_OFFSET

Any suggestions?

Again, a simple branch instruction should avoid the need to reference PLAT_PHYS_OFFSET or virtual addresses.

author maintainer
#4 lore raw
In reply to Magnus Damm
Quoted 19 lines · Russell King - ARM Linux
Quoted 18 lines · Magnus Damm
Quoted 15 lines · Russell King - ARM Linux
Quoted 4 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Convert the sh7372 Core Standby code to make use
of the new generic ARM cpu suspend/resume code.

Thanks.  Only thing which stands out is:

Quoted 4 lines

+     .global sh7372_resume_core_standby +sh7372_resume_core_standby:
+     ldr     pc, 1f
+1:   .long   cpu_resume - PAGE_OFFSET + PLAT_PHYS_OFFSET

Is this because sh7372_resume_core_standby must be ARM stuff, but cpu_resume may be Thumb?

Quoted 8 lines
Quoted 3 lines

That may have something to do with it, but I suspect not. Perhaps you wonder why I'm not pointing the reset vector directly to cpu_resume()
- that's because we need the reset vector to be aligned to 4k.

Wouldn't a simple branch instruction do here?  Branches are relative (within 24-bit) so you wouldn't need any games with v:p stuff.  You may have to put that in .data so that it can reach cpu_resume if you're using a large initramfs image.

Thanks, your suggestion certainly makes sense. I vaguely recall that i actually tried a regular branch instruction before by myself, but giving up since I couldn't get it to work for some unknown reason.

So after spending a few more minutes digging deeper this time it seems that the PC value is not setup properly. Not what I expected - the CPU starts executing at the specified reset vector but if I read out the PC value with the first instruction i get this:

pc = 0x00000008

I expect it to be 0x404d2008 which is the reset vector 0x404d2000 plus 8.

No wonder the relative jump doesn't work.

I know that there is some magic remapping hardware that implements the reset translation logic. Perhaps the CPU core itself still believes it executes starting from 0 but some bus logic converts that to whatever is specified in the reset vector register. That theory makes sense since the hardware also allows you to specify the size of the translated area.

So with that in mind I'd prefer to keep the code as-is. Unless you have any suggestion how to deal with this in a better way... =)

Thanks,

/ magnus

author maintainer
#5 lore raw

PATCH 1/1 ARM: mach-shmobile: sh7372 generic board support via DT V2

In reply to Magnus Damm

From: Magnus Damm <[email protected]>

Add generic DT board support for the sh7372 SoC V2.

SCIF serial ports and timers are kept as regular platform devices. Other on-chip and on-board devices should be configured via the device tree.

Tested on the mackerel board via kexec using a zImage kernel with an appended dtb.

At this point there is no interrupt controller support in place but such code will be added over time when proper IRQ domain support has been added to INTC.

---

Changes since V2:
- added sh7372.dtsi
- make use of of_platform_populate
- set ->nr_irqs to NR_IRQS_LEGACY

Depends on the recently posted series:
"[PATCH 00/06] mach-shmobile device tree preparation patches"

 arch/arm/boot/dts/sh7372.dtsi         |   21 ++++++++++++++
 arch/arm/mach-shmobile/setup-sh7372.c |   48 +++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
arch/arm/boot/dts/sh7372.dtsi new file +21 -0
@@ -0,0 +1,21 @@
+/*
+ * Device Tree Source for the sh7372 SoC
+ *
+ * Copyright (C) 2012 Renesas Solutions Corp.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+	compatible = "renesas,sh7372";
+
+	cpus {
+		cpu@0 {
+			compatible = "arm,cortex-a8";
+		};
+	};
+};
arch/arm/mach-shmobile/setup-sh7372.c +48 -0

57 lines not on this page · raw message

#6 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic board support via DT V2

In reply to Magnus Damm

Hi,

Quoted 8 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Add generic DT board support for the sh7372 SoC V2.

SCIF serial ports and timers are kept as regular platform devices. Other on-chip and on-board devices should be configured via the device tree.

Quoted 8 lines

Tested on the mackerel board via kexec using a zImage kernel with an appended dtb.

At this point there is no interrupt controller support in place but such code will be added over time when proper IRQ domain support has been added to INTC.

My understanding is that this patch along with the
"[PATCH 00/06] mach-shmobile device tree preparation patches V2" series is sufficient for preliminary support of device trees on sh7372. For this reason, I have put those patches into the dt branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas.git

However, the branch is based on v3.3 final, so I've had to rebase two patches on top of it. Magnus, can you please double check if the commits look good?

Arnd, if Magnus confirms that the commits are correct, would you mind if I sent a pull request to you with that material during the present merge window?

Rafael

Quoted 101 lines

---

Changes since V2:
- added sh7372.dtsi
- make use of of_platform_populate
- set ->nr_irqs to NR_IRQS_LEGACY

Depends on the recently posted series:
"[PATCH 00/06] mach-shmobile device tree preparation patches"

 arch/arm/boot/dts/sh7372.dtsi         |   21 ++++++++++++++
 arch/arm/mach-shmobile/setup-sh7372.c |   48 +++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
arch/arm/boot/dts/sh7372.dtsi new file +21 -0
@@ -0,0 +1,21 @@
+/*
+ * Device Tree Source for the sh7372 SoC
+ *
+ * Copyright (C) 2012 Renesas Solutions Corp.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+	compatible = "renesas,sh7372";
+
+	cpus {
+		cpu@0 {
+			compatible = "arm,cortex-a8";
+		};
+	};
+};
arch/arm/mach-shmobile/setup-sh7372.c +48 -0
@@ -22,6 +22,7 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/platform_device.h>
+#include <linux/of_platform.h>
 #include <linux/uio_driver.h>
 #include <linux/delay.h>
 #include <linux/input.h>
@@ -1082,3 +1083,50 @@ void __init sh7372_add_early_devices(voi
 	/* override timer setup with soc-specific code */
 	shmobile_timer.init = sh7372_earlytimer_init;
 }
+
+#ifdef CONFIG_USE_OF
+
+void __init sh7372_add_early_devices_dt(void)
+{
+	shmobile_setup_delay(800, 1, 3); /* Cortex-A8 @ 800MHz */
+
+	early_platform_add_devices(sh7372_early_devices,
+				   ARRAY_SIZE(sh7372_early_devices));
+
+	/* setup early console here as well */
+	shmobile_setup_console();
+}
+
+static const struct of_dev_auxdata sh7372_auxdata_lookup[] __initconst = {
+	{ }
+};
+
+void __init sh7372_add_standard_devices_dt(void)
+{
+	/* clocks are setup late during boot in the case of DT */
+	sh7372_clock_init();
+
+	platform_add_devices(sh7372_early_devices,
+			    ARRAY_SIZE(sh7372_early_devices));
+
+	of_platform_populate(NULL, of_default_bus_match_table,
+			     sh7372_auxdata_lookup, NULL);
+}
+
+static const char *sh7372_boards_compat_dt[] __initdata = {
+	"renesas,sh7372",
+	NULL,
+};
+
+DT_MACHINE_START(SH7372_DT, "Generic SH7372 (Flattened Device Tree)")
+	.map_io		= sh7372_map_io,
+	.init_early	= sh7372_add_early_devices_dt,
+	.nr_irqs	= NR_IRQS_LEGACY,
+	.init_irq	= sh7372_init_irq,
+	.handle_irq	= shmobile_handle_irq_intc,
+	.init_machine	= sh7372_add_standard_devices_dt,
+	.timer		= &shmobile_timer,
+	.dt_compat	= sh7372_boards_compat_dt,
+MACHINE_END
+
+#endif /* CONFIG_USE_OF */
author maintainer
#7 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic board support via DT V2

In reply to Magnus Damm

Hello Rafael,

2012/3/29 Rafael J. Wysocki <[email protected]>:

Quoted 18 lines

Hi,

Quoted 15 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Add generic DT board support for the sh7372 SoC V2.

SCIF serial ports and timers are kept as regular platform devices. Other on-chip and on-board devices should be configured via the device tree.

Tested on the mackerel board via kexec using a zImage kernel with an appended dtb.

At this point there is no interrupt controller support in place but such code will be added over time when proper IRQ domain support has been added to INTC.

Quoted 8 lines
Quoted 1 line

My understanding is that this patch along with the
"[PATCH 00/06] mach-shmobile device tree preparation patches V2" series is sufficient for preliminary support of device trees on sh7372.  For this reason, I have put those patches into the dt branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas.git

Great, thanks for your help!

Quoted 2 lines

However, the branch is based on v3.3 final, so I've had to rebase two patches on top of it.  Magnus, can you please double check if the commits look good?

Sorry, it does not seem ok. This patch and the earlier series "[PATCH 00/06] mach-shmobile device tree preparation patches V2" were built on top of the renesas git tree commit a6e24019468009a21b674e392d74283a90f415dd (origin/master at the moment). Using v3.3 final will not work due to missing patches.

The following log shows the first 3 commits in origin/master and origin/dt for arch/arm/mach-shmobile/setup-sh7372.c:

damm@w520 ~/git/renesas $ git log --oneline origin/master arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
17254bf ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework 5d7220ec ARM: mach-shmobile: sh7372 map_io and init_early update c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only damm@w520 ~/git/renesas $ git log --oneline origin/dt arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
71f5ef5 ARM: mach-shmobile: sh7372 generic board support via DT V2 c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only 57f2685 Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
damm@w520 ~/git/renesas $

The patches "ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework" and "ARM: mach-shmobile: sh7372 map_io and init_early update" and all their dependencies are needed, so please base on your current origin/master to avoid the following errors:

arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_early_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1059:2: error: implicit declaration of function 'shmobile_setup_delay' arch/arm/mach-shmobile/setup-sh7372.c:1065:2: error: implicit declaration of function 'shmobile_setup_console' arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_standard_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1075:2: error: implicit declaration of function 'sh7372_clock_init' arch/arm/mach-shmobile/setup-sh7372.c: At top level:
arch/arm/mach-shmobile/setup-sh7372.c:1090:12: error: 'sh7372_map_io' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1093:14: error:
'sh7372_init_irq' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1094:16: error:
'shmobile_handle_irq_intc' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1096:12: error: 'shmobile_timer' undeclared here (not in a function)
make[1]: *** [arch/arm/mach-shmobile/setup-sh7372.o] Error 1
make: *** [arch/arm/mach-shmobile] Error 2

Thanks,

/ magnus

#8 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic board support via DT V2

In reply to Magnus Damm
Quoted 74 lines · Magnus Damm

Hello Rafael,

2012/3/29 Rafael J. Wysocki <[email protected]>:

Quoted 18 lines

Hi,

Quoted 15 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Add generic DT board support for the sh7372 SoC V2.

SCIF serial ports and timers are kept as regular platform devices. Other on-chip and on-board devices should be configured via the device tree.

Tested on the mackerel board via kexec using a zImage kernel with an appended dtb.

At this point there is no interrupt controller support in place but such code will be added over time when proper IRQ domain support has been added to INTC.

Quoted 8 lines
Quoted 1 line

My understanding is that this patch along with the
"[PATCH 00/06] mach-shmobile device tree preparation patches V2" series is sufficient for preliminary support of device trees on sh7372. For this reason, I have put those patches into the dt branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas.git

Great, thanks for your help!

Quoted 2 lines

However, the branch is based on v3.3 final, so I've had to rebase two patches on top of it. Magnus, can you please double check if the commits look good?

Sorry, it does not seem ok. This patch and the earlier series "[PATCH 00/06] mach-shmobile device tree preparation patches V2" were built on top of the renesas git tree commit a6e24019468009a21b674e392d74283a90f415dd (origin/master at the moment). Using v3.3 final will not work due to missing patches.

The following log shows the first 3 commits in origin/master and origin/dt for arch/arm/mach-shmobile/setup-sh7372.c:

damm@w520 ~/git/renesas $ git log --oneline origin/master arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
17254bf ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework 5d7220ec ARM: mach-shmobile: sh7372 map_io and init_early update c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only damm@w520 ~/git/renesas $ git log --oneline origin/dt arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
71f5ef5 ARM: mach-shmobile: sh7372 generic board support via DT V2 c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only 57f2685 Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
damm@w520 ~/git/renesas $

The patches "ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework" and "ARM: mach-shmobile: sh7372 map_io and init_early update" and all their dependencies are needed, so please base on your current origin/master to avoid the following errors:

arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_early_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1059:2: error: implicit declaration of function 'shmobile_setup_delay' arch/arm/mach-shmobile/setup-sh7372.c:1065:2: error: implicit declaration of function 'shmobile_setup_console' arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_standard_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1075:2: error: implicit declaration of function 'sh7372_clock_init' arch/arm/mach-shmobile/setup-sh7372.c: At top level:
arch/arm/mach-shmobile/setup-sh7372.c:1090:12: error: 'sh7372_map_io' undeclared here (not in a function)

Quoted 8 lines

arch/arm/mach-shmobile/setup-sh7372.c:1093:14: error:
'sh7372_init_irq' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1094:16: error:
'shmobile_handle_irq_intc' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1096:12: error: 'shmobile_timer' undeclared here (not in a function)
make[1]: *** [arch/arm/mach-shmobile/setup-sh7372.o] Error 1
make: *** [arch/arm/mach-shmobile] Error 2

OK

So I'll need to rebase the dt branch on top of 3.4-rc1 when it is out. I think that should resolve the problems, is that correct?

Rafael

author maintainer
#9 lore raw

Re: [PATCH] ARM: mach-shmobile: sh7372 generic board support via DT V2

In reply to Magnus Damm
Quoted 84 lines · Rafael J. Wysocki
Quoted 74 lines · Magnus Damm

Hello Rafael,

2012/3/29 Rafael J. Wysocki <[email protected]>:

Quoted 18 lines

Hi,

Quoted 15 lines · Magnus Damm

From: Magnus Damm <[email protected]>

Add generic DT board support for the sh7372 SoC V2.

SCIF serial ports and timers are kept as regular platform devices. Other on-chip and on-board devices should be configured via the device tree.

Tested on the mackerel board via kexec using a zImage kernel with an appended dtb.

At this point there is no interrupt controller support in place but such code will be added over time when proper IRQ domain support has been added to INTC.

Quoted 8 lines
Quoted 1 line

My understanding is that this patch along with the
"[PATCH 00/06] mach-shmobile device tree preparation patches V2" series is sufficient for preliminary support of device trees on sh7372.  For this reason, I have put those patches into the dt branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/rafael/renesas.git

Great, thanks for your help!

Quoted 2 lines

However, the branch is based on v3.3 final, so I've had to rebase two patches on top of it.  Magnus, can you please double check if the commits look good?

Sorry, it does not seem ok. This patch and the earlier series "[PATCH 00/06] mach-shmobile device tree preparation patches V2" were built on top of the renesas git tree commit a6e24019468009a21b674e392d74283a90f415dd (origin/master at the moment). Using v3.3 final will not work due to missing patches.

The following log shows the first 3 commits in origin/master and origin/dt for arch/arm/mach-shmobile/setup-sh7372.c:

damm@w520 ~/git/renesas $ git log --oneline origin/master arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
17254bf ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework 5d7220ec ARM: mach-shmobile: sh7372 map_io and init_early update c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only damm@w520 ~/git/renesas $ git log --oneline origin/dt arch/arm/mach-shmobile/setup-sh7372.c | head -n 3
71f5ef5 ARM: mach-shmobile: sh7372 generic board support via DT V2 c8ddf03 ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only 57f2685 Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
damm@w520 ~/git/renesas $

The patches "ARM: mach-shmobile: sh7372, AP4EVB and Mackerel timer rework" and "ARM: mach-shmobile: sh7372 map_io and init_early update" and all their dependencies are needed, so please base on your current origin/master to avoid the following errors:

arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_early_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1059:2: error: implicit declaration of function 'shmobile_setup_delay' arch/arm/mach-shmobile/setup-sh7372.c:1065:2: error: implicit declaration of function 'shmobile_setup_console' arch/arm/mach-shmobile/setup-sh7372.c: In function 'sh7372_add_standard_devices_dt':
arch/arm/mach-shmobile/setup-sh7372.c:1075:2: error: implicit declaration of function 'sh7372_clock_init' arch/arm/mach-shmobile/setup-sh7372.c: At top level:
arch/arm/mach-shmobile/setup-sh7372.c:1090:12: error: 'sh7372_map_io' undeclared here (not in a function)

Quoted 8 lines

arch/arm/mach-shmobile/setup-sh7372.c:1093:14: error:
'sh7372_init_irq' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1094:16: error:
'shmobile_handle_irq_intc' undeclared here (not in a function) arch/arm/mach-shmobile/setup-sh7372.c:1096:12: error: 'shmobile_timer' undeclared here (not in a function)
make[1]: *** [arch/arm/mach-shmobile/setup-sh7372.o] Error 1
make: *** [arch/arm/mach-shmobile] Error 2

Quoted 4 lines

OK

So I'll need to rebase the dt branch on top of 3.4-rc1 when it is out. I think that should resolve the problems, is that correct?

Yes, since the dependencies are fulfilled at this moment I believe that they also will be ok by then. =)

Thanks!

/ magnus