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