1*b2ceba5aSNicolas Le Bayon /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2*b2ceba5aSNicolas Le Bayon /* 3*b2ceba5aSNicolas Le Bayon * Copyright (C) STMicroelectronics 2025 - All Rights Reserved 4*b2ceba5aSNicolas Le Bayon */ 5*b2ceba5aSNicolas Le Bayon 6*b2ceba5aSNicolas Le Bayon #ifndef _DT_BINDINGS_CLOCK_STM32MP21_CLKSRC_H_ 7*b2ceba5aSNicolas Le Bayon #define _DT_BINDINGS_CLOCK_STM32MP21_CLKSRC_H_ 8*b2ceba5aSNicolas Le Bayon 9*b2ceba5aSNicolas Le Bayon #define CMD_DIV 0 10*b2ceba5aSNicolas Le Bayon #define CMD_MUX 1 11*b2ceba5aSNicolas Le Bayon #define CMD_FLEXGEN 3 12*b2ceba5aSNicolas Le Bayon #define CMD_OBS 4 13*b2ceba5aSNicolas Le Bayon 14*b2ceba5aSNicolas Le Bayon #define CMD_ADDR_BIT (1 << 31) 15*b2ceba5aSNicolas Le Bayon 16*b2ceba5aSNicolas Le Bayon #define CMD_SHIFT 26 17*b2ceba5aSNicolas Le Bayon #define CMD_MASK 0xFC000000 18*b2ceba5aSNicolas Le Bayon #define CMD_DATA_MASK 0x03FFFFFF 19*b2ceba5aSNicolas Le Bayon 20*b2ceba5aSNicolas Le Bayon #define DIV_ID_SHIFT 8 21*b2ceba5aSNicolas Le Bayon #define DIV_ID_MASK 0x0000FF00 22*b2ceba5aSNicolas Le Bayon 23*b2ceba5aSNicolas Le Bayon #define DIV_DIVN_SHIFT 0 24*b2ceba5aSNicolas Le Bayon #define DIV_DIVN_MASK 0x000000FF 25*b2ceba5aSNicolas Le Bayon 26*b2ceba5aSNicolas Le Bayon #define MUX_ID_SHIFT 4 27*b2ceba5aSNicolas Le Bayon #define MUX_ID_MASK 0x00000FF0 28*b2ceba5aSNicolas Le Bayon 29*b2ceba5aSNicolas Le Bayon #define MUX_SEL_SHIFT 0 30*b2ceba5aSNicolas Le Bayon #define MUX_SEL_MASK 0x0000000F 31*b2ceba5aSNicolas Le Bayon 32*b2ceba5aSNicolas Le Bayon /* Flexgen define */ 33*b2ceba5aSNicolas Le Bayon #define FLEX_ID_SHIFT 20 34*b2ceba5aSNicolas Le Bayon #define FLEX_SEL_SHIFT 16 35*b2ceba5aSNicolas Le Bayon #define FLEX_PDIV_SHIFT 6 36*b2ceba5aSNicolas Le Bayon #define FLEX_FDIV_SHIFT 0 37*b2ceba5aSNicolas Le Bayon 38*b2ceba5aSNicolas Le Bayon #define FLEX_ID_MASK GENMASK_32(25, 20) 39*b2ceba5aSNicolas Le Bayon #define FLEX_SEL_MASK GENMASK_32(19, 16) 40*b2ceba5aSNicolas Le Bayon #define FLEX_PDIV_MASK GENMASK_32(15, 6) 41*b2ceba5aSNicolas Le Bayon #define FLEX_FDIV_MASK GENMASK_32(5, 0) 42*b2ceba5aSNicolas Le Bayon 43*b2ceba5aSNicolas Le Bayon #define DIV_CFG(div_id, div) ((CMD_DIV << CMD_SHIFT) |\ 44*b2ceba5aSNicolas Le Bayon ((div_id) << DIV_ID_SHIFT |\ 45*b2ceba5aSNicolas Le Bayon (div))) 46*b2ceba5aSNicolas Le Bayon 47*b2ceba5aSNicolas Le Bayon #define MUX_CFG(mux_id, sel) ((CMD_MUX << CMD_SHIFT) |\ 48*b2ceba5aSNicolas Le Bayon ((mux_id) << MUX_ID_SHIFT |\ 49*b2ceba5aSNicolas Le Bayon (sel))) 50*b2ceba5aSNicolas Le Bayon 51*b2ceba5aSNicolas Le Bayon #define CLK_ADDR_SHIFT 16 52*b2ceba5aSNicolas Le Bayon #define CLK_ADDR_MASK GENMASK_32(30, 16) 53*b2ceba5aSNicolas Le Bayon #define CLK_ADDR_VAL_MASK GENMASK_32(15, 0) 54*b2ceba5aSNicolas Le Bayon 55*b2ceba5aSNicolas Le Bayon #define DIV_LSMCU 0 56*b2ceba5aSNicolas Le Bayon #define DIV_APB1 1 57*b2ceba5aSNicolas Le Bayon #define DIV_APB2 2 58*b2ceba5aSNicolas Le Bayon #define DIV_APB3 3 59*b2ceba5aSNicolas Le Bayon #define DIV_APB4 4 60*b2ceba5aSNicolas Le Bayon #define DIV_APB5 5 61*b2ceba5aSNicolas Le Bayon #define DIV_APBDBG 6 62*b2ceba5aSNicolas Le Bayon #define DIV_RTC 7 63*b2ceba5aSNicolas Le Bayon #define DIV_NB 8 64*b2ceba5aSNicolas Le Bayon 65*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL0 0 66*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL1 1 67*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL2 2 68*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL3 3 69*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL4 4 70*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL5 5 71*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL6 6 72*b2ceba5aSNicolas Le Bayon #define MUX_MUXSEL7 7 73*b2ceba5aSNicolas Le Bayon #define MUX_XBARSEL 8 74*b2ceba5aSNicolas Le Bayon #define MUX_RTC 9 75*b2ceba5aSNicolas Le Bayon #define MUX_MCO1 10 76*b2ceba5aSNicolas Le Bayon #define MUX_MCO2 11 77*b2ceba5aSNicolas Le Bayon #define MUX_ADC1 12 78*b2ceba5aSNicolas Le Bayon #define MUX_ADC2 13 79*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY1 14 80*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY2 15 81*b2ceba5aSNicolas Le Bayon #define MUX_DTS 16 82*b2ceba5aSNicolas Le Bayon #define MUX_CPU1 17 83*b2ceba5aSNicolas Le Bayon #define MUX_NB 18 84*b2ceba5aSNicolas Le Bayon 85*b2ceba5aSNicolas Le Bayon #define MUXSEL_HSI 0 86*b2ceba5aSNicolas Le Bayon #define MUXSEL_HSE 1 87*b2ceba5aSNicolas Le Bayon #define MUXSEL_MSI 2 88*b2ceba5aSNicolas Le Bayon 89*b2ceba5aSNicolas Le Bayon /* KERNEL source clocks */ 90*b2ceba5aSNicolas Le Bayon #define MUX_RTC_DISABLED 0x0 91*b2ceba5aSNicolas Le Bayon #define MUX_RTC_LSE 0x1 92*b2ceba5aSNicolas Le Bayon #define MUX_RTC_LSI 0x2 93*b2ceba5aSNicolas Le Bayon #define MUX_RTC_HSE 0x3 94*b2ceba5aSNicolas Le Bayon 95*b2ceba5aSNicolas Le Bayon #define MUX_MCO1_FLEX61 0x0 96*b2ceba5aSNicolas Le Bayon #define MUX_MCO1_OBSER0 0x1 97*b2ceba5aSNicolas Le Bayon 98*b2ceba5aSNicolas Le Bayon #define MUX_MCO2_FLEX62 0x0 99*b2ceba5aSNicolas Le Bayon #define MUX_MCO2_OBSER1 0x1 100*b2ceba5aSNicolas Le Bayon 101*b2ceba5aSNicolas Le Bayon #define MUX_ADC1_FLEX46 0x0 102*b2ceba5aSNicolas Le Bayon #define MUX_ADC1_LSMCU 0x1 103*b2ceba5aSNicolas Le Bayon 104*b2ceba5aSNicolas Le Bayon #define MUX_ADC2_FLEX47 0x0 105*b2ceba5aSNicolas Le Bayon #define MUX_ADC2_LSMCU 0x1 106*b2ceba5aSNicolas Le Bayon #define MUX_ADC2_FLEX46 0x2 107*b2ceba5aSNicolas Le Bayon 108*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY1_FLEX57 0x0 109*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY1_HSE 0x1 110*b2ceba5aSNicolas Le Bayon 111*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY2_FLEX58 0x0 112*b2ceba5aSNicolas Le Bayon #define MUX_USB2PHY2_HSE 0x1 113*b2ceba5aSNicolas Le Bayon 114*b2ceba5aSNicolas Le Bayon #define MUX_DTS_HSI 0x0 115*b2ceba5aSNicolas Le Bayon #define MUX_DTS_HSE 0x1 116*b2ceba5aSNicolas Le Bayon #define MUX_DTS_MSI 0x2 117*b2ceba5aSNicolas Le Bayon 118*b2ceba5aSNicolas Le Bayon /* PLLs source clocks */ 119*b2ceba5aSNicolas Le Bayon #define PLL_SRC_HSI 0x0 120*b2ceba5aSNicolas Le Bayon #define PLL_SRC_HSE 0x1 121*b2ceba5aSNicolas Le Bayon #define PLL_SRC_MSI 0x2 122*b2ceba5aSNicolas Le Bayon #define PLL_SRC_DISABLED 0x3 123*b2ceba5aSNicolas Le Bayon 124*b2ceba5aSNicolas Le Bayon /* XBAR source clocks */ 125*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_PLL4 0x0 126*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_PLL5 0x1 127*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_PLL6 0x2 128*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_PLL7 0x3 129*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_PLL8 0x4 130*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_HSI 0x5 131*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_HSE 0x6 132*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_MSI 0x7 133*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_HSI_KER 0x8 134*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_HSE_KER 0x9 135*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_MSI_KER 0xA 136*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_SPDIF_SYMB 0xB 137*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_I2S 0xC 138*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_LSI 0xD 139*b2ceba5aSNicolas Le Bayon #define XBAR_SRC_LSE 0xE 140*b2ceba5aSNicolas Le Bayon 141*b2ceba5aSNicolas Le Bayon /* 142*b2ceba5aSNicolas Le Bayon * Configure a XBAR channel with its clock source 143*b2ceba5aSNicolas Le Bayon * ch: XBAR channel number from 0 to 63 144*b2ceba5aSNicolas Le Bayon * sel: one of the 15 previous XBAR source clocks defines 145*b2ceba5aSNicolas Le Bayon * pdiv: value of the PREDIV in channel RCC_PREDIVxCFGR register can be either 146*b2ceba5aSNicolas Le Bayon * 1, 2, 4 or 1024 147*b2ceba5aSNicolas Le Bayon * fdiv: value of the FINDIV in channel RCC_FINDIVxCFGR register from 1 to 64 148*b2ceba5aSNicolas Le Bayon */ 149*b2ceba5aSNicolas Le Bayon 150*b2ceba5aSNicolas Le Bayon #define FLEXGEN_CFG(ch, sel, pdiv, fdiv) ((CMD_FLEXGEN << CMD_SHIFT) |\ 151*b2ceba5aSNicolas Le Bayon ((ch) << FLEX_ID_SHIFT) |\ 152*b2ceba5aSNicolas Le Bayon ((sel) << FLEX_SEL_SHIFT) |\ 153*b2ceba5aSNicolas Le Bayon ((pdiv) << FLEX_PDIV_SHIFT) |\ 154*b2ceba5aSNicolas Le Bayon ((fdiv) << FLEX_FDIV_SHIFT)) 155*b2ceba5aSNicolas Le Bayon 156*b2ceba5aSNicolas Le Bayon /* Register addresses of MCO1 & MCO2 */ 157*b2ceba5aSNicolas Le Bayon #define MCO1 0x488 158*b2ceba5aSNicolas Le Bayon #define MCO2 0x48C 159*b2ceba5aSNicolas Le Bayon 160*b2ceba5aSNicolas Le Bayon #define MCO_OFF 0 161*b2ceba5aSNicolas Le Bayon #define MCO_ON 1 162*b2ceba5aSNicolas Le Bayon #define MCO_STATUS_SHIFT 8 163*b2ceba5aSNicolas Le Bayon 164*b2ceba5aSNicolas Le Bayon #define MCO_CFG(addr, sel, status) (CMD_ADDR_BIT |\ 165*b2ceba5aSNicolas Le Bayon ((addr) << CLK_ADDR_SHIFT) |\ 166*b2ceba5aSNicolas Le Bayon ((status) << MCO_STATUS_SHIFT) |\ 167*b2ceba5aSNicolas Le Bayon (sel)) 168*b2ceba5aSNicolas Le Bayon #define OBS_ID_SHIFT 14 169*b2ceba5aSNicolas Le Bayon #define OBS_STATUS_SHIFT 13 170*b2ceba5aSNicolas Le Bayon #define OBS_INTEXT_SHIFT 12 171*b2ceba5aSNicolas Le Bayon #define OBS_DIV_SHIFT 9 172*b2ceba5aSNicolas Le Bayon #define OBS_INV_SHIFT 8 173*b2ceba5aSNicolas Le Bayon #define OBS_SEL_SHIFT 0 174*b2ceba5aSNicolas Le Bayon 175*b2ceba5aSNicolas Le Bayon #define OBS_ID_MASK GENMASK_32(14, 14) 176*b2ceba5aSNicolas Le Bayon #define OBS_STATUS_MASK GENMASK_32(13, 13) 177*b2ceba5aSNicolas Le Bayon #define OBS_INTEXT_MASK GENMASK_32(12, 12) 178*b2ceba5aSNicolas Le Bayon #define OBS_DIV_MASK GENMASK_32(11, 9) 179*b2ceba5aSNicolas Le Bayon #define OBS_INV_MASK (1 << 8) 180*b2ceba5aSNicolas Le Bayon #define OBS_SEL_MASK GENMASK_32(7, 0) 181*b2ceba5aSNicolas Le Bayon 182*b2ceba5aSNicolas Le Bayon #define OBS_CFG(id, status, int_ext, div, inv, sel)\ 183*b2ceba5aSNicolas Le Bayon ((CMD_OBS << CMD_SHIFT) |\ 184*b2ceba5aSNicolas Le Bayon ((id) << OBS_ID_SHIFT) |\ 185*b2ceba5aSNicolas Le Bayon ((status) << OBS_STATUS_SHIFT) |\ 186*b2ceba5aSNicolas Le Bayon ((int_ext) << OBS_INTEXT_SHIFT) |\ 187*b2ceba5aSNicolas Le Bayon ((div) << OBS_DIV_SHIFT) |\ 188*b2ceba5aSNicolas Le Bayon ((inv) << OBS_INV_SHIFT) |\ 189*b2ceba5aSNicolas Le Bayon ((sel) << OBS_SEL_SHIFT)) 190*b2ceba5aSNicolas Le Bayon 191*b2ceba5aSNicolas Le Bayon #define OBS0 0 192*b2ceba5aSNicolas Le Bayon #define OBS1 1 193*b2ceba5aSNicolas Le Bayon 194*b2ceba5aSNicolas Le Bayon #define OBS_OFF 0 195*b2ceba5aSNicolas Le Bayon #define OBS_ON 1 196*b2ceba5aSNicolas Le Bayon 197*b2ceba5aSNicolas Le Bayon #define OBS_INT 0 198*b2ceba5aSNicolas Le Bayon #define OBS_EXT 1 199*b2ceba5aSNicolas Le Bayon 200*b2ceba5aSNicolas Le Bayon #define OBS_DIV1 0 201*b2ceba5aSNicolas Le Bayon #define OBS_DIV2 1 202*b2ceba5aSNicolas Le Bayon #define OBS_DIV4 2 203*b2ceba5aSNicolas Le Bayon #define OBS_DIV8 3 204*b2ceba5aSNicolas Le Bayon #define OBS_DIV16 4 205*b2ceba5aSNicolas Le Bayon #define OBS_DIV32 5 206*b2ceba5aSNicolas Le Bayon #define OBS_DIV64 6 207*b2ceba5aSNicolas Le Bayon #define OBS_DIV128 7 208*b2ceba5aSNicolas Le Bayon 209*b2ceba5aSNicolas Le Bayon #define OBS_NO_INV 0 210*b2ceba5aSNicolas Le Bayon #define OBS_INV 1 211*b2ceba5aSNicolas Le Bayon 212*b2ceba5aSNicolas Le Bayon #define OBS_INT_CFG(id, status, div, inv, sel)\ 213*b2ceba5aSNicolas Le Bayon OBS_CFG((id), (status), OBS_INT, (div), (inv), (sel)) 214*b2ceba5aSNicolas Le Bayon 215*b2ceba5aSNicolas Le Bayon #define OBS_EXT_CFG(id, status, div, inv, sel)\ 216*b2ceba5aSNicolas Le Bayon OBS_CFG((id), (status), OBS_EXT, (div), (inv), (sel)) 217*b2ceba5aSNicolas Le Bayon 218*b2ceba5aSNicolas Le Bayon /* define for st,pll /csg */ 219*b2ceba5aSNicolas Le Bayon #define SSCG_MODE_CENTER_SPREAD 0 220*b2ceba5aSNicolas Le Bayon #define SSCG_MODE_DOWN_SPREAD 1 221*b2ceba5aSNicolas Le Bayon 222*b2ceba5aSNicolas Le Bayon /* define for st,drive */ 223*b2ceba5aSNicolas Le Bayon #define LSEDRV_LOWEST 0 224*b2ceba5aSNicolas Le Bayon #define LSEDRV_MEDIUM_LOW 2 225*b2ceba5aSNicolas Le Bayon #define LSEDRV_MEDIUM_HIGH 1 226*b2ceba5aSNicolas Le Bayon #define LSEDRV_HIGHEST 3 227*b2ceba5aSNicolas Le Bayon 228*b2ceba5aSNicolas Le Bayon #endif /* _DT_BINDINGS_CLOCK_STM32MP21_CLKSRC_H_ */ 229