Module Name:    src
Committed By:   skrll
Date:           Thu Dec  3 07:45:53 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64: db_machdep.c
        src/sys/arch/arm/acpi: cpu_acpi.c
        src/sys/arch/arm/arm: cpu_subr.c
        src/sys/arch/arm/arm32: db_interface.c
        src/sys/arch/arm/cortex: gic.c
        src/sys/arch/arm/fdt: cpu_fdt.c
        src/sys/arch/arm/include: cpufunc.h
        src/sys/arch/evbarm/bcm53xx: bcm53xx_machdep.c
        src/sys/arch/evbarm/beagle: beagle_machdep.c
        src/sys/arch/evbarm/gumstix: gumstix_machdep.c
        src/sys/arch/evbarm/zynq: zynq_machdep.c

Log Message:
Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/aarch64/aarch64/db_machdep.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/acpi/cpu_acpi.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/arm/cpu_subr.c
cvs rdiff -u -r1.62 -r1.63 src/sys/arch/arm/arm32/db_interface.c
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/arm/cortex/gic.c
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/fdt/cpu_fdt.c
cvs rdiff -u -r1.85 -r1.86 src/sys/arch/arm/include/cpufunc.h
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c
cvs rdiff -u -r1.85 -r1.86 src/sys/arch/evbarm/beagle/beagle_machdep.c
cvs rdiff -u -r1.70 -r1.71 src/sys/arch/evbarm/gumstix/gumstix_machdep.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/evbarm/zynq/zynq_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/db_machdep.c
diff -u src/sys/arch/aarch64/aarch64/db_machdep.c:1.28 src/sys/arch/aarch64/aarch64/db_machdep.c:1.29
--- src/sys/arch/aarch64/aarch64/db_machdep.c:1.28	Thu Oct 22 07:31:15 2020
+++ src/sys/arch/aarch64/aarch64/db_machdep.c	Thu Dec  3 07:45:51 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: db_machdep.c,v 1.28 2020/10/22 07:31:15 skrll Exp $ */
+/* $NetBSD: db_machdep.c,v 1.29 2020/12/03 07:45:51 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_machdep.c,v 1.28 2020/10/22 07:31:15 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_machdep.c,v 1.29 2020/12/03 07:45:51 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd32.h"
@@ -1050,8 +1050,8 @@ kdb_trap(int type, struct trapframe *tf)
 		if ((ncpu > 1) && (db_newcpu != NULL)) {
 			db_onproc = db_newcpu;
 			db_newcpu = NULL;
-			membar_producer();
-			__asm __volatile ("sev; sev; sev");
+			dsb(ishst);
+			sev();
 			continue;	/* redo DDB on new cpu */
 		}
 #endif /* MULTIPROCESSOR */
@@ -1062,8 +1062,8 @@ kdb_trap(int type, struct trapframe *tf)
 #ifdef MULTIPROCESSOR
 	if (ncpu > 1) {
 		db_onproc = NULL;
-		membar_producer();
-		__asm __volatile ("sev; sev; sev");
+		dsb(ishst);
+		sev();
 	}
 	db_trigger = NULL;
 	db_readytoswitch[ci->ci_index] = NULL;

Index: src/sys/arch/arm/acpi/cpu_acpi.c
diff -u src/sys/arch/arm/acpi/cpu_acpi.c:1.8 src/sys/arch/arm/acpi/cpu_acpi.c:1.9
--- src/sys/arch/arm/acpi/cpu_acpi.c:1.8	Sat Feb 15 08:16:10 2020
+++ src/sys/arch/arm/acpi/cpu_acpi.c	Thu Dec  3 07:45:51 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_acpi.c,v 1.8 2020/02/15 08:16:10 skrll Exp $ */
+/* $NetBSD: cpu_acpi.c,v 1.9 2020/12/03 07:45:51 skrll Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_acpi.c,v 1.8 2020/02/15 08:16:10 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_acpi.c,v 1.9 2020/12/03 07:45:51 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -113,7 +113,7 @@ cpu_acpi_attach(device_t parent, device_
 			return;
 		}
 
-		__asm __volatile("sev" ::: "memory");
+		sev();
 
 		for (u_int i = 0x10000000; i > 0; i--) {
 			if (cpu_hatched_p(cpuindex))

Index: src/sys/arch/arm/arm/cpu_subr.c
diff -u src/sys/arch/arm/arm/cpu_subr.c:1.2 src/sys/arch/arm/arm/cpu_subr.c:1.3
--- src/sys/arch/arm/arm/cpu_subr.c:1.2	Mon Nov 30 21:06:56 2020
+++ src/sys/arch/arm/arm/cpu_subr.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu_subr.c,v 1.2 2020/11/30 21:06:56 skrll Exp $	*/
+/*	$NetBSD: cpu_subr.c,v 1.3 2020/12/03 07:45:52 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_subr.c,v 1.2 2020/11/30 21:06:56 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_subr.c,v 1.3 2020/12/03 07:45:52 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -89,7 +89,7 @@ cpu_boot_secondary_processors(void)
 		atomic_or_ulong(&arm_cpu_mbox[n], arm_cpu_hatched[n]);
 
 	dsb(ishst);
-	__asm __volatile ("sev");
+	sev();
 
 	/* wait all cpus have done cpu_hatch() */
 	for (cpuno = 1; cpuno < ncpu; cpuno++) {
@@ -140,7 +140,7 @@ cpu_clr_mbox(int cpuindex)
 	atomic_and_ulong(&arm_cpu_mbox[off], ~bit);
 	membar_producer();
 	dsb(ishst);
-	__asm __volatile("sev");
+	sev();
 }
 
 #endif

Index: src/sys/arch/arm/arm32/db_interface.c
diff -u src/sys/arch/arm/arm32/db_interface.c:1.62 src/sys/arch/arm/arm32/db_interface.c:1.63
--- src/sys/arch/arm/arm32/db_interface.c:1.62	Tue Dec  1 02:48:29 2020
+++ src/sys/arch/arm/arm32/db_interface.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_interface.c,v 1.62 2020/12/01 02:48:29 rin Exp $	*/
+/*	$NetBSD: db_interface.c,v 1.63 2020/12/03 07:45:52 skrll Exp $	*/
 
 /*
  * Copyright (c) 1996 Scott K. Stevens
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.62 2020/12/01 02:48:29 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.63 2020/12/03 07:45:52 skrll Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -172,10 +172,8 @@ kdb_trap(int type, db_regs_t *regs)
 		if (is_mp_p && db_newcpu != NULL) {
 			db_onproc = db_newcpu;
 			db_newcpu = NULL;
-#ifdef _ARM_ARCH_6
-			membar_producer();
-			__asm __volatile("sev; sev");
-#endif
+			dsb(ishst);
+			sev();
 			continue;
 		}
 		break;
@@ -187,9 +185,8 @@ kdb_trap(int type, db_regs_t *regs)
 		 * the other CPUs to exit.
 		 */
 		db_onproc = NULL;
-#ifdef _ARM_ARCH_6
-		__asm __volatile("sev; sev");
-#endif
+		dsb(ishst);
+		sev();
 	}
 #endif
 

Index: src/sys/arch/arm/cortex/gic.c
diff -u src/sys/arch/arm/cortex/gic.c:1.42 src/sys/arch/arm/cortex/gic.c:1.43
--- src/sys/arch/arm/cortex/gic.c:1.42	Sat Sep 26 10:06:25 2020
+++ src/sys/arch/arm/cortex/gic.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: gic.c,v 1.42 2020/09/26 10:06:25 skrll Exp $	*/
+/*	$NetBSD: gic.c,v 1.43 2020/12/03 07:45:52 skrll Exp $	*/
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -34,7 +34,7 @@
 #define _INTR_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gic.c,v 1.42 2020/09/26 10:06:25 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gic.c,v 1.43 2020/12/03 07:45:52 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -539,7 +539,7 @@ armgic_ipi_send(struct pic_softc *pic, c
 
 #if 0
 	if (ipi == IPI_NOP) {
-		__asm __volatile("sev");
+		sev();
 		return;
 	}
 #endif

Index: src/sys/arch/arm/fdt/cpu_fdt.c
diff -u src/sys/arch/arm/fdt/cpu_fdt.c:1.37 src/sys/arch/arm/fdt/cpu_fdt.c:1.38
--- src/sys/arch/arm/fdt/cpu_fdt.c:1.37	Wed Nov 25 19:50:06 2020
+++ src/sys/arch/arm/fdt/cpu_fdt.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_fdt.c,v 1.37 2020/11/25 19:50:06 skrll Exp $ */
+/* $NetBSD: cpu_fdt.c,v 1.38 2020/12/03 07:45:52 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "psci_fdt.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_fdt.c,v 1.37 2020/11/25 19:50:06 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_fdt.c,v 1.38 2020/12/03 07:45:52 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -270,7 +270,7 @@ arm_fdt_cpu_mpstart(void)
 		}
 
 		/* Wake up AP in case firmware has placed it in WFE state */
