xref: /qemu/include/hw/misc/bcm2835_cprman_internals.h (revision 09d56bbc9bc2f40865764b06b9830a9504bd3f9a)
1fc14176bSLuc Michel /*
2fc14176bSLuc Michel  * BCM2835 CPRMAN clock manager
3fc14176bSLuc Michel  *
4fc14176bSLuc Michel  * Copyright (c) 2020 Luc Michel <luc@lmichel.fr>
5fc14176bSLuc Michel  *
6fc14176bSLuc Michel  * SPDX-License-Identifier: GPL-2.0-or-later
7fc14176bSLuc Michel  */
8fc14176bSLuc Michel 
9fc14176bSLuc Michel #ifndef HW_MISC_CPRMAN_INTERNALS_H
10fc14176bSLuc Michel #define HW_MISC_CPRMAN_INTERNALS_H
11fc14176bSLuc Michel 
12fc14176bSLuc Michel #include "hw/registerfields.h"
13fc14176bSLuc Michel #include "hw/misc/bcm2835_cprman.h"
14fc14176bSLuc Michel 
151e986e25SLuc Michel #define TYPE_CPRMAN_PLL "bcm2835-cprman-pll"
16*09d56bbcSLuc Michel #define TYPE_CPRMAN_PLL_CHANNEL "bcm2835-cprman-pll-channel"
171e986e25SLuc Michel 
181e986e25SLuc Michel DECLARE_INSTANCE_CHECKER(CprmanPllState, CPRMAN_PLL,
191e986e25SLuc Michel                          TYPE_CPRMAN_PLL)
20*09d56bbcSLuc Michel DECLARE_INSTANCE_CHECKER(CprmanPllChannelState, CPRMAN_PLL_CHANNEL,
21*09d56bbcSLuc Michel                          TYPE_CPRMAN_PLL_CHANNEL)
221e986e25SLuc Michel 
23fc14176bSLuc Michel /* Register map */
24fc14176bSLuc Michel 
251e986e25SLuc Michel /* PLLs */
261e986e25SLuc Michel REG32(CM_PLLA, 0x104)
271e986e25SLuc Michel     FIELD(CM_PLLA, LOADDSI0, 0, 1)
281e986e25SLuc Michel     FIELD(CM_PLLA, HOLDDSI0, 1, 1)
291e986e25SLuc Michel     FIELD(CM_PLLA, LOADCCP2, 2, 1)
301e986e25SLuc Michel     FIELD(CM_PLLA, HOLDCCP2, 3, 1)
311e986e25SLuc Michel     FIELD(CM_PLLA, LOADCORE, 4, 1)
321e986e25SLuc Michel     FIELD(CM_PLLA, HOLDCORE, 5, 1)
331e986e25SLuc Michel     FIELD(CM_PLLA, LOADPER, 6, 1)
341e986e25SLuc Michel     FIELD(CM_PLLA, HOLDPER, 7, 1)
351e986e25SLuc Michel     FIELD(CM_PLLx, ANARST, 8, 1)
361e986e25SLuc Michel REG32(CM_PLLC, 0x108)
371e986e25SLuc Michel     FIELD(CM_PLLC, LOADCORE0, 0, 1)
381e986e25SLuc Michel     FIELD(CM_PLLC, HOLDCORE0, 1, 1)
391e986e25SLuc Michel     FIELD(CM_PLLC, LOADCORE1, 2, 1)
401e986e25SLuc Michel     FIELD(CM_PLLC, HOLDCORE1, 3, 1)
411e986e25SLuc Michel     FIELD(CM_PLLC, LOADCORE2, 4, 1)
421e986e25SLuc Michel     FIELD(CM_PLLC, HOLDCORE2, 5, 1)
431e986e25SLuc Michel     FIELD(CM_PLLC, LOADPER, 6, 1)
441e986e25SLuc Michel     FIELD(CM_PLLC, HOLDPER, 7, 1)
451e986e25SLuc Michel REG32(CM_PLLD, 0x10c)
461e986e25SLuc Michel     FIELD(CM_PLLD, LOADDSI0, 0, 1)
471e986e25SLuc Michel     FIELD(CM_PLLD, HOLDDSI0, 1, 1)
481e986e25SLuc Michel     FIELD(CM_PLLD, LOADDSI1, 2, 1)
491e986e25SLuc Michel     FIELD(CM_PLLD, HOLDDSI1, 3, 1)
501e986e25SLuc Michel     FIELD(CM_PLLD, LOADCORE, 4, 1)
511e986e25SLuc Michel     FIELD(CM_PLLD, HOLDCORE, 5, 1)
521e986e25SLuc Michel     FIELD(CM_PLLD, LOADPER, 6, 1)
531e986e25SLuc Michel     FIELD(CM_PLLD, HOLDPER, 7, 1)
541e986e25SLuc Michel REG32(CM_PLLH, 0x110)
551e986e25SLuc Michel     FIELD(CM_PLLH, LOADPIX, 0, 1)
561e986e25SLuc Michel     FIELD(CM_PLLH, LOADAUX, 1, 1)
571e986e25SLuc Michel     FIELD(CM_PLLH, LOADRCAL, 2, 1)
581e986e25SLuc Michel REG32(CM_PLLB, 0x170)
591e986e25SLuc Michel     FIELD(CM_PLLB, LOADARM, 0, 1)
601e986e25SLuc Michel     FIELD(CM_PLLB, HOLDARM, 1, 1)
611e986e25SLuc Michel 
621e986e25SLuc Michel REG32(A2W_PLLA_CTRL, 0x1100)
631e986e25SLuc Michel     FIELD(A2W_PLLx_CTRL, NDIV, 0, 10)
641e986e25SLuc Michel     FIELD(A2W_PLLx_CTRL, PDIV, 12, 3)
651e986e25SLuc Michel     FIELD(A2W_PLLx_CTRL, PWRDN, 16, 1)
661e986e25SLuc Michel     FIELD(A2W_PLLx_CTRL, PRST_DISABLE, 17, 1)
671e986e25SLuc Michel REG32(A2W_PLLC_CTRL, 0x1120)
681e986e25SLuc Michel REG32(A2W_PLLD_CTRL, 0x1140)
691e986e25SLuc Michel REG32(A2W_PLLH_CTRL, 0x1160)
701e986e25SLuc Michel REG32(A2W_PLLB_CTRL, 0x11e0)
711e986e25SLuc Michel 
721e986e25SLuc Michel REG32(A2W_PLLA_ANA0, 0x1010)
731e986e25SLuc Michel REG32(A2W_PLLA_ANA1, 0x1014)
741e986e25SLuc Michel     FIELD(A2W_PLLx_ANA1, FB_PREDIV, 14, 1)
751e986e25SLuc Michel REG32(A2W_PLLA_ANA2, 0x1018)
761e986e25SLuc Michel REG32(A2W_PLLA_ANA3, 0x101c)
771e986e25SLuc Michel 
781e986e25SLuc Michel REG32(A2W_PLLC_ANA0, 0x1030)
791e986e25SLuc Michel REG32(A2W_PLLC_ANA1, 0x1034)
801e986e25SLuc Michel REG32(A2W_PLLC_ANA2, 0x1038)
811e986e25SLuc Michel REG32(A2W_PLLC_ANA3, 0x103c)
821e986e25SLuc Michel 
831e986e25SLuc Michel REG32(A2W_PLLD_ANA0, 0x1050)
841e986e25SLuc Michel REG32(A2W_PLLD_ANA1, 0x1054)
851e986e25SLuc Michel REG32(A2W_PLLD_ANA2, 0x1058)
861e986e25SLuc Michel REG32(A2W_PLLD_ANA3, 0x105c)
871e986e25SLuc Michel 
881e986e25SLuc Michel REG32(A2W_PLLH_ANA0, 0x1070)
891e986e25SLuc Michel REG32(A2W_PLLH_ANA1, 0x1074)
901e986e25SLuc Michel     FIELD(A2W_PLLH_ANA1, FB_PREDIV, 11, 1)
911e986e25SLuc Michel REG32(A2W_PLLH_ANA2, 0x1078)
921e986e25SLuc Michel REG32(A2W_PLLH_ANA3, 0x107c)
931e986e25SLuc Michel 
941e986e25SLuc Michel REG32(A2W_PLLB_ANA0, 0x10f0)
951e986e25SLuc Michel REG32(A2W_PLLB_ANA1, 0x10f4)
961e986e25SLuc Michel REG32(A2W_PLLB_ANA2, 0x10f8)
971e986e25SLuc Michel REG32(A2W_PLLB_ANA3, 0x10fc)
981e986e25SLuc Michel 
991e986e25SLuc Michel REG32(A2W_PLLA_FRAC, 0x1200)
1001e986e25SLuc Michel     FIELD(A2W_PLLx_FRAC, FRAC, 0, 20)
1011e986e25SLuc Michel REG32(A2W_PLLC_FRAC, 0x1220)
1021e986e25SLuc Michel REG32(A2W_PLLD_FRAC, 0x1240)
1031e986e25SLuc Michel REG32(A2W_PLLH_FRAC, 0x1260)
1041e986e25SLuc Michel REG32(A2W_PLLB_FRAC, 0x12e0)
1051e986e25SLuc Michel 
106*09d56bbcSLuc Michel /* PLL channels */
107*09d56bbcSLuc Michel REG32(A2W_PLLA_DSI0, 0x1300)
108*09d56bbcSLuc Michel     FIELD(A2W_PLLx_CHANNELy, DIV, 0, 8)
109*09d56bbcSLuc Michel     FIELD(A2W_PLLx_CHANNELy, DISABLE, 8, 1)
110*09d56bbcSLuc Michel REG32(A2W_PLLA_CORE, 0x1400)
111*09d56bbcSLuc Michel REG32(A2W_PLLA_PER, 0x1500)
112*09d56bbcSLuc Michel REG32(A2W_PLLA_CCP2, 0x1600)
113*09d56bbcSLuc Michel 
114*09d56bbcSLuc Michel REG32(A2W_PLLC_CORE2, 0x1320)
115*09d56bbcSLuc Michel REG32(A2W_PLLC_CORE1, 0x1420)
116*09d56bbcSLuc Michel REG32(A2W_PLLC_PER, 0x1520)
117*09d56bbcSLuc Michel REG32(A2W_PLLC_CORE0, 0x1620)
118*09d56bbcSLuc Michel 
119*09d56bbcSLuc Michel REG32(A2W_PLLD_DSI0, 0x1340)
120*09d56bbcSLuc Michel REG32(A2W_PLLD_CORE, 0x1440)
121*09d56bbcSLuc Michel REG32(A2W_PLLD_PER, 0x1540)
122*09d56bbcSLuc Michel REG32(A2W_PLLD_DSI1, 0x1640)
123*09d56bbcSLuc Michel 
124*09d56bbcSLuc Michel REG32(A2W_PLLH_AUX, 0x1360)
125*09d56bbcSLuc Michel REG32(A2W_PLLH_RCAL, 0x1460)
126*09d56bbcSLuc Michel REG32(A2W_PLLH_PIX, 0x1560)
127*09d56bbcSLuc Michel REG32(A2W_PLLH_STS, 0x1660)
128*09d56bbcSLuc Michel 
129*09d56bbcSLuc Michel REG32(A2W_PLLB_ARM, 0x13e0)
130*09d56bbcSLuc Michel 
1316d2b874cSLuc Michel /* misc registers */
1326d2b874cSLuc Michel REG32(CM_LOCK, 0x114)
1336d2b874cSLuc Michel     FIELD(CM_LOCK, FLOCKH, 12, 1)
1346d2b874cSLuc Michel     FIELD(CM_LOCK, FLOCKD, 11, 1)
1356d2b874cSLuc Michel     FIELD(CM_LOCK, FLOCKC, 10, 1)
1366d2b874cSLuc Michel     FIELD(CM_LOCK, FLOCKB, 9, 1)
1376d2b874cSLuc Michel     FIELD(CM_LOCK, FLOCKA, 8, 1)
1386d2b874cSLuc Michel 
139fc14176bSLuc Michel /*
140fc14176bSLuc Michel  * This field is common to all registers. Each register write value must match
141fc14176bSLuc Michel  * the CPRMAN_PASSWORD magic value in its 8 MSB.
142fc14176bSLuc Michel  */
143fc14176bSLuc Michel FIELD(CPRMAN, PASSWORD, 24, 8)
144fc14176bSLuc Michel #define CPRMAN_PASSWORD 0x5a
145fc14176bSLuc Michel 
1461e986e25SLuc Michel /* PLL init info */
1471e986e25SLuc Michel typedef struct PLLInitInfo {
1481e986e25SLuc Michel     const char *name;
1491e986e25SLuc Michel     size_t cm_offset;
1501e986e25SLuc Michel     size_t a2w_ctrl_offset;
1511e986e25SLuc Michel     size_t a2w_ana_offset;
1521e986e25SLuc Michel     uint32_t prediv_mask; /* Prediv bit in ana[1] */
1531e986e25SLuc Michel     size_t a2w_frac_offset;
1541e986e25SLuc Michel } PLLInitInfo;
1551e986e25SLuc Michel 
1561e986e25SLuc Michel #define FILL_PLL_INIT_INFO(pll_)                \
1571e986e25SLuc Michel     .cm_offset = R_CM_ ## pll_,                 \
1581e986e25SLuc Michel     .a2w_ctrl_offset = R_A2W_ ## pll_ ## _CTRL, \
1591e986e25SLuc Michel     .a2w_ana_offset = R_A2W_ ## pll_ ## _ANA0,  \
1601e986e25SLuc Michel     .a2w_frac_offset = R_A2W_ ## pll_ ## _FRAC
1611e986e25SLuc Michel 
1621e986e25SLuc Michel static const PLLInitInfo PLL_INIT_INFO[] = {
1631e986e25SLuc Michel     [CPRMAN_PLLA] = {
1641e986e25SLuc Michel         .name = "plla",
1651e986e25SLuc Michel         .prediv_mask = R_A2W_PLLx_ANA1_FB_PREDIV_MASK,
1661e986e25SLuc Michel         FILL_PLL_INIT_INFO(PLLA),
1671e986e25SLuc Michel     },
1681e986e25SLuc Michel     [CPRMAN_PLLC] = {
1691e986e25SLuc Michel         .name = "pllc",
1701e986e25SLuc Michel         .prediv_mask = R_A2W_PLLx_ANA1_FB_PREDIV_MASK,
1711e986e25SLuc Michel         FILL_PLL_INIT_INFO(PLLC),
1721e986e25SLuc Michel     },
1731e986e25SLuc Michel     [CPRMAN_PLLD] = {
1741e986e25SLuc Michel         .name = "plld",
1751e986e25SLuc Michel         .prediv_mask = R_A2W_PLLx_ANA1_FB_PREDIV_MASK,
1761e986e25SLuc Michel         FILL_PLL_INIT_INFO(PLLD),
1771e986e25SLuc Michel     },
1781e986e25SLuc Michel     [CPRMAN_PLLH] = {
1791e986e25SLuc Michel         .name = "pllh",
1801e986e25SLuc Michel         .prediv_mask = R_A2W_PLLH_ANA1_FB_PREDIV_MASK,
1811e986e25SLuc Michel         FILL_PLL_INIT_INFO(PLLH),
1821e986e25SLuc Michel     },
1831e986e25SLuc Michel     [CPRMAN_PLLB] = {
1841e986e25SLuc Michel         .name = "pllb",
1851e986e25SLuc Michel         .prediv_mask = R_A2W_PLLx_ANA1_FB_PREDIV_MASK,
1861e986e25SLuc Michel         FILL_PLL_INIT_INFO(PLLB),
1871e986e25SLuc Michel     },
1881e986e25SLuc Michel };
1891e986e25SLuc Michel 
1901e986e25SLuc Michel #undef FILL_PLL_CHANNEL_INIT_INFO
1911e986e25SLuc Michel 
1921e986e25SLuc Michel static inline void set_pll_init_info(BCM2835CprmanState *s,
1931e986e25SLuc Michel                                      CprmanPllState *pll,
1941e986e25SLuc Michel                                      CprmanPll id)
1951e986e25SLuc Michel {
1961e986e25SLuc Michel     pll->id = id;
1971e986e25SLuc Michel     pll->reg_cm = &s->regs[PLL_INIT_INFO[id].cm_offset];
1981e986e25SLuc Michel     pll->reg_a2w_ctrl = &s->regs[PLL_INIT_INFO[id].a2w_ctrl_offset];
1991e986e25SLuc Michel     pll->reg_a2w_ana = &s->regs[PLL_INIT_INFO[id].a2w_ana_offset];
2001e986e25SLuc Michel     pll->prediv_mask = PLL_INIT_INFO[id].prediv_mask;
2011e986e25SLuc Michel     pll->reg_a2w_frac = &s->regs[PLL_INIT_INFO[id].a2w_frac_offset];
2021e986e25SLuc Michel }
2031e986e25SLuc Michel 
204*09d56bbcSLuc Michel 
205*09d56bbcSLuc Michel /* PLL channel init info */
206*09d56bbcSLuc Michel typedef struct PLLChannelInitInfo {
207*09d56bbcSLuc Michel     const char *name;
208*09d56bbcSLuc Michel     CprmanPll parent;
209*09d56bbcSLuc Michel     size_t cm_offset;
210*09d56bbcSLuc Michel     uint32_t cm_hold_mask;
211*09d56bbcSLuc Michel     uint32_t cm_load_mask;
212*09d56bbcSLuc Michel     size_t a2w_ctrl_offset;
213*09d56bbcSLuc Michel     unsigned int fixed_divider;
214*09d56bbcSLuc Michel } PLLChannelInitInfo;
215*09d56bbcSLuc Michel 
216*09d56bbcSLuc Michel #define FILL_PLL_CHANNEL_INIT_INFO_common(pll_, channel_)            \
217*09d56bbcSLuc Michel     .parent = CPRMAN_ ## pll_,                                       \
218*09d56bbcSLuc Michel     .cm_offset = R_CM_ ## pll_,                                      \
219*09d56bbcSLuc Michel     .cm_load_mask = R_CM_ ## pll_ ## _ ## LOAD ## channel_ ## _MASK, \
220*09d56bbcSLuc Michel     .a2w_ctrl_offset = R_A2W_ ## pll_ ## _ ## channel_
221*09d56bbcSLuc Michel 
222*09d56bbcSLuc Michel #define FILL_PLL_CHANNEL_INIT_INFO(pll_, channel_)                   \
223*09d56bbcSLuc Michel     FILL_PLL_CHANNEL_INIT_INFO_common(pll_, channel_),               \
224*09d56bbcSLuc Michel     .cm_hold_mask = R_CM_ ## pll_ ## _ ## HOLD ## channel_ ## _MASK, \
225*09d56bbcSLuc Michel     .fixed_divider = 1
226*09d56bbcSLuc Michel 
227*09d56bbcSLuc Michel #define FILL_PLL_CHANNEL_INIT_INFO_nohold(pll_, channel_) \
228*09d56bbcSLuc Michel     FILL_PLL_CHANNEL_INIT_INFO_common(pll_, channel_),    \
229*09d56bbcSLuc Michel     .cm_hold_mask = 0
230*09d56bbcSLuc Michel 
231*09d56bbcSLuc Michel static PLLChannelInitInfo PLL_CHANNEL_INIT_INFO[] = {
232*09d56bbcSLuc Michel     [CPRMAN_PLLA_CHANNEL_DSI0] = {
233*09d56bbcSLuc Michel         .name = "plla-dsi0",
234*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLA, DSI0),
235*09d56bbcSLuc Michel     },
236*09d56bbcSLuc Michel     [CPRMAN_PLLA_CHANNEL_CORE] = {
237*09d56bbcSLuc Michel         .name = "plla-core",
238*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLA, CORE),
239*09d56bbcSLuc Michel     },
240*09d56bbcSLuc Michel     [CPRMAN_PLLA_CHANNEL_PER] = {
241*09d56bbcSLuc Michel         .name = "plla-per",
242*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLA, PER),
243*09d56bbcSLuc Michel     },
244*09d56bbcSLuc Michel     [CPRMAN_PLLA_CHANNEL_CCP2] = {
245*09d56bbcSLuc Michel         .name = "plla-ccp2",
246*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLA, CCP2),
247*09d56bbcSLuc Michel     },
248*09d56bbcSLuc Michel 
249*09d56bbcSLuc Michel     [CPRMAN_PLLC_CHANNEL_CORE2] = {
250*09d56bbcSLuc Michel         .name = "pllc-core2",
251*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLC, CORE2),
252*09d56bbcSLuc Michel     },
253*09d56bbcSLuc Michel     [CPRMAN_PLLC_CHANNEL_CORE1] = {
254*09d56bbcSLuc Michel         .name = "pllc-core1",
255*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLC, CORE1),
256*09d56bbcSLuc Michel     },
257*09d56bbcSLuc Michel     [CPRMAN_PLLC_CHANNEL_PER] = {
258*09d56bbcSLuc Michel         .name = "pllc-per",
259*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLC, PER),
260*09d56bbcSLuc Michel     },
261*09d56bbcSLuc Michel     [CPRMAN_PLLC_CHANNEL_CORE0] = {
262*09d56bbcSLuc Michel         .name = "pllc-core0",
263*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLC, CORE0),
264*09d56bbcSLuc Michel     },
265*09d56bbcSLuc Michel 
266*09d56bbcSLuc Michel     [CPRMAN_PLLD_CHANNEL_DSI0] = {
267*09d56bbcSLuc Michel         .name = "plld-dsi0",
268*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLD, DSI0),
269*09d56bbcSLuc Michel     },
270*09d56bbcSLuc Michel     [CPRMAN_PLLD_CHANNEL_CORE] = {
271*09d56bbcSLuc Michel         .name = "plld-core",
272*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLD, CORE),
273*09d56bbcSLuc Michel     },
274*09d56bbcSLuc Michel     [CPRMAN_PLLD_CHANNEL_PER] = {
275*09d56bbcSLuc Michel         .name = "plld-per",
276*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLD, PER),
277*09d56bbcSLuc Michel     },
278*09d56bbcSLuc Michel     [CPRMAN_PLLD_CHANNEL_DSI1] = {
279*09d56bbcSLuc Michel         .name = "plld-dsi1",
280*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLD, DSI1),
281*09d56bbcSLuc Michel     },
282*09d56bbcSLuc Michel 
283*09d56bbcSLuc Michel     [CPRMAN_PLLH_CHANNEL_AUX] = {
284*09d56bbcSLuc Michel         .name = "pllh-aux",
285*09d56bbcSLuc Michel         .fixed_divider = 1,
286*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO_nohold(PLLH, AUX),
287*09d56bbcSLuc Michel     },
288*09d56bbcSLuc Michel     [CPRMAN_PLLH_CHANNEL_RCAL] = {
289*09d56bbcSLuc Michel         .name = "pllh-rcal",
290*09d56bbcSLuc Michel         .fixed_divider = 10,
291*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO_nohold(PLLH, RCAL),
292*09d56bbcSLuc Michel     },
293*09d56bbcSLuc Michel     [CPRMAN_PLLH_CHANNEL_PIX] = {
294*09d56bbcSLuc Michel         .name = "pllh-pix",
295*09d56bbcSLuc Michel         .fixed_divider = 10,
296*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO_nohold(PLLH, PIX),
297*09d56bbcSLuc Michel     },
298*09d56bbcSLuc Michel 
299*09d56bbcSLuc Michel     [CPRMAN_PLLB_CHANNEL_ARM] = {
300*09d56bbcSLuc Michel         .name = "pllb-arm",
301*09d56bbcSLuc Michel         FILL_PLL_CHANNEL_INIT_INFO(PLLB, ARM),
302*09d56bbcSLuc Michel     },
303*09d56bbcSLuc Michel };
304*09d56bbcSLuc Michel 
305*09d56bbcSLuc Michel #undef FILL_PLL_CHANNEL_INIT_INFO_nohold
306*09d56bbcSLuc Michel #undef FILL_PLL_CHANNEL_INIT_INFO
307*09d56bbcSLuc Michel #undef FILL_PLL_CHANNEL_INIT_INFO_common
308*09d56bbcSLuc Michel 
309*09d56bbcSLuc Michel static inline void set_pll_channel_init_info(BCM2835CprmanState *s,
310*09d56bbcSLuc Michel                                              CprmanPllChannelState *channel,
311*09d56bbcSLuc Michel                                              CprmanPllChannel id)
312*09d56bbcSLuc Michel {
313*09d56bbcSLuc Michel     channel->id = id;
314*09d56bbcSLuc Michel     channel->parent = PLL_CHANNEL_INIT_INFO[id].parent;
315*09d56bbcSLuc Michel     channel->reg_cm = &s->regs[PLL_CHANNEL_INIT_INFO[id].cm_offset];
316*09d56bbcSLuc Michel     channel->hold_mask = PLL_CHANNEL_INIT_INFO[id].cm_hold_mask;
317*09d56bbcSLuc Michel     channel->load_mask = PLL_CHANNEL_INIT_INFO[id].cm_load_mask;
318*09d56bbcSLuc Michel     channel->reg_a2w_ctrl = &s->regs[PLL_CHANNEL_INIT_INFO[id].a2w_ctrl_offset];
319*09d56bbcSLuc Michel     channel->fixed_divider = PLL_CHANNEL_INIT_INFO[id].fixed_divider;
320*09d56bbcSLuc Michel }
321*09d56bbcSLuc Michel 
322fc14176bSLuc Michel #endif
323