1 /* 2 * Copyright (c) 2017 SiFive Inc 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef _SIFIVE_PRCI_H 8 #define _SIFIVE_PRCI_H 9 10 /* Clock controller. */ 11 #define PRCI_BASE_ADDR 0x10008000UL 12 13 #define Z_REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) 14 #define PRCI_REG(offset) Z_REG32(PRCI_BASE_ADDR, offset) 15 16 /* Register offsets */ 17 18 #define PRCI_HFROSCCFG (0x0000) 19 #define PRCI_HFXOSCCFG (0x0004) 20 #define PRCI_PLLCFG (0x0008) 21 #define PRCI_PLLDIV (0x000C) 22 #define PRCI_PROCMONCFG (0x00F0) 23 24 /* Fields */ 25 #define ROSC_DIV(x) (((x) & 0x2F) << 0) 26 #define ROSC_TRIM(x) (((x) & 0x1F) << 16) 27 #define ROSC_EN(x) (((x) & 0x1) << 30) 28 #define ROSC_RDY(x) (((x) & 0x1) << 31) 29 30 #define XOSC_EN(x) (((x) & 0x1) << 30) 31 #define XOSC_RDY(x) (((x) & 0x1) << 31) 32 33 #define PLL_R(x) (((x) & 0x7) << 0) 34 /* single reserved bit for F LSB. */ 35 #define PLL_F(x) (((x) & 0x3F) << 4) 36 #define PLL_Q(x) (((x) & 0x3) << 10) 37 #define PLL_SEL(x) (((x) & 0x1) << 16) 38 #define PLL_REFSEL(x) (((x) & 0x1) << 17) 39 #define PLL_BYPASS(x) (((x) & 0x1) << 18) 40 #define PLL_LOCK(x) (((x) & 0x1) << 31) 41 42 #define PLL_R_default 0x1 43 #define PLL_F_default 0x1F 44 #define PLL_Q_default 0x3 45 46 #define PLL_REFSEL_HFROSC 0x0 47 #define PLL_REFSEL_HFXOSC 0x1 48 49 #define PLL_SEL_HFROSC 0x0 50 #define PLL_SEL_PLL 0x1 51 52 #define PLL_FINAL_DIV(x) (((x) & 0x3F) << 0) 53 #define PLL_FINAL_DIV_BY_1(x) (((x) & 0x1) << 8) 54 55 #define PROCMON_DIV(x) (((x) & 0x1F) << 0) 56 #define PROCMON_TRIM(x) (((x) & 0x1F) << 8) 57 #define PROCMON_EN(x) (((x) & 0x1) << 16) 58 #define PROCMON_SEL(x) (((x) & 0x3) << 24) 59 #define PROCMON_NT_EN(x) (((x) & 0x1) << 28) 60 61 #define PROCMON_SEL_HFCLK 0 62 #define PROCMON_SEL_HFXOSCIN 1 63 #define PROCMON_SEL_PLLOUTDIV 2 64 #define PROCMON_SEL_PROCMON 3 65 66 #endif /* _SIFIVE_PRCI_H */ 67