diff options
author | 2018-06-12 20:19:57 +0000 | |
---|---|---|
committer | 2018-06-12 20:19:57 +0000 | |
commit | 58d1c2c8ef6351a954e10c59046922112232228f (patch) | |
tree | 63ec9656c4981ec2aae13ae26f4ea71dc132575d /sys/dev/fdt/imxccm.c | |
parent | Send LSAs with MAX_METRIC for carp interfaces in state backup. (diff) | |
download | wireguard-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.c | 27 |
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: |