Module Name:    src
Committed By:   hkenken
Date:           Tue Jun  5 08:03:29 UTC 2018

Modified Files:
        src/sys/arch/arm/broadcom: bcm53xx_board.c
        src/sys/arch/arm/cortex: a9tmr.c a9tmr_var.h armperiph.c files.cortex
        src/sys/arch/arm/fdt: files.fdt
        src/sys/arch/arm/zynq: zynq7000_board.c
        src/sys/arch/evbarm/amlogic: amlogic_machdep.c
        src/sys/arch/evbarm/beagle: beagle_machdep.c
        src/sys/arch/evbarm/conf: BCM5301X BCM56340 CUBOX-I DUOVERO GOLDENGATE
            HUMMINGBOARD NITROGEN6X ODROID-C1 PANDABOARD PARALLELLA ZEDBOARD
        src/sys/arch/evbarm/gumstix: gumstix_machdep.c
        src/sys/dev: DEVNAMES
Added Files:
        src/sys/arch/arm/fdt: a9tmr_fdt.c

Log Message:
Rename ARM A9 Global Timer driver name to support fdt.

- Rename a9tmr to arma9tmr.
- Add a9tmr_fdt.c based gtmr_fdt.c.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/broadcom/bcm53xx_board.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/cortex/a9tmr.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/cortex/a9tmr_var.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/cortex/armperiph.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/cortex/files.cortex
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/fdt/a9tmr_fdt.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/fdt/files.fdt
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/zynq/zynq7000_board.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/evbarm/amlogic/amlogic_machdep.c
cvs rdiff -u -r1.68 -r1.69 src/sys/arch/evbarm/beagle/beagle_machdep.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/evbarm/conf/BCM5301X
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/evbarm/conf/BCM56340 \
    src/sys/arch/evbarm/conf/NITROGEN6X
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/evbarm/conf/CUBOX-I
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/evbarm/conf/DUOVERO
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/evbarm/conf/GOLDENGATE
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/evbarm/conf/HUMMINGBOARD \
    src/sys/arch/evbarm/conf/PARALLELLA src/sys/arch/evbarm/conf/ZEDBOARD
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/evbarm/conf/ODROID-C1
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/evbarm/conf/PANDABOARD
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/evbarm/gumstix/gumstix_machdep.c
cvs rdiff -u -r1.310 -r1.311 src/sys/dev/DEVNAMES

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/arm/broadcom/bcm53xx_board.c
diff -u src/sys/arch/arm/broadcom/bcm53xx_board.c:1.23 src/sys/arch/arm/broadcom/bcm53xx_board.c:1.24
--- src/sys/arch/arm/broadcom/bcm53xx_board.c:1.23	Thu Oct 20 09:53:07 2016
+++ src/sys/arch/arm/broadcom/bcm53xx_board.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm53xx_board.c,v 1.23 2016/10/20 09:53:07 skrll Exp $	*/
+/*	$NetBSD: bcm53xx_board.c,v 1.24 2018/06/05 08:03:28 hkenken Exp $	*/
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_board.c,v 1.23 2016/10/20 09:53:07 skrll Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_board.c,v 1.24 2018/06/05 08:03:28 hkenken Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -615,7 +615,7 @@ bcm53xx_device_register(device_t self, v
 	 * We need to tell the A9 Global/Watchdog Timer
 	 * what frequency it runs at.
 	 */
-	if (device_is_a(self, "a9tmr") || device_is_a(self, "a9wdt")) {
+	if (device_is_a(self, "arma9tmr") || device_is_a(self, "a9wdt")) {
 		/*
 		 * This clock always runs at (arm_clk div 2) and only goes
 		 * to timers that are part of the A9 MP core subsystem.

Index: src/sys/arch/arm/cortex/a9tmr.c
diff -u src/sys/arch/arm/cortex/a9tmr.c:1.14 src/sys/arch/arm/cortex/a9tmr.c:1.15
--- src/sys/arch/arm/cortex/a9tmr.c:1.14	Fri Jul 24 05:20:01 2015
+++ src/sys/arch/arm/cortex/a9tmr.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: a9tmr.c,v 1.14 2015/07/24 05:20:01 ryo Exp $	*/
+/*	$NetBSD: a9tmr.c,v 1.15 2018/06/05 08:03:28 hkenken Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: a9tmr.c,v 1.14 2015/07/24 05:20:01 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: a9tmr.c,v 1.15 2018/06/05 08:03:28 hkenken Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -52,8 +52,6 @@ __KERNEL_RCSID(0, "$NetBSD: a9tmr.c,v 1.
 static int a9tmr_match(device_t, cfdata_t, void *);
 static void a9tmr_attach(device_t, device_t, void *);
 
-static int clockhandler(void *);
-
 static u_int a9tmr_get_timecount(struct timecounter *);
 
 static struct a9tmr_softc a9tmr_sc;
@@ -69,7 +67,7 @@ static struct timecounter a9tmr_timecoun
 	.tc_next = NULL,
 };
 
-CFATTACH_DECL_NEW(a9tmr, 0, a9tmr_match, a9tmr_attach, NULL, NULL);
+CFATTACH_DECL_NEW(arma9tmr, 0, a9tmr_match, a9tmr_attach, NULL, NULL);
 
 static inline uint32_t
 a9tmr_global_read(struct a9tmr_softc *sc, bus_size_t o)
@@ -126,7 +124,10 @@ a9tmr_attach(device_t parent, device_t s
 	 * This runs at the ARM PERIPHCLOCK which should be 1/2 of the CPU clock.
 	 * The MD code should have setup our frequency for us.
 	 */
-	prop_dictionary_get_uint32(dict, "frequency", &sc->sc_freq);
+	if (!prop_dictionary_get_uint32(dict, "frequency", &sc->sc_freq)) {
+		dict = device_properties(parent);
+		prop_dictionary_get_uint32(dict, "frequency", &sc->sc_freq);
+	}
 
 	humanize_number(freqbuf, sizeof(freqbuf), sc->sc_freq, "Hz", 1000);
 
@@ -153,12 +154,14 @@ a9tmr_attach(device_t parent, device_t s
 	bus_space_subregion(sc->sc_memt, sc->sc_memh, 
 	    TMR_WDOG_BASE, TMR_WDOG_SIZE, &sc->sc_wdog_memh);
 
-	sc->sc_global_ih = intr_establish(IRQ_A9TMR_PPI_GTIMER, IPL_CLOCK,
-	    IST_EDGE | IST_MPSAFE, clockhandler, NULL);
-	if (sc->sc_global_ih == NULL)
-		panic("%s: unable to register timer interrupt", __func__);
-	aprint_normal_dev(sc->sc_dev, "interrupting on irq %d\n",
-	    IRQ_A9TMR_PPI_GTIMER);
+	if (mpcaa->mpcaa_irq != -1) {
+		sc->sc_global_ih = intr_establish(mpcaa->mpcaa_irq, IPL_CLOCK,
+		    IST_EDGE | IST_MPSAFE, a9tmr_intr, NULL);
+		if (sc->sc_global_ih == NULL)
+			panic("%s: unable to register timer interrupt", __func__);
+		aprint_normal_dev(sc->sc_dev, "interrupting on irq %d\n",
+		    mpcaa->mpcaa_irq);
+	}
 }
 
 static inline uint64_t
@@ -241,7 +244,7 @@ a9tmr_init_cpu_clock(struct cpu_info *ci
 }
 
 void
-cpu_initclocks(void)
+a9tmr_cpu_initclocks(void)
 {
 	struct a9tmr_softc * const sc = &a9tmr_sc;
 
@@ -312,12 +315,12 @@ a9tmr_delay(unsigned int n)
 }
 
 /*
- * clockhandler:
+ * a9tmr_intr:
  *
  *	Handle the hardclock interrupt.
  */
-static int
-clockhandler(void *arg)
+int
+a9tmr_intr(void *arg)
 {
 	struct clockframe * const cf = arg;
 	struct a9tmr_softc * const sc = &a9tmr_sc;

Index: src/sys/arch/arm/cortex/a9tmr_var.h
diff -u src/sys/arch/arm/cortex/a9tmr_var.h:1.4 src/sys/arch/arm/cortex/a9tmr_var.h:1.5
--- src/sys/arch/arm/cortex/a9tmr_var.h:1.4	Fri Jan  2 21:58:03 2015
+++ src/sys/arch/arm/cortex/a9tmr_var.h	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: a9tmr_var.h,v 1.4 2015/01/02 21:58:03 jmcneill Exp $ */
+/* $NetBSD: a9tmr_var.h,v 1.5 2018/06/05 08:03:28 hkenken Exp $ */
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -45,8 +45,15 @@ struct a9tmr_softc {
 };
 
 #ifdef _KERNEL
+#include "opt_arm_timer.h"
 struct cpu_info;
 void	a9tmr_init_cpu_clock(struct cpu_info *);
+#ifdef __HAVE_GENERIC_CPU_INITCLOCKS
+void	a9tmr_cpu_initclocks(void);
+#else
+#define a9tmr_cpu_initclocks	cpu_initclocks
+#endif
+int	a9tmr_intr(void *);
 void	a9tmr_update_freq(uint32_t);
 void	a9tmr_delay(unsigned int n);
 #endif

Index: src/sys/arch/arm/cortex/armperiph.c
diff -u src/sys/arch/arm/cortex/armperiph.c:1.12 src/sys/arch/arm/cortex/armperiph.c:1.13
--- src/sys/arch/arm/cortex/armperiph.c:1.12	Fri Dec 29 11:06:26 2017
+++ src/sys/arch/arm/cortex/armperiph.c	Tue Jun  5 08:03:28 2018
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: armperiph.c,v 1.12 2017/12/29 11:06:26 skrll Exp $");
+__KERNEL_RCSID(1, "$NetBSD: armperiph.c,v 1.13 2018/06/05 08:03:28 hkenken Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -62,11 +62,11 @@ struct armperiph_info {
 
 #ifdef CPU_CORTEXA5
 static const struct armperiph_info a5_devices[] = {
-	{ "armscu", 0x0000, 0 },
-	{ "armgic", 0x1000, 0x0100 },
-	{ "a9tmr",  0x0200, 0 },
-	{ "a9wdt",   0x0600, 0 },
-	{ "arml2cc", 0, 0 },	/* external; needs "offset" property */
+	{ "armscu",   0x0000, 0 },
+	{ "armgic",   0x1000, 0x0100 },
+	{ "arma9tmr", 0x0200, 0 },
+	{ "a9wdt",    0x0600, 0 },
+	{ "arml2cc",  0, 0 },	/* external; needs "offset" property */
 	{ "", 0, 0 },
 };
 #endif
@@ -81,11 +81,11 @@ static const struct armperiph_info a7_de
 
 #ifdef CPU_CORTEXA9
 static const struct armperiph_info a9_devices[] = {
-	{ "armscu",  0x0000, 0 },
-	{ "arml2cc", 0x2000, 0 },
-	{ "armgic",  0x1000, 0x0100 },
-	{ "a9tmr",   0x0200, 0 },
-	{ "a9wdt",   0x0600, 0 },
+	{ "armscu",   0x0000, 0 },
+	{ "arml2cc",  0x2000, 0 },
+	{ "armgic",   0x1000, 0x0100 },
+	{ "arma9tmr", 0x0200, 0 },
+	{ "a9wdt",    0x0600, 0 },
 	{ "", 0, 0 },
 };
 #endif
@@ -229,6 +229,10 @@ armperiph_attach(device_t parent, device
 			.mpcaa_off1 = cfg->cfg_devices[i].pi_off1,
 			.mpcaa_off2 = cfg->cfg_devices[i].pi_off2,
 		};
+#if defined(CPU_CORTEXA9)
+		if (strcmp(mpcaa.mpcaa_name, "arma9tmr") == 0)
+			mpcaa.mpcaa_irq = IRQ_A9TMR_PPI_GTIMER;
+#endif
 #if defined(CPU_CORTEXA7) || defined(CPU_CORTEXA15) || defined(CPU_CORTEXA57)
 		if (strcmp(mpcaa.mpcaa_name, "armgtmr") == 0) {
 			mpcaa.mpcaa_irq = IRQ_GTMR_PPI_VTIMER;

Index: src/sys/arch/arm/cortex/files.cortex
diff -u src/sys/arch/arm/cortex/files.cortex:1.6 src/sys/arch/arm/cortex/files.cortex:1.7
--- src/sys/arch/arm/cortex/files.cortex:1.6	Sun May 28 00:32:46 2017
+++ src/sys/arch/arm/cortex/files.cortex	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-# $NetBSD: files.cortex,v 1.6 2017/05/28 00:32:46 jmcneill Exp $
+# $NetBSD: files.cortex,v 1.7 2018/06/05 08:03:28 hkenken Exp $
 
 defflag opt_cpu_in_cksum.h			NEON_IN_CKSUM
 
@@ -27,9 +27,9 @@ attach	armgtmr at mpcorebus
 file	arch/arm/cortex/gtmr.c			armgtmr
 
 # A9 MPCore Global Timer
-device	a9tmr
-attach	a9tmr at mpcorebus
-file	arch/arm/cortex/a9tmr.c			a9tmr
+device	arma9tmr
+attach	arma9tmr at mpcorebus
+file	arch/arm/cortex/a9tmr.c			arma9tmr
 
 # A9 MPcore Watchdog Timer
 device	a9wdt: sysmon_wdog

Index: src/sys/arch/arm/fdt/files.fdt
diff -u src/sys/arch/arm/fdt/files.fdt:1.15 src/sys/arch/arm/fdt/files.fdt:1.16
--- src/sys/arch/arm/fdt/files.fdt:1.15	Mon Feb 19 16:10:42 2018
+++ src/sys/arch/arm/fdt/files.fdt	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-# $NetBSD: files.fdt,v 1.15 2018/02/19 16:10:42 jmcneill Exp $
+# $NetBSD: files.fdt,v 1.16 2018/06/05 08:03:28 hkenken Exp $
 
 include	"dev/pckbport/files.pckbport"
 
@@ -13,6 +13,10 @@ device	cpufreqdt
 attach	cpufreqdt at cpu with cpufreq_dt
 file	dev/fdt/cpufreq_dt.c			cpufreq_dt
 
+device	a9tmr: mpcorebus
+attach	a9tmr at fdt with a9tmr_fdt
+file	arch/arm/fdt/a9tmr_fdt.c		a9tmr_fdt
+
 device	gtmr: mpcorebus
 attach	gtmr at fdt with gtmr_fdt
 file	arch/arm/fdt/gtmr_fdt.c			gtmr_fdt

Index: src/sys/arch/arm/zynq/zynq7000_board.c
diff -u src/sys/arch/arm/zynq/zynq7000_board.c:1.2 src/sys/arch/arm/zynq/zynq7000_board.c:1.3
--- src/sys/arch/arm/zynq/zynq7000_board.c:1.2	Thu Oct 20 09:53:07 2016
+++ src/sys/arch/arm/zynq/zynq7000_board.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: zynq7000_board.c,v 1.2 2016/10/20 09:53:07 skrll Exp $	*/
+/*	$NetBSD: zynq7000_board.c,v 1.3 2018/06/05 08:03:28 hkenken Exp $	*/
 /*-
  * Copyright (c) 2015  Genetec Corporation.  All rights reserved.
  * Written by Hashimoto Kenichi for Genetec Corporation.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: zynq7000_board.c,v 1.2 2016/10/20 09:53:07 skrll Exp $");
+__KERNEL_RCSID(1, "$NetBSD: zynq7000_board.c,v 1.3 2018/06/05 08:03:28 hkenken Exp $");
 
 #include "opt_zynq.h"
 #include "arml2cc.h"
@@ -124,7 +124,7 @@ zynq7000_device_register(device_t self, 
 	 * We need to tell the A9 Global/Watchdog Timer
 	 * what frequency it runs at.
 	 */
-	if (device_is_a(self, "a9tmr") || device_is_a(self, "a9wdt")) {
+	if (device_is_a(self, "arma9tmr") || device_is_a(self, "a9wdt")) {
 		prop_dictionary_set_uint32(dict, "frequency",
 		    666666666 / PERIPHCLK_N);
 		return;

Index: src/sys/arch/evbarm/amlogic/amlogic_machdep.c
diff -u src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.21 src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.22
--- src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.21	Sat Aug  8 13:54:05 2015
+++ src/sys/arch/evbarm/amlogic/amlogic_machdep.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: amlogic_machdep.c,v 1.21 2015/08/08 13:54:05 jmcneill Exp $ */
+/*	$NetBSD: amlogic_machdep.c,v 1.22 2018/06/05 08:03:28 hkenken Exp $ */
 
 /*
  * Machine dependent functions for kernel setup for TI OSK5912 board.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amlogic_machdep.c,v 1.21 2015/08/08 13:54:05 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amlogic_machdep.c,v 1.22 2018/06/05 08:03:28 hkenken Exp $");
 
 #include "opt_machdep.h"
 #include "opt_ddb.h"
@@ -525,7 +525,7 @@ amlogic_device_register(device_t self, v
 	 * We need to tell the A9 Global/Watchdog Timer
 	 * what frequency it runs at.
 	 */
-	if (device_is_a(self, "a9tmr") || device_is_a(self, "a9wdt")) {
+	if (device_is_a(self, "arma9tmr") || device_is_a(self, "a9wdt")) {
                 prop_dictionary_set_uint32(dict, "frequency",
 		    amlogic_get_rate_a9periph());
 

Index: src/sys/arch/evbarm/beagle/beagle_machdep.c
diff -u src/sys/arch/evbarm/beagle/beagle_machdep.c:1.68 src/sys/arch/evbarm/beagle/beagle_machdep.c:1.69
--- src/sys/arch/evbarm/beagle/beagle_machdep.c:1.68	Thu Oct 20 09:53:08 2016
+++ src/sys/arch/evbarm/beagle/beagle_machdep.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: beagle_machdep.c,v 1.68 2016/10/20 09:53:08 skrll Exp $ */
+/*	$NetBSD: beagle_machdep.c,v 1.69 2018/06/05 08:03:28 hkenken 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.68 2016/10/20 09:53:08 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: beagle_machdep.c,v 1.69 2018/06/05 08:03:28 hkenken Exp $");
 
 #include "opt_machdep.h"
 #include "opt_ddb.h"
@@ -981,7 +981,7 @@ beagle_device_register(device_t self, vo
 	 * We need to tell the A9 Global/Watchdog Timer
 	 * what frequency it runs at.
 	 */
-	if (device_is_a(self, "a9tmr") || device_is_a(self, "a9wdt")) {
+	if (device_is_a(self, "arma9tmr") || device_is_a(self, "a9wdt")) {
 		/*
 		 * This clock always runs at (arm_clk div 2) and only goes
 		 * to timers that are part of the A9 MP core subsystem.

Index: src/sys/arch/evbarm/conf/BCM5301X
diff -u src/sys/arch/evbarm/conf/BCM5301X:1.29 src/sys/arch/evbarm/conf/BCM5301X:1.30
--- src/sys/arch/evbarm/conf/BCM5301X:1.29	Thu Sep 14 07:58:40 2017
+++ src/sys/arch/evbarm/conf/BCM5301X	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: BCM5301X,v 1.29 2017/09/14 07:58:40 mrg Exp $
+#	$NetBSD: BCM5301X,v 1.30 2018/06/05 08:03:28 hkenken Exp $
 #
 #	BCM5301X -- Broadcom BCM5301X Eval Board Kernel
 #
@@ -171,7 +171,7 @@ cpu0		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0		at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 a9wdt0		at armperiph? flags 1	# A9 Watchdog Timer
 
 # ChipCommonA Peripherals

Index: src/sys/arch/evbarm/conf/BCM56340
diff -u src/sys/arch/evbarm/conf/BCM56340:1.14 src/sys/arch/evbarm/conf/BCM56340:1.15
--- src/sys/arch/evbarm/conf/BCM56340:1.14	Thu Sep 14 07:58:40 2017
+++ src/sys/arch/evbarm/conf/BCM56340	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: BCM56340,v 1.14 2017/09/14 07:58:40 mrg Exp $
+#	$NetBSD: BCM56340,v 1.15 2018/06/05 08:03:28 hkenken Exp $
 #
 #	BCM5301X -- Broadcom BCM5301X Eval Board Kernel
 #
@@ -171,7 +171,7 @@ cpu0		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0		at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 a9wdt0		at armperiph? flags 1	# A9 Watchdog Timer
 
 # ChipCommonA Peripherals
Index: src/sys/arch/evbarm/conf/NITROGEN6X
diff -u src/sys/arch/evbarm/conf/NITROGEN6X:1.14 src/sys/arch/evbarm/conf/NITROGEN6X:1.15
--- src/sys/arch/evbarm/conf/NITROGEN6X:1.14	Thu Nov  9 05:57:23 2017
+++ src/sys/arch/evbarm/conf/NITROGEN6X	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-# $NetBSD: NITROGEN6X,v 1.14 2017/11/09 05:57:23 hkenken Exp $
+# $NetBSD: NITROGEN6X,v 1.15 2018/06/05 08:03:28 hkenken Exp $
 #
 # Nitrogen6X
 # - http://boundarydevices.com/products/nitrogen6x-board-imx6-arm-cortex-a9-sbc/
@@ -187,7 +187,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0 	at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 #a9wdt0		at armperiph? flags 0	# A9 Watchdog Timer
 
 axi0		at mainbus?

Index: src/sys/arch/evbarm/conf/CUBOX-I
diff -u src/sys/arch/evbarm/conf/CUBOX-I:1.12 src/sys/arch/evbarm/conf/CUBOX-I:1.13
--- src/sys/arch/evbarm/conf/CUBOX-I:1.12	Thu Nov  9 05:57:23 2017
+++ src/sys/arch/evbarm/conf/CUBOX-I	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-# $NetBSD: CUBOX-I,v 1.12 2017/11/09 05:57:23 hkenken Exp $
+# $NetBSD: CUBOX-I,v 1.13 2018/06/05 08:03:28 hkenken Exp $
 #
 # CuBox-i
 # - http://www.solid-run.com/products/cubox-i-mini-computer/
@@ -198,7 +198,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0 	at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 #a9wdt0		at armperiph? flags 0	# A9 Watchdog Timer
 
 axi0		at mainbus?

Index: src/sys/arch/evbarm/conf/DUOVERO
diff -u src/sys/arch/evbarm/conf/DUOVERO:1.7 src/sys/arch/evbarm/conf/DUOVERO:1.8
--- src/sys/arch/evbarm/conf/DUOVERO:1.7	Tue Mar 13 06:21:59 2018
+++ src/sys/arch/evbarm/conf/DUOVERO	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: DUOVERO,v 1.7 2018/03/13 06:21:59 ryo Exp $
+#	$NetBSD: DUOVERO,v 1.8 2018/06/05 08:03:28 hkenken Exp $
 #
 #	DUOOVERO -- Gumstix. Inc. DuoVero COMS platforms kernel
 #
@@ -155,7 +155,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?
 arml2cc0	at armperiph?				# L2 Cache Controller
 armgic0		at armperiph?				# Interrupt Controller
-a9tmr0		at armperiph?				# Global Timer
+arma9tmr0	at armperiph?				# Global Timer
 a9wdt0		at armperiph?				# Watchdog
 
 # L3 Interconnect

Index: src/sys/arch/evbarm/conf/GOLDENGATE
diff -u src/sys/arch/evbarm/conf/GOLDENGATE:1.16 src/sys/arch/evbarm/conf/GOLDENGATE:1.17
--- src/sys/arch/evbarm/conf/GOLDENGATE:1.16	Thu Sep 14 07:58:40 2017
+++ src/sys/arch/evbarm/conf/GOLDENGATE	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: GOLDENGATE,v 1.16 2017/09/14 07:58:40 mrg Exp $
+#	$NetBSD: GOLDENGATE,v 1.17 2018/06/05 08:03:28 hkenken Exp $
 #
 #	GOLDENGATE -- Cortina GOLDENGATE Eval Board Kernel
 #
@@ -167,7 +167,7 @@ cpu0		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0		at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 a9wdt0		at armperiph? flags 1	# A9 Watchdog Timer
 
 # Peripherals

Index: src/sys/arch/evbarm/conf/HUMMINGBOARD
diff -u src/sys/arch/evbarm/conf/HUMMINGBOARD:1.3 src/sys/arch/evbarm/conf/HUMMINGBOARD:1.4
--- src/sys/arch/evbarm/conf/HUMMINGBOARD:1.3	Sat Nov 25 04:53:24 2017
+++ src/sys/arch/evbarm/conf/HUMMINGBOARD	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: HUMMINGBOARD,v 1.3 2017/11/25 04:53:24 christos Exp $
+#	$NetBSD: HUMMINGBOARD,v 1.4 2018/06/05 08:03:28 hkenken Exp $
 #
 #	Hummingboard -- Freescale i.MX6 Eval Board Kernel
 #
@@ -54,7 +54,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0 	at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 #a9wdt0		at armperiph? flags 0	# A9 Watchdog Timer
 
 axi0		at mainbus?
Index: src/sys/arch/evbarm/conf/PARALLELLA
diff -u src/sys/arch/evbarm/conf/PARALLELLA:1.3 src/sys/arch/evbarm/conf/PARALLELLA:1.4
--- src/sys/arch/evbarm/conf/PARALLELLA:1.3	Sat Nov 25 04:53:24 2017
+++ src/sys/arch/evbarm/conf/PARALLELLA	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: PARALLELLA,v 1.3 2017/11/25 04:53:24 christos Exp $
+#	$NetBSD: PARALLELLA,v 1.4 2018/06/05 08:03:28 hkenken Exp $
 #
 #	Parallella -- Xilinx Zynq Eval Board Kernel
 #
@@ -58,7 +58,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0 	at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 #a9wdt0		at armperiph? flags 0	# A9 Watchdog Timer
 
 axi0		at mainbus?
Index: src/sys/arch/evbarm/conf/ZEDBOARD
diff -u src/sys/arch/evbarm/conf/ZEDBOARD:1.3 src/sys/arch/evbarm/conf/ZEDBOARD:1.4
--- src/sys/arch/evbarm/conf/ZEDBOARD:1.3	Sat Nov 25 04:53:24 2017
+++ src/sys/arch/evbarm/conf/ZEDBOARD	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: ZEDBOARD,v 1.3 2017/11/25 04:53:24 christos Exp $
+#	$NetBSD: ZEDBOARD,v 1.4 2018/06/05 08:03:28 hkenken Exp $
 #
 #	ZedBoard -- Xilinx Zynq Eval Board Kernel
 #
@@ -57,7 +57,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?		# A9 On-Chip Peripherals
 armgic0 	at armperiph?		# ARM Generic Interrupt Controller
 arml2cc0	at armperiph? flags 0	# ARM PL310 L2CC
-a9tmr0		at armperiph?		# A9 Global Timer
+arma9tmr0	at armperiph?		# A9 Global Timer
 #a9wdt0		at armperiph? flags 0	# A9 Watchdog Timer
 
 axi0		at mainbus?

Index: src/sys/arch/evbarm/conf/ODROID-C1
diff -u src/sys/arch/evbarm/conf/ODROID-C1:1.22 src/sys/arch/evbarm/conf/ODROID-C1:1.23
--- src/sys/arch/evbarm/conf/ODROID-C1:1.22	Mon Mar 20 14:06:43 2017
+++ src/sys/arch/evbarm/conf/ODROID-C1	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: ODROID-C1,v 1.22 2017/03/20 14:06:43 skrll Exp $
+#	$NetBSD: ODROID-C1,v 1.23 2018/06/05 08:03:28 hkenken Exp $
 #
 #	Hardkernel ODROID-C1 (Amlogic S805) based SBC (Single Board Computer)
 #
@@ -24,7 +24,7 @@ cpu*		at mainbus?
 armperiph0	at mainbus?
 arml2cc0	at armperiph?				# L2 Cache Controller
 armgic0		at armperiph?				# Interrupt Controller
-a9tmr0		at armperiph?				# Global Timer
+arma9tmr0	at armperiph?				# Global Timer
 a9wdt0		at armperiph?				# Watchdog
 
 # On-board I/O

Index: src/sys/arch/evbarm/conf/PANDABOARD
diff -u src/sys/arch/evbarm/conf/PANDABOARD:1.24 src/sys/arch/evbarm/conf/PANDABOARD:1.25
--- src/sys/arch/evbarm/conf/PANDABOARD:1.24	Thu Sep 14 07:58:40 2017
+++ src/sys/arch/evbarm/conf/PANDABOARD	Tue Jun  5 08:03:28 2018
@@ -1,5 +1,5 @@
 #
-#	$NetBSD: PANDABOARD,v 1.24 2017/09/14 07:58:40 mrg Exp $
+#	$NetBSD: PANDABOARD,v 1.25 2018/06/05 08:03:28 hkenken Exp $
 #
 #	PANDABOARD -- TI OMAP 4430 Eval Board Kernel
 #
@@ -153,7 +153,7 @@ cpu0		at mainbus?
 armperiph0	at mainbus?
 arml2cc0	at armperiph?				# L2 Cache Controller
 armgic0		at armperiph?				# Interrupt Controller
-a9tmr0		at armperiph?				# Global Timer
+arma9tmr0	at armperiph?				# Global Timer
 a9wdt0		at armperiph?				# Watchdog
 
 # Specify the memory size in megabytes.

Index: src/sys/arch/evbarm/gumstix/gumstix_machdep.c
diff -u src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.58 src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.59
--- src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.58	Wed Mar  1 16:44:54 2017
+++ src/sys/arch/evbarm/gumstix/gumstix_machdep.c	Tue Jun  5 08:03:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: gumstix_machdep.c,v 1.58 2017/03/01 16:44:54 skrll Exp $ */
+/*	$NetBSD: gumstix_machdep.c,v 1.59 2018/06/05 08:03:28 hkenken Exp $ */
 /*
  * Copyright (C) 2005, 2006, 2007  WIDE Project and SOUM Corporation.
  * All rights reserved.
@@ -1051,7 +1051,7 @@ gumstix_device_register(device_t dev, vo
 {
 	prop_dictionary_t dict = device_properties(dev);
 
-	if (device_is_a(dev, "a9tmr") ||
+	if (device_is_a(dev, "arma9tmr") ||
 	    device_is_a(dev, "a9wdt")) {
 		/*
 		 * We need to tell the A9 Global/Watchdog Timer

Index: src/sys/dev/DEVNAMES
diff -u src/sys/dev/DEVNAMES:1.310 src/sys/dev/DEVNAMES:1.311
--- src/sys/dev/DEVNAMES:1.310	Mon Apr  9 20:16:53 2018
+++ src/sys/dev/DEVNAMES	Tue Jun  5 08:03:29 2018
@@ -1,4 +1,4 @@
-#	$NetBSD: DEVNAMES,v 1.310 2018/04/09 20:16:53 christos Exp $
+#	$NetBSD: DEVNAMES,v 1.311 2018/06/05 08:03:29 hkenken Exp $
 #
 # This file contains all used device names and defined attributes in
 # alphabetical order. New devices added to the system somewhere should first
@@ -13,7 +13,6 @@ a2kbbc			amiga
 a2kbbc			amigappc
 a34kbbc			amiga
 a34kbbc			amigappc
-a9tmr			arm
 a9wdt			arm
 aac			MI
 abtn			macppc
@@ -90,6 +89,7 @@ arbus			evbmips
 arc			MI		Attribute
 arcmsr			MI
 aria			MI
+arma9tmr		arm
 armgic			arm
 arml2cc			arm
 armperiph		arm

Added files:

Index: src/sys/arch/arm/fdt/a9tmr_fdt.c
diff -u /dev/null src/sys/arch/arm/fdt/a9tmr_fdt.c:1.1
--- /dev/null	Tue Jun  5 08:03:29 2018
+++ src/sys/arch/arm/fdt/a9tmr_fdt.c	Tue Jun  5 08:03:28 2018
@@ -0,0 +1,129 @@
+/* $NetBSD: a9tmr_fdt.c,v 1.1 2018/06/05 08:03:28 hkenken Exp $ */
+
+/*-
+ * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: a9tmr_fdt.c,v 1.1 2018/06/05 08:03:28 hkenken Exp $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/device.h>
+#include <sys/intr.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/kmem.h>
+
+#include <arm/cortex/a9tmr_intr.h>
+#include <arm/cortex/mpcore_var.h>
+#include <arm/cortex/a9tmr_var.h>
+
+#include <dev/fdt/fdtvar.h>
+#include <arm/fdt/arm_fdtvar.h>
+
+static int	a9tmr_fdt_match(device_t, cfdata_t, void *);
+static void	a9tmr_fdt_attach(device_t, device_t, void *);
+
+static void	a9tmr_fdt_cpu_hatch(void *, struct cpu_info *);
+
+CFATTACH_DECL_NEW(a9tmr_fdt, 0, a9tmr_fdt_match, a9tmr_fdt_attach, NULL, NULL);
+
+static int
+a9tmr_fdt_match(device_t parent, cfdata_t cf, void *aux)
+{
+	const char * const compatible[] = {
+		"arm,cortex-a9-global-timer",
+		NULL
+	};
+	struct fdt_attach_args * const faa = aux;
+
+	return of_compatible(faa->faa_phandle, compatible) >= 0;
+}
+
+static void
+a9tmr_fdt_attach(device_t parent, device_t self, void *aux)
+{
+	struct fdt_attach_args * const faa = aux;
+	const int phandle = faa->faa_phandle;
+	bus_space_handle_t bsh;
+
+	struct clk *clk = fdtbus_clock_get_index(phandle, 0);
+	if (clk == NULL) {
+		aprint_error(": couldn't get clock\n");
+		return;
+	}
+	if (clk_enable(clk) != 0) {
+		aprint_error(": couldn't enable clock\n");
+		return;
+	}
+
+	uint32_t rate = clk_get_rate(clk);
+	prop_dictionary_t dict = device_properties(self);
+	prop_dictionary_set_uint32(dict, "frequency", rate);
+
+	char intrstr[128];
+	if (!fdtbus_intr_str(phandle, 0, intrstr, sizeof(intrstr))) {
+		aprint_error(": failed to decode interrupt\n");
+		return;
+	}
+
+	void *ih = fdtbus_intr_establish(phandle, 0, IPL_CLOCK,
+	    FDT_INTR_MPSAFE, a9tmr_intr, NULL);
+	if (ih == NULL) {
+		aprint_error_dev(self, "couldn't install interrupt handler\n");
+		return;
+	}
+	aprint_normal_dev(self, "interrupting on %s\n", intrstr);
+
+	bus_addr_t addr;
+	bus_size_t size;
+	if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
+		aprint_error(": couldn't get distributor address\n");
+		return;
+	}
+	if (bus_space_map(faa->faa_bst, addr, size, 0, &bsh)) {
+		aprint_error(": couldn't map registers\n");
+		return;
+	}
+
+	struct mpcore_attach_args mpcaa = {
+		.mpcaa_name = "arma9tmr",
+		.mpcaa_memt = faa->faa_bst,
+		.mpcaa_memh = bsh,
+		.mpcaa_irq = -1,
+	};
+
+	config_found(self, &mpcaa, NULL);
+
+	arm_fdt_cpu_hatch_register(self, a9tmr_fdt_cpu_hatch);
+	arm_fdt_timer_register(a9tmr_cpu_initclocks);
+}
+
+static void
+a9tmr_fdt_cpu_hatch(void *priv, struct cpu_info *ci)
+{
+	a9tmr_init_cpu_clock(ci);
+}

Reply via email to