diff mbox

[v6,01/26] ARM: shmobile: Add watchdog support

Message ID 1519839622-6109-1-git-send-email-fabrizio.castro@bp.renesas.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Fabrizio Castro Feb. 28, 2018, 5:40 p.m. UTC
On R-Car Gen2 and RZ/G1 platforms, we use the SBAR registers to make non
boot CPUs run a routine designed to bring up SMP and deal with hot plug.
The value contained in the SBAR registers is not initialized by a WDT
triggered reset, which means that after a WDT triggered reset we jump
to the SMP bring up routine, preventing the system from executing the
bootrom code.

The purpose of this patch is to jump to the bootrom code in case of a
WDT triggered reset, and keep the SMP functionality untouched.
In order to tell if the code had been called due to the WDT overflowing
we are testing WOVF from register RWTCSRA.

The new function shmobile_boot_vector_gen2 isn't replacing
shmobile_boot_vector for backward compatibility reasons. The kernel
will install the best option (either shmobile_boot_vector or
shmobile_boot_vector_gen2) to ICRAM1 after parsing the device tree,
according to the amount of memory available.

Since shmobile_boot_vector has become bigger, "reg" property of nodes
compatible with "renesas,smp-sram" now need to be set to a value
greater or equal to "<0 0x60>".

Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v5->v6:
* taken ifdefs out as per Geert's suggestion.

 arch/arm/mach-shmobile/common.h  |  4 +++
 arch/arm/mach-shmobile/headsmp.S | 53 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+)

Comments

Simon Horman March 1, 2018, 9:44 a.m. UTC | #1
On Wed, Feb 28, 2018 at 05:40:22PM +0000, Fabrizio Castro wrote:
> On R-Car Gen2 and RZ/G1 platforms, we use the SBAR registers to make non
> boot CPUs run a routine designed to bring up SMP and deal with hot plug.
> The value contained in the SBAR registers is not initialized by a WDT
> triggered reset, which means that after a WDT triggered reset we jump
> to the SMP bring up routine, preventing the system from executing the
> bootrom code.
> 
> The purpose of this patch is to jump to the bootrom code in case of a
> WDT triggered reset, and keep the SMP functionality untouched.
> In order to tell if the code had been called due to the WDT overflowing
> we are testing WOVF from register RWTCSRA.
> 
> The new function shmobile_boot_vector_gen2 isn't replacing
> shmobile_boot_vector for backward compatibility reasons. The kernel
> will install the best option (either shmobile_boot_vector or
> shmobile_boot_vector_gen2) to ICRAM1 after parsing the device tree,
> according to the amount of memory available.
> 
> Since shmobile_boot_vector has become bigger, "reg" property of nodes
> compatible with "renesas,smp-sram" now need to be set to a value
> greater or equal to "<0 0x60>".
> 
> Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
> Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>

Thanks, I have marked this as deferred as I would like dependencies to
be merged first.
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Geert Uytterhoeven March 13, 2018, 1:43 p.m. UTC | #2
Hi Fabrizio,

On Wed, Feb 28, 2018 at 6:40 PM, Fabrizio Castro
<fabrizio.castro@bp.renesas.com> wrote:
> On R-Car Gen2 and RZ/G1 platforms, we use the SBAR registers to make non
> boot CPUs run a routine designed to bring up SMP and deal with hot plug.
> The value contained in the SBAR registers is not initialized by a WDT
> triggered reset, which means that after a WDT triggered reset we jump
> to the SMP bring up routine, preventing the system from executing the
> bootrom code.
>
> The purpose of this patch is to jump to the bootrom code in case of a
> WDT triggered reset, and keep the SMP functionality untouched.
> In order to tell if the code had been called due to the WDT overflowing
> we are testing WOVF from register RWTCSRA.
>
> The new function shmobile_boot_vector_gen2 isn't replacing
> shmobile_boot_vector for backward compatibility reasons. The kernel
> will install the best option (either shmobile_boot_vector or
> shmobile_boot_vector_gen2) to ICRAM1 after parsing the device tree,
> according to the amount of memory available.
>
> Since shmobile_boot_vector has become bigger, "reg" property of nodes
> compatible with "renesas,smp-sram" now need to be set to a value
> greater or equal to "<0 0x60>".
>
> Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com>
> Signed-off-by: Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v5->v6:
> * taken ifdefs out as per Geert's suggestion.

