diff options
author | 2018-07-26 10:55:26 +0000 | |
---|---|---|
committer | 2018-07-26 10:55:26 +0000 | |
commit | e45f7b26807ee3bf4249523dbff25570ec4aed61 (patch) | |
tree | c3e884db26ba746e9cf3f70e819bd38bd5096f26 /sys/dev/fdt/imxccm.c | |
parent | Remove CPUID insn_length check (diff) | |
download | wireguard-openbsd-e45f7b26807ee3bf4249523dbff25570ec4aed61.tar.xz wireguard-openbsd-e45f7b26807ee3bf4249523dbff25570ec4aed61.zip |
Implement calculating the SPI controller frequency in imxccm(4).
ok kettenis@
Diffstat (limited to 'sys/dev/fdt/imxccm.c')
-rw-r--r-- | sys/dev/fdt/imxccm.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sys/dev/fdt/imxccm.c b/sys/dev/fdt/imxccm.c index d96104148af..72bcaaaa1bb 100644 --- a/sys/dev/fdt/imxccm.c +++ b/sys/dev/fdt/imxccm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: imxccm.c,v 1.8 2018/06/17 19:46:48 kettenis Exp $ */ +/* $OpenBSD: imxccm.c,v 1.9 2018/07/26 10:55:26 patrick Exp $ */ /* * Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se> * @@ -91,6 +91,8 @@ #define CCM_CSCDR1_USDHCx_CLK_SEL_MASK 0x1 #define CCM_CSCDR1_USDHCx_PODF_MASK 0x7 #define CCM_CSCDR1_UART_PODF_MASK 0x7 +#define CCM_CSCDR2_ECSPI_PODF_SHIFT 19 +#define CCM_CSCDR2_ECSPI_PODF_MASK 0x7 #define CCM_CCGR1_ENET (3 << 10) #define CCM_CCGR4_125M_PCIE (3 << 0) #define CCM_CCGR5_100M_SATA (3 << 4) @@ -125,6 +127,7 @@ #define CCM_ANALOG_PLL_ENET_ENABLE_CLK_125MHZ (1 << 10) /* i.MX7 */ #define HCLK_FREQ 24000000 +#define PLL3_60M 60000000 #define PLL3_80M 80000000 #define HREAD4(sc, reg) \ @@ -307,6 +310,18 @@ imxccm_armclk_set_parent(struct imxccm_softc *sc, enum imxanatop_clocks clock) } } +uint32_t +imxccm_get_ecspiclk(struct imxccm_softc *sc) +{ + uint32_t clkroot = PLL3_60M; + uint32_t podf = HREAD4(sc, CCM_CSCDR2); + + podf >>= CCM_CSCDR2_ECSPI_PODF_SHIFT; + podf &= CCM_CSCDR2_ECSPI_PODF_MASK; + + return clkroot / (podf + 1); +} + unsigned int imxccm_get_usdhx(struct imxccm_softc *sc, int x) { @@ -754,6 +769,7 @@ imxccm_enable(void *cookie, uint32_t *cells, int on) return; case IMX6_CLK_IPG: case IMX6_CLK_IPG_PER: + case IMX6_CLK_ECSPI_ROOT: /* always on */ return; default: @@ -885,6 +901,8 @@ imxccm_get_frequency(void *cookie, uint32_t *cells) return imxccm_get_ipgclk(sc); case IMX6_CLK_IPG_PER: return imxccm_get_ipg_perclk(sc); + case IMX6_CLK_ECSPI_ROOT: + return imxccm_get_ecspiclk(sc); case IMX6_CLK_UART_SERIAL: return imxccm_get_uartclk(sc); case IMX6_CLK_USDHC1: |