Message ID | 1519839622-6109-1-git-send-email-fabrizio.castro@bp.renesas.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
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
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
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 --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 */