summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdt/mvclock.c
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2020-04-15 15:40:06 +0000
committerkettenis <kettenis@openbsd.org>2020-04-15 15:40:06 +0000
commitf21dc7541f68e13b9e434290f990a84be79612f2 (patch)
treee011f9b2487c46c9bc0d30d1312eb3ad2c010628 /sys/dev/fdt/mvclock.c
parentDocument filters: one type of predicates checked in kernel. (diff)
downloadwireguard-openbsd-f21dc7541f68e13b9e434290f990a84be79612f2.tar.xz
wireguard-openbsd-f21dc7541f68e13b9e434290f990a84be79612f2.zip
Add support for the Armada 3720 CPU clock.
ok patrick@
Diffstat (limited to 'sys/dev/fdt/mvclock.c')
-rw-r--r--sys/dev/fdt/mvclock.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/dev/fdt/mvclock.c b/sys/dev/fdt/mvclock.c
index 7accdad05f4..3719ef106d0 100644
--- a/sys/dev/fdt/mvclock.c
+++ b/sys/dev/fdt/mvclock.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mvclock.c,v 1.5 2019/10/07 19:28:43 patrick Exp $ */
+/* $OpenBSD: mvclock.c,v 1.6 2020/04/15 15:40:06 kettenis Exp $ */
/*
* Copyright (c) 2018 Mark Kettenis <kettenis@openbsd.org>
*
@@ -250,6 +250,7 @@ cp110_enable(void *cookie, uint32_t *cells, int on)
#define PERIPH_NB_SQF 0x7
#define PERIPH_NB_I2C2 0x9
#define PERIPH_NB_I2C1 0xa
+#define PERIPH_NB_CPU 0x10
#define PERIPH_SB_GBE1_CORE 0x7
#define PERIPH_SB_GBE0_CORE 0x8
#define PERIPH_SB_USB32_USB2_SYS 0xb
@@ -266,6 +267,7 @@ cp110_enable(void *cookie, uint32_t *cells, int on)
void a3700_periph_enable(struct mvclock_softc *, uint32_t, int);
uint32_t a3700_periph_tbg_get_frequency(struct mvclock_softc *, uint32_t);
+uint32_t a3700_periph_get_div(struct mvclock_softc *, uint32_t, uint32_t);
uint32_t a3700_periph_get_double_div(struct mvclock_softc *, uint32_t,
uint32_t, uint32_t);
@@ -309,6 +311,10 @@ a3700_periph_nb_get_frequency(void *cookie, uint32_t *cells)
freq /= a3700_periph_get_double_div(sc,
PERIPH_DIV_SEL1, 27, 24);
return freq;
+ case PERIPH_NB_CPU:
+ freq = a3700_periph_tbg_get_frequency(sc, 22);
+ freq /= a3700_periph_get_div(sc, PERIPH_DIV_SEL0, 28);
+ return freq;
default:
break;
}
@@ -373,6 +379,13 @@ a3700_periph_tbg_get_frequency(struct mvclock_softc *sc, uint32_t idx)
}
uint32_t
+a3700_periph_get_div(struct mvclock_softc *sc, uint32_t off, uint32_t idx)
+{
+ uint32_t reg = HREAD4(sc, off);
+ return ((reg >> idx) & PERIPH_DIV_SEL_MASK);
+}
+
+uint32_t
a3700_periph_get_double_div(struct mvclock_softc *sc, uint32_t off,
uint32_t idx0, uint32_t idx1)
{