1*91f16700Schasinglulu /* SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause */ 2*91f16700Schasinglulu /* 3*91f16700Schasinglulu * Copyright (C) 2023, STMicroelectronics - All Rights Reserved 4*91f16700Schasinglulu */ 5*91f16700Schasinglulu 6*91f16700Schasinglulu #ifndef _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ 7*91f16700Schasinglulu #define _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ 8*91f16700Schasinglulu 9*91f16700Schasinglulu #define CMD_DIV 0 10*91f16700Schasinglulu #define CMD_MUX 1 11*91f16700Schasinglulu #define CMD_CLK 2 12*91f16700Schasinglulu #define CMD_FLEXGEN 3 13*91f16700Schasinglulu 14*91f16700Schasinglulu #define CMD_ADDR_BIT 0x80000000 15*91f16700Schasinglulu 16*91f16700Schasinglulu #define CMD_SHIFT 26 17*91f16700Schasinglulu #define CMD_MASK 0xFC000000 18*91f16700Schasinglulu #define CMD_DATA_MASK 0x03FFFFFF 19*91f16700Schasinglulu 20*91f16700Schasinglulu #define DIV_ID_SHIFT 8 21*91f16700Schasinglulu #define DIV_ID_MASK 0x0000FF00 22*91f16700Schasinglulu 23*91f16700Schasinglulu #define DIV_DIVN_SHIFT 0 24*91f16700Schasinglulu #define DIV_DIVN_MASK 0x000000FF 25*91f16700Schasinglulu 26*91f16700Schasinglulu #define MUX_ID_SHIFT 4 27*91f16700Schasinglulu #define MUX_ID_MASK 0x00000FF0 28*91f16700Schasinglulu 29*91f16700Schasinglulu #define MUX_SEL_SHIFT 0 30*91f16700Schasinglulu #define MUX_SEL_MASK 0x0000000F 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* CLK define */ 33*91f16700Schasinglulu #define CLK_ON_MASK BIT(21) 34*91f16700Schasinglulu #define CLK_ON_SHIFT 21 35*91f16700Schasinglulu 36*91f16700Schasinglulu #define CLK_ID_MASK GENMASK_32(20, 12) 37*91f16700Schasinglulu #define CLK_ID_SHIFT 12 38*91f16700Schasinglulu 39*91f16700Schasinglulu #define CLK_NO_DIV_MASK 0x0000080 40*91f16700Schasinglulu #define CLK_DIV_MASK GENMASK_32(10, 5) 41*91f16700Schasinglulu #define CLK_DIV_SHIFT 5 42*91f16700Schasinglulu 43*91f16700Schasinglulu #define CLK_NO_SEL_MASK 0x00000010 44*91f16700Schasinglulu #define CLK_SEL_MASK GENMASK_32(3, 0) 45*91f16700Schasinglulu #define CLK_SEL_SHIFT 0 46*91f16700Schasinglulu 47*91f16700Schasinglulu #define CLK_CFG(clk_id, sel, div, state) ((CMD_CLK << CMD_SHIFT) |\ 48*91f16700Schasinglulu ((state) << CLK_ON_SHIFT) |\ 49*91f16700Schasinglulu ((clk_id) << CLK_ID_SHIFT) |\ 50*91f16700Schasinglulu ((div) << CLK_DIV_SHIFT) |\ 51*91f16700Schasinglulu ((sel) << CLK_SEL_SHIFT)) 52*91f16700Schasinglulu 53*91f16700Schasinglulu #define CLK_OFF 0 54*91f16700Schasinglulu #define CLK_ON 1 55*91f16700Schasinglulu #define CLK_NODIV 0x00000040 56*91f16700Schasinglulu #define CLK_NOMUX 0x00000010 57*91f16700Schasinglulu 58*91f16700Schasinglulu /* Flexgen define */ 59*91f16700Schasinglulu #define FLEX_ID_SHIFT 13 60*91f16700Schasinglulu #define FLEX_SEL_SHIFT 9 61*91f16700Schasinglulu #define FLEX_PDIV_SHIFT 6 62*91f16700Schasinglulu #define FLEX_FDIV_SHIFT 0 63*91f16700Schasinglulu 64*91f16700Schasinglulu #define FLEX_ID_MASK GENMASK_32(18, 13) 65*91f16700Schasinglulu #define FLEX_SEL_MASK GENMASK_32(12, 9) 66*91f16700Schasinglulu #define FLEX_PDIV_MASK GENMASK_32(8, 6) 67*91f16700Schasinglulu #define FLEX_FDIV_MASK GENMASK_32(5, 0) 68*91f16700Schasinglulu 69*91f16700Schasinglulu #define DIV_CFG(div_id, div) ((CMD_DIV << CMD_SHIFT) |\ 70*91f16700Schasinglulu ((div_id) << DIV_ID_SHIFT |\ 71*91f16700Schasinglulu (div))) 72*91f16700Schasinglulu 73*91f16700Schasinglulu #define MUX_CFG(mux_id, sel) ((CMD_MUX << CMD_SHIFT) |\ 74*91f16700Schasinglulu ((mux_id) << MUX_ID_SHIFT |\ 75*91f16700Schasinglulu (sel))) 76*91f16700Schasinglulu 77*91f16700Schasinglulu #define CLK_ADDR_SHIFT 16 78*91f16700Schasinglulu #define CLK_ADDR_MASK 0x7FFF0000 79*91f16700Schasinglulu #define CLK_ADDR_VAL_MASK 0xFFFF 80*91f16700Schasinglulu 81*91f16700Schasinglulu #define DIV_LSMCU 0 82*91f16700Schasinglulu #define DIV_APB1 1 83*91f16700Schasinglulu #define DIV_APB2 2 84*91f16700Schasinglulu #define DIV_APB3 3 85*91f16700Schasinglulu #define DIV_APB4 4 86*91f16700Schasinglulu #define DIV_APBDBG 5 87*91f16700Schasinglulu #define DIV_RTC 6 88*91f16700Schasinglulu #define DIV_NB 7 89*91f16700Schasinglulu 90*91f16700Schasinglulu #define MUX_MUXSEL0 0 91*91f16700Schasinglulu #define MUX_MUXSEL1 1 92*91f16700Schasinglulu #define MUX_MUXSEL2 2 93*91f16700Schasinglulu #define MUX_MUXSEL3 3 94*91f16700Schasinglulu #define MUX_MUXSEL4 4 95*91f16700Schasinglulu #define MUX_MUXSEL5 5 96*91f16700Schasinglulu #define MUX_MUXSEL6 6 97*91f16700Schasinglulu #define MUX_MUXSEL7 7 98*91f16700Schasinglulu #define MUX_XBARSEL 8 99*91f16700Schasinglulu #define MUX_RTC 9 100*91f16700Schasinglulu #define MUX_MCO1 10 101*91f16700Schasinglulu #define MUX_MCO2 11 102*91f16700Schasinglulu #define MUX_ADC12 12 103*91f16700Schasinglulu #define MUX_ADC3 13 104*91f16700Schasinglulu #define MUX_USB2PHY1 14 105*91f16700Schasinglulu #define MUX_USB2PHY2 15 106*91f16700Schasinglulu #define MUX_USB3PCIEPHY 16 107*91f16700Schasinglulu #define MUX_DSIBLANE 17 108*91f16700Schasinglulu #define MUX_DSIPHY 18 109*91f16700Schasinglulu #define MUX_LVDSPHY 19 110*91f16700Schasinglulu #define MUX_DTS 20 111*91f16700Schasinglulu #define MUX_CPU1 21 112*91f16700Schasinglulu #define MUX_D3PER 22 113*91f16700Schasinglulu #define MUX_NB 23 114*91f16700Schasinglulu 115*91f16700Schasinglulu #define MUXSEL_HSI 0 116*91f16700Schasinglulu #define MUXSEL_HSE 1 117*91f16700Schasinglulu #define MUXSEL_MSI 2 118*91f16700Schasinglulu 119*91f16700Schasinglulu /* KERNEL source clocks */ 120*91f16700Schasinglulu #define MUX_RTC_DISABLED 0x0 121*91f16700Schasinglulu #define MUX_RTC_LSE 0x1 122*91f16700Schasinglulu #define MUX_RTC_LSI 0x2 123*91f16700Schasinglulu #define MUX_RTC_HSE 0x3 124*91f16700Schasinglulu 125*91f16700Schasinglulu #define MUX_MCO1_FLEX61 0x0 126*91f16700Schasinglulu #define MUX_MCO1_OBSER0 0x1 127*91f16700Schasinglulu 128*91f16700Schasinglulu #define MUX_MCO2_FLEX62 0x0 129*91f16700Schasinglulu #define MUX_MCO2_OBSER1 0x1 130*91f16700Schasinglulu 131*91f16700Schasinglulu #define MUX_ADC12_FLEX46 0x0 132*91f16700Schasinglulu #define MUX_ADC12_LSMCU 0x1 133*91f16700Schasinglulu 134*91f16700Schasinglulu #define MUX_ADC3_FLEX47 0x0 135*91f16700Schasinglulu #define MUX_ADC3_LSMCU 0x1 136*91f16700Schasinglulu #define MUX_ADC3_FLEX46 0x2 137*91f16700Schasinglulu 138*91f16700Schasinglulu #define MUX_USB2PHY1_FLEX57 0x0 139*91f16700Schasinglulu #define MUX_USB2PHY1_HSE 0x1 140*91f16700Schasinglulu 141*91f16700Schasinglulu #define MUX_USB2PHY2_FLEX58 0x0 142*91f16700Schasinglulu #define MUX_USB2PHY2_HSE 0x1 143*91f16700Schasinglulu 144*91f16700Schasinglulu #define MUX_USB3PCIEPHY_FLEX34 0x0 145*91f16700Schasinglulu #define MUX_USB3PCIEPHY_HSE 0x1 146*91f16700Schasinglulu 147*91f16700Schasinglulu #define MUX_DSIBLANE_FLEX28 0x0 148*91f16700Schasinglulu #define MUX_DSIBLANE_FLEX27 0x1 149*91f16700Schasinglulu 150*91f16700Schasinglulu #define MUX_DSIPHY_FLEX28 0x0 151*91f16700Schasinglulu #define MUX_DSIPHY_HSE 0x1 152*91f16700Schasinglulu 153*91f16700Schasinglulu #define MUX_LVDSPHY_FLEX32 0x0 154*91f16700Schasinglulu #define MUX_LVDSPHY_HSE 0x1 155*91f16700Schasinglulu 156*91f16700Schasinglulu #define MUX_DTS_HSI 0x0 157*91f16700Schasinglulu #define MUX_DTS_HSE 0x1 158*91f16700Schasinglulu #define MUX_DTS_MSI 0x2 159*91f16700Schasinglulu 160*91f16700Schasinglulu #define MUX_D3PER_MSI 0x0 161*91f16700Schasinglulu #define MUX_D3PER_LSI 0x1 162*91f16700Schasinglulu #define MUX_D3PER_LSE 0x2 163*91f16700Schasinglulu 164*91f16700Schasinglulu /* PLLs source clocks */ 165*91f16700Schasinglulu #define PLL_SRC_HSI 0x0 166*91f16700Schasinglulu #define PLL_SRC_HSE 0x1 167*91f16700Schasinglulu #define PLL_SRC_MSI 0x2 168*91f16700Schasinglulu #define PLL_SRC_DISABLED 0x3 169*91f16700Schasinglulu 170*91f16700Schasinglulu /* XBAR source clocks */ 171*91f16700Schasinglulu #define XBAR_SRC_PLL4 0x0 172*91f16700Schasinglulu #define XBAR_SRC_PLL5 0x1 173*91f16700Schasinglulu #define XBAR_SRC_PLL6 0x2 174*91f16700Schasinglulu #define XBAR_SRC_PLL7 0x3 175*91f16700Schasinglulu #define XBAR_SRC_PLL8 0x4 176*91f16700Schasinglulu #define XBAR_SRC_HSI 0x5 177*91f16700Schasinglulu #define XBAR_SRC_HSE 0x6 178*91f16700Schasinglulu #define XBAR_SRC_MSI 0x7 179*91f16700Schasinglulu #define XBAR_SRC_HSI_KER 0x8 180*91f16700Schasinglulu #define XBAR_SRC_HSE_KER 0x9 181*91f16700Schasinglulu #define XBAR_SRC_MSI_KER 0xA 182*91f16700Schasinglulu #define XBAR_SRC_SPDIF_SYMB 0xB 183*91f16700Schasinglulu #define XBAR_SRC_I2S 0xC 184*91f16700Schasinglulu #define XBAR_SRC_LSI 0xD 185*91f16700Schasinglulu #define XBAR_SRC_LSE 0xE 186*91f16700Schasinglulu 187*91f16700Schasinglulu /* 188*91f16700Schasinglulu * Configure a XBAR channel with its clock source 189*91f16700Schasinglulu * channel_nb: XBAR channel number from 0 to 63 190*91f16700Schasinglulu * channel_src: one of the 15 previous XBAR source clocks defines 191*91f16700Schasinglulu * channel_prediv: value of the PREDIV in channel RCC_PREDIVxCFGR register 192*91f16700Schasinglulu * can be either 1, 2, 4 or 1024 193*91f16700Schasinglulu * channel_findiv: value of the FINDIV in channel RCC_FINDIVxCFGR register 194*91f16700Schasinglulu * from 1 to 64 195*91f16700Schasinglulu */ 196*91f16700Schasinglulu 197*91f16700Schasinglulu #define FLEXGEN_CFG(ch, sel, pdiv, fdiv) ((CMD_FLEXGEN << CMD_SHIFT) |\ 198*91f16700Schasinglulu ((ch) << FLEX_ID_SHIFT) |\ 199*91f16700Schasinglulu ((sel) << FLEX_SEL_SHIFT) |\ 200*91f16700Schasinglulu ((pdiv) << FLEX_PDIV_SHIFT) |\ 201*91f16700Schasinglulu ((fdiv) << FLEX_FDIV_SHIFT)) 202*91f16700Schasinglulu 203*91f16700Schasinglulu /* Register addresses of MCO1 & MCO2 */ 204*91f16700Schasinglulu #define MCO1 0x494 205*91f16700Schasinglulu #define MCO2 0x498 206*91f16700Schasinglulu 207*91f16700Schasinglulu #define MCO_OFF 0 208*91f16700Schasinglulu #define MCO_ON 1 209*91f16700Schasinglulu #define MCO_STATUS_SHIFT 8 210*91f16700Schasinglulu 211*91f16700Schasinglulu #define MCO_CFG(addr, sel, status) (CMD_ADDR_BIT |\ 212*91f16700Schasinglulu ((addr) << CLK_ADDR_SHIFT) |\ 213*91f16700Schasinglulu ((status) << MCO_STATUS_SHIFT) |\ 214*91f16700Schasinglulu (sel)) 215*91f16700Schasinglulu 216*91f16700Schasinglulu /* define for st,pll /csg */ 217*91f16700Schasinglulu #define SSCG_MODE_CENTER_SPREAD 0 218*91f16700Schasinglulu #define SSCG_MODE_DOWN_SPREAD 1 219*91f16700Schasinglulu 220*91f16700Schasinglulu /* define for st,drive */ 221*91f16700Schasinglulu #define LSEDRV_LOWEST 0 222*91f16700Schasinglulu #define LSEDRV_MEDIUM_LOW 1 223*91f16700Schasinglulu #define LSEDRV_MEDIUM_HIGH 2 224*91f16700Schasinglulu #define LSEDRV_HIGHEST 3 225*91f16700Schasinglulu 226*91f16700Schasinglulu #endif /* _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ */ 227