My intention was to remove the #ifdefs from the header file only, not
from arch/arm/mach-shmobile/headsmp.S, as the latter is used for
other SoC families, too.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Fabrizio Castro March 14, 2018, 11:02 a.m. UTC | #3
SGkgR2VlcnQsDQoNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NiAwMS8yNl0gQVJNOiBzaG1vYmls
ZTogQWRkIHdhdGNoZG9nIHN1cHBvcnQNCj4NCj4gSGkgRmFicml6aW8sDQo+DQo+IE9uIFdlZCwg
RmViIDI4LCAyMDE4IGF0IDY6NDAgUE0sIEZhYnJpemlvIENhc3Rybw0KPiA8ZmFicml6aW8uY2Fz
dHJvQGJwLnJlbmVzYXMuY29tPiB3cm90ZToNCj4gPiBPbiBSLUNhciBHZW4yIGFuZCBSWi9HMSBw
bGF0Zm9ybXMsIHdlIHVzZSB0aGUgU0JBUiByZWdpc3RlcnMgdG8gbWFrZSBub24NCj4gPiBib290
IENQVXMgcnVuIGEgcm91dGluZSBkZXNpZ25lZCB0byBicmluZyB1cCBTTVAgYW5kIGRlYWwgd2l0
aCBob3QgcGx1Zy4NCj4gPiBUaGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBTQkFSIHJlZ2lzdGVy
cyBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgYSBXRFQNCj4gPiB0cmlnZ2VyZWQgcmVzZXQsIHdoaWNo
IG1lYW5zIHRoYXQgYWZ0ZXIgYSBXRFQgdHJpZ2dlcmVkIHJlc2V0IHdlIGp1bXANCj4gPiB0byB0
aGUgU01QIGJyaW5nIHVwIHJvdXRpbmUsIHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGV4ZWN1
dGluZyB0aGUNCj4gPiBib290cm9tIGNvZGUuDQo+ID4NCj4gPiBUaGUgcHVycG9zZSBvZiB0aGlz
IHBhdGNoIGlzIHRvIGp1bXAgdG8gdGhlIGJvb3Ryb20gY29kZSBpbiBjYXNlIG9mIGENCj4gPiBX
RFQgdHJpZ2dlcmVkIHJlc2V0LCBhbmQga2VlcCB0aGUgU01QIGZ1bmN0aW9uYWxpdHkgdW50b3Vj
aGVkLg0KPiA+IEluIG9yZGVyIHRvIHRlbGwgaWYgdGhlIGNvZGUgaGFkIGJlZW4gY2FsbGVkIGR1
ZSB0byB0aGUgV0RUIG92ZXJmbG93aW5nDQo+ID4gd2UgYXJlIHRlc3RpbmcgV09WRiBmcm9tIHJl
Z2lzdGVyIFJXVENTUkEuDQo+ID4NCj4gPiBUaGUgbmV3IGZ1bmN0aW9uIHNobW9iaWxlX2Jvb3Rf
dmVjdG9yX2dlbjIgaXNuJ3QgcmVwbGFjaW5nDQo+ID4gc2htb2JpbGVfYm9vdF92ZWN0b3IgZm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVGhlIGtlcm5lbA0KPiA+IHdpbGwgaW5z
dGFsbCB0aGUgYmVzdCBvcHRpb24gKGVpdGhlciBzaG1vYmlsZV9ib290X3ZlY3RvciBvcg0KPiA+
IHNobW9iaWxlX2Jvb3RfdmVjdG9yX2dlbjIpIHRvIElDUkFNMSBhZnRlciBwYXJzaW5nIHRoZSBk
ZXZpY2UgdHJlZSwNCj4gPiBhY2NvcmRpbmcgdG8gdGhlIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxh
YmxlLg0KPiA+DQo+ID4gU2luY2Ugc2htb2JpbGVfYm9vdF92ZWN0b3IgaGFzIGJlY29tZSBiaWdn
ZXIsICJyZWciIHByb3BlcnR5IG9mIG5vZGVzDQo+ID4gY29tcGF0aWJsZSB3aXRoICJyZW5lc2Fz
LHNtcC1zcmFtIiBub3cgbmVlZCB0byBiZSBzZXQgdG8gYSB2YWx1ZQ0KPiA+IGdyZWF0ZXIgb3Ig
ZXF1YWwgdG8gIjwwIDB4NjA+Ii4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEZhYnJpemlvIENh
c3RybyA8ZmFicml6aW8uY2FzdHJvQGJwLnJlbmVzYXMuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6
IFJhbWVzaCBTaGFubXVnYXN1bmRhcmFtIDxyYW1lc2guc2hhbm11Z2FzdW5kYXJhbUBicC5yZW5l
c2FzLmNvbT4NCj4gPiBSZXZpZXdlZC1ieTogR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydCtyZW5l
c2FzQGdsaWRlci5iZT4NCj4gPiAtLS0NCj4gPiB2NS0+djY6DQo+ID4gKiB0YWtlbiBpZmRlZnMg
b3V0IGFzIHBlciBHZWVydCdzIHN1Z2dlc3Rpb24uDQo+DQo+IE15IGludGVudGlvbiB3YXMgdG8g
cmVtb3ZlIHRoZSAjaWZkZWZzIGZyb20gdGhlIGhlYWRlciBmaWxlIG9ubHksIG5vdA0KPiBmcm9t
IGFyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC5TLCBhcyB0aGUgbGF0dGVyIGlzIHVzZWQg
Zm9yDQo+IG90aGVyIFNvQyBmYW1pbGllcywgdG9vLg0KDQpBaCBvaywgSSdsbCBzZW5kIGFub3Ro
ZXIgdmVyc2lvbiB0byByZXN0b3JlIHRoZSBpZmRlZiB3aXRoaW4gaGVhZHNtcC5TIHRoZW4uDQoN
ClRoYW5rcywNCkZhYg0KDQo+DQo+IEdye29ldGplLGVldGluZ31zLA0KPg0KPiAgICAgICAgICAg
ICAgICAgICAgICAgICBHZWVydA0KPg0KPiAtLQ0KPiBHZWVydCBVeXR0ZXJob2V2ZW4gLS0gVGhl
cmUncyBsb3RzIG9mIExpbnV4IGJleW9uZCBpYTMyIC0tIGdlZXJ0QGxpbnV4LW02OGsub3JnDQo+
DQo+IEluIHBlcnNvbmFsIGNvbnZlcnNhdGlvbnMgd2l0aCB0ZWNobmljYWwgcGVvcGxlLCBJIGNh
bGwgbXlzZWxmIGEgaGFja2VyLiBCdXQNCj4gd2hlbiBJJ20gdGFsa2luZyB0byBqb3VybmFsaXN0
cyBJIGp1c3Qgc2F5ICJwcm9ncmFtbWVyIiBvciBzb21ldGhpbmcgbGlrZSB0aGF0Lg0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIExpbnVzIFRvcnZhbGRzDQoNCg0KDQpSZW5l
c2FzIEVsZWN0cm9uaWNzIEV1cm9wZSBMdGQsIER1a2VzIE1lYWRvdywgTWlsbGJvYXJkIFJvYWQs
IEJvdXJuZSBFbmQsIEJ1Y2tpbmdoYW1zaGlyZSwgU0w4IDVGSCwgVUsuIFJlZ2lzdGVyZWQgaW4g
RW5nbGFuZCAmIFdhbGVzIHVuZGVyIFJlZ2lzdGVyZWQgTm8uIDA0NTg2NzA5Lg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-shmobile/common.h b/arch/arm/mach-shmobile/common.h
index a8fa4f7..43c1ac69 100644
--- a/arch/arm/mach-shmobile/common.h
+++ b/arch/arm/mach-shmobile/common.h
@@ -7,6 +7,10 @@  extern void shmobile_init_delay(void);
 extern void shmobile_boot_vector(void);
 extern unsigned long shmobile_boot_fn;
 extern unsigned long shmobile_boot_size;
