summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdt/imxccm.c
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2018-06-12 20:19:57 +0000
committerkettenis <kettenis@openbsd.org>2018-06-12 20:19:57 +0000
commit58d1c2c8ef6351a954e10c59046922112232228f (patch)
tree63ec9656c4981ec2aae13ae26f4ea71dc132575d /sys/dev/fdt/imxccm.c
parentSend LSAs with MAX_METRIC for carp interfaces in state backup. (diff)
downloadwireguard-openbsd-58d1c2c8ef6351a954e10c59046922112232228f.tar.xz
wireguard-openbsd-58d1c2c8ef6351a954e10c59046922112232228f.zip
Add a bunch of i.MX7 clocks.
Diffstat (limited to 'sys/dev/fdt/imxccm.c')
-rw-r--r--sys/dev/fdt/imxccm.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/sys/dev/fdt/imxccm.c b/sys/dev/fdt/imxccm.c
index de062871f4e..69f776fa799 100644
--- a/sys/dev/fdt/imxccm.c
+++ b/sys/dev/fdt/imxccm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: imxccm.c,v 1.5 2018/06/11 09:20:46 kettenis Exp $ */
+/* $OpenBSD: imxccm.c,v 1.6 2018/06/12 20:19:57 kettenis Exp $ */
/*
* Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se>
*
@@ -377,6 +377,29 @@ imxccm_get_ipg_perclk(struct imxccm_softc *sc)
}
uint32_t
+imxccm_imx7d_enet(struct imxccm_softc *sc, uint32_t idx)
+{
+ uint32_t mux;
+
+ if (idx >= sc->sc_nmuxs || sc->sc_muxs[idx].reg == 0)
+ return 0;
+
+ mux = HREAD4(sc, sc->sc_muxs[idx].reg);
+ mux >>= sc->sc_muxs[idx].shift;
+ mux &= sc->sc_muxs[idx].mask;
+
+ switch (mux) {
+ case 0:
+ return clock_get_frequency(sc->sc_node, "osc");
+ case 7:
+ return 392000000; /* pll_sys_pfd4_clk XXX not fixed */
+ default:
+ printf("%s: 0x%08x 0x%08x\n", __func__, idx, mux);
+ return 0;
+ }
+}
+
+uint32_t
imxccm_imx7d_i2c(struct imxccm_softc *sc, uint32_t idx)
{
uint32_t mux;
@@ -675,6 +698,8 @@ imxccm_get_frequency(void *cookie, uint32_t *cells)
}
} else if (sc->sc_gates == imx7d_gates) {
switch (idx) {
+ case IMX7D_ENET_AXI_ROOT_SRC:
+ return imxccm_imx7d_enet(sc, idx);
case IMX7D_I2C1_ROOT_SRC:
case IMX7D_I2C2_ROOT_SRC:
case IMX7D_I2C3_ROOT_SRC: