185229098SGabriel Fernandez /* SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause */ 23ccb708eSGabriel Fernandez /* 385229098SGabriel Fernandez * Copyright (C) 2023-2024, STMicroelectronics - All Rights Reserved 43ccb708eSGabriel Fernandez */ 53ccb708eSGabriel Fernandez 63ccb708eSGabriel Fernandez #ifndef _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ 73ccb708eSGabriel Fernandez #define _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ 83ccb708eSGabriel Fernandez 93ccb708eSGabriel Fernandez #define CMD_DIV 0 103ccb708eSGabriel Fernandez #define CMD_MUX 1 113ccb708eSGabriel Fernandez #define CMD_CLK 2 123ccb708eSGabriel Fernandez #define CMD_FLEXGEN 3 133ccb708eSGabriel Fernandez 143ccb708eSGabriel Fernandez #define CMD_ADDR_BIT 0x80000000 153ccb708eSGabriel Fernandez 163ccb708eSGabriel Fernandez #define CMD_SHIFT 26 173ccb708eSGabriel Fernandez #define CMD_MASK 0xFC000000 183ccb708eSGabriel Fernandez #define CMD_DATA_MASK 0x03FFFFFF 193ccb708eSGabriel Fernandez 203ccb708eSGabriel Fernandez #define DIV_ID_SHIFT 8 213ccb708eSGabriel Fernandez #define DIV_ID_MASK 0x0000FF00 223ccb708eSGabriel Fernandez 233ccb708eSGabriel Fernandez #define DIV_DIVN_SHIFT 0 243ccb708eSGabriel Fernandez #define DIV_DIVN_MASK 0x000000FF 253ccb708eSGabriel Fernandez 263ccb708eSGabriel Fernandez #define MUX_ID_SHIFT 4 273ccb708eSGabriel Fernandez #define MUX_ID_MASK 0x00000FF0 283ccb708eSGabriel Fernandez 293ccb708eSGabriel Fernandez #define MUX_SEL_SHIFT 0 303ccb708eSGabriel Fernandez #define MUX_SEL_MASK 0x0000000F 313ccb708eSGabriel Fernandez 323ccb708eSGabriel Fernandez /* CLK define */ 333ccb708eSGabriel Fernandez #define CLK_ON_MASK BIT(21) 343ccb708eSGabriel Fernandez #define CLK_ON_SHIFT 21 353ccb708eSGabriel Fernandez 363ccb708eSGabriel Fernandez #define CLK_ID_MASK GENMASK_32(20, 12) 373ccb708eSGabriel Fernandez #define CLK_ID_SHIFT 12 383ccb708eSGabriel Fernandez 393ccb708eSGabriel Fernandez #define CLK_NO_DIV_MASK 0x0000080 403ccb708eSGabriel Fernandez #define CLK_DIV_MASK GENMASK_32(10, 5) 413ccb708eSGabriel Fernandez #define CLK_DIV_SHIFT 5 423ccb708eSGabriel Fernandez 433ccb708eSGabriel Fernandez #define CLK_NO_SEL_MASK 0x00000010 443ccb708eSGabriel Fernandez #define CLK_SEL_MASK GENMASK_32(3, 0) 453ccb708eSGabriel Fernandez #define CLK_SEL_SHIFT 0 463ccb708eSGabriel Fernandez 473ccb708eSGabriel Fernandez #define CLK_CFG(clk_id, sel, div, state) ((CMD_CLK << CMD_SHIFT) |\ 483ccb708eSGabriel Fernandez ((state) << CLK_ON_SHIFT) |\ 493ccb708eSGabriel Fernandez ((clk_id) << CLK_ID_SHIFT) |\ 503ccb708eSGabriel Fernandez ((div) << CLK_DIV_SHIFT) |\ 513ccb708eSGabriel Fernandez ((sel) << CLK_SEL_SHIFT)) 523ccb708eSGabriel Fernandez 533ccb708eSGabriel Fernandez #define CLK_OFF 0 543ccb708eSGabriel Fernandez #define CLK_ON 1 553ccb708eSGabriel Fernandez #define CLK_NODIV 0x00000040 563ccb708eSGabriel Fernandez #define CLK_NOMUX 0x00000010 573ccb708eSGabriel Fernandez 583ccb708eSGabriel Fernandez /* Flexgen define */ 59*a8d4cc71SGabriel Fernandez #define FLEX_ID_SHIFT 20 60*a8d4cc71SGabriel Fernandez #define FLEX_SEL_SHIFT 16 613ccb708eSGabriel Fernandez #define FLEX_PDIV_SHIFT 6 623ccb708eSGabriel Fernandez #define FLEX_FDIV_SHIFT 0 633ccb708eSGabriel Fernandez 64*a8d4cc71SGabriel Fernandez #define FLEX_ID_MASK GENMASK_32(25, 20) 65*a8d4cc71SGabriel Fernandez #define FLEX_SEL_MASK GENMASK_32(19, 16) 66*a8d4cc71SGabriel Fernandez #define FLEX_PDIV_MASK GENMASK_32(15, 6) 673ccb708eSGabriel Fernandez #define FLEX_FDIV_MASK GENMASK_32(5, 0) 683ccb708eSGabriel Fernandez 693ccb708eSGabriel Fernandez #define DIV_CFG(div_id, div) ((CMD_DIV << CMD_SHIFT) |\ 703ccb708eSGabriel Fernandez ((div_id) << DIV_ID_SHIFT |\ 713ccb708eSGabriel Fernandez (div))) 723ccb708eSGabriel Fernandez 733ccb708eSGabriel Fernandez #define MUX_CFG(mux_id, sel) ((CMD_MUX << CMD_SHIFT) |\ 743ccb708eSGabriel Fernandez ((mux_id) << MUX_ID_SHIFT |\ 753ccb708eSGabriel Fernandez (sel))) 763ccb708eSGabriel Fernandez 773ccb708eSGabriel Fernandez #define CLK_ADDR_SHIFT 16 783ccb708eSGabriel Fernandez #define CLK_ADDR_MASK 0x7FFF0000 793ccb708eSGabriel Fernandez #define CLK_ADDR_VAL_MASK 0xFFFF 803ccb708eSGabriel Fernandez 813ccb708eSGabriel Fernandez #define DIV_LSMCU 0 823ccb708eSGabriel Fernandez #define DIV_APB1 1 833ccb708eSGabriel Fernandez #define DIV_APB2 2 843ccb708eSGabriel Fernandez #define DIV_APB3 3 853ccb708eSGabriel Fernandez #define DIV_APB4 4 863ccb708eSGabriel Fernandez #define DIV_APBDBG 5 873ccb708eSGabriel Fernandez #define DIV_RTC 6 883ccb708eSGabriel Fernandez #define DIV_NB 7 893ccb708eSGabriel Fernandez 903ccb708eSGabriel Fernandez #define MUX_MUXSEL0 0 913ccb708eSGabriel Fernandez #define MUX_MUXSEL1 1 923ccb708eSGabriel Fernandez #define MUX_MUXSEL2 2 933ccb708eSGabriel Fernandez #define MUX_MUXSEL3 3 943ccb708eSGabriel Fernandez #define MUX_MUXSEL4 4 953ccb708eSGabriel Fernandez #define MUX_MUXSEL5 5 963ccb708eSGabriel Fernandez #define MUX_MUXSEL6 6 973ccb708eSGabriel Fernandez #define MUX_MUXSEL7 7 983ccb708eSGabriel Fernandez #define MUX_XBARSEL 8 993ccb708eSGabriel Fernandez #define MUX_RTC 9 1003ccb708eSGabriel Fernandez #define MUX_MCO1 10 1013ccb708eSGabriel Fernandez #define MUX_MCO2 11 1023ccb708eSGabriel Fernandez #define MUX_ADC12 12 1033ccb708eSGabriel Fernandez #define MUX_ADC3 13 1043ccb708eSGabriel Fernandez #define MUX_USB2PHY1 14 1053ccb708eSGabriel Fernandez #define MUX_USB2PHY2 15 1063ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY 16 1073ccb708eSGabriel Fernandez #define MUX_DSIBLANE 17 1083ccb708eSGabriel Fernandez #define MUX_DSIPHY 18 1093ccb708eSGabriel Fernandez #define MUX_LVDSPHY 19 1103ccb708eSGabriel Fernandez #define MUX_DTS 20 11185229098SGabriel Fernandez #define MUX_D3PER 21 11285229098SGabriel Fernandez #define MUX_NB 22 1133ccb708eSGabriel Fernandez 1143ccb708eSGabriel Fernandez #define MUXSEL_HSI 0 1153ccb708eSGabriel Fernandez #define MUXSEL_HSE 1 1163ccb708eSGabriel Fernandez #define MUXSEL_MSI 2 1173ccb708eSGabriel Fernandez 1183ccb708eSGabriel Fernandez /* KERNEL source clocks */ 1193ccb708eSGabriel Fernandez #define MUX_RTC_DISABLED 0x0 1203ccb708eSGabriel Fernandez #define MUX_RTC_LSE 0x1 1213ccb708eSGabriel Fernandez #define MUX_RTC_LSI 0x2 1223ccb708eSGabriel Fernandez #define MUX_RTC_HSE 0x3 1233ccb708eSGabriel Fernandez 1243ccb708eSGabriel Fernandez #define MUX_MCO1_FLEX61 0x0 1253ccb708eSGabriel Fernandez #define MUX_MCO1_OBSER0 0x1 1263ccb708eSGabriel Fernandez 1273ccb708eSGabriel Fernandez #define MUX_MCO2_FLEX62 0x0 1283ccb708eSGabriel Fernandez #define MUX_MCO2_OBSER1 0x1 1293ccb708eSGabriel Fernandez 1303ccb708eSGabriel Fernandez #define MUX_ADC12_FLEX46 0x0 1313ccb708eSGabriel Fernandez #define MUX_ADC12_LSMCU 0x1 1323ccb708eSGabriel Fernandez 1333ccb708eSGabriel Fernandez #define MUX_ADC3_FLEX47 0x0 1343ccb708eSGabriel Fernandez #define MUX_ADC3_LSMCU 0x1 1353ccb708eSGabriel Fernandez #define MUX_ADC3_FLEX46 0x2 1363ccb708eSGabriel Fernandez 1373ccb708eSGabriel Fernandez #define MUX_USB2PHY1_FLEX57 0x0 1383ccb708eSGabriel Fernandez #define MUX_USB2PHY1_HSE 0x1 1393ccb708eSGabriel Fernandez 1403ccb708eSGabriel Fernandez #define MUX_USB2PHY2_FLEX58 0x0 1413ccb708eSGabriel Fernandez #define MUX_USB2PHY2_HSE 0x1 1423ccb708eSGabriel Fernandez 1433ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY_FLEX34 0x0 1443ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY_HSE 0x1 1453ccb708eSGabriel Fernandez 14685229098SGabriel Fernandez #define MUX_DSIBLANE_DSIPHY 0x0 1473ccb708eSGabriel Fernandez #define MUX_DSIBLANE_FLEX27 0x1 1483ccb708eSGabriel Fernandez 1493ccb708eSGabriel Fernandez #define MUX_DSIPHY_FLEX28 0x0 1503ccb708eSGabriel Fernandez #define MUX_DSIPHY_HSE 0x1 1513ccb708eSGabriel Fernandez 1523ccb708eSGabriel Fernandez #define MUX_LVDSPHY_FLEX32 0x0 1533ccb708eSGabriel Fernandez #define MUX_LVDSPHY_HSE 0x1 1543ccb708eSGabriel Fernandez 1553ccb708eSGabriel Fernandez #define MUX_DTS_HSI 0x0 1563ccb708eSGabriel Fernandez #define MUX_DTS_HSE 0x1 1573ccb708eSGabriel Fernandez #define MUX_DTS_MSI 0x2 1583ccb708eSGabriel Fernandez 1593ccb708eSGabriel Fernandez #define MUX_D3PER_MSI 0x0 1603ccb708eSGabriel Fernandez #define MUX_D3PER_LSI 0x1 1613ccb708eSGabriel Fernandez #define MUX_D3PER_LSE 0x2 1623ccb708eSGabriel Fernandez 1633ccb708eSGabriel Fernandez /* PLLs source clocks */ 1643ccb708eSGabriel Fernandez #define PLL_SRC_HSI 0x0 1653ccb708eSGabriel Fernandez #define PLL_SRC_HSE 0x1 1663ccb708eSGabriel Fernandez #define PLL_SRC_MSI 0x2 1673ccb708eSGabriel Fernandez #define PLL_SRC_DISABLED 0x3 1683ccb708eSGabriel Fernandez 1693ccb708eSGabriel Fernandez /* XBAR source clocks */ 1703ccb708eSGabriel Fernandez #define XBAR_SRC_PLL4 0x0 1713ccb708eSGabriel Fernandez #define XBAR_SRC_PLL5 0x1 1723ccb708eSGabriel Fernandez #define XBAR_SRC_PLL6 0x2 1733ccb708eSGabriel Fernandez #define XBAR_SRC_PLL7 0x3 1743ccb708eSGabriel Fernandez #define XBAR_SRC_PLL8 0x4 1753ccb708eSGabriel Fernandez #define XBAR_SRC_HSI 0x5 1763ccb708eSGabriel Fernandez #define XBAR_SRC_HSE 0x6 1773ccb708eSGabriel Fernandez #define XBAR_SRC_MSI 0x7 1783ccb708eSGabriel Fernandez #define XBAR_SRC_HSI_KER 0x8 1793ccb708eSGabriel Fernandez #define XBAR_SRC_HSE_KER 0x9 1803ccb708eSGabriel Fernandez #define XBAR_SRC_MSI_KER 0xA 1813ccb708eSGabriel Fernandez #define XBAR_SRC_SPDIF_SYMB 0xB 1823ccb708eSGabriel Fernandez #define XBAR_SRC_I2S 0xC 1833ccb708eSGabriel Fernandez #define XBAR_SRC_LSI 0xD 1843ccb708eSGabriel Fernandez #define XBAR_SRC_LSE 0xE 1853ccb708eSGabriel Fernandez 1863ccb708eSGabriel Fernandez /* 1873ccb708eSGabriel Fernandez * Configure a XBAR channel with its clock source 1883ccb708eSGabriel Fernandez * channel_nb: XBAR channel number from 0 to 63 1893ccb708eSGabriel Fernandez * channel_src: one of the 15 previous XBAR source clocks defines 1903ccb708eSGabriel Fernandez * channel_prediv: value of the PREDIV in channel RCC_PREDIVxCFGR register 1913ccb708eSGabriel Fernandez * can be either 1, 2, 4 or 1024 1923ccb708eSGabriel Fernandez * channel_findiv: value of the FINDIV in channel RCC_FINDIVxCFGR register 1933ccb708eSGabriel Fernandez * from 1 to 64 1943ccb708eSGabriel Fernandez */ 1953ccb708eSGabriel Fernandez 1963ccb708eSGabriel Fernandez #define FLEXGEN_CFG(ch, sel, pdiv, fdiv) ((CMD_FLEXGEN << CMD_SHIFT) |\ 1973ccb708eSGabriel Fernandez ((ch) << FLEX_ID_SHIFT) |\ 1983ccb708eSGabriel Fernandez ((sel) << FLEX_SEL_SHIFT) |\ 1993ccb708eSGabriel Fernandez ((pdiv) << FLEX_PDIV_SHIFT) |\ 2003ccb708eSGabriel Fernandez ((fdiv) << FLEX_FDIV_SHIFT)) 2013ccb708eSGabriel Fernandez 2023ccb708eSGabriel Fernandez /* Register addresses of MCO1 & MCO2 */ 2033ccb708eSGabriel Fernandez #define MCO1 0x494 2043ccb708eSGabriel Fernandez #define MCO2 0x498 2053ccb708eSGabriel Fernandez 2063ccb708eSGabriel Fernandez #define MCO_OFF 0 2073ccb708eSGabriel Fernandez #define MCO_ON 1 2083ccb708eSGabriel Fernandez #define MCO_STATUS_SHIFT 8 2093ccb708eSGabriel Fernandez 2103ccb708eSGabriel Fernandez #define MCO_CFG(addr, sel, status) (CMD_ADDR_BIT |\ 2113ccb708eSGabriel Fernandez ((addr) << CLK_ADDR_SHIFT) |\ 2123ccb708eSGabriel Fernandez ((status) << MCO_STATUS_SHIFT) |\ 2133ccb708eSGabriel Fernandez (sel)) 2143ccb708eSGabriel Fernandez 2153ccb708eSGabriel Fernandez /* define for st,pll /csg */ 2163ccb708eSGabriel Fernandez #define SSCG_MODE_CENTER_SPREAD 0 2173ccb708eSGabriel Fernandez #define SSCG_MODE_DOWN_SPREAD 1 2183ccb708eSGabriel Fernandez 2193ccb708eSGabriel Fernandez /* define for st,drive */ 2203ccb708eSGabriel Fernandez #define LSEDRV_LOWEST 0 22185229098SGabriel Fernandez #define LSEDRV_MEDIUM_LOW 2 22285229098SGabriel Fernandez #define LSEDRV_MEDIUM_HIGH 1 2233ccb708eSGabriel Fernandez #define LSEDRV_HIGHEST 3 2243ccb708eSGabriel Fernandez 2253ccb708eSGabriel Fernandez #endif /* _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ */ 226