Dynamically attach plrtc(4) using the FDT.
authorjsg <jsg@openbsd.org>
Sat, 6 Aug 2016 00:40:54 +0000 (00:40 +0000)
committerjsg <jsg@openbsd.org>
Sat, 6 Aug 2016 00:40:54 +0000 (00:40 +0000)
ok kettenis@ patrick@

share/man/man4/man4.armv7/plrtc.4
share/man/man4/man4.armv7/vexpress.4
sys/arch/armv7/conf/GENERIC
sys/arch/armv7/conf/RAMDISK
sys/arch/armv7/vexpress/files.vexpress
sys/arch/armv7/vexpress/pl031.c
sys/arch/armv7/vexpress/vexpress.c

index 1f8e00d..cdda1f0 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: plrtc.4,v 1.1 2015/06/14 13:53:49 jsg Exp $
+.\"    $OpenBSD: plrtc.4,v 1.2 2016/08/06 00:40:54 jsg Exp $
 .\"
 .\" Copyright (c) 2015 Jonathan Gray <jsg@openbsd.org>
 .\"
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: June 14 2015 $
+.Dd $Mdocdate: August 6 2016 $
 .Dt PLRTC 4 armv7
 .Os
 .Sh NAME
 .Nm plrtc
 .Nd ARM PrimeCell PL031 Real-time clock
 .Sh SYNOPSIS
-.Cd "plrtc* at vexpress?"
+.Cd "plrtc* at fdt?"
 .Sh DESCRIPTION
 The
 .Nm
index 5923975..5bfe8db 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: vexpress.4,v 1.2 2016/08/06 00:34:24 jsg Exp $
+.\"    $OpenBSD: vexpress.4,v 1.3 2016/08/06 00:40:54 jsg Exp $
 .\"
 .\" Copyright (c) 2014 Sylvestre Gallon <syl@openbsd.org>
 .\"
@@ -33,8 +33,6 @@ ARM Versatile Express development boards.
 provides support for the following devices:
 .Pp
 .Bl -tag -width 12n -offset indent -compact
-.It Xr plrtc 4
-ARM PrimeCell PL031 Real-time clock
 .It Xr pluart 4
 ARM PrimeCell PL011 UART
 .It Xr sysreg 4
index 455a491..b2178ef 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: GENERIC,v 1.37 2016/08/06 00:30:47 jsg Exp $
+#      $OpenBSD: GENERIC,v 1.38 2016/08/06 00:40:54 jsg Exp $
 #
 # For further information on compiling OpenBSD kernels, see the config(8)
 # man page.
@@ -104,7 +104,7 @@ usb*                at ehci?        #flags 0x1
 vexpress0      at mainbus?
 sysreg*                at vexpress?
 pluart*                at vexpress?
-plrtc*         at vexpress?
+plrtc*         at fdt?
 virtio*                at fdt?
 
 # Exynos
index 6bbab8c..3cfdf8b 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: RAMDISK,v 1.34 2016/08/06 00:30:47 jsg Exp $
+#      $OpenBSD: RAMDISK,v 1.35 2016/08/06 00:40:54 jsg Exp $
 
 machine                armv7 arm
 
@@ -103,7 +103,7 @@ usb*                at ehci?        #flags 0x1
 vexpress0      at mainbus?
 sysreg*                at vexpress?
 pluart*                at vexpress?
-plrtc*         at vexpress?
+plrtc*         at fdt?
 virtio*                at fdt?
 
 # Exynos
index f78e779..cb6fe0b 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: files.vexpress,v 1.4 2016/08/06 00:30:47 jsg Exp $
+#      $OpenBSD: files.vexpress,v 1.5 2016/08/06 00:40:54 jsg Exp $
 
 define vexpress {}
 device vexpress: vexpress
@@ -13,7 +13,7 @@ attach pluart at vexpress
 file   arch/armv7/vexpress/pl011.c     pluart
 
 device plrtc
-attach plrtc at vexpress
+attach plrtc at fdt
 file   arch/armv7/vexpress/pl031.c     plrtc
 
 attach virtio at fdt with virtio_mmio
index 40f8d70..47af147 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pl031.c,v 1.1 2015/06/14 05:01:31 jsg Exp $   */
+/*     $OpenBSD: pl031.c,v 1.2 2016/08/06 00:40:54 jsg Exp $   */
 
 /*
  * Copyright (c) 2015 Jonathan Gray <jsg@openbsd.org>
 #include <sys/systm.h>
 
 #include <machine/bus.h>
+#include <machine/fdt.h>
 #include <armv7/armv7/armv7var.h>
 #include <dev/clock_subr.h>
 
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/fdt.h>
+
 #define RTCDR  0x00
 #define RTCMR  0x04
 #define RTCLR  0x08
@@ -44,13 +48,14 @@ struct plrtc_softc {
        bus_space_handle_t       sc_ioh;
 };
 
+int    plrtc_match(struct device *, void *, void *);
 void   plrtc_attach(struct device *, struct device *, void *);
 int    plrtc_gettime(struct todr_chip_handle *, struct timeval *);
 int    plrtc_settime(struct todr_chip_handle *, struct timeval *);
 
 
 struct cfattach plrtc_ca = {
-       sizeof(struct plrtc_softc), NULL , plrtc_attach
+       sizeof(struct plrtc_softc), plrtc_match, plrtc_attach
 };
 
 struct cfdriver plrtc_cd = {
@@ -81,16 +86,29 @@ plrtc_settime(todr_chip_handle_t handle, struct timeval *tv)
        return (0);
 }
 
+int
+plrtc_match(struct device *parent, void *match, void *aux)
+{
+       struct fdt_attach_args *faa = aux;
+
+       return (OF_is_compatible(faa->fa_node, "arm,pl031"));
+}
+
 void
 plrtc_attach(struct device *parent, struct device *self, void *aux)
 {
-       struct armv7_attach_args        *aa = aux;
+       struct fdt_attach_args          *faa = aux;
        struct plrtc_softc              *sc = (struct plrtc_softc *) self;
        todr_chip_handle_t               handle;
 
-       sc->sc_iot = aa->aa_iot;
-       if (bus_space_map(sc->sc_iot, aa->aa_dev->mem[0].addr,
-           aa->aa_dev->mem[0].size, 0, &sc->sc_ioh)) {
+       if (faa->fa_nreg < 1) {
+               printf(": no register data\n");
+               return;
+       }
+
+       sc->sc_iot = faa->fa_iot;
+       if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr,
+           faa->fa_reg[0].size, 0, &sc->sc_ioh)) {
                printf(": failed to map mem space\n");
                return;
        }
index 21635a0..9425a22 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: vexpress.c,v 1.6 2016/08/06 00:30:47 jsg Exp $        */
+/*     $OpenBSD: vexpress.c,v 1.7 2016/08/06 00:40:54 jsg Exp $        */
 
 /*
  * Copyright (c) 2015 Jonathan Gray <jsg@openbsd.org>
@@ -41,7 +41,6 @@ struct cfdriver vexpress_cd = {
 struct board_dev vexpress_devs[] = {
        { "sysreg",     0 },
        { "pluart",     0 },
-       { "plrtc",      0 },
        { NULL,         0 }
 };