-		__asm __volatile("sev" ::: "memory");
+		sev();
 
 		/* Wait for AP to start */
 		for (i = 0x10000000; i > 0; i--) {

Index: src/sys/arch/arm/include/cpufunc.h
diff -u src/sys/arch/arm/include/cpufunc.h:1.85 src/sys/arch/arm/include/cpufunc.h:1.86
--- src/sys/arch/arm/include/cpufunc.h:1.85	Sat Oct 31 13:58:22 2020
+++ src/sys/arch/arm/include/cpufunc.h	Thu Dec  3 07:45:52 2020
@@ -61,6 +61,7 @@
 #define	dsb(opt)	__asm __volatile("dsb " __STRING(opt) : : : "memory")
 #define	dmb(opt)	__asm __volatile("dmb " __STRING(opt) : : : "memory")
 #define	isb()		__asm __volatile("isb" : : : "memory")
+#define	sev()		__asm __volatile("sev" : : : "memory")
 
 #else
 
@@ -70,6 +71,7 @@
 	__asm __volatile("mcr p15, 0, %0, c7, c10, 5" :: "r" (0) : "memory")
 #define isb()		\
 	__asm __volatile("mcr p15, 0, %0, c7, c5, 4" :: "r" (0) : "memory")
+#define sev()		__nothing
 
 #endif
 

Index: src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c
diff -u src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c:1.25 src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c:1.26
--- src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c:1.25	Sat Nov 28 14:33:56 2020
+++ src/sys/arch/evbarm/bcm53xx/bcm53xx_machdep.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm53xx_machdep.c,v 1.25 2020/11/28 14:33:56 skrll Exp $	*/
+/*	$NetBSD: bcm53xx_machdep.c,v 1.26 2020/12/03 07:45:52 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #define IDM_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm53xx_machdep.c,v 1.25 2020/11/28 14:33:56 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm53xx_machdep.c,v 1.26 2020/12/03 07:45:52 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_console.h"
@@ -243,7 +243,7 @@ bcm53xx_mpstart(void)
 	bus_space_write_4(bcm53xx_rom_bst, bcm53xx_rom_entry_bsh, mpstart);
 
 	dsb(sy);
-	__asm __volatile("sev" ::: "memory");
+	sev();
 
 	/* Bitmask of CPUs (non-BP) to start */
 	for (u_int cpuindex = 1; cpuindex < arm_cpu_max; cpuindex++) {

Index: src/sys/arch/evbarm/beagle/beagle_machdep.c
diff -u src/sys/arch/evbarm/beagle/beagle_machdep.c:1.85 src/sys/arch/evbarm/beagle/beagle_machdep.c:1.86
--- src/sys/arch/evbarm/beagle/beagle_machdep.c:1.85	Fri Oct 30 18:54:37 2020
+++ src/sys/arch/evbarm/beagle/beagle_machdep.c	Thu Dec  3 07:45:52 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: beagle_machdep.c,v 1.85 2020/10/30 18:54:37 skrll Exp $ */
+/*	$NetBSD: beagle_machdep.c,v 1.86 2020/12/03 07:45:52 skrll Exp $ */
 
 /*
  * Machine dependent functions for kernel setup for TI OSK5912 board.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: beagle_machdep.c,v 1.85 2020/10/30 18:54:37 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: beagle_machdep.c,v 1.86 2020/12/03 07:45:52 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_console.h"
@@ -488,7 +488,7 @@ beagle_mpstart(void)
 
 
 	dsb(sy);
-	__asm __volatile("sev" ::: "memory");
+	sev();
 
 	u_int hatched = 0;
 	for (u_int cpuindex = 1; cpuindex < arm_cpu_max; cpuindex++) {

Index: src/sys/arch/evbarm/gumstix/gumstix_machdep.c
diff -u src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.70 src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.71
--- src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.70	Sat Nov 28 14:33:56 2020
+++ src/sys/arch/evbarm/gumstix/gumstix_machdep.c	Thu Dec  3 07:45:53 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: gumstix_machdep.c,v 1.70 2020/11/28 14:33:56 skrll Exp $ */
+/*	$NetBSD: gumstix_machdep.c,v 1.71 2020/12/03 07:45:53 skrll Exp $ */
 /*
  * Copyright (C) 2005, 2006, 2007  WIDE Project and SOUM Corporation.
  * All rights reserved.
@@ -538,7 +538,7 @@ gumstix_mpstart(void)
 	}
 
 	dsb(sy);
-	__asm __volatile("sev" ::: "memory");
+	sev();
 
 	u_int i;
 	for (i = 0x10000000; i > 0; i--) {

Index: src/sys/arch/evbarm/zynq/zynq_machdep.c
diff -u src/sys/arch/evbarm/zynq/zynq_machdep.c:1.15 src/sys/arch/evbarm/zynq/zynq_machdep.c:1.16
--- src/sys/arch/evbarm/zynq/zynq_machdep.c:1.15	Sat Nov 28 14:33:57 2020
+++ src/sys/arch/evbarm/zynq/zynq_machdep.c	Thu Dec  3 07:45:53 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: zynq_machdep.c,v 1.15 2020/11/28 14:33:57 skrll Exp $	*/
+/*	$NetBSD: zynq_machdep.c,v 1.16 2020/12/03 07:45:53 skrll Exp $	*/
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zynq_machdep.c,v 1.15 2020/11/28 14:33:57 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zynq_machdep.c,v 1.16 2020/12/03 07:45:53 skrll Exp $");
 
 #include "opt_evbarm_boardtype.h"
 #include "opt_arm_debug.h"
@@ -221,7 +221,7 @@ zynq_mpstart(void)
 	bus_space_unmap(bst, bsh, ZYNQ7000_CPU1_ENTRY_SZ);
 
 	dsb(sy);
-	__asm __volatile("sev" ::: "memory");
+	sev();
 
 	u_int cpuindex = 1;
 	u_int i;

Reply via email to