+extern void shmobile_boot_vector_gen2(void);
+extern unsigned long shmobile_boot_fn_gen2;
+extern unsigned long shmobile_boot_cpu_gen2;
+extern unsigned long shmobile_boot_size_gen2;
 extern void shmobile_smp_boot(void);
 extern void shmobile_smp_sleep(void);
 extern void shmobile_smp_hook(unsigned int cpu, unsigned long fn,
diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S
index 32e0bf6..2ece67c 100644
--- a/arch/arm/mach-shmobile/headsmp.S
+++ b/arch/arm/mach-shmobile/headsmp.S
@@ -16,6 +16,11 @@ 
 #include <asm/assembler.h>
 #include <asm/memory.h>
 
+#define SCTLR_MMU	0x01
+#define BOOTROM_ADDRESS	0xE6340000
+#define RWTCSRA_ADDRESS 0xE6020004
+#define RWTCSRA_WOVF	0x10
+
 /*
  * Reset vector for secondary CPUs.
  * This will be mapped at address 0 by SBAR register.
@@ -38,6 +43,54 @@  shmobile_boot_size:
 	.long	. - shmobile_boot_vector
 
 /*
+ * Reset vector for R-Car Gen2 and RZ/G1 secondary CPUs.
+ * This will be mapped at address 0 by SBAR register.
+ */
+ENTRY(shmobile_boot_vector_gen2)
+	mrc	p15, 0, r0, c0, c0, 5		@ r0 = MPIDR
+	ldr	r1, shmobile_boot_cpu_gen2
+	cmp	r0, r1
+	bne	shmobile_smp_continue_gen2
+
+	mrc	p15, 0, r1, c1, c0, 0		@ r1 = SCTLR
+	and	r0, r1, #SCTLR_MMU
+	cmp	r0, #SCTLR_MMU
+	beq	shmobile_smp_continue_gen2
+
+	ldr	r0, rwtcsra
+	mov	r1, #0
+	ldrb	r1, [r0]
+	and	r0, r1, #RWTCSRA_WOVF
+	cmp	r0, #RWTCSRA_WOVF
+	bne	shmobile_smp_continue_gen2
+
+	ldr	r0, bootrom
+	bx	r0
+
+shmobile_smp_continue_gen2:
+	ldr     r1, shmobile_boot_fn_gen2
+	bx	r1
+
+ENDPROC(shmobile_boot_vector_gen2)
+
+	.align	4
+rwtcsra:
+	.word	RWTCSRA_ADDRESS
+bootrom:
+	.word	BOOTROM_ADDRESS
+	.globl	shmobile_boot_cpu_gen2
+shmobile_boot_cpu_gen2:
+	.word	0x00000000
+
+	.align	2
+	.globl	shmobile_boot_fn_gen2
+shmobile_boot_fn_gen2:
+	.space	4
+	.globl	shmobile_boot_size_gen2
+shmobile_boot_size_gen2:
+	.long	. - shmobile_boot_vector_gen2
+
+/*
  * Per-CPU SMP boot function/argument selection code based on MPIDR
  */