Module Name: src Committed By: skrll Date: Sun Oct 31 16:23:48 UTC 2021
Modified Files: src/sys/arch/aarch64/aarch64: aarch64_machdep.c cpu.c cpufunc.c db_machdep.c locore.S src/sys/arch/aarch64/include: cpu.h cpufunc.h db_machdep.h src/sys/arch/arm/apple: apple_intc.c src/sys/arch/arm/arm: cpu_subr.c undefined.c src/sys/arch/arm/arm32: arm32_boot.c arm32_machdep.c cpu.c src/sys/arch/arm/broadcom: bcm2835_intr.c src/sys/arch/arm/cortex: gicv3_its.c gicv3_its.h gtmr.c src/sys/arch/arm/include: cpu.h locore.h undefined.h src/sys/arch/arm/pic: pic.c src/sys/arch/arm/vfp: vfp_init.c Log Message: Rework Arm (32bit and 64bit) AP startup so that cpu_hatch doesn't sleep. The AP initialisation code in cpu_init_secondary_processor will read and initialise the required system registers and state for the BP to attach and report. Rework the interrupt handler code for this new sequence. Thankfully, this removes a bunch of code for bcm2836mp. The VFP detection handler on <= armv7 relies on the global undefined handler being in place until the BP attaches vfp. That is, after the APs have been spun up. gicv3_its.c has a serialisation issue which is protected against in the gicv3_its_cpu_init, which is called from cpu_hatch, with a spin lock. The serialisation issue needs addressing more completely. Tested on RPI3, Apple M1, QEMU, and lx2k Fixes PR port-arm/56264: diagnostic assertion "l->l_stat == LSONPROC" failed on RPI3 To generate a diff of this commit: cvs rdiff -u -r1.62 -r1.63 src/sys/arch/aarch64/aarch64/aarch64_machdep.c cvs rdiff -u -r1.66 -r1.67 src/sys/arch/aarch64/aarch64/cpu.c cvs rdiff -u -r1.31 -r1.32 src/sys/arch/aarch64/aarch64/cpufunc.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/aarch64/aarch64/db_machdep.c cvs rdiff -u -r1.81 -r1.82 src/sys/arch/aarch64/aarch64/locore.S cvs rdiff -u -r1.42 -r1.43 src/sys/arch/aarch64/include/cpu.h cvs rdiff -u -r1.21 -r1.22 src/sys/arch/aarch64/include/cpufunc.h cvs rdiff -u -r1.14 -r1.15 src/sys/arch/aarch64/include/db_machdep.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/apple/apple_intc.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/arm/cpu_subr.c cvs rdiff -u -r1.71 -r1.72 src/sys/arch/arm/arm/undefined.c cvs rdiff -u -r1.43 -r1.44 src/sys/arch/arm/arm32/arm32_boot.c cvs rdiff -u -r1.140 -r1.141 src/sys/arch/arm/arm32/arm32_machdep.c cvs rdiff -u -r1.151 -r1.152 src/sys/arch/arm/arm32/cpu.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/arm/broadcom/bcm2835_intr.c cvs rdiff -u -r1.32 -r1.33 src/sys/arch/arm/cortex/gicv3_its.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/cortex/gicv3_its.h cvs rdiff -u -r1.45 -r1.46 src/sys/arch/arm/cortex/gtmr.c cvs rdiff -u -r1.119 -r1.120 src/sys/arch/arm/include/cpu.h cvs rdiff -u -r1.36 -r1.37 src/sys/arch/arm/include/locore.h cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/include/undefined.h cvs rdiff -u -r1.72 -r1.73 src/sys/arch/arm/pic/pic.c cvs rdiff -u -r1.75 -r1.76 src/sys/arch/arm/vfp/vfp_init.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.