1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (C) 2014, STMicroelectronics - All Rights Reserved 4 * Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics. 5 */ 6 7 #ifndef _STV0991_CGU_H 8 #define _STV0991_CGU_H 9 10 struct stv0991_cgu_regs { 11 u32 cpu_freq; /* offset 0x0 */ 12 u32 icn2_freq; /* offset 0x4 */ 13 u32 dma_freq; /* offset 0x8 */ 14 u32 isp_freq; /* offset 0xc */ 15 u32 h264_freq; /* offset 0x10 */ 16 u32 osif_freq; /* offset 0x14 */ 17 u32 ren_freq; /* offset 0x18 */ 18 u32 tim_freq; /* offset 0x1c */ 19 u32 sai_freq; /* offset 0x20 */ 20 u32 eth_freq; /* offset 0x24 */ 21 u32 i2c_freq; /* offset 0x28 */ 22 u32 spi_freq; /* offset 0x2c */ 23 u32 uart_freq; /* offset 0x30 */ 24 u32 qspi_freq; /* offset 0x34 */ 25 u32 sdio_freq; /* offset 0x38 */ 26 u32 usi_freq; /* offset 0x3c */ 27 u32 can_line_freq; /* offset 0x40 */ 28 u32 debug_freq; /* offset 0x44 */ 29 u32 trace_freq; /* offset 0x48 */ 30 u32 stm_freq; /* offset 0x4c */ 31 u32 eth_ctrl; /* offset 0x50 */ 32 u32 reserved[3]; /* offset 0x54 */ 33 u32 osc_ctrl; /* offset 0x60 */ 34 u32 pll1_ctrl; /* offset 0x64 */ 35 u32 pll1_freq; /* offset 0x68 */ 36 u32 pll1_fract; /* offset 0x6c */ 37 u32 pll1_spread; /* offset 0x70 */ 38 u32 pll1_status; /* offset 0x74 */ 39 u32 pll2_ctrl; /* offset 0x78 */ 40 u32 pll2_freq; /* offset 0x7c */ 41 u32 pll2_fract; /* offset 0x80 */ 42 u32 pll2_spread; /* offset 0x84 */ 43 u32 pll2_status; /* offset 0x88 */ 44 u32 cgu_enable_1; /* offset 0x8c */ 45 u32 cgu_enable_2; /* offset 0x90 */ 46 u32 cgu_isp_pulse; /* offset 0x94 */ 47 u32 cgu_h264_pulse; /* offset 0x98 */ 48 u32 cgu_osif_pulse; /* offset 0x9c */ 49 u32 cgu_ren_pulse; /* offset 0xa0 */ 50 51 }; 52 53 /* CGU Timer */ 54 #define CLK_TMR_OSC 0 55 #define CLK_TMR_MCLK 1 56 #define CLK_TMR_PLL1 2 57 #define CLK_TMR_PLL2 3 58 #define MDIV_SHIFT_TMR 3 59 #define DIV_SHIFT_TMR 6 60 61 #define TIMER1_CLK_CFG (0 << DIV_SHIFT_TMR \ 62 | 0 << MDIV_SHIFT_TMR | CLK_TMR_MCLK) 63 64 /* Clock Enable/Disable */ 65 66 #define TIMER1_CLK_EN (1 << 15) 67 68 /* CGU Uart config */ 69 #define CLK_UART_MCLK 0 70 #define CLK_UART_PLL1 1 71 #define CLK_UART_PLL2 2 72 73 #define MDIV_SHIFT_UART 3 74 #define DIV_SHIFT_UART 6 75 76 #define UART_CLK_CFG (4 << DIV_SHIFT_UART \ 77 | 1 << MDIV_SHIFT_UART | CLK_UART_MCLK) 78 79 /* CGU Ethernet clock config */ 80 #define CLK_ETH_MCLK 0 81 #define CLK_ETH_PLL1 1 82 #define CLK_ETH_PLL2 2 83 84 #define MDIV_SHIFT_ETH 3 85 #define DIV_SHIFT_ETH 6 86 #define DIV_ETH_125 9 87 #define DIV_ETH_50 12 88 #define DIV_ETH_P2P 15 89 90 #define ETH_CLK_CFG (4 << DIV_ETH_P2P | 4 << DIV_ETH_50 \ 91 | 1 << DIV_ETH_125 \ 92 | 0 << DIV_SHIFT_ETH \ 93 | 3 << MDIV_SHIFT_ETH | CLK_ETH_PLL1) 94 /* CGU Ethernet control */ 95 96 #define ETH_CLK_TX_EXT_PHY 0 97 #define ETH_CLK_TX_125M 1 98 #define ETH_CLK_TX_25M 2 99 #define ETH_CLK_TX_2M5 3 100 #define ETH_CLK_TX_DIS 7 101 102 #define ETH_CLK_RX_EXT_PHY 0 103 #define ETH_CLK_RX_25M 1 104 #define ETH_CLK_RX_2M5 2 105 #define ETH_CLK_RX_DIS 3 106 #define RX_CLK_SHIFT 3 107 #define ETH_CLK_MASK ~(0x1F) 108 109 #define ETH_PHY_MODE_GMII 0 110 #define ETH_PHY_MODE_RMII 1 111 #define ETH_PHY_CLK_DIS 1 112 113 #define ETH_CLK_CTRL (ETH_CLK_RX_EXT_PHY << RX_CLK_SHIFT \ 114 | ETH_CLK_TX_EXT_PHY) 115 /* CGU qspi clock */ 116 #define DIV_HCLK1_SHIFT 9 117 #define DIV_CRYP_SHIFT 6 118 #define MDIV_QSPI_SHIFT 3 119 120 #define CLK_QSPI_OSC 0 121 #define CLK_QSPI_MCLK 1 122 #define CLK_QSPI_PLL1 2 123 #define CLK_QSPI_PLL2 3 124 125 #define QSPI_CLK_CTRL (3 << DIV_HCLK1_SHIFT \ 126 | 1 << DIV_CRYP_SHIFT \ 127 | 0 << MDIV_QSPI_SHIFT \ 128 | CLK_QSPI_OSC) 129 130 #endif 131