xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/pm_service/pm_api_clock.c (revision 0c0b19f42de25bb75760d6cca02c325c08a33882)
1caae497dSRajan Vaja /*
2619bc13eSMichal Simek  * Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.
38ce93ec9SRonak Jain  * Copyright (c) 2022-2025, Advanced Micro Devices, Inc. All rights reserved.
4caae497dSRajan Vaja  *
5caae497dSRajan Vaja  * SPDX-License-Identifier: BSD-3-Clause
6caae497dSRajan Vaja  */
7caae497dSRajan Vaja 
8caae497dSRajan Vaja /*
9caae497dSRajan Vaja  * ZynqMP system level PM-API functions for clock control.
10caae497dSRajan Vaja  */
11caae497dSRajan Vaja 
1237e1a68eSJolly Shah #include <stdbool.h>
13caae497dSRajan Vaja #include <string.h>
1409d40e0eSAntonio Nino Diaz 
1509d40e0eSAntonio Nino Diaz #include <arch_helpers.h>
1609d40e0eSAntonio Nino Diaz #include <lib/mmio.h>
1709d40e0eSAntonio Nino Diaz #include <plat/common/platform.h>
18*4fd510e0SRonak Jain #include <plat_pm_common.h>
1909d40e0eSAntonio Nino Diaz 
20caae497dSRajan Vaja #include "pm_api_clock.h"
21caae497dSRajan Vaja #include "pm_client.h"
22caae497dSRajan Vaja #include "pm_common.h"
23caae497dSRajan Vaja #include "pm_ipi.h"
24a92681d9SJay Buddhabhatti #include "zynqmp_pm_api_sys.h"
25caae497dSRajan Vaja 
26cdb62114SHariBabu Gattem #define CLK_NODE_MAX			(6U)
27caae497dSRajan Vaja 
28cdb62114SHariBabu Gattem #define CLK_PARENTS_ID_LEN		(16U)
29cdb62114SHariBabu Gattem #define CLK_TOPOLOGY_NODE_OFFSET	(16U)
30cdb62114SHariBabu Gattem #define CLK_TOPOLOGY_PAYLOAD_LEN	(12U)
31cdb62114SHariBabu Gattem #define CLK_PARENTS_PAYLOAD_LEN		(12U)
32cdb62114SHariBabu Gattem #define CLK_TYPE_SHIFT			(2U)
33cdb62114SHariBabu Gattem #define CLK_CLKFLAGS_SHIFT		(8U)
34cdb62114SHariBabu Gattem #define CLK_TYPEFLAGS_SHIFT		(24U)
35cdb62114SHariBabu Gattem #define CLK_TYPEFLAGS2_SHIFT		(4U)
36cdb62114SHariBabu Gattem #define CLK_TYPEFLAGS_BITS_MASK		(0xFFU)
37cdb62114SHariBabu Gattem #define CLK_TYPEFLAGS2_BITS_MASK	(0x0F00U)
38cdb62114SHariBabu Gattem #define CLK_TYPEFLAGS_BITS		(8U)
391a3f02b5SRajan Vaja 
401a3f02b5SRajan Vaja #define CLK_EXTERNAL_PARENT	(PARENT_CLK_EXTERNAL << CLK_PARENTS_ID_LEN)
411a3f02b5SRajan Vaja 
42cdb62114SHariBabu Gattem #define NA_MULT					(0U)
43cdb62114SHariBabu Gattem #define NA_DIV					(0U)
44cdb62114SHariBabu Gattem #define NA_SHIFT				(0U)
45cdb62114SHariBabu Gattem #define NA_WIDTH				(0U)
46cdb62114SHariBabu Gattem #define NA_CLK_FLAGS				(0U)
47cdb62114SHariBabu Gattem #define NA_TYPE_FLAGS				(0U)
481a3f02b5SRajan Vaja 
491a3f02b5SRajan Vaja /* PLL nodes related definitions */
50cdb62114SHariBabu Gattem #define PLL_PRESRC_MUX_SHIFT			(20U)
51cdb62114SHariBabu Gattem #define PLL_PRESRC_MUX_WIDTH			(3U)
52cdb62114SHariBabu Gattem #define PLL_POSTSRC_MUX_SHIFT			(24U)
53cdb62114SHariBabu Gattem #define PLL_POSTSRC_MUX_WIDTH			(3U)
54cdb62114SHariBabu Gattem #define PLL_DIV2_MUX_SHIFT			(16U)
55cdb62114SHariBabu Gattem #define PLL_DIV2_MUX_WIDTH			(1U)
56cdb62114SHariBabu Gattem #define PLL_BYPASS_MUX_SHIFT			(3U)
57cdb62114SHariBabu Gattem #define PLL_BYPASS_MUX_WIDTH			(1U)
581a3f02b5SRajan Vaja 
591a3f02b5SRajan Vaja /* Peripheral nodes related definitions */
601a3f02b5SRajan Vaja /* Peripheral Clocks */
61cdb62114SHariBabu Gattem #define PERIPH_MUX_SHIFT			(0U)
62cdb62114SHariBabu Gattem #define PERIPH_MUX_WIDTH			(3U)
63cdb62114SHariBabu Gattem #define PERIPH_DIV1_SHIFT			(8U)
64cdb62114SHariBabu Gattem #define PERIPH_DIV1_WIDTH			(6U)
65cdb62114SHariBabu Gattem #define PERIPH_DIV2_SHIFT			(16U)
66cdb62114SHariBabu Gattem #define PERIPH_DIV2_WIDTH			(6U)
67cdb62114SHariBabu Gattem #define PERIPH_GATE_SHIFT			(24U)
68cdb62114SHariBabu Gattem #define PERIPH_GATE_WIDTH			(1U)
691a3f02b5SRajan Vaja 
70cdb62114SHariBabu Gattem #define USB_GATE_SHIFT				(25U)
711a3f02b5SRajan Vaja 
721a3f02b5SRajan Vaja /* External clock related definitions */
731a3f02b5SRajan Vaja 
741a3f02b5SRajan Vaja #define EXT_CLK_MIO_DATA(mio)				\
751a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_MIO##mio)] = {		\
761a3f02b5SRajan Vaja 		.name = "mio_clk_"#mio,			\
771a3f02b5SRajan Vaja 	}
781a3f02b5SRajan Vaja 
791a3f02b5SRajan Vaja #define EXT_CLK_INDEX(n)	(n - CLK_MAX_OUTPUT_CLK)
801a3f02b5SRajan Vaja 
811a3f02b5SRajan Vaja /* Clock control related definitions */
821a3f02b5SRajan Vaja #define BIT_MASK(x, y) (((1U << (y)) - 1) << (x))
831a3f02b5SRajan Vaja 
8437e1a68eSJolly Shah #define ISPLL(id)	(id == CLK_APLL_INT ||	\
8537e1a68eSJolly Shah 			 id == CLK_DPLL_INT ||  \
8637e1a68eSJolly Shah 			 id == CLK_VPLL_INT ||  \
8737e1a68eSJolly Shah 			 id == CLK_IOPLL_INT || \
8837e1a68eSJolly Shah 			 id == CLK_RPLL_INT)
8937e1a68eSJolly Shah 
901a3f02b5SRajan Vaja 
911a3f02b5SRajan Vaja #define PLLCTRL_BP_MASK				BIT(3)
92cdb62114SHariBabu Gattem #define PLLCTRL_RESET_MASK			(1U)
93cdb62114SHariBabu Gattem #define PLL_FRAC_OFFSET				(8U)
94cdb62114SHariBabu Gattem #define PLL_FRAC_MODE				(1U)
95cdb62114SHariBabu Gattem #define PLL_INT_MODE				(0U)
96cdb62114SHariBabu Gattem #define PLL_FRAC_MODE_MASK			(0x80000000U)
97cdb62114SHariBabu Gattem #define PLL_FRAC_MODE_SHIFT			(31U)
98cdb62114SHariBabu Gattem #define PLL_FRAC_DATA_MASK			(0xFFFFU)
99cdb62114SHariBabu Gattem #define PLL_FRAC_DATA_SHIFT			(0U)
100cdb62114SHariBabu Gattem #define PLL_FBDIV_MASK				(0x7F00U)
101cdb62114SHariBabu Gattem #define PLL_FBDIV_WIDTH				(7U)
102cdb62114SHariBabu Gattem #define PLL_FBDIV_SHIFT				(8U)
1031a3f02b5SRajan Vaja 
104cdb62114SHariBabu Gattem #define CLK_PLL_RESET_ASSERT			(1U)
105cdb62114SHariBabu Gattem #define CLK_PLL_RESET_RELEASE			(2U)
1061a3f02b5SRajan Vaja #define CLK_PLL_RESET_PULSE	(CLK_PLL_RESET_ASSERT | CLK_PLL_RESET_RELEASE)
1071a3f02b5SRajan Vaja 
1081a3f02b5SRajan Vaja /* Common topology definitions */
1091a3f02b5SRajan Vaja #define GENERIC_MUX					\
1101a3f02b5SRajan Vaja 	{						\
1111a3f02b5SRajan Vaja 		.type = TYPE_MUX,			\
1121a3f02b5SRajan Vaja 		.offset = PERIPH_MUX_SHIFT,		\
1131a3f02b5SRajan Vaja 		.width = PERIPH_MUX_WIDTH,		\
1146ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |\
1156ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),		\
1161a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,		\
1171a3f02b5SRajan Vaja 		.mult = NA_MULT,			\
1181a3f02b5SRajan Vaja 		.div = NA_DIV,				\
1191a3f02b5SRajan Vaja 	}
1201a3f02b5SRajan Vaja 
1211a3f02b5SRajan Vaja #define IGNORE_UNUSED_MUX				\
1221a3f02b5SRajan Vaja 	{						\
1231a3f02b5SRajan Vaja 		.type = TYPE_MUX,			\
1241a3f02b5SRajan Vaja 		.offset = PERIPH_MUX_SHIFT,		\
1251a3f02b5SRajan Vaja 		.width = PERIPH_MUX_WIDTH,		\
1266ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED |\
1271a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |	\
1286ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),		\
1291a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,		\
1301a3f02b5SRajan Vaja 		.mult = NA_MULT,			\
1311a3f02b5SRajan Vaja 		.div = NA_DIV,				\
1321a3f02b5SRajan Vaja 	}
1331a3f02b5SRajan Vaja 
134c8f62536SRavi Patel #define GENERIC_DIV1						\
1351a3f02b5SRajan Vaja 	{							\
136c8f62536SRavi Patel 		.type = TYPE_DIV1,				\
137c8f62536SRavi Patel 		.offset = PERIPH_DIV1_SHIFT,			\
138c8f62536SRavi Patel 		.width = PERIPH_DIV1_WIDTH,			\
1396ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |\
1406ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),			\
1416ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED |	\
1426ae95624SMaheedhar Bollapalli 			     CLK_DIVIDER_ALLOW_ZERO),		\
1431a3f02b5SRajan Vaja 		.mult = NA_MULT,				\
1441a3f02b5SRajan Vaja 		.div = NA_DIV,					\
1451a3f02b5SRajan Vaja 	}
1461a3f02b5SRajan Vaja 
147c8f62536SRavi Patel #define GENERIC_DIV2						\
148c8f62536SRavi Patel 	{							\
149c8f62536SRavi Patel 		.type = TYPE_DIV2,				\
150c8f62536SRavi Patel 		.offset = PERIPH_DIV2_SHIFT,			\
151c8f62536SRavi Patel 		.width = PERIPH_DIV2_WIDTH,			\
1526ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |\
153c8f62536SRavi Patel 			    CLK_SET_RATE_PARENT |		\
1546ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),			\
1556ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED |	\
1566ae95624SMaheedhar Bollapalli 			     CLK_DIVIDER_ALLOW_ZERO),		\
157c8f62536SRavi Patel 		.mult = NA_MULT,				\
158c8f62536SRavi Patel 		.div = NA_DIV,					\
159c8f62536SRavi Patel 	}
160c8f62536SRavi Patel 
1611a3f02b5SRajan Vaja #define IGNORE_UNUSED_DIV(id)					\
1621a3f02b5SRajan Vaja 	{							\
1631a3f02b5SRajan Vaja 		.type = TYPE_DIV##id,				\
1641a3f02b5SRajan Vaja 		.offset = PERIPH_DIV##id##_SHIFT,		\
1651a3f02b5SRajan Vaja 		.width = PERIPH_DIV##id##_WIDTH,		\
1666ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED |	\
1671a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |		\
1686ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),			\
1696ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED |	\
1706ae95624SMaheedhar Bollapalli 			     CLK_DIVIDER_ALLOW_ZERO),		\
1711a3f02b5SRajan Vaja 		.mult = NA_MULT,				\
1721a3f02b5SRajan Vaja 		.div = NA_DIV,					\
1731a3f02b5SRajan Vaja 	}
1741a3f02b5SRajan Vaja 
1751a3f02b5SRajan Vaja #define GENERIC_GATE						\
1761a3f02b5SRajan Vaja 	{							\
1771a3f02b5SRajan Vaja 		.type = TYPE_GATE,				\
1781a3f02b5SRajan Vaja 		.offset = PERIPH_GATE_SHIFT,			\
1791a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,			\
1806ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |	\
1811a3f02b5SRajan Vaja 			    CLK_SET_RATE_GATE |			\
1826ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),			\
1831a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,			\
1841a3f02b5SRajan Vaja 		.mult = NA_MULT,				\
1851a3f02b5SRajan Vaja 		.div = NA_DIV,					\
1861a3f02b5SRajan Vaja 	}
1871a3f02b5SRajan Vaja 
1881a3f02b5SRajan Vaja #define IGNORE_UNUSED_GATE					\
1891a3f02b5SRajan Vaja 	{							\
1901a3f02b5SRajan Vaja 		.type = TYPE_GATE,				\
1911a3f02b5SRajan Vaja 		.offset = PERIPH_GATE_SHIFT,			\
1921a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,			\
1936ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |	\
1941a3f02b5SRajan Vaja 			    CLK_IGNORE_UNUSED |			\
1956ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),			\
1961a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,			\
1971a3f02b5SRajan Vaja 		.mult = NA_MULT,				\
1981a3f02b5SRajan Vaja 		.div = NA_DIV,					\
1991a3f02b5SRajan Vaja 	}
2001a3f02b5SRajan Vaja 
201caae497dSRajan Vaja /**
202de7ed953SPrasad Kummari  * struct pm_clock_node - Clock topology node information.
203de7ed953SPrasad Kummari  * @type: Topology type (mux/div1/div2/gate/pll/fixed factor).
204de7ed953SPrasad Kummari  * @offset: Offset in control register.
205de7ed953SPrasad Kummari  * @width: Width of the specific type in control register.
206de7ed953SPrasad Kummari  * @clkflags: Clk specific flags.
207de7ed953SPrasad Kummari  * @typeflags: Type specific flags.
208de7ed953SPrasad Kummari  * @mult: Multiplier for fixed factor.
209de7ed953SPrasad Kummari  * @div: Divisor for fixed factor.
210de7ed953SPrasad Kummari  *
211caae497dSRajan Vaja  */
212caae497dSRajan Vaja struct pm_clock_node {
213caae497dSRajan Vaja 	uint16_t clkflags;
214caae497dSRajan Vaja 	uint16_t typeflags;
215caae497dSRajan Vaja 	uint8_t type;
216caae497dSRajan Vaja 	uint8_t offset;
217caae497dSRajan Vaja 	uint8_t width;
218caae497dSRajan Vaja 	uint8_t mult:4;
219caae497dSRajan Vaja 	uint8_t div:4;
220caae497dSRajan Vaja };
221caae497dSRajan Vaja 
222caae497dSRajan Vaja /**
223de7ed953SPrasad Kummari  * struct pm_clock - Clock structure.
224de7ed953SPrasad Kummari  * @name: Clock name.
225de7ed953SPrasad Kummari  * @num_nodes: number of nodes.
226de7ed953SPrasad Kummari  * @control_reg: Control register address.
227de7ed953SPrasad Kummari  * @status_reg: Status register address.
228caae497dSRajan Vaja  * @parents: Parents for first clock node. Lower byte indicates parent
229caae497dSRajan Vaja  *           clock id and upper byte indicate flags for that id.
230de7ed953SPrasad Kummari  * @nodes: Clock nodes.
231de7ed953SPrasad Kummari  *
232caae497dSRajan Vaja  */
233caae497dSRajan Vaja struct pm_clock {
234caae497dSRajan Vaja 	char name[CLK_NAME_LEN];
235caae497dSRajan Vaja 	uint8_t num_nodes;
236ffa91031SVenkatesh Yadav Abbarapu 	uint32_t control_reg;
237ffa91031SVenkatesh Yadav Abbarapu 	uint32_t status_reg;
238caae497dSRajan Vaja 	int32_t (*parents)[];
239caae497dSRajan Vaja 	struct pm_clock_node(*nodes)[];
240caae497dSRajan Vaja };
241caae497dSRajan Vaja 
2421a3f02b5SRajan Vaja /**
243de7ed953SPrasad Kummari  * struct pm_ext_clock - Clock structure.
244de7ed953SPrasad Kummari  * @name: Clock name.
245de7ed953SPrasad Kummari  *
2461a3f02b5SRajan Vaja  */
2471a3f02b5SRajan Vaja struct pm_ext_clock {
2481a3f02b5SRajan Vaja 	char name[CLK_NAME_LEN];
2491a3f02b5SRajan Vaja };
2501a3f02b5SRajan Vaja 
2511a3f02b5SRajan Vaja /* PLL Clocks */
2521a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_nodes[] = {
2531a3f02b5SRajan Vaja 	{
2541a3f02b5SRajan Vaja 		.type = TYPE_PLL,
2551a3f02b5SRajan Vaja 		.offset = NA_SHIFT,
2561a3f02b5SRajan Vaja 		.width = NA_WIDTH,
2576ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_SET_RATE_NO_REPARENT,
2581a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
2591a3f02b5SRajan Vaja 		.mult = NA_MULT,
2601a3f02b5SRajan Vaja 		.div = NA_DIV,
2611a3f02b5SRajan Vaja 	},
2621a3f02b5SRajan Vaja };
2631a3f02b5SRajan Vaja 
2641a3f02b5SRajan Vaja static struct pm_clock_node ignore_unused_pll_nodes[] = {
2651a3f02b5SRajan Vaja 	{
2661a3f02b5SRajan Vaja 		.type = TYPE_PLL,
2671a3f02b5SRajan Vaja 		.offset = NA_SHIFT,
2681a3f02b5SRajan Vaja 		.width = NA_WIDTH,
2696ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED | CLK_SET_RATE_NO_REPARENT),
2701a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
2711a3f02b5SRajan Vaja 		.mult = NA_MULT,
2721a3f02b5SRajan Vaja 		.div = NA_DIV,
2731a3f02b5SRajan Vaja 	},
2741a3f02b5SRajan Vaja };
2751a3f02b5SRajan Vaja 
2761a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_pre_src_nodes[] = {
2771a3f02b5SRajan Vaja 	{
2781a3f02b5SRajan Vaja 		.type = TYPE_MUX,
2791a3f02b5SRajan Vaja 		.offset = PLL_PRESRC_MUX_SHIFT,
2801a3f02b5SRajan Vaja 		.width = PLL_PRESRC_MUX_WIDTH,
2816ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_IS_BASIC,
2821a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
2831a3f02b5SRajan Vaja 		.mult = NA_MULT,
2841a3f02b5SRajan Vaja 		.div = NA_DIV,
2851a3f02b5SRajan Vaja 	},
2861a3f02b5SRajan Vaja };
2871a3f02b5SRajan Vaja 
2881a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_half_nodes[] = {
2891a3f02b5SRajan Vaja 	{
2901a3f02b5SRajan Vaja 		.type = TYPE_FIXEDFACTOR,
2911a3f02b5SRajan Vaja 		.offset = NA_SHIFT,
2921a3f02b5SRajan Vaja 		.width = NA_WIDTH,
2936ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT),
2941a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
2951a3f02b5SRajan Vaja 		.mult = 1,
2961a3f02b5SRajan Vaja 		.div = 2,
2971a3f02b5SRajan Vaja 	},
2981a3f02b5SRajan Vaja };
2991a3f02b5SRajan Vaja 
3001a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_int_nodes[] = {
3011a3f02b5SRajan Vaja 	{
3021a3f02b5SRajan Vaja 		.type = TYPE_MUX,
3031a3f02b5SRajan Vaja 		.offset = PLL_DIV2_MUX_SHIFT,
3041a3f02b5SRajan Vaja 		.width =  PLL_DIV2_MUX_WIDTH,
3056ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |
3061a3f02b5SRajan Vaja 			    CLK_SET_RATE_PARENT |
3076ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
3081a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
3091a3f02b5SRajan Vaja 		.mult = NA_MULT,
3101a3f02b5SRajan Vaja 		.div = NA_DIV,
3111a3f02b5SRajan Vaja 	},
3121a3f02b5SRajan Vaja };
3131a3f02b5SRajan Vaja 
3141a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_post_src_nodes[] = {
3151a3f02b5SRajan Vaja 	{
3161a3f02b5SRajan Vaja 		.type = TYPE_MUX,
3171a3f02b5SRajan Vaja 		.offset = PLL_POSTSRC_MUX_SHIFT,
3181a3f02b5SRajan Vaja 		.width = PLL_POSTSRC_MUX_WIDTH,
3196ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_IS_BASIC,
3201a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
3211a3f02b5SRajan Vaja 		.mult = NA_MULT,
3221a3f02b5SRajan Vaja 		.div = NA_DIV,
3231a3f02b5SRajan Vaja 	},
3241a3f02b5SRajan Vaja };
3251a3f02b5SRajan Vaja 
3261a3f02b5SRajan Vaja static struct pm_clock_node generic_pll_system_nodes[] = {
3271a3f02b5SRajan Vaja 	{
3281a3f02b5SRajan Vaja 		.type = TYPE_MUX,
3291a3f02b5SRajan Vaja 		.offset = PLL_BYPASS_MUX_SHIFT,
3301a3f02b5SRajan Vaja 		.width = PLL_BYPASS_MUX_WIDTH,
3316ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |
3321a3f02b5SRajan Vaja 			    CLK_SET_RATE_PARENT |
3336ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
3341a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
3351a3f02b5SRajan Vaja 		.mult = NA_MULT,
3361a3f02b5SRajan Vaja 		.div = NA_DIV,
3371a3f02b5SRajan Vaja 	},
3381a3f02b5SRajan Vaja };
3391a3f02b5SRajan Vaja 
3401a3f02b5SRajan Vaja static struct pm_clock_node acpu_nodes[] = {
3411a3f02b5SRajan Vaja 	{
3421a3f02b5SRajan Vaja 		.type = TYPE_MUX,
3431a3f02b5SRajan Vaja 		.offset = PERIPH_MUX_SHIFT,
3441a3f02b5SRajan Vaja 		.width = PERIPH_MUX_WIDTH,
3456ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_IS_BASIC),
3461a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
3471a3f02b5SRajan Vaja 		.mult = NA_MULT,
3481a3f02b5SRajan Vaja 		.div = NA_DIV,
3491a3f02b5SRajan Vaja 	},
3501a3f02b5SRajan Vaja 	{
3511a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
3521a3f02b5SRajan Vaja 		.offset = PERIPH_DIV1_SHIFT,
3531a3f02b5SRajan Vaja 		.width = PERIPH_DIV1_WIDTH,
3546ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_IS_BASIC,
3556ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
3561a3f02b5SRajan Vaja 		.mult = NA_MULT,
3571a3f02b5SRajan Vaja 		.div = NA_DIV,
3581a3f02b5SRajan Vaja 	},
3591a3f02b5SRajan Vaja };
3601a3f02b5SRajan Vaja 
3611a3f02b5SRajan Vaja static struct pm_clock_node generic_mux_div_nodes[] = {
3621a3f02b5SRajan Vaja 	GENERIC_MUX,
363c8f62536SRavi Patel 	GENERIC_DIV1,
3641a3f02b5SRajan Vaja };
3651a3f02b5SRajan Vaja 
3661a3f02b5SRajan Vaja static struct pm_clock_node generic_mux_div_gate_nodes[] = {
3671a3f02b5SRajan Vaja 	GENERIC_MUX,
368c8f62536SRavi Patel 	GENERIC_DIV1,
3691a3f02b5SRajan Vaja 	GENERIC_GATE,
3701a3f02b5SRajan Vaja };
3711a3f02b5SRajan Vaja 
3721a3f02b5SRajan Vaja static struct pm_clock_node generic_mux_div_unused_gate_nodes[] = {
3731a3f02b5SRajan Vaja 	GENERIC_MUX,
374c8f62536SRavi Patel 	GENERIC_DIV1,
3751a3f02b5SRajan Vaja 	IGNORE_UNUSED_GATE,
3761a3f02b5SRajan Vaja };
3771a3f02b5SRajan Vaja 
3781a3f02b5SRajan Vaja static struct pm_clock_node generic_mux_div_div_gate_nodes[] = {
3791a3f02b5SRajan Vaja 	GENERIC_MUX,
380c8f62536SRavi Patel 	GENERIC_DIV1,
381c8f62536SRavi Patel 	GENERIC_DIV2,
3821a3f02b5SRajan Vaja 	GENERIC_GATE,
3831a3f02b5SRajan Vaja };
3841a3f02b5SRajan Vaja 
3851a3f02b5SRajan Vaja static struct pm_clock_node dp_audio_video_ref_nodes[] = {
3861a3f02b5SRajan Vaja 	{
3871a3f02b5SRajan Vaja 		.type = TYPE_MUX,
3881a3f02b5SRajan Vaja 		.offset = PERIPH_MUX_SHIFT,
3891a3f02b5SRajan Vaja 		.width = PERIPH_MUX_WIDTH,
3906ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT |
3916ae95624SMaheedhar Bollapalli 			    CLK_SET_RATE_PARENT | CLK_IS_BASIC),
3926ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)CLK_FRAC,
3931a3f02b5SRajan Vaja 		.mult = NA_MULT,
3941a3f02b5SRajan Vaja 		.div = NA_DIV,
3951a3f02b5SRajan Vaja 	},
3961a3f02b5SRajan Vaja 	{
3971a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
3981a3f02b5SRajan Vaja 		.offset = PERIPH_DIV1_SHIFT,
3991a3f02b5SRajan Vaja 		.width = PERIPH_DIV1_WIDTH,
4006ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT |
4016ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
4026ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO |
4036ae95624SMaheedhar Bollapalli 			     CLK_FRAC),
4041a3f02b5SRajan Vaja 		.mult = NA_MULT,
4051a3f02b5SRajan Vaja 		.div = NA_DIV,
4061a3f02b5SRajan Vaja 	},
4071a3f02b5SRajan Vaja 	{
4081a3f02b5SRajan Vaja 		.type = TYPE_DIV2,
4091a3f02b5SRajan Vaja 		.offset = PERIPH_DIV2_SHIFT,
4101a3f02b5SRajan Vaja 		.width = PERIPH_DIV2_WIDTH,
4116ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT |
4126ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
4136ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO |
4146ae95624SMaheedhar Bollapalli 			     CLK_FRAC),
4151a3f02b5SRajan Vaja 		.mult = NA_MULT,
4161a3f02b5SRajan Vaja 		.div = NA_DIV,
4171a3f02b5SRajan Vaja 	},
4181a3f02b5SRajan Vaja 	{
4191a3f02b5SRajan Vaja 		.type = TYPE_GATE,
4201a3f02b5SRajan Vaja 		.offset = PERIPH_GATE_SHIFT,
4211a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
4226ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
4231a3f02b5SRajan Vaja 			    CLK_SET_RATE_GATE |
4246ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
4251a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
4261a3f02b5SRajan Vaja 		.mult = NA_MULT,
4271a3f02b5SRajan Vaja 		.div = NA_DIV,
4281a3f02b5SRajan Vaja 	},
4291a3f02b5SRajan Vaja };
4301a3f02b5SRajan Vaja 
4311a3f02b5SRajan Vaja static struct pm_clock_node usb_nodes[] = {
4321a3f02b5SRajan Vaja 	GENERIC_MUX,
433c8f62536SRavi Patel 	GENERIC_DIV1,
434c8f62536SRavi Patel 	GENERIC_DIV2,
4351a3f02b5SRajan Vaja 	{
4361a3f02b5SRajan Vaja 		.type = TYPE_GATE,
4371a3f02b5SRajan Vaja 		.offset = USB_GATE_SHIFT,
4381a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
4396ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC |
4406ae95624SMaheedhar Bollapalli 			    CLK_SET_RATE_GATE),
4411a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
4421a3f02b5SRajan Vaja 		.mult = NA_MULT,
4431a3f02b5SRajan Vaja 		.div = NA_DIV,
4441a3f02b5SRajan Vaja 	},
4451a3f02b5SRajan Vaja };
4461a3f02b5SRajan Vaja 
4471a3f02b5SRajan Vaja static struct pm_clock_node generic_domain_crossing_nodes[] = {
4481a3f02b5SRajan Vaja 	{
4491a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
4501a3f02b5SRajan Vaja 		.offset = 8,
4511a3f02b5SRajan Vaja 		.width = 6,
4526ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_IS_BASIC,
4536ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
4541a3f02b5SRajan Vaja 		.mult = NA_MULT,
4551a3f02b5SRajan Vaja 		.div = NA_DIV,
4561a3f02b5SRajan Vaja 	},
4571a3f02b5SRajan Vaja };
4581a3f02b5SRajan Vaja 
4591a3f02b5SRajan Vaja static struct pm_clock_node rpll_to_fpd_nodes[] = {
4601a3f02b5SRajan Vaja 	{
4611a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
4621a3f02b5SRajan Vaja 		.offset = 8,
4631a3f02b5SRajan Vaja 		.width = 6,
4646ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC),
4656ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
4661a3f02b5SRajan Vaja 		.mult = NA_MULT,
4671a3f02b5SRajan Vaja 		.div = NA_DIV,
4681a3f02b5SRajan Vaja 	},
4691a3f02b5SRajan Vaja };
4701a3f02b5SRajan Vaja 
4711a3f02b5SRajan Vaja static struct pm_clock_node acpu_half_nodes[] = {
4721a3f02b5SRajan Vaja 	{
4731a3f02b5SRajan Vaja 		.type = TYPE_FIXEDFACTOR,
4741a3f02b5SRajan Vaja 		.offset = 0,
4751a3f02b5SRajan Vaja 		.width = 1,
4761a3f02b5SRajan Vaja 		.clkflags = 0,
4771a3f02b5SRajan Vaja 		.typeflags = 0,
4781a3f02b5SRajan Vaja 		.mult = 1,
4791a3f02b5SRajan Vaja 		.div = 2,
4801a3f02b5SRajan Vaja 	},
4811a3f02b5SRajan Vaja 	{
4821a3f02b5SRajan Vaja 		.type = TYPE_GATE,
4831a3f02b5SRajan Vaja 		.offset = 25,
4841a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
4856ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED |
4861a3f02b5SRajan Vaja 			    CLK_SET_RATE_PARENT |
4876ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
4881a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
4891a3f02b5SRajan Vaja 		.mult = NA_MULT,
4901a3f02b5SRajan Vaja 		.div = NA_DIV,
4911a3f02b5SRajan Vaja 	},
4921a3f02b5SRajan Vaja };
4931a3f02b5SRajan Vaja 
494284b2f09SJolly Shah static struct pm_clock_node acpu_full_nodes[] = {
495284b2f09SJolly Shah 	{
496284b2f09SJolly Shah 		.type = TYPE_GATE,
497284b2f09SJolly Shah 		.offset = 24,
498284b2f09SJolly Shah 		.width = PERIPH_GATE_WIDTH,
4996ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED |
500284b2f09SJolly Shah 			    CLK_SET_RATE_PARENT |
5016ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
502284b2f09SJolly Shah 		.typeflags = NA_TYPE_FLAGS,
503284b2f09SJolly Shah 		.mult = NA_MULT,
504284b2f09SJolly Shah 		.div = NA_DIV,
505284b2f09SJolly Shah 	},
506284b2f09SJolly Shah };
507284b2f09SJolly Shah 
5081a3f02b5SRajan Vaja static struct pm_clock_node wdt_nodes[] = {
5091a3f02b5SRajan Vaja 	{
5101a3f02b5SRajan Vaja 		.type = TYPE_MUX,
5111a3f02b5SRajan Vaja 		.offset = 0,
5121a3f02b5SRajan Vaja 		.width = 1,
5136ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
5141a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
5156ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
5161a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
5171a3f02b5SRajan Vaja 		.mult = NA_MULT,
5181a3f02b5SRajan Vaja 		.div = NA_DIV,
5191a3f02b5SRajan Vaja 	},
5201a3f02b5SRajan Vaja };
5211a3f02b5SRajan Vaja 
5221a3f02b5SRajan Vaja static struct pm_clock_node ddr_nodes[] = {
5231a3f02b5SRajan Vaja 	GENERIC_MUX,
5241a3f02b5SRajan Vaja 	{
5251a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
5261a3f02b5SRajan Vaja 		.offset = 8,
5271a3f02b5SRajan Vaja 		.width = 6,
5286ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IS_BASIC | CLK_IS_CRITICAL),
5296ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
5301a3f02b5SRajan Vaja 		.mult = NA_MULT,
5311a3f02b5SRajan Vaja 		.div = NA_DIV,
5321a3f02b5SRajan Vaja 	},
5331a3f02b5SRajan Vaja };
5341a3f02b5SRajan Vaja 
5351a3f02b5SRajan Vaja static struct pm_clock_node pl_nodes[] = {
5361a3f02b5SRajan Vaja 	GENERIC_MUX,
5371a3f02b5SRajan Vaja 	{
5381a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
5391a3f02b5SRajan Vaja 		.offset = PERIPH_DIV1_SHIFT,
5401a3f02b5SRajan Vaja 		.width = PERIPH_DIV1_WIDTH,
5416ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IS_BASIC),
5426ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
5431a3f02b5SRajan Vaja 		.mult = NA_MULT,
5441a3f02b5SRajan Vaja 		.div = NA_DIV,
5451a3f02b5SRajan Vaja 	},
5461a3f02b5SRajan Vaja 	{
5471a3f02b5SRajan Vaja 		.type = TYPE_DIV2,
5481a3f02b5SRajan Vaja 		.offset = PERIPH_DIV2_SHIFT,
5491a3f02b5SRajan Vaja 		.width = PERIPH_DIV2_WIDTH,
5506ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IS_BASIC | CLK_SET_RATE_PARENT),
5516ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
5521a3f02b5SRajan Vaja 		.mult = NA_MULT,
5531a3f02b5SRajan Vaja 		.div = NA_DIV,
5541a3f02b5SRajan Vaja 	},
5551a3f02b5SRajan Vaja 	{
5561a3f02b5SRajan Vaja 		.type = TYPE_GATE,
5571a3f02b5SRajan Vaja 		.offset = PERIPH_GATE_SHIFT,
5581a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
5596ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC),
5601a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
5611a3f02b5SRajan Vaja 		.mult = NA_MULT,
5621a3f02b5SRajan Vaja 		.div = NA_DIV,
5631a3f02b5SRajan Vaja 	},
5641a3f02b5SRajan Vaja };
5651a3f02b5SRajan Vaja 
5661a3f02b5SRajan Vaja static struct pm_clock_node gpu_pp0_nodes[] = {
5671a3f02b5SRajan Vaja 	{
5681a3f02b5SRajan Vaja 		.type = TYPE_GATE,
5691a3f02b5SRajan Vaja 		.offset = 25,
5701a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
5716ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC),
5721a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
5731a3f02b5SRajan Vaja 		.mult = NA_MULT,
5741a3f02b5SRajan Vaja 		.div = NA_DIV,
5751a3f02b5SRajan Vaja 	},
5761a3f02b5SRajan Vaja };
5771a3f02b5SRajan Vaja 
5781a3f02b5SRajan Vaja static struct pm_clock_node gpu_pp1_nodes[] = {
5791a3f02b5SRajan Vaja 	{
5801a3f02b5SRajan Vaja 		.type = TYPE_GATE,
5811a3f02b5SRajan Vaja 		.offset = 26,
5821a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
5836ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC),
5841a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
5851a3f02b5SRajan Vaja 		.mult = NA_MULT,
5861a3f02b5SRajan Vaja 		.div = NA_DIV,
5871a3f02b5SRajan Vaja 	},
5881a3f02b5SRajan Vaja };
5891a3f02b5SRajan Vaja 
59006ad9803SMirela Simonovic static struct pm_clock_node gem_ref_ungated_nodes[] = {
5911a3f02b5SRajan Vaja 	GENERIC_MUX,
5921a3f02b5SRajan Vaja 	{
5931a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
5941a3f02b5SRajan Vaja 		.offset = 8,
5951a3f02b5SRajan Vaja 		.width = 6,
5966ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_IS_BASIC),
5976ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
5981a3f02b5SRajan Vaja 		.mult = NA_MULT,
5991a3f02b5SRajan Vaja 		.div = NA_DIV,
6001a3f02b5SRajan Vaja 	},
6011a3f02b5SRajan Vaja 	{
6021a3f02b5SRajan Vaja 		.type = TYPE_DIV2,
6031a3f02b5SRajan Vaja 		.offset = 16,
6041a3f02b5SRajan Vaja 		.width = 6,
6056ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_NO_REPARENT | CLK_IS_BASIC |
6066ae95624SMaheedhar Bollapalli 			    CLK_SET_RATE_PARENT),
6076ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
6081a3f02b5SRajan Vaja 		.mult = NA_MULT,
6091a3f02b5SRajan Vaja 		.div = NA_DIV,
6101a3f02b5SRajan Vaja 	},
61106ad9803SMirela Simonovic };
61206ad9803SMirela Simonovic 
61306ad9803SMirela Simonovic static struct pm_clock_node gem0_ref_nodes[] = {
61406ad9803SMirela Simonovic 	{
61506ad9803SMirela Simonovic 		.type = TYPE_MUX,
61606ad9803SMirela Simonovic 		.offset = 1,
61706ad9803SMirela Simonovic 		.width = 1,
6186ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
61906ad9803SMirela Simonovic 			    CLK_SET_RATE_NO_REPARENT |
6206ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
62106ad9803SMirela Simonovic 		.typeflags = NA_TYPE_FLAGS,
62206ad9803SMirela Simonovic 		.mult = NA_MULT,
62306ad9803SMirela Simonovic 		.div = NA_DIV,
62406ad9803SMirela Simonovic 	},
62506ad9803SMirela Simonovic };
62606ad9803SMirela Simonovic 
62706ad9803SMirela Simonovic static struct pm_clock_node gem1_ref_nodes[] = {
62806ad9803SMirela Simonovic 	{
62906ad9803SMirela Simonovic 		.type = TYPE_MUX,
63006ad9803SMirela Simonovic 		.offset = 6,
63106ad9803SMirela Simonovic 		.width = 1,
6326ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
63306ad9803SMirela Simonovic 			    CLK_SET_RATE_NO_REPARENT |
6346ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
63506ad9803SMirela Simonovic 		.typeflags = NA_TYPE_FLAGS,
63606ad9803SMirela Simonovic 		.mult = NA_MULT,
63706ad9803SMirela Simonovic 		.div = NA_DIV,
63806ad9803SMirela Simonovic 	},
63906ad9803SMirela Simonovic };
64006ad9803SMirela Simonovic 
64106ad9803SMirela Simonovic static struct pm_clock_node gem2_ref_nodes[] = {
64206ad9803SMirela Simonovic 	{
64306ad9803SMirela Simonovic 		.type = TYPE_MUX,
64406ad9803SMirela Simonovic 		.offset = 11,
64506ad9803SMirela Simonovic 		.width = 1,
6466ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
64706ad9803SMirela Simonovic 			    CLK_SET_RATE_NO_REPARENT |
6486ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
64906ad9803SMirela Simonovic 		.typeflags = NA_TYPE_FLAGS,
65006ad9803SMirela Simonovic 		.mult = NA_MULT,
65106ad9803SMirela Simonovic 		.div = NA_DIV,
65206ad9803SMirela Simonovic 	},
65306ad9803SMirela Simonovic };
65406ad9803SMirela Simonovic 
65506ad9803SMirela Simonovic static struct pm_clock_node gem3_ref_nodes[] = {
65606ad9803SMirela Simonovic 	{
65706ad9803SMirela Simonovic 		.type = TYPE_MUX,
65806ad9803SMirela Simonovic 		.offset = 16,
65906ad9803SMirela Simonovic 		.width = 1,
6606ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
66106ad9803SMirela Simonovic 			    CLK_SET_RATE_NO_REPARENT |
6626ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
66306ad9803SMirela Simonovic 		.typeflags = NA_TYPE_FLAGS,
66406ad9803SMirela Simonovic 		.mult = NA_MULT,
66506ad9803SMirela Simonovic 		.div = NA_DIV,
66606ad9803SMirela Simonovic 	},
66706ad9803SMirela Simonovic };
66806ad9803SMirela Simonovic 
66906ad9803SMirela Simonovic static struct pm_clock_node gem_tx_nodes[] = {
6701a3f02b5SRajan Vaja 	{
6711a3f02b5SRajan Vaja 		.type = TYPE_GATE,
6721a3f02b5SRajan Vaja 		.offset = 25,
6731a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
6746ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT | CLK_IS_BASIC),
6751a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
6761a3f02b5SRajan Vaja 		.mult = NA_MULT,
6771a3f02b5SRajan Vaja 		.div = NA_DIV,
6781a3f02b5SRajan Vaja 	},
6791a3f02b5SRajan Vaja };
6801a3f02b5SRajan Vaja 
68106ad9803SMirela Simonovic static struct pm_clock_node gem_rx_nodes[] = {
6821a3f02b5SRajan Vaja 	{
6831a3f02b5SRajan Vaja 		.type = TYPE_GATE,
6841a3f02b5SRajan Vaja 		.offset = 26,
6851a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
6866ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IS_BASIC),
6871a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
6881a3f02b5SRajan Vaja 		.mult = NA_MULT,
6891a3f02b5SRajan Vaja 		.div = NA_DIV,
6901a3f02b5SRajan Vaja 	},
6911a3f02b5SRajan Vaja };
6921a3f02b5SRajan Vaja 
6931a3f02b5SRajan Vaja static struct pm_clock_node gem_tsu_nodes[] = {
6941a3f02b5SRajan Vaja 	{
6951a3f02b5SRajan Vaja 		.type = TYPE_MUX,
6961a3f02b5SRajan Vaja 		.offset = 20,
6971a3f02b5SRajan Vaja 		.width = 2,
6986ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
6991a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7006ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7011a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7021a3f02b5SRajan Vaja 		.mult = NA_MULT,
7031a3f02b5SRajan Vaja 		.div = NA_DIV,
7041a3f02b5SRajan Vaja 	},
7051a3f02b5SRajan Vaja };
7061a3f02b5SRajan Vaja 
7071a3f02b5SRajan Vaja static struct pm_clock_node can0_mio_nodes[] = {
7081a3f02b5SRajan Vaja 	{
7091a3f02b5SRajan Vaja 		.type = TYPE_MUX,
7101a3f02b5SRajan Vaja 		.offset = 0,
7111a3f02b5SRajan Vaja 		.width = 7,
7126ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
7131a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7146ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7151a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7161a3f02b5SRajan Vaja 		.mult = NA_MULT,
7171a3f02b5SRajan Vaja 		.div = NA_DIV,
7181a3f02b5SRajan Vaja 	},
7191a3f02b5SRajan Vaja };
7201a3f02b5SRajan Vaja 
7211a3f02b5SRajan Vaja static struct pm_clock_node can1_mio_nodes[] = {
7221a3f02b5SRajan Vaja 	{
7231a3f02b5SRajan Vaja 		.type = TYPE_MUX,
7241a3f02b5SRajan Vaja 		.offset = 15,
7251a3f02b5SRajan Vaja 		.width = 1,
7266ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
7271a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7286ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7291a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7301a3f02b5SRajan Vaja 		.mult = NA_MULT,
7311a3f02b5SRajan Vaja 		.div = NA_DIV,
7321a3f02b5SRajan Vaja 	},
7331a3f02b5SRajan Vaja };
7341a3f02b5SRajan Vaja 
7351a3f02b5SRajan Vaja static struct pm_clock_node can0_nodes[] = {
7361a3f02b5SRajan Vaja 	{
7371a3f02b5SRajan Vaja 		.type = TYPE_MUX,
7381a3f02b5SRajan Vaja 		.offset = 7,
7391a3f02b5SRajan Vaja 		.width = 1,
7406ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
7411a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7426ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7431a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7441a3f02b5SRajan Vaja 		.mult = NA_MULT,
7451a3f02b5SRajan Vaja 		.div = NA_DIV,
7461a3f02b5SRajan Vaja 	},
7471a3f02b5SRajan Vaja };
7481a3f02b5SRajan Vaja 
7491a3f02b5SRajan Vaja static struct pm_clock_node can1_nodes[] = {
7501a3f02b5SRajan Vaja 	{
7511a3f02b5SRajan Vaja 		.type = TYPE_MUX,
7521a3f02b5SRajan Vaja 		.offset = 22,
7531a3f02b5SRajan Vaja 		.width = 1,
7546ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
7551a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7566ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7571a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7581a3f02b5SRajan Vaja 		.mult = NA_MULT,
7591a3f02b5SRajan Vaja 		.div = NA_DIV,
7601a3f02b5SRajan Vaja 	},
7611a3f02b5SRajan Vaja };
7621a3f02b5SRajan Vaja 
7631a3f02b5SRajan Vaja static struct pm_clock_node cpu_r5_core_nodes[] = {
7641a3f02b5SRajan Vaja 	{
7651a3f02b5SRajan Vaja 		.type = TYPE_GATE,
7661a3f02b5SRajan Vaja 		.offset = 25,
7671a3f02b5SRajan Vaja 		.width = PERIPH_GATE_WIDTH,
7686ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_IGNORE_UNUSED |
7696ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7701a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7711a3f02b5SRajan Vaja 		.mult = NA_MULT,
7721a3f02b5SRajan Vaja 		.div = NA_DIV,
7731a3f02b5SRajan Vaja 	},
7741a3f02b5SRajan Vaja };
7751a3f02b5SRajan Vaja 
7761a3f02b5SRajan Vaja static struct pm_clock_node dll_ref_nodes[] = {
7771a3f02b5SRajan Vaja 	{
7781a3f02b5SRajan Vaja 		.type = TYPE_MUX,
7791a3f02b5SRajan Vaja 		.offset = 0,
7801a3f02b5SRajan Vaja 		.width = 3,
7816ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)(CLK_SET_RATE_PARENT |
7821a3f02b5SRajan Vaja 			    CLK_SET_RATE_NO_REPARENT |
7836ae95624SMaheedhar Bollapalli 			    CLK_IS_BASIC),
7841a3f02b5SRajan Vaja 		.typeflags = NA_TYPE_FLAGS,
7851a3f02b5SRajan Vaja 		.mult = NA_MULT,
7861a3f02b5SRajan Vaja 		.div = NA_DIV,
7871a3f02b5SRajan Vaja 	},
7881a3f02b5SRajan Vaja };
7891a3f02b5SRajan Vaja 
7901a3f02b5SRajan Vaja static struct pm_clock_node timestamp_ref_nodes[] = {
7911a3f02b5SRajan Vaja 	GENERIC_MUX,
7921a3f02b5SRajan Vaja 	{
7931a3f02b5SRajan Vaja 		.type = TYPE_DIV1,
7941a3f02b5SRajan Vaja 		.offset = 8,
7951a3f02b5SRajan Vaja 		.width = 6,
7966ae95624SMaheedhar Bollapalli 		.clkflags = (uint16_t)CLK_IS_BASIC,
7976ae95624SMaheedhar Bollapalli 		.typeflags = (uint16_t)(CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
7981a3f02b5SRajan Vaja 		.mult = NA_MULT,
7991a3f02b5SRajan Vaja 		.div = NA_DIV,
8001a3f02b5SRajan Vaja 	},
8011a3f02b5SRajan Vaja 	IGNORE_UNUSED_GATE,
8021a3f02b5SRajan Vaja };
8031a3f02b5SRajan Vaja 
8041a3f02b5SRajan Vaja static int32_t can_mio_parents[] = {
8051a3f02b5SRajan Vaja 	EXT_CLK_MIO0, EXT_CLK_MIO1, EXT_CLK_MIO2, EXT_CLK_MIO3,
8061a3f02b5SRajan Vaja 	EXT_CLK_MIO4, EXT_CLK_MIO5, EXT_CLK_MIO6, EXT_CLK_MIO7,
8071a3f02b5SRajan Vaja 	EXT_CLK_MIO8, EXT_CLK_MIO9, EXT_CLK_MIO10, EXT_CLK_MIO11,
8081a3f02b5SRajan Vaja 	EXT_CLK_MIO12, EXT_CLK_MIO13, EXT_CLK_MIO14, EXT_CLK_MIO15,
8091a3f02b5SRajan Vaja 	EXT_CLK_MIO16, EXT_CLK_MIO17, EXT_CLK_MIO18, EXT_CLK_MIO19,
8101a3f02b5SRajan Vaja 	EXT_CLK_MIO20, EXT_CLK_MIO21, EXT_CLK_MIO22, EXT_CLK_MIO23,
8111a3f02b5SRajan Vaja 	EXT_CLK_MIO24, EXT_CLK_MIO25, EXT_CLK_MIO26, EXT_CLK_MIO27,
8121a3f02b5SRajan Vaja 	EXT_CLK_MIO28, EXT_CLK_MIO29, EXT_CLK_MIO30, EXT_CLK_MIO31,
8131a3f02b5SRajan Vaja 	EXT_CLK_MIO32, EXT_CLK_MIO33, EXT_CLK_MIO34, EXT_CLK_MIO35,
8141a3f02b5SRajan Vaja 	EXT_CLK_MIO36, EXT_CLK_MIO37, EXT_CLK_MIO38, EXT_CLK_MIO39,
8151a3f02b5SRajan Vaja 	EXT_CLK_MIO40, EXT_CLK_MIO41, EXT_CLK_MIO42, EXT_CLK_MIO43,
8161a3f02b5SRajan Vaja 	EXT_CLK_MIO44, EXT_CLK_MIO45, EXT_CLK_MIO46, EXT_CLK_MIO47,
8171a3f02b5SRajan Vaja 	EXT_CLK_MIO48, EXT_CLK_MIO49, EXT_CLK_MIO50, EXT_CLK_MIO51,
8181a3f02b5SRajan Vaja 	EXT_CLK_MIO52, EXT_CLK_MIO53, EXT_CLK_MIO54, EXT_CLK_MIO55,
8191a3f02b5SRajan Vaja 	EXT_CLK_MIO56, EXT_CLK_MIO57, EXT_CLK_MIO58, EXT_CLK_MIO59,
8201a3f02b5SRajan Vaja 	EXT_CLK_MIO60, EXT_CLK_MIO61, EXT_CLK_MIO62, EXT_CLK_MIO63,
8211a3f02b5SRajan Vaja 	EXT_CLK_MIO64, EXT_CLK_MIO65, EXT_CLK_MIO66, EXT_CLK_MIO67,
8221a3f02b5SRajan Vaja 	EXT_CLK_MIO68, EXT_CLK_MIO69, EXT_CLK_MIO70, EXT_CLK_MIO71,
8231a3f02b5SRajan Vaja 	EXT_CLK_MIO72, EXT_CLK_MIO73, EXT_CLK_MIO74, EXT_CLK_MIO75,
8241a3f02b5SRajan Vaja 	EXT_CLK_MIO76, EXT_CLK_MIO77, CLK_NA_PARENT
8251a3f02b5SRajan Vaja };
8261a3f02b5SRajan Vaja 
827caae497dSRajan Vaja /* Clock array containing clock informaton */
8281a3f02b5SRajan Vaja static struct pm_clock clocks[] = {
8291a3f02b5SRajan Vaja 	[CLK_APLL_INT] = {
8301a3f02b5SRajan Vaja 		.name = "apll_int",
8311a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8321a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8331a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_APLL_PRE_SRC, CLK_NA_PARENT}),
8341a3f02b5SRajan Vaja 		.nodes = &ignore_unused_pll_nodes,
8356ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(ignore_unused_pll_nodes),
8361a3f02b5SRajan Vaja 	},
8371a3f02b5SRajan Vaja 	[CLK_APLL_PRE_SRC] = {
8381a3f02b5SRajan Vaja 		.name = "apll_pre_src",
8391a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8401a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8411a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
8421a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8431a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8441a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8451a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8461a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
8471a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
8481a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
8491a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
8501a3f02b5SRajan Vaja 			CLK_NA_PARENT
8511a3f02b5SRajan Vaja 		}),
8521a3f02b5SRajan Vaja 		.nodes = &generic_pll_pre_src_nodes,
8536ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_pre_src_nodes),
8541a3f02b5SRajan Vaja 	},
8551a3f02b5SRajan Vaja 	[CLK_APLL_HALF] = {
8561a3f02b5SRajan Vaja 		.name = "apll_half",
8571a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8581a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8591a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_APLL_INT, CLK_NA_PARENT}),
8601a3f02b5SRajan Vaja 		.nodes = &generic_pll_half_nodes,
8616ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_half_nodes),
8621a3f02b5SRajan Vaja 	},
8631a3f02b5SRajan Vaja 	[CLK_APLL_INT_MUX] = {
8641a3f02b5SRajan Vaja 		.name = "apll_int_mux",
8651a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8661a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8671a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
8681a3f02b5SRajan Vaja 			CLK_APLL_INT,
8691a3f02b5SRajan Vaja 			CLK_APLL_HALF,
8701a3f02b5SRajan Vaja 			CLK_NA_PARENT
8711a3f02b5SRajan Vaja 		}),
8721a3f02b5SRajan Vaja 		.nodes = &generic_pll_int_nodes,
8736ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_int_nodes),
8741a3f02b5SRajan Vaja 	},
8751a3f02b5SRajan Vaja 	[CLK_APLL_POST_SRC] = {
8761a3f02b5SRajan Vaja 		.name = "apll_post_src",
8771a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8781a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8791a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
8801a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8811a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8821a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8831a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
8841a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
8851a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
8861a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
8871a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
8881a3f02b5SRajan Vaja 			CLK_NA_PARENT
8891a3f02b5SRajan Vaja 		}),
8901a3f02b5SRajan Vaja 		.nodes = &generic_pll_post_src_nodes,
8916ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_post_src_nodes),
8921a3f02b5SRajan Vaja 	},
8931a3f02b5SRajan Vaja 	[CLK_APLL] = {
8941a3f02b5SRajan Vaja 		.name = "apll",
8951a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_CTRL,
8961a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
8971a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
8981a3f02b5SRajan Vaja 			CLK_APLL_INT_MUX,
8991a3f02b5SRajan Vaja 			CLK_APLL_POST_SRC,
9001a3f02b5SRajan Vaja 			CLK_NA_PARENT
9011a3f02b5SRajan Vaja 		}),
9021a3f02b5SRajan Vaja 		.nodes = &generic_pll_system_nodes,
9036ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_system_nodes),
9041a3f02b5SRajan Vaja 	},
9051a3f02b5SRajan Vaja 	[CLK_DPLL_INT] = {
9061a3f02b5SRajan Vaja 		.name = "dpll_int",
9071a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9081a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9091a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_DPLL_PRE_SRC, CLK_NA_PARENT}),
9101a3f02b5SRajan Vaja 		.nodes = &generic_pll_nodes,
9116ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_nodes),
9121a3f02b5SRajan Vaja 	},
9131a3f02b5SRajan Vaja 	[CLK_DPLL_PRE_SRC] = {
9141a3f02b5SRajan Vaja 		.name = "dpll_pre_src",
9151a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9161a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9171a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
9181a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9191a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9201a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9211a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9221a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
9231a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
9241a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
9251a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
9261a3f02b5SRajan Vaja 			CLK_NA_PARENT
9271a3f02b5SRajan Vaja 		}),
9281a3f02b5SRajan Vaja 		.nodes = &generic_pll_pre_src_nodes,
9296ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_pre_src_nodes),
9301a3f02b5SRajan Vaja 	},
9311a3f02b5SRajan Vaja 	[CLK_DPLL_HALF] = {
9321a3f02b5SRajan Vaja 		.name = "dpll_half",
9331a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9341a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9351a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_DPLL_INT, CLK_NA_PARENT}),
9361a3f02b5SRajan Vaja 		.nodes = &generic_pll_half_nodes,
9376ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_half_nodes),
9381a3f02b5SRajan Vaja 	},
9391a3f02b5SRajan Vaja 	[CLK_DPLL_INT_MUX] = {
9401a3f02b5SRajan Vaja 		.name = "dpll_int_mux",
9411a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9421a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9431a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
9441a3f02b5SRajan Vaja 			CLK_DPLL_INT,
9451a3f02b5SRajan Vaja 			CLK_DPLL_HALF,
9461a3f02b5SRajan Vaja 			CLK_NA_PARENT
9471a3f02b5SRajan Vaja 		}),
9481a3f02b5SRajan Vaja 		.nodes = &generic_pll_int_nodes,
9496ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_int_nodes),
9501a3f02b5SRajan Vaja 	},
9511a3f02b5SRajan Vaja 	[CLK_DPLL_POST_SRC] = {
9521a3f02b5SRajan Vaja 		.name = "dpll_post_src",
9531a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9541a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9551a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
9561a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9571a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9581a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9591a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9601a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
9611a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
9621a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
9631a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
9641a3f02b5SRajan Vaja 			CLK_NA_PARENT
9651a3f02b5SRajan Vaja 		}),
9661a3f02b5SRajan Vaja 		.nodes = &generic_pll_post_src_nodes,
9676ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_post_src_nodes),
9681a3f02b5SRajan Vaja 	},
9691a3f02b5SRajan Vaja 	[CLK_DPLL] = {
9701a3f02b5SRajan Vaja 		.name = "dpll",
9711a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_CTRL,
9721a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9731a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
9741a3f02b5SRajan Vaja 			CLK_DPLL_INT_MUX,
9751a3f02b5SRajan Vaja 			CLK_DPLL_POST_SRC,
9761a3f02b5SRajan Vaja 			CLK_NA_PARENT
9771a3f02b5SRajan Vaja 		}),
9781a3f02b5SRajan Vaja 		.nodes = &generic_pll_system_nodes,
9796ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_system_nodes),
9801a3f02b5SRajan Vaja 	},
9811a3f02b5SRajan Vaja 	[CLK_VPLL_INT] = {
9821a3f02b5SRajan Vaja 		.name = "vpll_int",
9831a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
9841a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9851a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_VPLL_PRE_SRC, CLK_NA_PARENT}),
9861a3f02b5SRajan Vaja 		.nodes = &ignore_unused_pll_nodes,
9876ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(ignore_unused_pll_nodes),
9881a3f02b5SRajan Vaja 	},
9891a3f02b5SRajan Vaja 	[CLK_VPLL_PRE_SRC] = {
9901a3f02b5SRajan Vaja 		.name = "vpll_pre_src",
9911a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
9921a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
9931a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
9941a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9951a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9961a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9971a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
9981a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
9991a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
10001a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
10011a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
10021a3f02b5SRajan Vaja 			CLK_NA_PARENT
10031a3f02b5SRajan Vaja 		}),
10041a3f02b5SRajan Vaja 		.nodes = &generic_pll_pre_src_nodes,
10056ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_pre_src_nodes),
10061a3f02b5SRajan Vaja 	},
10071a3f02b5SRajan Vaja 	[CLK_VPLL_HALF] = {
10081a3f02b5SRajan Vaja 		.name = "vpll_half",
10091a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
10101a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10111a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_VPLL_INT, CLK_NA_PARENT}),
10121a3f02b5SRajan Vaja 		.nodes = &generic_pll_half_nodes,
10136ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_half_nodes),
10141a3f02b5SRajan Vaja 	},
10151a3f02b5SRajan Vaja 	[CLK_VPLL_INT_MUX] = {
10161a3f02b5SRajan Vaja 		.name = "vpll_int_mux",
10171a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
10181a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10191a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
10201a3f02b5SRajan Vaja 			CLK_VPLL_INT,
10211a3f02b5SRajan Vaja 			CLK_VPLL_HALF,
10221a3f02b5SRajan Vaja 			CLK_NA_PARENT
10231a3f02b5SRajan Vaja 		}),
10241a3f02b5SRajan Vaja 		.nodes = &generic_pll_int_nodes,
10256ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_int_nodes),
10261a3f02b5SRajan Vaja 	},
10271a3f02b5SRajan Vaja 	[CLK_VPLL_POST_SRC] = {
10281a3f02b5SRajan Vaja 		.name = "vpll_post_src",
10291a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
10301a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10311a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
10321a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10331a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10341a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10351a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10361a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
10371a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
10381a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
10391a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
10401a3f02b5SRajan Vaja 			CLK_NA_PARENT
10411a3f02b5SRajan Vaja 		}),
10421a3f02b5SRajan Vaja 		.nodes = &generic_pll_post_src_nodes,
10431a3f02b5SRajan Vaja 		.num_nodes = ARRAY_SIZE(generic_pll_post_src_nodes),
10441a3f02b5SRajan Vaja 	},
10451a3f02b5SRajan Vaja 	[CLK_VPLL] = {
10461a3f02b5SRajan Vaja 		.name = "vpll",
10471a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_CTRL,
10481a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10491a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
10501a3f02b5SRajan Vaja 			CLK_VPLL_INT_MUX,
10511a3f02b5SRajan Vaja 			CLK_VPLL_POST_SRC,
10521a3f02b5SRajan Vaja 			CLK_NA_PARENT
10531a3f02b5SRajan Vaja 		}),
10541a3f02b5SRajan Vaja 		.nodes = &generic_pll_system_nodes,
10556ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_system_nodes),
10561a3f02b5SRajan Vaja 	},
10571a3f02b5SRajan Vaja 	[CLK_IOPLL_INT] = {
10581a3f02b5SRajan Vaja 		.name = "iopll_int",
10591a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
10601a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10611a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_IOPLL_PRE_SRC, CLK_NA_PARENT}),
10621a3f02b5SRajan Vaja 		.nodes = &generic_pll_nodes,
10636ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_nodes),
10641a3f02b5SRajan Vaja 	},
10651a3f02b5SRajan Vaja 	[CLK_IOPLL_PRE_SRC] = {
10661a3f02b5SRajan Vaja 		.name = "iopll_pre_src",
10671a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
10681a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10691a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
10701a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10711a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10721a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10731a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
10741a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
10751a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
10761a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
10771a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
10781a3f02b5SRajan Vaja 			CLK_NA_PARENT
10791a3f02b5SRajan Vaja 		}),
10801a3f02b5SRajan Vaja 		.nodes = &generic_pll_pre_src_nodes,
10816ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_pre_src_nodes),
10821a3f02b5SRajan Vaja 	},
10831a3f02b5SRajan Vaja 	[CLK_IOPLL_HALF] = {
10841a3f02b5SRajan Vaja 		.name = "iopll_half",
10851a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
10861a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10871a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_IOPLL_INT, CLK_NA_PARENT}),
10881a3f02b5SRajan Vaja 		.nodes = &generic_pll_half_nodes,
10896ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_half_nodes),
10901a3f02b5SRajan Vaja 	},
10911a3f02b5SRajan Vaja 	[CLK_IOPLL_INT_MUX] = {
10921a3f02b5SRajan Vaja 		.name = "iopll_int_mux",
10931a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
10941a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
10951a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
10961a3f02b5SRajan Vaja 			CLK_IOPLL_INT,
10971a3f02b5SRajan Vaja 			CLK_IOPLL_HALF,
10981a3f02b5SRajan Vaja 			CLK_NA_PARENT
10991a3f02b5SRajan Vaja 		}),
11001a3f02b5SRajan Vaja 		.nodes = &generic_pll_int_nodes,
11016ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_int_nodes),
11021a3f02b5SRajan Vaja 	},
11031a3f02b5SRajan Vaja 	[CLK_IOPLL_POST_SRC] = {
11041a3f02b5SRajan Vaja 		.name = "iopll_post_src",
11051a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
11061a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11071a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
11081a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11091a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11101a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11111a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11121a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
11131a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
11141a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
11151a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
11161a3f02b5SRajan Vaja 			CLK_NA_PARENT
11171a3f02b5SRajan Vaja 		}),
11181a3f02b5SRajan Vaja 		.nodes = &generic_pll_post_src_nodes,
11196ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_post_src_nodes),
11201a3f02b5SRajan Vaja 	},
11211a3f02b5SRajan Vaja 	[CLK_IOPLL] = {
11221a3f02b5SRajan Vaja 		.name = "iopll",
11231a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_CTRL,
11241a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11251a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
11261a3f02b5SRajan Vaja 			CLK_IOPLL_INT_MUX,
11271a3f02b5SRajan Vaja 			CLK_IOPLL_POST_SRC,
11281a3f02b5SRajan Vaja 			CLK_NA_PARENT
11291a3f02b5SRajan Vaja 		}),
11301a3f02b5SRajan Vaja 		.nodes = &generic_pll_system_nodes,
11316ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_system_nodes),
11321a3f02b5SRajan Vaja 	},
11331a3f02b5SRajan Vaja 	[CLK_RPLL_INT] = {
11341a3f02b5SRajan Vaja 		.name = "rpll_int",
11351a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
11361a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11371a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_RPLL_PRE_SRC, CLK_NA_PARENT}),
11381a3f02b5SRajan Vaja 		.nodes = &generic_pll_nodes,
11396ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_nodes),
11401a3f02b5SRajan Vaja 	},
11411a3f02b5SRajan Vaja 	[CLK_RPLL_PRE_SRC] = {
11421a3f02b5SRajan Vaja 		.name = "rpll_pre_src",
11431a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
11441a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11451a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
11461a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11471a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11481a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11491a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11501a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
11511a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
11521a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
11531a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
11541a3f02b5SRajan Vaja 			CLK_NA_PARENT
11551a3f02b5SRajan Vaja 		}),
11561a3f02b5SRajan Vaja 
11571a3f02b5SRajan Vaja 		.nodes = &generic_pll_pre_src_nodes,
11586ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_pre_src_nodes),
11591a3f02b5SRajan Vaja 	},
11601a3f02b5SRajan Vaja 	[CLK_RPLL_HALF] = {
11611a3f02b5SRajan Vaja 		.name = "rpll_half",
11621a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
11631a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11641a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_RPLL_INT, CLK_NA_PARENT}),
11651a3f02b5SRajan Vaja 		.nodes = &generic_pll_half_nodes,
11666ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_half_nodes),
11671a3f02b5SRajan Vaja 	},
11681a3f02b5SRajan Vaja 	[CLK_RPLL_INT_MUX] = {
11691a3f02b5SRajan Vaja 		.name = "rpll_int_mux",
11701a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
11711a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11721a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
11731a3f02b5SRajan Vaja 			CLK_RPLL_INT,
11741a3f02b5SRajan Vaja 			CLK_RPLL_HALF,
11751a3f02b5SRajan Vaja 			CLK_NA_PARENT
11761a3f02b5SRajan Vaja 		}),
11771a3f02b5SRajan Vaja 		.nodes = &generic_pll_int_nodes,
11786ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_int_nodes),
11791a3f02b5SRajan Vaja 	},
11801a3f02b5SRajan Vaja 	[CLK_RPLL_POST_SRC] = {
11811a3f02b5SRajan Vaja 		.name = "rpll_post_src",
11821a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
11831a3f02b5SRajan Vaja 		.status_reg = CRF_APB_PLL_STATUS,
11841a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
11851a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11861a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11871a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11881a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
11891a3f02b5SRajan Vaja 			EXT_CLK_VIDEO | CLK_EXTERNAL_PARENT,
11901a3f02b5SRajan Vaja 			EXT_CLK_PSS_ALT_REF | CLK_EXTERNAL_PARENT,
11911a3f02b5SRajan Vaja 			EXT_CLK_AUX_REF | CLK_EXTERNAL_PARENT,
11921a3f02b5SRajan Vaja 			EXT_CLK_GT_CRX_REF | CLK_EXTERNAL_PARENT,
11931a3f02b5SRajan Vaja 			CLK_NA_PARENT
11941a3f02b5SRajan Vaja 		}),
11951a3f02b5SRajan Vaja 		.nodes = &generic_pll_post_src_nodes,
11966ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_post_src_nodes),
11971a3f02b5SRajan Vaja 	},
11981a3f02b5SRajan Vaja 	[CLK_RPLL] = {
11991a3f02b5SRajan Vaja 		.name = "rpll",
12001a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_CTRL,
12011a3f02b5SRajan Vaja 		.status_reg = CRL_APB_PLL_STATUS,
12021a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12031a3f02b5SRajan Vaja 			CLK_RPLL_INT_MUX,
12041a3f02b5SRajan Vaja 			CLK_RPLL_POST_SRC,
12051a3f02b5SRajan Vaja 			CLK_NA_PARENT
12061a3f02b5SRajan Vaja 		}),
12071a3f02b5SRajan Vaja 		.nodes = &generic_pll_system_nodes,
12086ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_pll_system_nodes),
12091a3f02b5SRajan Vaja 	},
12101a3f02b5SRajan Vaja 	/* Peripheral Clocks */
12111a3f02b5SRajan Vaja 	[CLK_ACPU] = {
12121a3f02b5SRajan Vaja 		.name = "acpu",
12131a3f02b5SRajan Vaja 		.control_reg = CRF_APB_ACPU_CTRL,
12141a3f02b5SRajan Vaja 		.status_reg = 0,
12151a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12161a3f02b5SRajan Vaja 			CLK_APLL,
12171a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12181a3f02b5SRajan Vaja 			CLK_DPLL,
12191a3f02b5SRajan Vaja 			CLK_VPLL,
12201a3f02b5SRajan Vaja 			CLK_NA_PARENT
12211a3f02b5SRajan Vaja 		}),
12221a3f02b5SRajan Vaja 		.nodes = &acpu_nodes,
12236ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(acpu_nodes),
12241a3f02b5SRajan Vaja 	},
1225284b2f09SJolly Shah 	[CLK_ACPU_FULL] = {
1226284b2f09SJolly Shah 		.name = "acpu_full",
1227284b2f09SJolly Shah 		.control_reg = CRF_APB_ACPU_CTRL,
1228284b2f09SJolly Shah 		.status_reg = 0,
1229284b2f09SJolly Shah 		.parents = &((int32_t []) {
12305b542313SMaheedhar Bollapalli 			(CLK_ACPU | (PARENT_CLK_NODE2 << CLK_PARENTS_ID_LEN)),
1231284b2f09SJolly Shah 			CLK_NA_PARENT
1232284b2f09SJolly Shah 		}),
1233284b2f09SJolly Shah 		.nodes = &acpu_full_nodes,
1234284b2f09SJolly Shah 		.num_nodes = ARRAY_SIZE(acpu_full_nodes),
1235284b2f09SJolly Shah 	},
12361a3f02b5SRajan Vaja 	[CLK_DBG_TRACE] = {
12371a3f02b5SRajan Vaja 		.name = "dbg_trace",
12381a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DBG_TRACE_CTRL,
12391a3f02b5SRajan Vaja 		.status_reg = 0,
12401a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12411a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
12421a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12431a3f02b5SRajan Vaja 			CLK_DPLL,
12441a3f02b5SRajan Vaja 			CLK_APLL,
12451a3f02b5SRajan Vaja 			CLK_NA_PARENT
12461a3f02b5SRajan Vaja 		}),
12471a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
12486ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
12491a3f02b5SRajan Vaja 	},
12501a3f02b5SRajan Vaja 	[CLK_DBG_FPD] = {
12511a3f02b5SRajan Vaja 		.name = "dbg_fpd",
12521a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DBG_FPD_CTRL,
12531a3f02b5SRajan Vaja 		.status_reg = 0,
12541a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12551a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
12561a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12571a3f02b5SRajan Vaja 			CLK_DPLL,
12581a3f02b5SRajan Vaja 			CLK_APLL,
12591a3f02b5SRajan Vaja 			CLK_NA_PARENT
12601a3f02b5SRajan Vaja 		}),
12611a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
12626ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
12631a3f02b5SRajan Vaja 	},
12641a3f02b5SRajan Vaja 	[CLK_DBG_TSTMP] = {
12651a3f02b5SRajan Vaja 		.name = "dbg_tstmp",
12661a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DBG_TSTMP_CTRL,
12671a3f02b5SRajan Vaja 		.status_reg = 0,
12681a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12691a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
12701a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12711a3f02b5SRajan Vaja 			CLK_DPLL,
12721a3f02b5SRajan Vaja 			CLK_APLL,
12731a3f02b5SRajan Vaja 			CLK_NA_PARENT
12741a3f02b5SRajan Vaja 		}),
12751a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_nodes,
12766ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_nodes),
12771a3f02b5SRajan Vaja 	},
12781a3f02b5SRajan Vaja 	[CLK_DP_VIDEO_REF] = {
12791a3f02b5SRajan Vaja 		.name = "dp_video_ref",
12801a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DP_VIDEO_REF_CTRL,
12811a3f02b5SRajan Vaja 		.status_reg = 0,
12821a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12831a3f02b5SRajan Vaja 			CLK_VPLL,
12841a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12851a3f02b5SRajan Vaja 			CLK_DPLL,
12861a3f02b5SRajan Vaja 			CLK_RPLL_TO_FPD,
12871a3f02b5SRajan Vaja 			CLK_NA_PARENT
12881a3f02b5SRajan Vaja 		}),
12891a3f02b5SRajan Vaja 		.nodes = &dp_audio_video_ref_nodes,
12906ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(dp_audio_video_ref_nodes),
12911a3f02b5SRajan Vaja 	},
12921a3f02b5SRajan Vaja 	[CLK_DP_AUDIO_REF] = {
12931a3f02b5SRajan Vaja 		.name = "dp_audio_ref",
12941a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DP_AUDIO_REF_CTRL,
12951a3f02b5SRajan Vaja 		.status_reg = 0,
12961a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
12971a3f02b5SRajan Vaja 			CLK_VPLL,
12981a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
12991a3f02b5SRajan Vaja 			CLK_DPLL,
13001a3f02b5SRajan Vaja 			CLK_RPLL_TO_FPD,
13011a3f02b5SRajan Vaja 			CLK_NA_PARENT
13021a3f02b5SRajan Vaja 		}),
13031a3f02b5SRajan Vaja 		.nodes = &dp_audio_video_ref_nodes,
13046ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(dp_audio_video_ref_nodes),
13051a3f02b5SRajan Vaja 	},
13061a3f02b5SRajan Vaja 	[CLK_DP_STC_REF] = {
13071a3f02b5SRajan Vaja 		.name = "dp_stc_ref",
13081a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DP_STC_REF_CTRL,
13091a3f02b5SRajan Vaja 		.status_reg = 0,
13101a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13111a3f02b5SRajan Vaja 			CLK_VPLL,
13121a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13131a3f02b5SRajan Vaja 			CLK_DPLL,
13141a3f02b5SRajan Vaja 			CLK_RPLL_TO_FPD,
13151a3f02b5SRajan Vaja 			CLK_NA_PARENT
13161a3f02b5SRajan Vaja 		}),
13171a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
13186ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
13191a3f02b5SRajan Vaja 	},
13201a3f02b5SRajan Vaja 	[CLK_DPDMA_REF] = {
13211a3f02b5SRajan Vaja 		.name = "dpdma_ref",
13221a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPDMA_REF_CTRL,
13231a3f02b5SRajan Vaja 		.status_reg = 0,
13241a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13251a3f02b5SRajan Vaja 			CLK_APLL,
13261a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13271a3f02b5SRajan Vaja 			CLK_VPLL,
13281a3f02b5SRajan Vaja 			CLK_DPLL,
13291a3f02b5SRajan Vaja 			CLK_NA_PARENT
13301a3f02b5SRajan Vaja 		}),
13311a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
13326ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
13331a3f02b5SRajan Vaja 	},
13341a3f02b5SRajan Vaja 	[CLK_DDR_REF] = {
13351a3f02b5SRajan Vaja 		.name = "ddr_ref",
13361a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DDR_CTRL,
13371a3f02b5SRajan Vaja 		.status_reg = 0,
13381a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13391a3f02b5SRajan Vaja 			CLK_DPLL,
13401a3f02b5SRajan Vaja 			CLK_VPLL,
13411a3f02b5SRajan Vaja 			CLK_NA_PARENT
13421a3f02b5SRajan Vaja 		}),
13431a3f02b5SRajan Vaja 		.nodes = &ddr_nodes,
13446ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(ddr_nodes),
13451a3f02b5SRajan Vaja 	},
13461a3f02b5SRajan Vaja 	[CLK_GPU_REF] = {
13471a3f02b5SRajan Vaja 		.name = "gpu_ref",
13481a3f02b5SRajan Vaja 		.control_reg = CRF_APB_GPU_REF_CTRL,
13491a3f02b5SRajan Vaja 		.status_reg = 0,
13501a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13511a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
13521a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13531a3f02b5SRajan Vaja 			CLK_VPLL,
13541a3f02b5SRajan Vaja 			CLK_DPLL,
13551a3f02b5SRajan Vaja 			CLK_NA_PARENT
13561a3f02b5SRajan Vaja 		}),
13571a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
13586ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
13591a3f02b5SRajan Vaja 	},
13601a3f02b5SRajan Vaja 	[CLK_SATA_REF] = {
13611a3f02b5SRajan Vaja 		.name = "sata_ref",
13621a3f02b5SRajan Vaja 		.control_reg = CRF_APB_SATA_REF_CTRL,
13631a3f02b5SRajan Vaja 		.status_reg = 0,
13641a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13651a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
13661a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13671a3f02b5SRajan Vaja 			CLK_APLL,
13681a3f02b5SRajan Vaja 			CLK_DPLL,
13691a3f02b5SRajan Vaja 			CLK_NA_PARENT
13701a3f02b5SRajan Vaja 		}),
13711a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
13726ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
13731a3f02b5SRajan Vaja 	},
13741a3f02b5SRajan Vaja 	[CLK_PCIE_REF] = {
13751a3f02b5SRajan Vaja 		.name = "pcie_ref",
13761a3f02b5SRajan Vaja 		.control_reg = CRF_APB_PCIE_REF_CTRL,
13771a3f02b5SRajan Vaja 		.status_reg = 0,
13781a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13791a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
13801a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13811a3f02b5SRajan Vaja 			CLK_RPLL_TO_FPD,
13821a3f02b5SRajan Vaja 			CLK_DPLL,
13831a3f02b5SRajan Vaja 			CLK_NA_PARENT
13841a3f02b5SRajan Vaja 		}),
13851a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
13866ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
13871a3f02b5SRajan Vaja 	},
13881a3f02b5SRajan Vaja 	[CLK_GDMA_REF] = {
13891a3f02b5SRajan Vaja 		.name = "gdma_ref",
13901a3f02b5SRajan Vaja 		.control_reg = CRF_APB_GDMA_REF_CTRL,
13911a3f02b5SRajan Vaja 		.status_reg = 0,
13921a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
13931a3f02b5SRajan Vaja 			CLK_APLL,
13941a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
13951a3f02b5SRajan Vaja 			CLK_VPLL,
13961a3f02b5SRajan Vaja 			CLK_DPLL,
13971a3f02b5SRajan Vaja 			CLK_NA_PARENT
13981a3f02b5SRajan Vaja 		}),
13991a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
14006ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
14011a3f02b5SRajan Vaja 	},
14021a3f02b5SRajan Vaja 	[CLK_GTGREF0_REF] = {
14031a3f02b5SRajan Vaja 		.name = "gtgref0_ref",
14041a3f02b5SRajan Vaja 		.control_reg = CRF_APB_GTGREF0_REF_CTRL,
14051a3f02b5SRajan Vaja 		.status_reg = 0,
14061a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14071a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
14081a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14091a3f02b5SRajan Vaja 			CLK_APLL,
14101a3f02b5SRajan Vaja 			CLK_DPLL,
14111a3f02b5SRajan Vaja 			CLK_NA_PARENT
14121a3f02b5SRajan Vaja 		}),
14131a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
14146ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
14151a3f02b5SRajan Vaja 	},
14161a3f02b5SRajan Vaja 	[CLK_TOPSW_MAIN] = {
14171a3f02b5SRajan Vaja 		.name = "topsw_main",
14181a3f02b5SRajan Vaja 		.control_reg = CRF_APB_TOPSW_MAIN_CTRL,
14191a3f02b5SRajan Vaja 		.status_reg = 0,
14201a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14211a3f02b5SRajan Vaja 			CLK_APLL,
14221a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14231a3f02b5SRajan Vaja 			CLK_VPLL,
14241a3f02b5SRajan Vaja 			CLK_DPLL,
14251a3f02b5SRajan Vaja 			CLK_NA_PARENT
14261a3f02b5SRajan Vaja 		}),
14271a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
14286ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
14291a3f02b5SRajan Vaja 	},
14301a3f02b5SRajan Vaja 	[CLK_TOPSW_LSBUS] = {
14311a3f02b5SRajan Vaja 		.name = "topsw_lsbus",
14321a3f02b5SRajan Vaja 		.control_reg = CRF_APB_TOPSW_LSBUS_CTRL,
14331a3f02b5SRajan Vaja 		.status_reg = 0,
14341a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14351a3f02b5SRajan Vaja 			CLK_APLL,
14361a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14371a3f02b5SRajan Vaja 			CLK_IOPLL_TO_FPD,
14381a3f02b5SRajan Vaja 			CLK_DPLL,
14391a3f02b5SRajan Vaja 			CLK_NA_PARENT
14401a3f02b5SRajan Vaja 		}),
14411a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
14426ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
14431a3f02b5SRajan Vaja 	},
14441a3f02b5SRajan Vaja 	[CLK_IOU_SWITCH] = {
14451a3f02b5SRajan Vaja 		.name = "iou_switch",
14461a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOU_SWITCH_CTRL,
14471a3f02b5SRajan Vaja 		.status_reg = 0,
14481a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14491a3f02b5SRajan Vaja 			CLK_RPLL,
14501a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14511a3f02b5SRajan Vaja 			CLK_IOPLL,
14521a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
14531a3f02b5SRajan Vaja 			CLK_NA_PARENT
14541a3f02b5SRajan Vaja 		}),
14551a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
14566ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
14571a3f02b5SRajan Vaja 	},
145806ad9803SMirela Simonovic 	[CLK_GEM0_REF_UNGATED] = {
145906ad9803SMirela Simonovic 		.name = "gem0_ref_ung",
14601a3f02b5SRajan Vaja 		.control_reg = CRL_APB_GEM0_REF_CTRL,
14611a3f02b5SRajan Vaja 		.status_reg = 0,
14621a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14631a3f02b5SRajan Vaja 			CLK_IOPLL,
14641a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14651a3f02b5SRajan Vaja 			CLK_RPLL,
14661a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
14671a3f02b5SRajan Vaja 			CLK_NA_PARENT
14681a3f02b5SRajan Vaja 		}),
146906ad9803SMirela Simonovic 		.nodes = &gem_ref_ungated_nodes,
147006ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem_ref_ungated_nodes),
14711a3f02b5SRajan Vaja 	},
147206ad9803SMirela Simonovic 	[CLK_GEM1_REF_UNGATED] = {
147306ad9803SMirela Simonovic 		.name = "gem1_ref_ung",
14741a3f02b5SRajan Vaja 		.control_reg = CRL_APB_GEM1_REF_CTRL,
14751a3f02b5SRajan Vaja 		.status_reg = 0,
14761a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14771a3f02b5SRajan Vaja 			CLK_IOPLL,
14781a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14791a3f02b5SRajan Vaja 			CLK_RPLL,
14801a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
14811a3f02b5SRajan Vaja 			CLK_NA_PARENT
14821a3f02b5SRajan Vaja 		}),
148306ad9803SMirela Simonovic 		.nodes = &gem_ref_ungated_nodes,
148406ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem_ref_ungated_nodes),
14851a3f02b5SRajan Vaja 	},
148606ad9803SMirela Simonovic 	[CLK_GEM2_REF_UNGATED] = {
148706ad9803SMirela Simonovic 		.name = "gem2_ref_ung",
14881a3f02b5SRajan Vaja 		.control_reg = CRL_APB_GEM2_REF_CTRL,
14891a3f02b5SRajan Vaja 		.status_reg = 0,
14901a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
14911a3f02b5SRajan Vaja 			CLK_IOPLL,
14921a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
14931a3f02b5SRajan Vaja 			CLK_RPLL,
14941a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
14951a3f02b5SRajan Vaja 			CLK_NA_PARENT
14961a3f02b5SRajan Vaja 		}),
149706ad9803SMirela Simonovic 		.nodes = &gem_ref_ungated_nodes,
149806ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem_ref_ungated_nodes),
14991a3f02b5SRajan Vaja 	},
150006ad9803SMirela Simonovic 	[CLK_GEM3_REF_UNGATED] = {
150106ad9803SMirela Simonovic 		.name = "gem3_ref_ung",
15021a3f02b5SRajan Vaja 		.control_reg = CRL_APB_GEM3_REF_CTRL,
15031a3f02b5SRajan Vaja 		.status_reg = 0,
15041a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
15051a3f02b5SRajan Vaja 			CLK_IOPLL,
15061a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
15071a3f02b5SRajan Vaja 			CLK_RPLL,
15081a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
15091a3f02b5SRajan Vaja 			CLK_NA_PARENT
15101a3f02b5SRajan Vaja 		}),
151106ad9803SMirela Simonovic 		.nodes = &gem_ref_ungated_nodes,
151206ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem_ref_ungated_nodes),
151306ad9803SMirela Simonovic 	},
151406ad9803SMirela Simonovic 	[CLK_GEM0_REF] = {
151506ad9803SMirela Simonovic 		.name = "gem0_ref",
151606ad9803SMirela Simonovic 		.control_reg = IOU_SLCR_GEM_CLK_CTRL,
151706ad9803SMirela Simonovic 		.status_reg = 0,
151806ad9803SMirela Simonovic 		.parents = &((int32_t []) {
151906ad9803SMirela Simonovic 			CLK_GEM0_REF_UNGATED |
152006ad9803SMirela Simonovic 			(PARENT_CLK_NODE3 << CLK_PARENTS_ID_LEN),
152106ad9803SMirela Simonovic 			EXT_CLK_GEM0_TX_EMIO | CLK_EXTERNAL_PARENT,
152206ad9803SMirela Simonovic 			CLK_NA_PARENT
152306ad9803SMirela Simonovic 		}),
152406ad9803SMirela Simonovic 		.nodes = &gem0_ref_nodes,
152506ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem0_ref_nodes),
152606ad9803SMirela Simonovic 	},
152706ad9803SMirela Simonovic 	[CLK_GEM1_REF] = {
152806ad9803SMirela Simonovic 		.name = "gem1_ref",
152906ad9803SMirela Simonovic 		.control_reg = IOU_SLCR_GEM_CLK_CTRL,
153006ad9803SMirela Simonovic 		.status_reg = 0,
153106ad9803SMirela Simonovic 		.parents = &((int32_t []) {
153206ad9803SMirela Simonovic 			CLK_GEM1_REF_UNGATED |
153306ad9803SMirela Simonovic 			(PARENT_CLK_NODE3 << CLK_PARENTS_ID_LEN),
153406ad9803SMirela Simonovic 			EXT_CLK_GEM1_TX_EMIO | CLK_EXTERNAL_PARENT,
153506ad9803SMirela Simonovic 			CLK_NA_PARENT
153606ad9803SMirela Simonovic 		}),
153706ad9803SMirela Simonovic 		.nodes = &gem1_ref_nodes,
153806ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem1_ref_nodes),
153906ad9803SMirela Simonovic 	},
154006ad9803SMirela Simonovic 	[CLK_GEM2_REF] = {
154106ad9803SMirela Simonovic 		.name = "gem2_ref",
154206ad9803SMirela Simonovic 		.control_reg = IOU_SLCR_GEM_CLK_CTRL,
154306ad9803SMirela Simonovic 		.status_reg = 0,
154406ad9803SMirela Simonovic 		.parents = &((int32_t []) {
154506ad9803SMirela Simonovic 			CLK_GEM2_REF_UNGATED |
154606ad9803SMirela Simonovic 			(PARENT_CLK_NODE3 << CLK_PARENTS_ID_LEN),
154706ad9803SMirela Simonovic 			EXT_CLK_GEM2_TX_EMIO | CLK_EXTERNAL_PARENT,
154806ad9803SMirela Simonovic 			CLK_NA_PARENT
154906ad9803SMirela Simonovic 		}),
155006ad9803SMirela Simonovic 		.nodes = &gem2_ref_nodes,
155106ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem2_ref_nodes),
155206ad9803SMirela Simonovic 	},
155306ad9803SMirela Simonovic 	[CLK_GEM3_REF] = {
155406ad9803SMirela Simonovic 		.name = "gem3_ref",
155506ad9803SMirela Simonovic 		.control_reg = IOU_SLCR_GEM_CLK_CTRL,
155606ad9803SMirela Simonovic 		.status_reg = 0,
155706ad9803SMirela Simonovic 		.parents = &((int32_t []) {
155806ad9803SMirela Simonovic 			CLK_GEM3_REF_UNGATED |
155906ad9803SMirela Simonovic 			(PARENT_CLK_NODE3 << CLK_PARENTS_ID_LEN),
156006ad9803SMirela Simonovic 			EXT_CLK_GEM3_TX_EMIO | CLK_EXTERNAL_PARENT,
156106ad9803SMirela Simonovic 			CLK_NA_PARENT
156206ad9803SMirela Simonovic 		}),
156306ad9803SMirela Simonovic 		.nodes = &gem3_ref_nodes,
156406ad9803SMirela Simonovic 		.num_nodes = ARRAY_SIZE(gem3_ref_nodes),
15651a3f02b5SRajan Vaja 	},
15661a3f02b5SRajan Vaja 	[CLK_USB0_BUS_REF] = {
15671a3f02b5SRajan Vaja 		.name = "usb0_bus_ref",
15681a3f02b5SRajan Vaja 		.control_reg = CRL_APB_USB0_BUS_REF_CTRL,
15691a3f02b5SRajan Vaja 		.status_reg = 0,
15701a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
15711a3f02b5SRajan Vaja 			CLK_IOPLL,
15721a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
15731a3f02b5SRajan Vaja 			CLK_RPLL,
15741a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
15751a3f02b5SRajan Vaja 			CLK_NA_PARENT
15761a3f02b5SRajan Vaja 		}),
15771a3f02b5SRajan Vaja 		.nodes = &usb_nodes,
15786ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(usb_nodes),
15791a3f02b5SRajan Vaja 	},
15801a3f02b5SRajan Vaja 	[CLK_USB1_BUS_REF] = {
15811a3f02b5SRajan Vaja 		.name = "usb1_bus_ref",
15821a3f02b5SRajan Vaja 		.control_reg = CRL_APB_USB1_BUS_REF_CTRL,
15831a3f02b5SRajan Vaja 		.status_reg = 0,
15841a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
15851a3f02b5SRajan Vaja 			CLK_IOPLL,
15861a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
15871a3f02b5SRajan Vaja 			CLK_RPLL,
15881a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
15891a3f02b5SRajan Vaja 			CLK_NA_PARENT
15901a3f02b5SRajan Vaja 		}),
15911a3f02b5SRajan Vaja 		.nodes = &usb_nodes,
15926ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(usb_nodes),
15931a3f02b5SRajan Vaja 	},
15941a3f02b5SRajan Vaja 	[CLK_USB3_DUAL_REF] = {
15951a3f02b5SRajan Vaja 		.name = "usb3_dual_ref",
15961a3f02b5SRajan Vaja 		.control_reg = CRL_APB_USB3_DUAL_REF_CTRL,
15971a3f02b5SRajan Vaja 		.status_reg = 0,
15981a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
15991a3f02b5SRajan Vaja 			CLK_IOPLL,
16001a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16011a3f02b5SRajan Vaja 			CLK_RPLL,
16021a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
16031a3f02b5SRajan Vaja 			CLK_NA_PARENT
16041a3f02b5SRajan Vaja 		}),
16051a3f02b5SRajan Vaja 		.nodes = &usb_nodes,
16066ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(usb_nodes),
16071a3f02b5SRajan Vaja 	},
16081a3f02b5SRajan Vaja 	[CLK_QSPI_REF] = {
16091a3f02b5SRajan Vaja 		.name = "qspi_ref",
16101a3f02b5SRajan Vaja 		.control_reg = CRL_APB_QSPI_REF_CTRL,
16111a3f02b5SRajan Vaja 		.status_reg = 0,
16121a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16131a3f02b5SRajan Vaja 			CLK_IOPLL,
16141a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16151a3f02b5SRajan Vaja 			CLK_RPLL,
16161a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
16171a3f02b5SRajan Vaja 			CLK_NA_PARENT
16181a3f02b5SRajan Vaja 		}),
16191a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16206ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16211a3f02b5SRajan Vaja 	},
16221a3f02b5SRajan Vaja 	[CLK_SDIO0_REF] = {
16231a3f02b5SRajan Vaja 		.name = "sdio0_ref",
16241a3f02b5SRajan Vaja 		.control_reg = CRL_APB_SDIO0_REF_CTRL,
16251a3f02b5SRajan Vaja 		.status_reg = 0,
16261a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16271a3f02b5SRajan Vaja 			CLK_IOPLL,
16281a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16291a3f02b5SRajan Vaja 			CLK_RPLL,
16301a3f02b5SRajan Vaja 			CLK_VPLL_TO_LPD,
16311a3f02b5SRajan Vaja 			CLK_NA_PARENT
16321a3f02b5SRajan Vaja 		}),
16331a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16346ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16351a3f02b5SRajan Vaja 	},
16361a3f02b5SRajan Vaja 	[CLK_SDIO1_REF] = {
16371a3f02b5SRajan Vaja 		.name = "sdio1_ref",
16381a3f02b5SRajan Vaja 		.control_reg = CRL_APB_SDIO1_REF_CTRL,
16391a3f02b5SRajan Vaja 		.status_reg = 0,
16401a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16411a3f02b5SRajan Vaja 			CLK_IOPLL,
16421a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16431a3f02b5SRajan Vaja 			CLK_RPLL,
16441a3f02b5SRajan Vaja 			CLK_VPLL_TO_LPD,
16451a3f02b5SRajan Vaja 			CLK_NA_PARENT
16461a3f02b5SRajan Vaja 		}),
16471a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16486ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16491a3f02b5SRajan Vaja 	},
16501a3f02b5SRajan Vaja 	[CLK_UART0_REF] = {
16511a3f02b5SRajan Vaja 		.name = "uart0_ref",
16521a3f02b5SRajan Vaja 		.control_reg = CRL_APB_UART0_REF_CTRL,
16531a3f02b5SRajan Vaja 		.status_reg = 0,
16541a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16551a3f02b5SRajan Vaja 			CLK_IOPLL,
16561a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16571a3f02b5SRajan Vaja 			CLK_RPLL,
16581a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
16591a3f02b5SRajan Vaja 			CLK_NA_PARENT
16601a3f02b5SRajan Vaja 		}),
16611a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16626ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16631a3f02b5SRajan Vaja 	},
16641a3f02b5SRajan Vaja 	[CLK_UART1_REF] = {
16651a3f02b5SRajan Vaja 		.name = "uart1_ref",
16661a3f02b5SRajan Vaja 		.control_reg = CRL_APB_UART1_REF_CTRL,
16671a3f02b5SRajan Vaja 		.status_reg = 0,
16681a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16691a3f02b5SRajan Vaja 			CLK_IOPLL,
16701a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16711a3f02b5SRajan Vaja 			CLK_RPLL,
16721a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
16731a3f02b5SRajan Vaja 			CLK_NA_PARENT
16741a3f02b5SRajan Vaja 		}),
16751a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16766ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16771a3f02b5SRajan Vaja 	},
16781a3f02b5SRajan Vaja 	[CLK_SPI0_REF] = {
16791a3f02b5SRajan Vaja 		.name = "spi0_ref",
16801a3f02b5SRajan Vaja 		.control_reg = CRL_APB_SPI0_REF_CTRL,
16811a3f02b5SRajan Vaja 		.status_reg = 0,
16821a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16831a3f02b5SRajan Vaja 			CLK_IOPLL,
16841a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16851a3f02b5SRajan Vaja 			CLK_RPLL,
16861a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
16871a3f02b5SRajan Vaja 			CLK_NA_PARENT
16881a3f02b5SRajan Vaja 		}),
16891a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
16906ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
16911a3f02b5SRajan Vaja 	},
16921a3f02b5SRajan Vaja 	[CLK_SPI1_REF] = {
16931a3f02b5SRajan Vaja 		.name = "spi1_ref",
16941a3f02b5SRajan Vaja 		.control_reg = CRL_APB_SPI1_REF_CTRL,
16951a3f02b5SRajan Vaja 		.status_reg = 0,
16961a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
16971a3f02b5SRajan Vaja 			CLK_IOPLL,
16981a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
16991a3f02b5SRajan Vaja 			CLK_RPLL,
17001a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17011a3f02b5SRajan Vaja 			CLK_NA_PARENT
17021a3f02b5SRajan Vaja 		}),
17031a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
17046ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
17051a3f02b5SRajan Vaja 	},
17061a3f02b5SRajan Vaja 	[CLK_CAN0_REF] = {
17071a3f02b5SRajan Vaja 		.name = "can0_ref",
17081a3f02b5SRajan Vaja 		.control_reg = CRL_APB_CAN0_REF_CTRL,
17091a3f02b5SRajan Vaja 		.status_reg = 0,
17101a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17111a3f02b5SRajan Vaja 			CLK_IOPLL,
17121a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17131a3f02b5SRajan Vaja 			CLK_RPLL,
17141a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17151a3f02b5SRajan Vaja 			CLK_NA_PARENT
17161a3f02b5SRajan Vaja 		}),
17171a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
17186ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
17191a3f02b5SRajan Vaja 	},
17201a3f02b5SRajan Vaja 	[CLK_CAN1_REF] = {
17211a3f02b5SRajan Vaja 		.name = "can1_ref",
17221a3f02b5SRajan Vaja 		.control_reg = CRL_APB_CAN1_REF_CTRL,
17231a3f02b5SRajan Vaja 		.status_reg = 0,
17241a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17251a3f02b5SRajan Vaja 			CLK_IOPLL,
17261a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17271a3f02b5SRajan Vaja 			CLK_RPLL,
17281a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17291a3f02b5SRajan Vaja 			CLK_NA_PARENT
17301a3f02b5SRajan Vaja 		}),
17311a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
17326ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
17331a3f02b5SRajan Vaja 	},
17341a3f02b5SRajan Vaja 	[CLK_NAND_REF] = {
17351a3f02b5SRajan Vaja 		.name = "nand_ref",
17361a3f02b5SRajan Vaja 		.control_reg = CRL_APB_NAND_REF_CTRL,
17371a3f02b5SRajan Vaja 		.status_reg = 0,
17381a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17391a3f02b5SRajan Vaja 			CLK_IOPLL,
17401a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17411a3f02b5SRajan Vaja 			CLK_RPLL,
17421a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17431a3f02b5SRajan Vaja 			CLK_NA_PARENT
17441a3f02b5SRajan Vaja 		}),
17451a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
17466ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
17471a3f02b5SRajan Vaja 	},
17481a3f02b5SRajan Vaja 	[CLK_GEM_TSU_REF] = {
17491a3f02b5SRajan Vaja 		.name = "gem_tsu_ref",
17501a3f02b5SRajan Vaja 		.control_reg = CRL_APB_GEM_TSU_REF_CTRL,
17511a3f02b5SRajan Vaja 		.status_reg = 0,
17521a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17531a3f02b5SRajan Vaja 			CLK_IOPLL,
17541a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17551a3f02b5SRajan Vaja 			CLK_RPLL,
17561a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17571a3f02b5SRajan Vaja 			CLK_NA_PARENT
17581a3f02b5SRajan Vaja 		}),
17591a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
17606ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
17611a3f02b5SRajan Vaja 	},
17621a3f02b5SRajan Vaja 	[CLK_DLL_REF] = {
17631a3f02b5SRajan Vaja 		.name = "dll_ref",
17641a3f02b5SRajan Vaja 		.control_reg = CRL_APB_DLL_REF_CTRL,
17651a3f02b5SRajan Vaja 		.status_reg = 0,
17661a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17671a3f02b5SRajan Vaja 			CLK_IOPLL,
17681a3f02b5SRajan Vaja 			CLK_RPLL,
17691a3f02b5SRajan Vaja 			CLK_NA_PARENT
17701a3f02b5SRajan Vaja 		}),
17711a3f02b5SRajan Vaja 		.nodes = &dll_ref_nodes,
17726ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(dll_ref_nodes),
17731a3f02b5SRajan Vaja 	},
17741a3f02b5SRajan Vaja 	[CLK_ADMA_REF] = {
17751a3f02b5SRajan Vaja 		.name = "adma_ref",
17761a3f02b5SRajan Vaja 		.control_reg = CRL_APB_ADMA_REF_CTRL,
17771a3f02b5SRajan Vaja 		.status_reg = 0,
17781a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17791a3f02b5SRajan Vaja 			CLK_RPLL,
17801a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17811a3f02b5SRajan Vaja 			CLK_IOPLL,
17821a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17831a3f02b5SRajan Vaja 			CLK_NA_PARENT
17841a3f02b5SRajan Vaja 		}),
17851a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
17866ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
17871a3f02b5SRajan Vaja 	},
17881a3f02b5SRajan Vaja 	[CLK_DBG_LPD] = {
17891a3f02b5SRajan Vaja 		.name = "dbg_lpd",
17901a3f02b5SRajan Vaja 		.control_reg = CRL_APB_DBG_LPD_CTRL,
17911a3f02b5SRajan Vaja 		.status_reg = 0,
17921a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
17931a3f02b5SRajan Vaja 			CLK_RPLL,
17941a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
17951a3f02b5SRajan Vaja 			CLK_IOPLL,
17961a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
17971a3f02b5SRajan Vaja 			CLK_NA_PARENT
17981a3f02b5SRajan Vaja 		}),
17991a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
18006ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
18011a3f02b5SRajan Vaja 	},
18021a3f02b5SRajan Vaja 	[CLK_CPU_R5] = {
18031a3f02b5SRajan Vaja 		.name = "cpu_r5",
18041a3f02b5SRajan Vaja 		.control_reg = CRL_APB_CPU_R5_CTRL,
18051a3f02b5SRajan Vaja 		.status_reg = 0,
18061a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18071a3f02b5SRajan Vaja 			CLK_RPLL,
18081a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18091a3f02b5SRajan Vaja 			CLK_IOPLL,
18101a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18111a3f02b5SRajan Vaja 			CLK_NA_PARENT
18121a3f02b5SRajan Vaja 		}),
18131a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
18146ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
18151a3f02b5SRajan Vaja 	},
18161a3f02b5SRajan Vaja 	[CLK_CSU_PLL] = {
18171a3f02b5SRajan Vaja 		.name = "csu_pll",
18181a3f02b5SRajan Vaja 		.control_reg = CRL_APB_CSU_PLL_CTRL,
18191a3f02b5SRajan Vaja 		.status_reg = 0,
18201a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18211a3f02b5SRajan Vaja 			CLK_IOPLL,
18221a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18231a3f02b5SRajan Vaja 			CLK_RPLL,
18241a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18251a3f02b5SRajan Vaja 			CLK_NA_PARENT
18261a3f02b5SRajan Vaja 		}),
18271a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
18286ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
18291a3f02b5SRajan Vaja 	},
18301a3f02b5SRajan Vaja 	[CLK_PCAP] = {
18311a3f02b5SRajan Vaja 		.name = "pcap",
18321a3f02b5SRajan Vaja 		.control_reg = CRL_APB_PCAP_CTRL,
18331a3f02b5SRajan Vaja 		.status_reg = 0,
18341a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18351a3f02b5SRajan Vaja 			CLK_IOPLL,
18361a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18371a3f02b5SRajan Vaja 			CLK_RPLL,
18381a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18391a3f02b5SRajan Vaja 			CLK_NA_PARENT
18401a3f02b5SRajan Vaja 		}),
18411a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_gate_nodes,
18426ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_gate_nodes),
18431a3f02b5SRajan Vaja 	},
18441a3f02b5SRajan Vaja 	[CLK_LPD_LSBUS] = {
18451a3f02b5SRajan Vaja 		.name = "lpd_lsbus",
18461a3f02b5SRajan Vaja 		.control_reg = CRL_APB_LPD_LSBUS_CTRL,
18471a3f02b5SRajan Vaja 		.status_reg = 0,
18481a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18491a3f02b5SRajan Vaja 			CLK_RPLL,
18501a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18511a3f02b5SRajan Vaja 			CLK_IOPLL,
18521a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18531a3f02b5SRajan Vaja 			CLK_NA_PARENT
18541a3f02b5SRajan Vaja 		}),
18551a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
18566ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
18571a3f02b5SRajan Vaja 	},
18581a3f02b5SRajan Vaja 	[CLK_LPD_SWITCH] = {
18591a3f02b5SRajan Vaja 		.name = "lpd_switch",
18601a3f02b5SRajan Vaja 		.control_reg = CRL_APB_LPD_SWITCH_CTRL,
18611a3f02b5SRajan Vaja 		.status_reg = 0,
18621a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18631a3f02b5SRajan Vaja 			CLK_RPLL,
18641a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18651a3f02b5SRajan Vaja 			CLK_IOPLL,
18661a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18671a3f02b5SRajan Vaja 			CLK_NA_PARENT
18681a3f02b5SRajan Vaja 		}),
18691a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_unused_gate_nodes,
18706ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_unused_gate_nodes),
18711a3f02b5SRajan Vaja 	},
18721a3f02b5SRajan Vaja 	[CLK_I2C0_REF] = {
18731a3f02b5SRajan Vaja 		.name = "i2c0_ref",
18741a3f02b5SRajan Vaja 		.control_reg = CRL_APB_I2C0_REF_CTRL,
18751a3f02b5SRajan Vaja 		.status_reg = 0,
18761a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18771a3f02b5SRajan Vaja 			CLK_IOPLL,
18781a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18791a3f02b5SRajan Vaja 			CLK_RPLL,
18801a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18811a3f02b5SRajan Vaja 			CLK_NA_PARENT
18821a3f02b5SRajan Vaja 		}),
18831a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
18846ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
18851a3f02b5SRajan Vaja 	},
18861a3f02b5SRajan Vaja 	[CLK_I2C1_REF] = {
18871a3f02b5SRajan Vaja 		.name = "i2c1_ref",
18881a3f02b5SRajan Vaja 		.control_reg = CRL_APB_I2C1_REF_CTRL,
18891a3f02b5SRajan Vaja 		.status_reg = 0,
18901a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
18911a3f02b5SRajan Vaja 			CLK_IOPLL,
18921a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
18931a3f02b5SRajan Vaja 			CLK_RPLL,
18941a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
18951a3f02b5SRajan Vaja 			CLK_NA_PARENT
18961a3f02b5SRajan Vaja 		}),
18971a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
18986ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
18991a3f02b5SRajan Vaja 	},
19001a3f02b5SRajan Vaja 	[CLK_TIMESTAMP_REF] = {
19011a3f02b5SRajan Vaja 		.name = "timestamp_ref",
19021a3f02b5SRajan Vaja 		.control_reg = CRL_APB_TIMESTAMP_REF_CTRL,
19031a3f02b5SRajan Vaja 		.status_reg = 0,
19041a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19051a3f02b5SRajan Vaja 			CLK_IOPLL,
19061a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19071a3f02b5SRajan Vaja 			CLK_RPLL,
19081a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19091a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
19101a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
19111a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
19121a3f02b5SRajan Vaja 			EXT_CLK_PSS_REF | CLK_EXTERNAL_PARENT,
19131a3f02b5SRajan Vaja 			CLK_NA_PARENT
19141a3f02b5SRajan Vaja 		}),
19151a3f02b5SRajan Vaja 		.nodes = &timestamp_ref_nodes,
19166ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(timestamp_ref_nodes),
19171a3f02b5SRajan Vaja 	},
19181a3f02b5SRajan Vaja 	[CLK_PL0_REF] = {
19191a3f02b5SRajan Vaja 		.name = "pl0_ref",
19201a3f02b5SRajan Vaja 		.control_reg = CRL_APB_PL0_REF_CTRL,
19211a3f02b5SRajan Vaja 		.status_reg = 0,
19221a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19231a3f02b5SRajan Vaja 			CLK_IOPLL,
19241a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19251a3f02b5SRajan Vaja 			CLK_RPLL,
19261a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19271a3f02b5SRajan Vaja 			CLK_NA_PARENT
19281a3f02b5SRajan Vaja 		}),
19291a3f02b5SRajan Vaja 		.nodes = &pl_nodes,
19306ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(pl_nodes),
19311a3f02b5SRajan Vaja 	},
19321a3f02b5SRajan Vaja 	[CLK_PL1_REF] = {
19331a3f02b5SRajan Vaja 		.name = "pl1_ref",
19341a3f02b5SRajan Vaja 		.control_reg = CRL_APB_PL1_REF_CTRL,
19351a3f02b5SRajan Vaja 		.status_reg = 0,
19361a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19371a3f02b5SRajan Vaja 			CLK_IOPLL,
19381a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19391a3f02b5SRajan Vaja 			CLK_RPLL,
19401a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19411a3f02b5SRajan Vaja 			CLK_NA_PARENT
19421a3f02b5SRajan Vaja 		}),
19431a3f02b5SRajan Vaja 		.nodes = &pl_nodes,
19446ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(pl_nodes),
19451a3f02b5SRajan Vaja 	},
19461a3f02b5SRajan Vaja 	[CLK_PL2_REF] = {
19471a3f02b5SRajan Vaja 		.name = "pl2_ref",
19481a3f02b5SRajan Vaja 		.control_reg = CRL_APB_PL2_REF_CTRL,
19491a3f02b5SRajan Vaja 		.status_reg = 0,
19501a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19511a3f02b5SRajan Vaja 			CLK_IOPLL,
19521a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19531a3f02b5SRajan Vaja 			CLK_RPLL,
19541a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19551a3f02b5SRajan Vaja 			CLK_NA_PARENT
19561a3f02b5SRajan Vaja 		}),
19571a3f02b5SRajan Vaja 		.nodes = &pl_nodes,
19586ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(pl_nodes),
19591a3f02b5SRajan Vaja 	},
19601a3f02b5SRajan Vaja 	[CLK_PL3_REF] = {
19611a3f02b5SRajan Vaja 		.name = "pl3_ref",
19621a3f02b5SRajan Vaja 		.control_reg = CRL_APB_PL3_REF_CTRL,
19631a3f02b5SRajan Vaja 		.status_reg = 0,
19641a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19651a3f02b5SRajan Vaja 			CLK_IOPLL,
19661a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19671a3f02b5SRajan Vaja 			CLK_RPLL,
19681a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19691a3f02b5SRajan Vaja 			CLK_NA_PARENT
19701a3f02b5SRajan Vaja 		}),
19711a3f02b5SRajan Vaja 		.nodes = &pl_nodes,
19726ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(pl_nodes),
19731a3f02b5SRajan Vaja 	},
19741a3f02b5SRajan Vaja 	[CLK_AMS_REF] = {
19751a3f02b5SRajan Vaja 		.name = "ams_ref",
19761a3f02b5SRajan Vaja 		.control_reg = CRL_APB_AMS_REF_CTRL,
19771a3f02b5SRajan Vaja 		.status_reg = 0,
19781a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
19791a3f02b5SRajan Vaja 			CLK_RPLL,
19801a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
19811a3f02b5SRajan Vaja 			CLK_IOPLL,
19821a3f02b5SRajan Vaja 			CLK_DPLL_TO_LPD,
19831a3f02b5SRajan Vaja 			CLK_NA_PARENT
19841a3f02b5SRajan Vaja 		}),
19851a3f02b5SRajan Vaja 		.nodes = &generic_mux_div_div_gate_nodes,
19866ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_mux_div_div_gate_nodes),
19871a3f02b5SRajan Vaja 	},
19881a3f02b5SRajan Vaja 	[CLK_IOPLL_TO_FPD] = {
19891a3f02b5SRajan Vaja 		.name = "iopll_to_fpd",
19901a3f02b5SRajan Vaja 		.control_reg = CRL_APB_IOPLL_TO_FPD_CTRL,
19911a3f02b5SRajan Vaja 		.status_reg = 0,
19921a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_IOPLL, CLK_NA_PARENT}),
19931a3f02b5SRajan Vaja 		.nodes = &generic_domain_crossing_nodes,
19946ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_domain_crossing_nodes),
19951a3f02b5SRajan Vaja 	},
19961a3f02b5SRajan Vaja 	[CLK_RPLL_TO_FPD] = {
19971a3f02b5SRajan Vaja 		.name = "rpll_to_fpd",
19981a3f02b5SRajan Vaja 		.control_reg = CRL_APB_RPLL_TO_FPD_CTRL,
19991a3f02b5SRajan Vaja 		.status_reg = 0,
20001a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_RPLL, CLK_NA_PARENT}),
20011a3f02b5SRajan Vaja 		.nodes = &rpll_to_fpd_nodes,
20026ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(rpll_to_fpd_nodes),
20031a3f02b5SRajan Vaja 	},
20041a3f02b5SRajan Vaja 	[CLK_APLL_TO_LPD] = {
20051a3f02b5SRajan Vaja 		.name = "apll_to_lpd",
20061a3f02b5SRajan Vaja 		.control_reg = CRF_APB_APLL_TO_LPD_CTRL,
20071a3f02b5SRajan Vaja 		.status_reg = 0,
20081a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_APLL, CLK_NA_PARENT}),
20091a3f02b5SRajan Vaja 		.nodes = &generic_domain_crossing_nodes,
20106ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_domain_crossing_nodes),
20111a3f02b5SRajan Vaja 	},
20121a3f02b5SRajan Vaja 	[CLK_DPLL_TO_LPD] = {
20131a3f02b5SRajan Vaja 		.name = "dpll_to_lpd",
20141a3f02b5SRajan Vaja 		.control_reg = CRF_APB_DPLL_TO_LPD_CTRL,
20151a3f02b5SRajan Vaja 		.status_reg = 0,
20161a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_DPLL, CLK_NA_PARENT}),
20171a3f02b5SRajan Vaja 		.nodes = &generic_domain_crossing_nodes,
20186ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_domain_crossing_nodes),
20191a3f02b5SRajan Vaja 	},
20201a3f02b5SRajan Vaja 	[CLK_VPLL_TO_LPD] = {
20211a3f02b5SRajan Vaja 		.name = "vpll_to_lpd",
20221a3f02b5SRajan Vaja 		.control_reg = CRF_APB_VPLL_TO_LPD_CTRL,
20231a3f02b5SRajan Vaja 		.status_reg = 0,
20241a3f02b5SRajan Vaja 		.parents = &((int32_t []) {CLK_VPLL, CLK_NA_PARENT}),
20251a3f02b5SRajan Vaja 		.nodes = &generic_domain_crossing_nodes,
20266ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(generic_domain_crossing_nodes),
20271a3f02b5SRajan Vaja 	},
20281a3f02b5SRajan Vaja 	[CLK_GEM0_TX] = {
20291a3f02b5SRajan Vaja 		.name = "gem0_tx",
203006ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM0_REF_CTRL,
203106ad9803SMirela Simonovic 		.status_reg = 0,
20321a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
203306ad9803SMirela Simonovic 			CLK_GEM0_REF,
20341a3f02b5SRajan Vaja 			CLK_NA_PARENT
20351a3f02b5SRajan Vaja 		}),
203606ad9803SMirela Simonovic 		.nodes = &gem_tx_nodes,
20376ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_tx_nodes),
20381a3f02b5SRajan Vaja 	},
20391a3f02b5SRajan Vaja 	[CLK_GEM1_TX] = {
20401a3f02b5SRajan Vaja 		.name = "gem1_tx",
204106ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM1_REF_CTRL,
204206ad9803SMirela Simonovic 		.status_reg = 0,
20431a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
204406ad9803SMirela Simonovic 			CLK_GEM1_REF,
20451a3f02b5SRajan Vaja 			CLK_NA_PARENT
20461a3f02b5SRajan Vaja 		}),
204706ad9803SMirela Simonovic 		.nodes = &gem_tx_nodes,
20486ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_tx_nodes),
20491a3f02b5SRajan Vaja 	},
20501a3f02b5SRajan Vaja 	[CLK_GEM2_TX] = {
20511a3f02b5SRajan Vaja 		.name = "gem2_tx",
205206ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM2_REF_CTRL,
205306ad9803SMirela Simonovic 		.status_reg = 0,
20541a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
205506ad9803SMirela Simonovic 			CLK_GEM2_REF,
20561a3f02b5SRajan Vaja 			CLK_NA_PARENT
20571a3f02b5SRajan Vaja 		}),
205806ad9803SMirela Simonovic 		.nodes = &gem_tx_nodes,
20596ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_tx_nodes),
20601a3f02b5SRajan Vaja 	},
20611a3f02b5SRajan Vaja 	[CLK_GEM3_TX] = {
20621a3f02b5SRajan Vaja 		.name = "gem3_tx",
206306ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM3_REF_CTRL,
206406ad9803SMirela Simonovic 		.status_reg = 0,
20651a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
206606ad9803SMirela Simonovic 			CLK_GEM3_REF,
20671a3f02b5SRajan Vaja 			CLK_NA_PARENT
20681a3f02b5SRajan Vaja 		}),
206906ad9803SMirela Simonovic 		.nodes = &gem_tx_nodes,
20706ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_tx_nodes),
207106ad9803SMirela Simonovic 	},
207206ad9803SMirela Simonovic 	[CLK_GEM0_RX] = {
207306ad9803SMirela Simonovic 		.name = "gem0_rx",
207406ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM0_REF_CTRL,
207506ad9803SMirela Simonovic 		.status_reg = 0,
207606ad9803SMirela Simonovic 		.parents = &((int32_t []) {
207706ad9803SMirela Simonovic 			EXT_CLK_GEM0_RX_EMIO | CLK_EXTERNAL_PARENT,
207806ad9803SMirela Simonovic 			CLK_NA_PARENT
207906ad9803SMirela Simonovic 		}),
208006ad9803SMirela Simonovic 		.nodes = &gem_rx_nodes,
20816ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_rx_nodes),
208206ad9803SMirela Simonovic 	},
208306ad9803SMirela Simonovic 	[CLK_GEM1_RX] = {
208406ad9803SMirela Simonovic 		.name = "gem1_rx",
208506ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM1_REF_CTRL,
208606ad9803SMirela Simonovic 		.status_reg = 0,
208706ad9803SMirela Simonovic 		.parents = &((int32_t []) {
208806ad9803SMirela Simonovic 			EXT_CLK_GEM1_RX_EMIO | CLK_EXTERNAL_PARENT,
208906ad9803SMirela Simonovic 			CLK_NA_PARENT
209006ad9803SMirela Simonovic 		}),
209106ad9803SMirela Simonovic 		.nodes = &gem_rx_nodes,
20926ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_rx_nodes),
209306ad9803SMirela Simonovic 	},
209406ad9803SMirela Simonovic 	[CLK_GEM2_RX] = {
209506ad9803SMirela Simonovic 		.name = "gem2_rx",
209606ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM2_REF_CTRL,
209706ad9803SMirela Simonovic 		.status_reg = 0,
209806ad9803SMirela Simonovic 		.parents = &((int32_t []) {
209906ad9803SMirela Simonovic 			EXT_CLK_GEM2_RX_EMIO | CLK_EXTERNAL_PARENT,
210006ad9803SMirela Simonovic 			CLK_NA_PARENT
210106ad9803SMirela Simonovic 		}),
210206ad9803SMirela Simonovic 		.nodes = &gem_rx_nodes,
21036ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_rx_nodes),
210406ad9803SMirela Simonovic 	},
210506ad9803SMirela Simonovic 	[CLK_GEM3_RX] = {
210606ad9803SMirela Simonovic 		.name = "gem3_rx",
210706ad9803SMirela Simonovic 		.control_reg = CRL_APB_GEM3_REF_CTRL,
210806ad9803SMirela Simonovic 		.status_reg = 0,
210906ad9803SMirela Simonovic 		.parents = &((int32_t []) {
211006ad9803SMirela Simonovic 			EXT_CLK_GEM3_RX_EMIO | CLK_EXTERNAL_PARENT,
211106ad9803SMirela Simonovic 			CLK_NA_PARENT
211206ad9803SMirela Simonovic 		}),
211306ad9803SMirela Simonovic 		.nodes = &gem_rx_nodes,
21146ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_rx_nodes),
21151a3f02b5SRajan Vaja 	},
21161a3f02b5SRajan Vaja 	[CLK_ACPU_HALF] = {
21171a3f02b5SRajan Vaja 		.name = "acpu_half",
21181a3f02b5SRajan Vaja 		.control_reg = CRF_APB_ACPU_CTRL,
21191a3f02b5SRajan Vaja 		.status_reg = 0,
21201a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21215b542313SMaheedhar Bollapalli 			(CLK_ACPU | (PARENT_CLK_NODE2 << CLK_PARENTS_ID_LEN)),
21221a3f02b5SRajan Vaja 			CLK_NA_PARENT
21231a3f02b5SRajan Vaja 		}),
21241a3f02b5SRajan Vaja 		.nodes = &acpu_half_nodes,
21256ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(acpu_half_nodes),
21261a3f02b5SRajan Vaja 	},
2127fa8ae3c8SMounika Grace Akula 	[CLK_FPD_WDT] = {
2128fa8ae3c8SMounika Grace Akula 		.name = "fpd_wdt",
212996cd17f4SSiva Durga Prasad Paladugu 		.control_reg = FPD_SLCR_WDT_CLK_SEL,
21301a3f02b5SRajan Vaja 		.status_reg = 0,
21311a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21321a3f02b5SRajan Vaja 			CLK_TOPSW_LSBUS,
21331a3f02b5SRajan Vaja 			EXT_CLK_SWDT0 | CLK_EXTERNAL_PARENT,
21341a3f02b5SRajan Vaja 			CLK_NA_PARENT
21351a3f02b5SRajan Vaja 		}),
21361a3f02b5SRajan Vaja 		.nodes = &wdt_nodes,
21376ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(wdt_nodes),
21381a3f02b5SRajan Vaja 	},
21391a3f02b5SRajan Vaja 	[CLK_GPU_PP0_REF] = {
21401a3f02b5SRajan Vaja 		.name = "gpu_pp0_ref",
21411a3f02b5SRajan Vaja 		.control_reg = CRF_APB_GPU_REF_CTRL,
21421a3f02b5SRajan Vaja 		.status_reg = 0,
21431a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21445b542313SMaheedhar Bollapalli 			(CLK_GPU_REF | (PARENT_CLK_NODE2 << CLK_PARENTS_ID_LEN)),
21451a3f02b5SRajan Vaja 			CLK_NA_PARENT
21461a3f02b5SRajan Vaja 		}),
21471a3f02b5SRajan Vaja 		.nodes = &gpu_pp0_nodes,
21486ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gpu_pp0_nodes),
21491a3f02b5SRajan Vaja 	},
21501a3f02b5SRajan Vaja 	[CLK_GPU_PP1_REF] = {
21511a3f02b5SRajan Vaja 		.name = "gpu_pp1_ref",
21521a3f02b5SRajan Vaja 		.control_reg = CRF_APB_GPU_REF_CTRL,
21531a3f02b5SRajan Vaja 		.status_reg = 0,
21541a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21555b542313SMaheedhar Bollapalli 			(CLK_GPU_REF | (PARENT_CLK_NODE2 << CLK_PARENTS_ID_LEN)),
21561a3f02b5SRajan Vaja 			CLK_NA_PARENT
21571a3f02b5SRajan Vaja 		}),
21581a3f02b5SRajan Vaja 		.nodes = &gpu_pp1_nodes,
21596ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gpu_pp1_nodes),
21601a3f02b5SRajan Vaja 	},
21611a3f02b5SRajan Vaja 	[CLK_GEM_TSU] = {
21621a3f02b5SRajan Vaja 		.name = "gem_tsu",
21631a3f02b5SRajan Vaja 		.control_reg = IOU_SLCR_GEM_CLK_CTRL,
21641a3f02b5SRajan Vaja 		.status_reg = 0,
21651a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21661a3f02b5SRajan Vaja 			CLK_GEM_TSU_REF,
21671a3f02b5SRajan Vaja 			CLK_GEM_TSU_REF,
21681a3f02b5SRajan Vaja 			EXT_CLK_MIO26 | CLK_EXTERNAL_PARENT,
21691a3f02b5SRajan Vaja 			EXT_CLK_MIO50_OR_MIO51 | CLK_EXTERNAL_PARENT,
21701a3f02b5SRajan Vaja 			CLK_NA_PARENT
21711a3f02b5SRajan Vaja 		}),
21721a3f02b5SRajan Vaja 		.nodes = &gem_tsu_nodes,
21736ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(gem_tsu_nodes),
21741a3f02b5SRajan Vaja 	},
21751a3f02b5SRajan Vaja 	[CLK_CPU_R5_CORE] = {
21761a3f02b5SRajan Vaja 		.name = "cpu_r5_core",
21771a3f02b5SRajan Vaja 		.control_reg = CRL_APB_CPU_R5_CTRL,
21781a3f02b5SRajan Vaja 		.status_reg = 0,
21791a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
21805b542313SMaheedhar Bollapalli 			(CLK_CPU_R5 | (PARENT_CLK_NODE2 << CLK_PARENTS_ID_LEN)),
21811a3f02b5SRajan Vaja 			CLK_DUMMY_PARENT,
21821a3f02b5SRajan Vaja 			CLK_NA_PARENT
21831a3f02b5SRajan Vaja 		}),
21841a3f02b5SRajan Vaja 		.nodes = &cpu_r5_core_nodes,
21856ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(cpu_r5_core_nodes),
21861a3f02b5SRajan Vaja 	},
21871a3f02b5SRajan Vaja 	[CLK_CAN0_MIO] = {
21881a3f02b5SRajan Vaja 		.name = "can0_mio",
21891a3f02b5SRajan Vaja 		.control_reg = IOU_SLCR_CAN_MIO_CTRL,
21901a3f02b5SRajan Vaja 		.status_reg = 0,
21911a3f02b5SRajan Vaja 		.parents = &can_mio_parents,
21921a3f02b5SRajan Vaja 		.nodes = &can0_mio_nodes,
21931a3f02b5SRajan Vaja 		.num_nodes = ARRAY_SIZE(can0_mio_nodes),
21941a3f02b5SRajan Vaja 	},
21951a3f02b5SRajan Vaja 	[CLK_CAN1_MIO] = {
21961a3f02b5SRajan Vaja 		.name = "can1_mio",
21971a3f02b5SRajan Vaja 		.control_reg = IOU_SLCR_CAN_MIO_CTRL,
21981a3f02b5SRajan Vaja 		.status_reg = 0,
21991a3f02b5SRajan Vaja 		.parents = &can_mio_parents,
22001a3f02b5SRajan Vaja 		.nodes = &can1_mio_nodes,
22011a3f02b5SRajan Vaja 		.num_nodes = ARRAY_SIZE(can1_mio_nodes),
22021a3f02b5SRajan Vaja 	},
22031a3f02b5SRajan Vaja 	[CLK_CAN0] = {
22041a3f02b5SRajan Vaja 		.name = "can0",
22051a3f02b5SRajan Vaja 		.control_reg = IOU_SLCR_CAN_MIO_CTRL,
22061a3f02b5SRajan Vaja 		.status_reg = 0,
22071a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
22081a3f02b5SRajan Vaja 			CLK_CAN0_REF,
22091a3f02b5SRajan Vaja 			CLK_CAN0_MIO,
22101a3f02b5SRajan Vaja 			CLK_NA_PARENT
22111a3f02b5SRajan Vaja 		}),
22121a3f02b5SRajan Vaja 		.nodes = &can0_nodes,
22136ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(can0_nodes),
22141a3f02b5SRajan Vaja 	},
22151a3f02b5SRajan Vaja 	[CLK_CAN1] = {
22161a3f02b5SRajan Vaja 		.name = "can1",
22171a3f02b5SRajan Vaja 		.control_reg = IOU_SLCR_CAN_MIO_CTRL,
22181a3f02b5SRajan Vaja 		.status_reg = 0,
22191a3f02b5SRajan Vaja 		.parents = &((int32_t []) {
22201a3f02b5SRajan Vaja 			CLK_CAN1_REF,
22211a3f02b5SRajan Vaja 			CLK_CAN1_MIO,
22221a3f02b5SRajan Vaja 			CLK_NA_PARENT
22231a3f02b5SRajan Vaja 		}),
22241a3f02b5SRajan Vaja 		.nodes = &can1_nodes,
22256ae95624SMaheedhar Bollapalli 		.num_nodes = (uint8_t)ARRAY_SIZE(can1_nodes),
22261a3f02b5SRajan Vaja 	},
2227b3ce966aSMounika Grace Akula 	[CLK_LPD_WDT] = {
2228b3ce966aSMounika Grace Akula 		.name = "lpd_wdt",
2229b3ce966aSMounika Grace Akula 		.control_reg = IOU_SLCR_WDT_CLK_SEL,
2230b3ce966aSMounika Grace Akula 		.status_reg = 0,
2231b3ce966aSMounika Grace Akula 		.parents = &((int32_t []) {
2232b3ce966aSMounika Grace Akula 			CLK_LPD_LSBUS,
2233b3ce966aSMounika Grace Akula 			EXT_CLK_SWDT1 | CLK_EXTERNAL_PARENT,
2234b3ce966aSMounika Grace Akula 			CLK_NA_PARENT
2235b3ce966aSMounika Grace Akula 		}),
2236b3ce966aSMounika Grace Akula 		.nodes = &wdt_nodes,
2237b3ce966aSMounika Grace Akula 		.num_nodes = ARRAY_SIZE(wdt_nodes),
2238b3ce966aSMounika Grace Akula 	},
22391a3f02b5SRajan Vaja };
22401a3f02b5SRajan Vaja 
22411a3f02b5SRajan Vaja static struct pm_ext_clock ext_clocks[] = {
22421a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_PSS_REF)] = {
22431a3f02b5SRajan Vaja 		.name = "pss_ref_clk",
22441a3f02b5SRajan Vaja 	},
22451a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_VIDEO)] = {
22461a3f02b5SRajan Vaja 		.name = "video_clk",
22471a3f02b5SRajan Vaja 	},
22481a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_PSS_ALT_REF)] = {
22491a3f02b5SRajan Vaja 		.name = "pss_alt_ref_clk",
22501a3f02b5SRajan Vaja 	},
22511a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_AUX_REF)] = {
22521a3f02b5SRajan Vaja 		.name = "aux_ref_clk",
22531a3f02b5SRajan Vaja 	},
22541a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_GT_CRX_REF)] = {
22551a3f02b5SRajan Vaja 		.name = "video_clk",
22561a3f02b5SRajan Vaja 	},
22571a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_SWDT0)] = {
22581a3f02b5SRajan Vaja 		.name = "swdt0_ext_clk",
22591a3f02b5SRajan Vaja 	},
22601a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_SWDT1)] = {
22611a3f02b5SRajan Vaja 		.name = "swdt1_ext_clk",
22621a3f02b5SRajan Vaja 	},
226306ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM0_TX_EMIO)] = {
226406ad9803SMirela Simonovic 		.name = "gem0_tx_ext",
22651a3f02b5SRajan Vaja 	},
226606ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM1_TX_EMIO)] = {
226706ad9803SMirela Simonovic 		.name = "gem1_tx_ext",
22681a3f02b5SRajan Vaja 	},
226906ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM2_TX_EMIO)] = {
227006ad9803SMirela Simonovic 		.name = "gem2_tx_ext",
22711a3f02b5SRajan Vaja 	},
227206ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM3_TX_EMIO)] = {
227306ad9803SMirela Simonovic 		.name = "gem3_tx_ext",
227406ad9803SMirela Simonovic 	},
227506ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM0_RX_EMIO)] = {
227606ad9803SMirela Simonovic 		.name = "gem0_rx_ext",
227706ad9803SMirela Simonovic 	},
227806ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM1_RX_EMIO)] = {
227906ad9803SMirela Simonovic 		.name = "gem1_rx_ext",
228006ad9803SMirela Simonovic 	},
228106ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM2_RX_EMIO)] = {
228206ad9803SMirela Simonovic 		.name = "gem2_rx_ext",
228306ad9803SMirela Simonovic 	},
228406ad9803SMirela Simonovic 	[EXT_CLK_INDEX(EXT_CLK_GEM3_RX_EMIO)] = {
228506ad9803SMirela Simonovic 		.name = "gem3_rx_ext",
22861a3f02b5SRajan Vaja 	},
22871a3f02b5SRajan Vaja 	[EXT_CLK_INDEX(EXT_CLK_MIO50_OR_MIO51)] = {
22881a3f02b5SRajan Vaja 		.name = "mio_clk_50_51",
22891a3f02b5SRajan Vaja 	},
22901a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(0),
22911a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(1),
22921a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(2),
22931a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(3),
22941a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(4),
22951a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(5),
22961a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(6),
22971a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(7),
22981a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(8),
22991a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(9),
23001a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(10),
23011a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(11),
23021a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(12),
23031a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(13),
23041a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(14),
23051a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(15),
23061a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(16),
23071a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(17),
23081a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(18),
23091a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(19),
23101a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(20),
23111a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(21),
23121a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(22),
23131a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(23),
23141a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(24),
23151a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(25),
23161a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(26),
23171a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(27),
23181a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(28),
23191a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(29),
23201a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(30),
23211a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(31),
23221a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(32),
23231a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(33),
23241a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(34),
23251a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(35),
23261a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(36),
23271a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(37),
23281a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(38),
23291a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(39),
23301a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(40),
23311a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(41),
23321a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(42),
23331a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(43),
23341a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(44),
23351a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(45),
23361a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(46),
23371a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(47),
23381a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(48),
23391a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(49),
23401a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(50),
23411a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(51),
23421a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(52),
23431a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(53),
23441a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(54),
23451a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(55),
23461a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(56),
23471a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(57),
23481a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(58),
23491a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(59),
23501a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(60),
23511a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(61),
23521a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(62),
23531a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(63),
23541a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(64),
23551a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(65),
23561a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(66),
23571a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(67),
23581a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(68),
23591a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(69),
23601a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(70),
23611a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(71),
23621a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(72),
23631a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(73),
23641a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(74),
23651a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(75),
23661a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(76),
23671a3f02b5SRajan Vaja 	EXT_CLK_MIO_DATA(77),
23681a3f02b5SRajan Vaja };
23691a3f02b5SRajan Vaja 
23701a3f02b5SRajan Vaja /* Array of clock which are invalid for this variant */
2371bf8ffb38SJolly Shah static uint32_t pm_clk_invalid_list[] = {CLK_USB0, CLK_USB1, CLK_CSU_SPB,
2372bf8ffb38SJolly Shah 	CLK_ACPU_FULL,
2373bf8ffb38SJolly Shah 	CLK_ACPU_HALF,
2374ff966c27SJolly Shah 	CLK_APLL_TO_LPD,
237550e1b8feSJolly Shah 	CLK_DBG_FPD,
237650e1b8feSJolly Shah 	CLK_DBG_LPD,
237750e1b8feSJolly Shah 	CLK_DBG_TRACE,
237850e1b8feSJolly Shah 	CLK_DBG_TSTMP,
237950e1b8feSJolly Shah 	CLK_DDR_REF,
238050e1b8feSJolly Shah 	CLK_TOPSW_MAIN,
238150e1b8feSJolly Shah 	CLK_GTGREF0_REF,
238250e1b8feSJolly Shah 	CLK_LPD_SWITCH,
238350e1b8feSJolly Shah 	CLK_CPU_R5,
238450e1b8feSJolly Shah 	CLK_CPU_R5_CORE,
238550e1b8feSJolly Shah 	CLK_CSU_SPB,
238650e1b8feSJolly Shah 	CLK_CSU_PLL,
238750e1b8feSJolly Shah 	CLK_PCAP,
238850e1b8feSJolly Shah 	CLK_IOU_SWITCH,
238950e1b8feSJolly Shah 	CLK_DLL_REF,
239050e1b8feSJolly Shah 	CLK_TIMESTAMP_REF,
2391bf8ffb38SJolly Shah };
23921a3f02b5SRajan Vaja 
23931a3f02b5SRajan Vaja /**
2394de7ed953SPrasad Kummari  * pm_clock_valid - Check if clock is valid or not.
2395de7ed953SPrasad Kummari  * @clock_id: Id of the clock to be queried.
23961a3f02b5SRajan Vaja  *
23971a3f02b5SRajan Vaja  * This function is used to check if given clock is valid
23981a3f02b5SRajan Vaja  * or not for the chip variant.
23991a3f02b5SRajan Vaja  *
24001a3f02b5SRajan Vaja  * List of invalid clocks are maintained in array list for
24011a3f02b5SRajan Vaja  * different variants.
24021a3f02b5SRajan Vaja  *
24031a3f02b5SRajan Vaja  * Return: Returns 1 if clock is valid else 0.
2404de7ed953SPrasad Kummari  *
24051a3f02b5SRajan Vaja  */
pm_clock_valid(uint32_t clock_id)2406ffa91031SVenkatesh Yadav Abbarapu static bool pm_clock_valid(uint32_t clock_id)
24071a3f02b5SRajan Vaja {
240837e1a68eSJolly Shah 	unsigned int i;
24093f6d4794SMaheedhar Bollapalli 	bool valid = true;
24101a3f02b5SRajan Vaja 
2411e4a0c44fSNithin G 	for (i = 0U; i < ARRAY_SIZE(pm_clk_invalid_list); i++) {
2412e4a0c44fSNithin G 		if (pm_clk_invalid_list[i] == clock_id) {
24133f6d4794SMaheedhar Bollapalli 			valid = false;
24143f6d4794SMaheedhar Bollapalli 			break;
2415e4a0c44fSNithin G 		}
2416e4a0c44fSNithin G 	}
24171a3f02b5SRajan Vaja 
24183f6d4794SMaheedhar Bollapalli 	return valid;
24191a3f02b5SRajan Vaja }
24201a3f02b5SRajan Vaja 
24211a3f02b5SRajan Vaja /**
2422de7ed953SPrasad Kummari  * pm_clock_type - Get clock's type.
2423de7ed953SPrasad Kummari  * @clock_id: Id of the clock to be queried.
24241a3f02b5SRajan Vaja  *
24251a3f02b5SRajan Vaja  * This function is used to check type of clock (OUTPUT/EXTERNAL).
24261a3f02b5SRajan Vaja  *
24271a3f02b5SRajan Vaja  * Return: Returns type of clock (OUTPUT/EXTERNAL).
2428de7ed953SPrasad Kummari  *
24291a3f02b5SRajan Vaja  */
pm_clock_type(uint32_t clock_id)2430ffa91031SVenkatesh Yadav Abbarapu static uint32_t pm_clock_type(uint32_t clock_id)
24311a3f02b5SRajan Vaja {
24321a3f02b5SRajan Vaja 	return (clock_id < CLK_MAX_OUTPUT_CLK) ?
24331a3f02b5SRajan Vaja 		CLK_TYPE_OUTPUT : CLK_TYPE_EXTERNAL;
24341a3f02b5SRajan Vaja }
2435caae497dSRajan Vaja 
2436caae497dSRajan Vaja /**
2437de7ed953SPrasad Kummari  * pm_api_clock_get_num_clocks() - PM call to request number of clocks.
2438de7ed953SPrasad Kummari  * @nclocks: Number of clocks.
2439ec9712ceSRajan Vaja  *
2440ec9712ceSRajan Vaja  * This function is used by master to get number of clocks.
2441ec9712ceSRajan Vaja  *
2442de7ed953SPrasad Kummari  * Return: Returns success.
2443de7ed953SPrasad Kummari  *
2444ec9712ceSRajan Vaja  */
pm_api_clock_get_num_clocks(uint32_t * nclocks)2445ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_api_clock_get_num_clocks(uint32_t *nclocks)
2446ec9712ceSRajan Vaja {
2447ec9712ceSRajan Vaja 	*nclocks = CLK_MAX;
2448ec9712ceSRajan Vaja 
2449ec9712ceSRajan Vaja 	return PM_RET_SUCCESS;
2450ec9712ceSRajan Vaja }
2451ec9712ceSRajan Vaja 
2452ec9712ceSRajan Vaja /**
2453de7ed953SPrasad Kummari  * pm_api_clock_get_name() - PM call to request a clock's name.
2454de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2455de7ed953SPrasad Kummari  * @name: Name of clock (max 16 bytes).
2456caae497dSRajan Vaja  *
2457caae497dSRajan Vaja  * This function is used by master to get nmae of clock specified
2458caae497dSRajan Vaja  * by given clock ID.
2459de7ed953SPrasad Kummari  *
2460caae497dSRajan Vaja  */
pm_api_clock_get_name(uint32_t clock_id,char * name)2461ffa91031SVenkatesh Yadav Abbarapu void pm_api_clock_get_name(uint32_t clock_id, char *name)
2462caae497dSRajan Vaja {
24632863b0c4SMaheedhar Bollapalli 	uint32_t clock_id_num = clock_id;
24642863b0c4SMaheedhar Bollapalli 
24652863b0c4SMaheedhar Bollapalli 	if (clock_id_num == CLK_MAX) {
2466355ccf89SMaheedhar Bollapalli 		(void)memcpy(name, END_OF_CLK, ((sizeof(END_OF_CLK) > CLK_NAME_LEN) ?
24675b542313SMaheedhar Bollapalli 					 CLK_NAME_LEN : sizeof(END_OF_CLK)));
2468abc79c27SNaman Trivedi Manojbhai 	} else if ((clock_id > CLK_MAX) || (!pm_clock_valid(clock_id))) {
2469355ccf89SMaheedhar Bollapalli 		(void)memset(name, 0, CLK_NAME_LEN);
24702863b0c4SMaheedhar Bollapalli 	} else if (clock_id_num < (uint32_t)CLK_MAX_OUTPUT_CLK) {
24712863b0c4SMaheedhar Bollapalli 		(void)memcpy(name, clocks[clock_id_num].name, CLK_NAME_LEN);
2472eb0d2b17SVenkatesh Yadav Abbarapu 	} else {
24732863b0c4SMaheedhar Bollapalli 		(void)memcpy(name, ext_clocks[clock_id_num - (uint32_t)CLK_MAX_OUTPUT_CLK].name,
24741a3f02b5SRajan Vaja 		       CLK_NAME_LEN);
2475caae497dSRajan Vaja 	}
2476eb0d2b17SVenkatesh Yadav Abbarapu }
2477caae497dSRajan Vaja 
2478caae497dSRajan Vaja /**
2479de7ed953SPrasad Kummari  * pm_api_clock_get_topology() - PM call to request a clock's topology.
2480de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2481de7ed953SPrasad Kummari  * @index: Topology index for next toplogy node.
2482de7ed953SPrasad Kummari  * @topology: Buffer to store nodes in topology and flags.
2483caae497dSRajan Vaja  *
2484caae497dSRajan Vaja  * This function is used by master to get topology information for the
2485caae497dSRajan Vaja  * clock specified by given clock ID. Each response would return 3
2486caae497dSRajan Vaja  * topology nodes. To get next nodes, caller needs to call this API with
2487caae497dSRajan Vaja  * index of next node. Index starts from 0.
2488caae497dSRajan Vaja  *
2489de7ed953SPrasad Kummari  * Return: Returns status, either success or error+reason.
2490de7ed953SPrasad Kummari  *
2491caae497dSRajan Vaja  */
pm_api_clock_get_topology(uint32_t clock_id,uint32_t index,uint32_t * topology)2492ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_api_clock_get_topology(uint32_t clock_id,
2493ffa91031SVenkatesh Yadav Abbarapu 					     uint32_t index,
2494caae497dSRajan Vaja 					     uint32_t *topology)
2495caae497dSRajan Vaja {
2496bb145c9dSMaheedhar Bollapalli 	const struct pm_clock_node *clock_nodes;
24971a3f02b5SRajan Vaja 	uint8_t num_nodes;
2498ffa91031SVenkatesh Yadav Abbarapu 	uint32_t i;
249975b90fe8SRajan Vaja 	uint16_t typeflags;
25003f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
25011a3f02b5SRajan Vaja 
2502eb0d2b17SVenkatesh Yadav Abbarapu 	if (!pm_clock_valid(clock_id)) {
25033f6d4794SMaheedhar Bollapalli 		goto exit_label;
2504eb0d2b17SVenkatesh Yadav Abbarapu 	}
25051a3f02b5SRajan Vaja 
2506eb0d2b17SVenkatesh Yadav Abbarapu 	if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) {
25073f6d4794SMaheedhar Bollapalli 		status = PM_RET_ERROR_NOTSUPPORTED;
25083f6d4794SMaheedhar Bollapalli 		goto exit_label;
2509eb0d2b17SVenkatesh Yadav Abbarapu 	}
25101a3f02b5SRajan Vaja 
2511355ccf89SMaheedhar Bollapalli 	(void)memset(topology, 0, CLK_TOPOLOGY_PAYLOAD_LEN);
25121a3f02b5SRajan Vaja 	clock_nodes = *clocks[clock_id].nodes;
25131a3f02b5SRajan Vaja 	num_nodes = clocks[clock_id].num_nodes;
25141a3f02b5SRajan Vaja 
25151a3f02b5SRajan Vaja 	/* Skip parent till index */
2516eb0d2b17SVenkatesh Yadav Abbarapu 	if (index >= num_nodes) {
25173f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
25183f6d4794SMaheedhar Bollapalli 		goto exit_label;
2519eb0d2b17SVenkatesh Yadav Abbarapu 	}
25201a3f02b5SRajan Vaja 
252137e1a68eSJolly Shah 	for (i = 0; i < 3U; i++) {
2522eb0d2b17SVenkatesh Yadav Abbarapu 		if ((index + i) == num_nodes) {
25231a3f02b5SRajan Vaja 			break;
2524eb0d2b17SVenkatesh Yadav Abbarapu 		}
2525eb0d2b17SVenkatesh Yadav Abbarapu 
25261a3f02b5SRajan Vaja 		topology[i] = clock_nodes[index + i].type;
25271877bf2cSMaheedhar Bollapalli 		topology[i] |= ((uint32_t)clock_nodes[index + i].clkflags <<
25281877bf2cSMaheedhar Bollapalli 					CLK_CLKFLAGS_SHIFT);
252975b90fe8SRajan Vaja 		typeflags = clock_nodes[index + i].typeflags;
25301877bf2cSMaheedhar Bollapalli 		topology[i] |= ((uint32_t)(typeflags & CLK_TYPEFLAGS_BITS_MASK) <<
25311877bf2cSMaheedhar Bollapalli 					CLK_TYPEFLAGS_SHIFT);
25321877bf2cSMaheedhar Bollapalli 		topology[i] |= ((uint32_t)(typeflags & CLK_TYPEFLAGS2_BITS_MASK) >>
25331877bf2cSMaheedhar Bollapalli 				(CLK_TYPEFLAGS_BITS - CLK_TYPEFLAGS2_SHIFT));
25341a3f02b5SRajan Vaja 	}
25351a3f02b5SRajan Vaja 
25363f6d4794SMaheedhar Bollapalli 	status = PM_RET_SUCCESS;
25373f6d4794SMaheedhar Bollapalli 
25383f6d4794SMaheedhar Bollapalli exit_label:
25393f6d4794SMaheedhar Bollapalli 	return status;
2540caae497dSRajan Vaja }
2541caae497dSRajan Vaja 
2542caae497dSRajan Vaja /**
2543caae497dSRajan Vaja  * pm_api_clock_get_fixedfactor_params() - PM call to request a clock's fixed
2544de7ed953SPrasad Kummari  *					   factor parameters for fixed clock.
2545de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2546de7ed953SPrasad Kummari  * @mul: Multiplication value.
2547de7ed953SPrasad Kummari  * @div: Divisor value.
2548caae497dSRajan Vaja  *
2549caae497dSRajan Vaja  * This function is used by master to get fixed factor parameers for the
2550caae497dSRajan Vaja  * fixed clock. This API is application only for the fixed clock.
2551caae497dSRajan Vaja  *
2552de7ed953SPrasad Kummari  * Return: Returns status, either success or error+reason.
2553de7ed953SPrasad Kummari  *
2554caae497dSRajan Vaja  */
pm_api_clock_get_fixedfactor_params(uint32_t clock_id,uint32_t * mul,uint32_t * div)2555ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_api_clock_get_fixedfactor_params(uint32_t clock_id,
2556caae497dSRajan Vaja 						       uint32_t *mul,
2557caae497dSRajan Vaja 						       uint32_t *div)
2558caae497dSRajan Vaja {
2559bb145c9dSMaheedhar Bollapalli 	const struct pm_clock_node *clock_nodes;
25601a3f02b5SRajan Vaja 	uint8_t num_nodes;
2561ffa91031SVenkatesh Yadav Abbarapu 	uint32_t type, i;
25623f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
25631a3f02b5SRajan Vaja 
2564eb0d2b17SVenkatesh Yadav Abbarapu 	if (!pm_clock_valid(clock_id)) {
25653f6d4794SMaheedhar Bollapalli 		goto exit_label;
2566eb0d2b17SVenkatesh Yadav Abbarapu 	}
25671a3f02b5SRajan Vaja 
2568eb0d2b17SVenkatesh Yadav Abbarapu 	if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) {
25693f6d4794SMaheedhar Bollapalli 		status = PM_RET_ERROR_NOTSUPPORTED;
25703f6d4794SMaheedhar Bollapalli 		goto exit_label;
2571eb0d2b17SVenkatesh Yadav Abbarapu 	}
25721a3f02b5SRajan Vaja 
25731a3f02b5SRajan Vaja 	clock_nodes = *clocks[clock_id].nodes;
25741a3f02b5SRajan Vaja 	num_nodes = clocks[clock_id].num_nodes;
25751a3f02b5SRajan Vaja 
25761a3f02b5SRajan Vaja 	for (i = 0; i < num_nodes; i++) {
25771a3f02b5SRajan Vaja 		type =  clock_nodes[i].type;
25781a3f02b5SRajan Vaja 		if (type == TYPE_FIXEDFACTOR) {
25791a3f02b5SRajan Vaja 			*mul = clock_nodes[i].mult;
25801a3f02b5SRajan Vaja 			*div = clock_nodes[i].div;
25811a3f02b5SRajan Vaja 			break;
25821a3f02b5SRajan Vaja 		}
25831a3f02b5SRajan Vaja 	}
25841a3f02b5SRajan Vaja 
25851a3f02b5SRajan Vaja 	/* Clock is not fixed clock */
25863f6d4794SMaheedhar Bollapalli 	if (i != num_nodes) {
25873f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
2588eb0d2b17SVenkatesh Yadav Abbarapu 	}
25891a3f02b5SRajan Vaja 
25903f6d4794SMaheedhar Bollapalli exit_label:
25913f6d4794SMaheedhar Bollapalli 	return status;
2592caae497dSRajan Vaja }
2593caae497dSRajan Vaja 
2594caae497dSRajan Vaja /**
2595de7ed953SPrasad Kummari  * pm_api_clock_get_parents() - PM call to request a clock's first 3 parents.
2596de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2597de7ed953SPrasad Kummari  * @index: Index of next parent.
2598de7ed953SPrasad Kummari  * @parents: Parents of the given clock.
2599caae497dSRajan Vaja  *
2600caae497dSRajan Vaja  * This function is used by master to get clock's parents information.
2601caae497dSRajan Vaja  * This API will return 3 parents with a single response. To get other
2602caae497dSRajan Vaja  * parents, master should call same API in loop with new parent index
2603caae497dSRajan Vaja  * till error is returned.
2604caae497dSRajan Vaja  *
2605caae497dSRajan Vaja  * E.g First call should have index 0 which will return parents 0, 1 and
2606caae497dSRajan Vaja  * 2. Next call, index should be 3 which will return parent 3,4 and 5 and
2607caae497dSRajan Vaja  * so on.
2608caae497dSRajan Vaja  *
2609de7ed953SPrasad Kummari  * Return: Returns status, either success or error+reason.
2610de7ed953SPrasad Kummari  *
2611caae497dSRajan Vaja  */
pm_api_clock_get_parents(uint32_t clock_id,uint32_t index,uint32_t * parents)2612ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_api_clock_get_parents(uint32_t clock_id,
2613ffa91031SVenkatesh Yadav Abbarapu 					    uint32_t index,
2614caae497dSRajan Vaja 					    uint32_t *parents)
2615caae497dSRajan Vaja {
2616ffa91031SVenkatesh Yadav Abbarapu 	uint32_t i;
2617bb145c9dSMaheedhar Bollapalli 	const int32_t *clk_parents;
26183f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
26191a3f02b5SRajan Vaja 
2620eb0d2b17SVenkatesh Yadav Abbarapu 	if (!pm_clock_valid(clock_id)) {
26213f6d4794SMaheedhar Bollapalli 		goto exit_label;
2622eb0d2b17SVenkatesh Yadav Abbarapu 	}
26231a3f02b5SRajan Vaja 
2624eb0d2b17SVenkatesh Yadav Abbarapu 	if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) {
26253f6d4794SMaheedhar Bollapalli 		status = PM_RET_ERROR_NOTSUPPORTED;
26263f6d4794SMaheedhar Bollapalli 		goto exit_label;
2627eb0d2b17SVenkatesh Yadav Abbarapu 	}
26281a3f02b5SRajan Vaja 
26291a3f02b5SRajan Vaja 	clk_parents = *clocks[clock_id].parents;
2630eb0d2b17SVenkatesh Yadav Abbarapu 	if (clk_parents == NULL) {
26313f6d4794SMaheedhar Bollapalli 		goto exit_label;
2632eb0d2b17SVenkatesh Yadav Abbarapu 	}
26331a3f02b5SRajan Vaja 
2634355ccf89SMaheedhar Bollapalli 	(void)memset(parents, 0, CLK_PARENTS_PAYLOAD_LEN);
26351a3f02b5SRajan Vaja 
26361a3f02b5SRajan Vaja 	/* Skip parent till index */
2637eb0d2b17SVenkatesh Yadav Abbarapu 	for (i = 0; i < index; i++) {
2638eb0d2b17SVenkatesh Yadav Abbarapu 		if (clk_parents[i] == CLK_NA_PARENT) {
26393f6d4794SMaheedhar Bollapalli 			status = PM_RET_SUCCESS;
26403f6d4794SMaheedhar Bollapalli 			goto exit_label;
2641eb0d2b17SVenkatesh Yadav Abbarapu 		}
2642eb0d2b17SVenkatesh Yadav Abbarapu 	}
26431a3f02b5SRajan Vaja 
2644bfd7c881SVenkatesh Yadav Abbarapu 	for (i = 0; i < 3U; i++) {
26456ae95624SMaheedhar Bollapalli 		parents[i] = (uint32_t)clk_parents[index + i];
2646eb0d2b17SVenkatesh Yadav Abbarapu 		if (clk_parents[index + i] == CLK_NA_PARENT) {
26471a3f02b5SRajan Vaja 			break;
26481a3f02b5SRajan Vaja 		}
2649eb0d2b17SVenkatesh Yadav Abbarapu 	}
26501a3f02b5SRajan Vaja 
26513f6d4794SMaheedhar Bollapalli 	status = PM_RET_SUCCESS;
26523f6d4794SMaheedhar Bollapalli 
26533f6d4794SMaheedhar Bollapalli exit_label:
26543f6d4794SMaheedhar Bollapalli 	return status;
2655caae497dSRajan Vaja }
2656caae497dSRajan Vaja 
2657caae497dSRajan Vaja /**
2658de7ed953SPrasad Kummari  * pm_api_clock_get_attributes() - PM call to request a clock's attributes.
2659de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2660de7ed953SPrasad Kummari  * @attr: Clock attributes.
2661caae497dSRajan Vaja  *
2662caae497dSRajan Vaja  * This function is used by master to get clock's attributes
2663caae497dSRajan Vaja  * (e.g. valid, clock type, etc).
2664caae497dSRajan Vaja  *
2665de7ed953SPrasad Kummari  * Return: Returns status, either success or error+reason.
2666de7ed953SPrasad Kummari  *
2667caae497dSRajan Vaja  */
pm_api_clock_get_attributes(uint32_t clock_id,uint32_t * attr)2668ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_api_clock_get_attributes(uint32_t clock_id,
2669caae497dSRajan Vaja 					       uint32_t *attr)
2670caae497dSRajan Vaja {
26713f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
26723f6d4794SMaheedhar Bollapalli 
2673895e8029SMaheedhar Bollapalli 	if (clock_id >= (uint32_t)CLK_MAX) {
26743f6d4794SMaheedhar Bollapalli 		goto exit_label;
2675eb0d2b17SVenkatesh Yadav Abbarapu 	}
26761a3f02b5SRajan Vaja 
26771a3f02b5SRajan Vaja 	/* Clock valid bit */
26781a3f02b5SRajan Vaja 	*attr = pm_clock_valid(clock_id);
26791a3f02b5SRajan Vaja 
26801a3f02b5SRajan Vaja 	/* Clock type (Output/External) */
26811a3f02b5SRajan Vaja 	*attr |= (pm_clock_type(clock_id) << CLK_TYPE_SHIFT);
26821a3f02b5SRajan Vaja 
26833f6d4794SMaheedhar Bollapalli 	status = PM_RET_SUCCESS;
26843f6d4794SMaheedhar Bollapalli 
26853f6d4794SMaheedhar Bollapalli exit_label:
26863f6d4794SMaheedhar Bollapalli 	return status;
26871a3f02b5SRajan Vaja }
26881a3f02b5SRajan Vaja 
26891a3f02b5SRajan Vaja /**
2690de7ed953SPrasad Kummari  * pm_api_clock_get_max_divisor - PM call to get max divisor.
2691de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2692de7ed953SPrasad Kummari  * @div_type: Divisor Type (TYPE_DIV1 or TYPE_DIV2).
2693de7ed953SPrasad Kummari  * @max_div: Maximum supported divisor.
26945e07b700SRajan Vaja  *
26955e07b700SRajan Vaja  * This function is used by master to get maximum supported value.
26965e07b700SRajan Vaja  *
26975e07b700SRajan Vaja  * Return: Returns status, either success or error+reason.
2698de7ed953SPrasad Kummari  *
26995e07b700SRajan Vaja  */
pm_api_clock_get_max_divisor(enum clock_id clock_id,uint8_t div_type,uint32_t * max_div)27005e07b700SRajan Vaja enum pm_ret_status pm_api_clock_get_max_divisor(enum clock_id clock_id,
27015e07b700SRajan Vaja 						uint8_t div_type,
27025e07b700SRajan Vaja 						uint32_t *max_div)
27035e07b700SRajan Vaja {
27045e07b700SRajan Vaja 	uint32_t i;
2705bb145c9dSMaheedhar Bollapalli 	const struct pm_clock_node *nodes;
27063f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
27075e07b700SRajan Vaja 
2708eb0d2b17SVenkatesh Yadav Abbarapu 	if (clock_id >= CLK_MAX_OUTPUT_CLK) {
27093f6d4794SMaheedhar Bollapalli 		goto exit_label;
2710eb0d2b17SVenkatesh Yadav Abbarapu 	}
27115e07b700SRajan Vaja 
27125e07b700SRajan Vaja 	nodes = *clocks[clock_id].nodes;
27135e07b700SRajan Vaja 	for (i = 0; i < clocks[clock_id].num_nodes; i++) {
27145e07b700SRajan Vaja 		if (nodes[i].type == div_type) {
2715a42e6e44SMaheedhar Bollapalli 			if ((CLK_DIVIDER_POWER_OF_TWO &
2716a42e6e44SMaheedhar Bollapalli 						nodes[i].typeflags) != 0U) {
2717e2cc129bSMaheedhar Bollapalli 				*max_div = (((uint32_t)1U <<
2718e2cc129bSMaheedhar Bollapalli 						((uint32_t)BIT(nodes[i].width) - (uint32_t)1U)));
27195e07b700SRajan Vaja 			} else {
27206ae95624SMaheedhar Bollapalli 				*max_div = (uint32_t)BIT(nodes[i].width) - (uint32_t)1U;
27215e07b700SRajan Vaja 			}
27223f6d4794SMaheedhar Bollapalli 			status = PM_RET_SUCCESS;
27233f6d4794SMaheedhar Bollapalli 			break;
27245e07b700SRajan Vaja 		}
27255e07b700SRajan Vaja 	}
27265e07b700SRajan Vaja 
27273f6d4794SMaheedhar Bollapalli exit_label:
27283f6d4794SMaheedhar Bollapalli 	return status;
27295e07b700SRajan Vaja }
27305e07b700SRajan Vaja 
27315e07b700SRajan Vaja /**
2732de7ed953SPrasad Kummari  * struct pm_pll - PLL related data required to map IOCTL-based PLL control.
2733de7ed953SPrasad Kummari  * implemented by linux to system-level EEMI APIs.
2734de7ed953SPrasad Kummari  * @nid: PLL node ID.
2735de7ed953SPrasad Kummari  * @cid: PLL clock ID.
2736de7ed953SPrasad Kummari  * @pre_src: Pre-source PLL clock ID.
2737de7ed953SPrasad Kummari  * @post_src: Post-source PLL clock ID.
2738de7ed953SPrasad Kummari  * @div2: DIV2 PLL clock ID.
2739de7ed953SPrasad Kummari  * @bypass: PLL output clock ID that maps to bypass select output.
2740de7ed953SPrasad Kummari  * @mode: PLL mode currently set via IOCTL (PLL_FRAC_MODE/PLL_INT_MODE).
2741de7ed953SPrasad Kummari  *
27421a3f02b5SRajan Vaja  */
27431e3fb352SJolly Shah struct pm_pll {
27441e3fb352SJolly Shah 	const enum pm_node_id nid;
27451e3fb352SJolly Shah 	const enum clock_id cid;
2746be48511eSJolly Shah 	const enum clock_id pre_src;
2747be48511eSJolly Shah 	const enum clock_id post_src;
2748be48511eSJolly Shah 	const enum clock_id div2;
2749be48511eSJolly Shah 	const enum clock_id bypass;
27508975f317SJolly Shah 	uint8_t mode;
27511e3fb352SJolly Shah };
27521e3fb352SJolly Shah 
27531e3fb352SJolly Shah static struct pm_pll pm_plls[] = {
27541a3f02b5SRajan Vaja 	{
27551e3fb352SJolly Shah 		.nid = NODE_IOPLL,
27561e3fb352SJolly Shah 		.cid = CLK_IOPLL_INT,
2757be48511eSJolly Shah 		.pre_src = CLK_IOPLL_PRE_SRC,
2758be48511eSJolly Shah 		.post_src = CLK_IOPLL_POST_SRC,
2759be48511eSJolly Shah 		.div2 = CLK_IOPLL_INT_MUX,
2760be48511eSJolly Shah 		.bypass = CLK_IOPLL,
27611e3fb352SJolly Shah 	}, {
27621e3fb352SJolly Shah 		.nid = NODE_RPLL,
27631e3fb352SJolly Shah 		.cid = CLK_RPLL_INT,
2764be48511eSJolly Shah 		.pre_src = CLK_RPLL_PRE_SRC,
2765be48511eSJolly Shah 		.post_src = CLK_RPLL_POST_SRC,
2766be48511eSJolly Shah 		.div2 = CLK_RPLL_INT_MUX,
2767be48511eSJolly Shah 		.bypass = CLK_RPLL,
27681e3fb352SJolly Shah 	}, {
27691e3fb352SJolly Shah 		.nid = NODE_APLL,
27701e3fb352SJolly Shah 		.cid = CLK_APLL_INT,
2771be48511eSJolly Shah 		.pre_src = CLK_APLL_PRE_SRC,
2772be48511eSJolly Shah 		.post_src = CLK_APLL_POST_SRC,
2773be48511eSJolly Shah 		.div2 = CLK_APLL_INT_MUX,
2774be48511eSJolly Shah 		.bypass = CLK_APLL,
27751e3fb352SJolly Shah 	}, {
27761e3fb352SJolly Shah 		.nid = NODE_VPLL,
27771e3fb352SJolly Shah 		.cid = CLK_VPLL_INT,
2778be48511eSJolly Shah 		.pre_src = CLK_VPLL_PRE_SRC,
2779be48511eSJolly Shah 		.post_src = CLK_VPLL_POST_SRC,
2780be48511eSJolly Shah 		.div2 = CLK_VPLL_INT_MUX,
2781be48511eSJolly Shah 		.bypass = CLK_VPLL,
27821e3fb352SJolly Shah 	}, {
27831e3fb352SJolly Shah 		.nid = NODE_DPLL,
27841e3fb352SJolly Shah 		.cid = CLK_DPLL_INT,
2785be48511eSJolly Shah 		.pre_src = CLK_DPLL_PRE_SRC,
2786be48511eSJolly Shah 		.post_src = CLK_DPLL_POST_SRC,
2787be48511eSJolly Shah 		.div2 = CLK_DPLL_INT_MUX,
2788be48511eSJolly Shah 		.bypass = CLK_DPLL,
27891e3fb352SJolly Shah 	},
27901e3fb352SJolly Shah };
27911e3fb352SJolly Shah 
27921e3fb352SJolly Shah /**
2793de7ed953SPrasad Kummari  * pm_clock_get_pll() - Get PLL structure by PLL clock ID.
2794de7ed953SPrasad Kummari  * @clock_id: Clock ID of the target PLL.
27951e3fb352SJolly Shah  *
2796de7ed953SPrasad Kummari  * Return: Pointer to PLL structure if found, NULL otherwise.
2797de7ed953SPrasad Kummari  *
27981e3fb352SJolly Shah  */
pm_clock_get_pll(enum clock_id clock_id)2799bd642ddeSJolly Shah struct pm_pll *pm_clock_get_pll(enum clock_id clock_id)
28001e3fb352SJolly Shah {
28011e3fb352SJolly Shah 	uint32_t i;
28023f6d4794SMaheedhar Bollapalli 	struct pm_pll *pll = NULL;
28031e3fb352SJolly Shah 
28041e3fb352SJolly Shah 	for (i = 0; i < ARRAY_SIZE(pm_plls); i++) {
2805eb0d2b17SVenkatesh Yadav Abbarapu 		if (pm_plls[i].cid == clock_id) {
28063f6d4794SMaheedhar Bollapalli 			pll = &pm_plls[i];
28073f6d4794SMaheedhar Bollapalli 			break;
28081a3f02b5SRajan Vaja 		}
2809eb0d2b17SVenkatesh Yadav Abbarapu 	}
28101e3fb352SJolly Shah 
28113f6d4794SMaheedhar Bollapalli 	return pll;
28121a3f02b5SRajan Vaja }
28131a3f02b5SRajan Vaja 
28141a3f02b5SRajan Vaja /**
2815de7ed953SPrasad Kummari  * pm_clock_get_pll_node_id() - Get PLL node ID by PLL clock ID.
2816de7ed953SPrasad Kummari  * @clock_id: Clock ID of the target PLL.
2817de7ed953SPrasad Kummari  * @node_id: Location to store node ID of the target PLL.
28181a3f02b5SRajan Vaja  *
2819de7ed953SPrasad Kummari  * Return: PM_RET_SUCCESS if node ID is found, PM_RET_ERROR_ARGS otherwise.
2820de7ed953SPrasad Kummari  *
28211a3f02b5SRajan Vaja  */
pm_clock_get_pll_node_id(enum clock_id clock_id,enum pm_node_id * node_id)28221e3fb352SJolly Shah enum pm_ret_status pm_clock_get_pll_node_id(enum clock_id clock_id,
28231e3fb352SJolly Shah 					    enum pm_node_id *node_id)
28241a3f02b5SRajan Vaja {
2825bb145c9dSMaheedhar Bollapalli 	const struct pm_pll *pll = pm_clock_get_pll(clock_id);
28263f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
28271a3f02b5SRajan Vaja 
2828aaf6e762SMaheedhar Bollapalli 	if (pll != NULL) {
28291e3fb352SJolly Shah 		*node_id = pll->nid;
28303f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
28311e3fb352SJolly Shah 	}
28321a3f02b5SRajan Vaja 
28333f6d4794SMaheedhar Bollapalli 	return status;
2834caae497dSRajan Vaja }
2835caae497dSRajan Vaja 
2836caae497dSRajan Vaja /**
2837de7ed953SPrasad Kummari  * pm_clock_get_pll_by_related_clk() - Get PLL structure by PLL-related clock
2838de7ed953SPrasad Kummari  *                                     ID.
2839de7ed953SPrasad Kummari  * @clock_id: Clock ID.
2840caae497dSRajan Vaja  *
2841de7ed953SPrasad Kummari  * Return: Pointer to PLL structure if found, NULL otherwise.
2842de7ed953SPrasad Kummari  *
2843caae497dSRajan Vaja  */
pm_clock_get_pll_by_related_clk(enum clock_id clock_id)2844be48511eSJolly Shah struct pm_pll *pm_clock_get_pll_by_related_clk(enum clock_id clock_id)
2845caae497dSRajan Vaja {
2846be48511eSJolly Shah 	uint32_t i;
28473f6d4794SMaheedhar Bollapalli 	struct pm_pll *pll = NULL;
28481a3f02b5SRajan Vaja 
2849be48511eSJolly Shah 	for (i = 0; i < ARRAY_SIZE(pm_plls); i++) {
28505b542313SMaheedhar Bollapalli 		if ((pm_plls[i].pre_src == clock_id) ||
28515b542313SMaheedhar Bollapalli 		    (pm_plls[i].post_src == clock_id) ||
28525b542313SMaheedhar Bollapalli 		    (pm_plls[i].div2 == clock_id) ||
28535b542313SMaheedhar Bollapalli 		    (pm_plls[i].bypass == clock_id)) {
28543f6d4794SMaheedhar Bollapalli 			pll = &pm_plls[i];
28553f6d4794SMaheedhar Bollapalli 			break;
2856be48511eSJolly Shah 		}
2857be48511eSJolly Shah 	}
2858be48511eSJolly Shah 
28593f6d4794SMaheedhar Bollapalli 	return pll;
2860be48511eSJolly Shah }
2861be48511eSJolly Shah 
2862be48511eSJolly Shah /**
2863de7ed953SPrasad Kummari  * pm_clock_pll_enable() - "Enable" the PLL clock (lock the PLL).
2864de7ed953SPrasad Kummari  * @pll: PLL to be locked.
28658ce93ec9SRonak Jain  * @flag: 0 - Call from secure source.
28668ce93ec9SRonak Jain  *	  1 - Call from non-secure source.
2867caae497dSRajan Vaja  *
2868bd642ddeSJolly Shah  * This function is used to map IOCTL/linux-based PLL handling to system-level
2869de7ed953SPrasad Kummari  * EEMI APIs.
2870caae497dSRajan Vaja  *
2871de7ed953SPrasad Kummari  * Return: Error if the argument is not valid or status as returned by PMU.
2872de7ed953SPrasad Kummari  *
2873caae497dSRajan Vaja  */
pm_clock_pll_enable(struct pm_pll * pll,uint32_t flag)28748ce93ec9SRonak Jain enum pm_ret_status pm_clock_pll_enable(struct pm_pll *pll, uint32_t flag)
2875caae497dSRajan Vaja {
28763f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
28771a3f02b5SRajan Vaja 
28783f6d4794SMaheedhar Bollapalli 	if (pll != NULL) {
2879bd642ddeSJolly Shah 		/* Set the PLL mode according to the buffered mode value */
2880eb0d2b17SVenkatesh Yadav Abbarapu 		if (pll->mode == PLL_FRAC_MODE) {
28818ce93ec9SRonak Jain 			status = pm_pll_set_mode(pll->nid, PM_PLL_MODE_FRACTIONAL, flag);
28823f6d4794SMaheedhar Bollapalli 		} else {
28838ce93ec9SRonak Jain 			status = pm_pll_set_mode(pll->nid, PM_PLL_MODE_INTEGER, flag);
28843f6d4794SMaheedhar Bollapalli 		}
2885eb0d2b17SVenkatesh Yadav Abbarapu 	}
28861a3f02b5SRajan Vaja 
28873f6d4794SMaheedhar Bollapalli 	return status;
2888caae497dSRajan Vaja }
2889caae497dSRajan Vaja 
2890caae497dSRajan Vaja /**
2891de7ed953SPrasad Kummari  * pm_clock_pll_disable - "Disable" the PLL clock (bypass/reset the PLL).
2892de7ed953SPrasad Kummari  * @pll: PLL to be bypassed/reset.
28938ce93ec9SRonak Jain  * @flag: 0 - Call from secure source.
28948ce93ec9SRonak Jain  *	  1 - Call from non-secure source.
2895caae497dSRajan Vaja  *
2896d3a78ca4SJolly Shah  * This function is used to map IOCTL/linux-based PLL handling to system-level
2897de7ed953SPrasad Kummari  * EEMI APIs.
2898caae497dSRajan Vaja  *
2899de7ed953SPrasad Kummari  * Return: Error if the argument is not valid or status as returned by PMU.
2900de7ed953SPrasad Kummari  *
2901caae497dSRajan Vaja  */
pm_clock_pll_disable(struct pm_pll * pll,uint32_t flag)29028ce93ec9SRonak Jain enum pm_ret_status pm_clock_pll_disable(struct pm_pll *pll, uint32_t flag)
2903caae497dSRajan Vaja {
29043f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
29053f6d4794SMaheedhar Bollapalli 
29063f6d4794SMaheedhar Bollapalli 	if (pll != NULL) {
29078ce93ec9SRonak Jain 		status = pm_pll_set_mode(pll->nid, PM_PLL_MODE_RESET, flag);
2908eb0d2b17SVenkatesh Yadav Abbarapu 	}
29091a3f02b5SRajan Vaja 
29103f6d4794SMaheedhar Bollapalli 	return status;
29111a3f02b5SRajan Vaja }
29121a3f02b5SRajan Vaja 
29131a3f02b5SRajan Vaja /**
2914de7ed953SPrasad Kummari  * pm_clock_pll_get_state - Get state of the PLL.
2915de7ed953SPrasad Kummari  * @pll: Pointer to the target PLL structure.
2916de7ed953SPrasad Kummari  * @state: Location to store the state: 1/0 ("Enabled"/"Disabled").
29178ce93ec9SRonak Jain  * @flag: 0 - Call from secure source.
29188ce93ec9SRonak Jain  *	  1 - Call from non-secure source.
29191a3f02b5SRajan Vaja  *
2920bd30503aSJolly Shah  * "Enable" actually means that the PLL is locked and its bypass is deasserted,
2921bd30503aSJolly Shah  * "Disable" means that it is bypassed.
2922bd30503aSJolly Shah  *
2923bd30503aSJolly Shah  * Return: PM_RET_ERROR_ARGS error if the argument is not valid, success if
2924de7ed953SPrasad Kummari  *         returned state value is valid or an error if returned by PMU.
29251a3f02b5SRajan Vaja  */
pm_clock_pll_get_state(struct pm_pll * pll,uint32_t * state,uint32_t flag)2926bd30503aSJolly Shah enum pm_ret_status pm_clock_pll_get_state(struct pm_pll *pll,
29278ce93ec9SRonak Jain 					  uint32_t *state,
29288ce93ec9SRonak Jain 					  uint32_t flag)
29291a3f02b5SRajan Vaja {
29303f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
2931bd30503aSJolly Shah 	enum pm_pll_mode mode;
29321a3f02b5SRajan Vaja 
2933aaf6e762SMaheedhar Bollapalli 	if ((pll == NULL) || (state == NULL)) {
29343f6d4794SMaheedhar Bollapalli 		goto exit_label;
2935eb0d2b17SVenkatesh Yadav Abbarapu 	}
29361a3f02b5SRajan Vaja 
29378ce93ec9SRonak Jain 	status = pm_pll_get_mode(pll->nid, &mode, flag);
2938eb0d2b17SVenkatesh Yadav Abbarapu 	if (status != PM_RET_SUCCESS) {
29393f6d4794SMaheedhar Bollapalli 		goto exit_label;
2940eb0d2b17SVenkatesh Yadav Abbarapu 	}
29411a3f02b5SRajan Vaja 
2942eb0d2b17SVenkatesh Yadav Abbarapu 	if (mode == PM_PLL_MODE_RESET) {
2943bd30503aSJolly Shah 		*state = 0;
2944eb0d2b17SVenkatesh Yadav Abbarapu 	} else {
2945bd30503aSJolly Shah 		*state = 1;
2946eb0d2b17SVenkatesh Yadav Abbarapu 	}
29471a3f02b5SRajan Vaja 
29483f6d4794SMaheedhar Bollapalli 	status = PM_RET_SUCCESS;
29493f6d4794SMaheedhar Bollapalli 
29503f6d4794SMaheedhar Bollapalli exit_label:
29513f6d4794SMaheedhar Bollapalli 	return status;
2952caae497dSRajan Vaja }
2953caae497dSRajan Vaja 
2954caae497dSRajan Vaja /**
2955de7ed953SPrasad Kummari  * pm_clock_pll_set_parent - Set the clock parent for PLL-related clock id.
2956de7ed953SPrasad Kummari  * @pll: Target PLL structure.
2957de7ed953SPrasad Kummari  * @clock_id: Id of the clock.
2958de7ed953SPrasad Kummari  * @parent_index: parent index (=mux select value).
29598ce93ec9SRonak Jain  * @flag: 0 - Call from secure source.
29608ce93ec9SRonak Jain  *	  1 - Call from non-secure source.
2961caae497dSRajan Vaja  *
2962be48511eSJolly Shah  * The whole clock-tree implementation relies on the fact that parent indexes
2963be48511eSJolly Shah  * match to the multiplexer select values. This function has to rely on that
2964be48511eSJolly Shah  * assumption as well => parent_index is actually the mux select value.
2965caae497dSRajan Vaja  *
2966caae497dSRajan Vaja  * Return: Returns status, either success or error+reason.
2967de7ed953SPrasad Kummari  *
2968caae497dSRajan Vaja  */
pm_clock_pll_set_parent(struct pm_pll * pll,enum clock_id clock_id,uint32_t parent_index,uint32_t flag)2969be48511eSJolly Shah enum pm_ret_status pm_clock_pll_set_parent(struct pm_pll *pll,
2970be48511eSJolly Shah 					   enum clock_id clock_id,
29718ce93ec9SRonak Jain 					   uint32_t parent_index,
29728ce93ec9SRonak Jain 					   uint32_t flag)
2973caae497dSRajan Vaja {
29743f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
29753f6d4794SMaheedhar Bollapalli 
2976c8890883SHariBabu Gattem 	if (pll == NULL) {
29773f6d4794SMaheedhar Bollapalli 		goto exit_label;
2978eb0d2b17SVenkatesh Yadav Abbarapu 	}
2979eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->pre_src == clock_id) {
29808ce93ec9SRonak Jain 		status = pm_pll_set_parameter(pll->nid, PM_PLL_PARAM_PRE_SRC,
29818ce93ec9SRonak Jain 					      parent_index, flag);
29823f6d4794SMaheedhar Bollapalli 		goto exit_label;
2983eb0d2b17SVenkatesh Yadav Abbarapu 	}
2984eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->post_src == clock_id) {
29858ce93ec9SRonak Jain 		status = pm_pll_set_parameter(pll->nid, PM_PLL_PARAM_POST_SRC,
29868ce93ec9SRonak Jain 					      parent_index, flag);
29873f6d4794SMaheedhar Bollapalli 		goto exit_label;
2988eb0d2b17SVenkatesh Yadav Abbarapu 	}
2989eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->div2 == clock_id) {
29908ce93ec9SRonak Jain 		status = pm_pll_set_parameter(pll->nid, PM_PLL_PARAM_DIV2,
29918ce93ec9SRonak Jain 					      parent_index, flag);
2992eb0d2b17SVenkatesh Yadav Abbarapu 	}
29931a3f02b5SRajan Vaja 
29943f6d4794SMaheedhar Bollapalli exit_label:
29953f6d4794SMaheedhar Bollapalli 	return status;
2996caae497dSRajan Vaja }
2997caae497dSRajan Vaja 
2998caae497dSRajan Vaja /**
2999de7ed953SPrasad Kummari  * pm_clock_pll_get_parent - Get mux select value of PLL-related clock parent.
3000de7ed953SPrasad Kummari  * @pll: Target PLL structure.
3001de7ed953SPrasad Kummari  * @clock_id: Id of the clock.
3002de7ed953SPrasad Kummari  * @parent_index: parent index (=mux select value).
30038ce93ec9SRonak Jain  * @flag: 0 - Call from secure source.
30048ce93ec9SRonak Jain  *	  1 - Call from non-secure source.
3005caae497dSRajan Vaja  *
3006b6c56bdbSJolly Shah  * This function is used by master to get parent index for PLL-related clock.
3007caae497dSRajan Vaja  *
3008caae497dSRajan Vaja  * Return: Returns status, either success or error+reason.
3009de7ed953SPrasad Kummari  *
3010caae497dSRajan Vaja  */
pm_clock_pll_get_parent(struct pm_pll * pll,enum clock_id clock_id,uint32_t * parent_index,uint32_t flag)3011b6c56bdbSJolly Shah enum pm_ret_status pm_clock_pll_get_parent(struct pm_pll *pll,
3012b6c56bdbSJolly Shah 					   enum clock_id clock_id,
30138ce93ec9SRonak Jain 					   uint32_t *parent_index,
30148ce93ec9SRonak Jain 					   uint32_t flag)
3015caae497dSRajan Vaja {
30163f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
30173f6d4794SMaheedhar Bollapalli 
3018c8890883SHariBabu Gattem 	if (pll == NULL) {
30193f6d4794SMaheedhar Bollapalli 		goto exit_label;
3020eb0d2b17SVenkatesh Yadav Abbarapu 	}
3021eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->pre_src == clock_id) {
30223f6d4794SMaheedhar Bollapalli 		status = pm_pll_get_parameter(pll->nid, PM_PLL_PARAM_PRE_SRC,
30238ce93ec9SRonak Jain 					      parent_index, flag);
30243f6d4794SMaheedhar Bollapalli 		goto exit_label;
3025eb0d2b17SVenkatesh Yadav Abbarapu 	}
3026eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->post_src == clock_id) {
30273f6d4794SMaheedhar Bollapalli 		status = pm_pll_get_parameter(pll->nid, PM_PLL_PARAM_POST_SRC,
30288ce93ec9SRonak Jain 					      parent_index, flag);
30293f6d4794SMaheedhar Bollapalli 		goto exit_label;
3030eb0d2b17SVenkatesh Yadav Abbarapu 	}
3031eb0d2b17SVenkatesh Yadav Abbarapu 	if (pll->div2 == clock_id) {
30323f6d4794SMaheedhar Bollapalli 		status = pm_pll_get_parameter(pll->nid, PM_PLL_PARAM_DIV2,
30338ce93ec9SRonak Jain 					      parent_index, flag);
30343f6d4794SMaheedhar Bollapalli 		goto exit_label;
3035eb0d2b17SVenkatesh Yadav Abbarapu 	}
3036b6c56bdbSJolly Shah 	if (pll->bypass == clock_id) {
3037b6c56bdbSJolly Shah 		*parent_index = 0;
30383f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
3039caae497dSRajan Vaja 	}
3040caae497dSRajan Vaja 
30413f6d4794SMaheedhar Bollapalli exit_label:
30423f6d4794SMaheedhar Bollapalli 	return status;
3043caae497dSRajan Vaja }
3044caae497dSRajan Vaja 
3045caae497dSRajan Vaja /**
3046de7ed953SPrasad Kummari  * pm_clock_set_pll_mode() -  Set PLL mode.
3047de7ed953SPrasad Kummari  * @clock_id: PLL clock id.
3048de7ed953SPrasad Kummari  * @mode: Mode fractional/integer.
3049caae497dSRajan Vaja  *
30508975f317SJolly Shah  * This function buffers/saves the PLL mode that is set.
3051caae497dSRajan Vaja  *
3052de7ed953SPrasad Kummari  * Return: Success if mode is buffered or error if an argument is invalid.
3053de7ed953SPrasad Kummari  *
3054caae497dSRajan Vaja  */
pm_clock_set_pll_mode(enum clock_id clock_id,uint32_t mode)30558975f317SJolly Shah enum pm_ret_status pm_clock_set_pll_mode(enum clock_id clock_id,
3056ffa91031SVenkatesh Yadav Abbarapu 					 uint32_t mode)
3057caae497dSRajan Vaja {
30588975f317SJolly Shah 	struct pm_pll *pll = pm_clock_get_pll(clock_id);
30593f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
30601a3f02b5SRajan Vaja 
30613f6d4794SMaheedhar Bollapalli 	if (!((pll == NULL) || ((mode != PLL_FRAC_MODE) && (mode != PLL_INT_MODE)))) {
30626ae95624SMaheedhar Bollapalli 		pll->mode = (uint8_t)mode;
30633f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
30643f6d4794SMaheedhar Bollapalli 	}
30651a3f02b5SRajan Vaja 
30663f6d4794SMaheedhar Bollapalli 	return status;
3067caae497dSRajan Vaja }
3068caae497dSRajan Vaja 
3069caae497dSRajan Vaja /**
3070de7ed953SPrasad Kummari  * pm_clock_get_pll_mode() -  Get PLL mode.
3071de7ed953SPrasad Kummari  * @clock_id: PLL clock id.
3072de7ed953SPrasad Kummari  * @mode: Location to store the mode (fractional/integer).
3073caae497dSRajan Vaja  *
3074a5ae5a72SJolly Shah  * This function returns buffered PLL mode.
3075caae497dSRajan Vaja  *
3076de7ed953SPrasad Kummari  * Return: Success if mode is stored or error if an argument is invalid.
3077de7ed953SPrasad Kummari  *
3078caae497dSRajan Vaja  */
pm_clock_get_pll_mode(enum clock_id clock_id,uint32_t * mode)3079a5ae5a72SJolly Shah enum pm_ret_status pm_clock_get_pll_mode(enum clock_id clock_id,
3080ffa91031SVenkatesh Yadav Abbarapu 					 uint32_t *mode)
3081caae497dSRajan Vaja {
3082bb145c9dSMaheedhar Bollapalli 	const struct pm_pll *pll = pm_clock_get_pll(clock_id);
30833f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
30841a3f02b5SRajan Vaja 
30853f6d4794SMaheedhar Bollapalli 	if ((pll != NULL) && (mode != NULL)) {
3086a5ae5a72SJolly Shah 		*mode = pll->mode;
30873f6d4794SMaheedhar Bollapalli 		status = PM_RET_SUCCESS;
30883f6d4794SMaheedhar Bollapalli 	}
30891a3f02b5SRajan Vaja 
30903f6d4794SMaheedhar Bollapalli 	return status;
3091caae497dSRajan Vaja }
3092caae497dSRajan Vaja 
3093caae497dSRajan Vaja /**
3094de7ed953SPrasad Kummari  * pm_clock_id_is_valid() -  Check if given clock ID is valid.
3095de7ed953SPrasad Kummari  * @clock_id: ID of the clock to be checked.
3096caae497dSRajan Vaja  *
3097de7ed953SPrasad Kummari  * Return: Returns success if clock_id is valid, otherwise an error.
3098de7ed953SPrasad Kummari  *
3099caae497dSRajan Vaja  */
pm_clock_id_is_valid(uint32_t clock_id)3100ffa91031SVenkatesh Yadav Abbarapu enum pm_ret_status pm_clock_id_is_valid(uint32_t clock_id)
3101caae497dSRajan Vaja {
31023f6d4794SMaheedhar Bollapalli 	enum pm_ret_status status = PM_RET_ERROR_ARGS;
31031a3f02b5SRajan Vaja 
31043f6d4794SMaheedhar Bollapalli 	if (pm_clock_valid(clock_id)) {
3105eb0d2b17SVenkatesh Yadav Abbarapu 		if (pm_clock_type(clock_id) != CLK_TYPE_OUTPUT) {
31063f6d4794SMaheedhar Bollapalli 			status = PM_RET_ERROR_NOTSUPPORTED;
31073f6d4794SMaheedhar Bollapalli 		} else {
31083f6d4794SMaheedhar Bollapalli 			status = PM_RET_SUCCESS;
31093f6d4794SMaheedhar Bollapalli 		}
3110eb0d2b17SVenkatesh Yadav Abbarapu 	}
31111a3f02b5SRajan Vaja 
31123f6d4794SMaheedhar Bollapalli 	return status;
3113caae497dSRajan Vaja }
3114caae497dSRajan Vaja 
3115caae497dSRajan Vaja /**
3116de7ed953SPrasad Kummari  * pm_clock_has_div() - Check if the clock has divider with given ID.
3117de7ed953SPrasad Kummari  * @clock_id: Clock ID.
3118de7ed953SPrasad Kummari  * @div_id: Divider ID.
3119caae497dSRajan Vaja  *
3120de7ed953SPrasad Kummari  * Return: True(1)=clock has the divider, false(0)=otherwise.
3121de7ed953SPrasad Kummari  *
3122caae497dSRajan Vaja  */
pm_clock_has_div(uint32_t clock_id,enum pm_clock_div_id div_id)3123ffa91031SVenkatesh Yadav Abbarapu uint8_t pm_clock_has_div(uint32_t clock_id, enum pm_clock_div_id div_id)
3124caae497dSRajan Vaja {
3125b071dcd9SJolly Shah 	uint32_t i;
3126bb145c9dSMaheedhar Bollapalli 	const struct pm_clock_node *nodes;
31273f6d4794SMaheedhar Bollapalli 	uint8_t status = 0U;
31281a3f02b5SRajan Vaja 
3129895e8029SMaheedhar Bollapalli 	if (clock_id >= (uint32_t)CLK_MAX_OUTPUT_CLK) {
31303f6d4794SMaheedhar Bollapalli 		goto exit_label;
3131eb0d2b17SVenkatesh Yadav Abbarapu 	}
31321a3f02b5SRajan Vaja 
3133b071dcd9SJolly Shah 	nodes = *clocks[clock_id].nodes;
3134b071dcd9SJolly Shah 	for (i = 0; i < clocks[clock_id].num_nodes; i++) {
3135b071dcd9SJolly Shah 		if (nodes[i].type == TYPE_DIV1) {
3136e4a0c44fSNithin G 			if (div_id == PM_CLOCK_DIV0_ID) {
31373f6d4794SMaheedhar Bollapalli 				status = 1U;
31383f6d4794SMaheedhar Bollapalli 				break;
3139e4a0c44fSNithin G 			}
3140b071dcd9SJolly Shah 		} else if (nodes[i].type == TYPE_DIV2) {
3141e4a0c44fSNithin G 			if (div_id == PM_CLOCK_DIV1_ID) {
31423f6d4794SMaheedhar Bollapalli 				status = 1U;
31433f6d4794SMaheedhar Bollapalli 				break;
3144e4a0c44fSNithin G 			}
314516de22d0SVenkatesh Yadav Abbarapu 		} else {
314616de22d0SVenkatesh Yadav Abbarapu 			/* To fix the misra 15.7 warning */
3147b071dcd9SJolly Shah 		}
3148b071dcd9SJolly Shah 	}
31491a3f02b5SRajan Vaja 
31503f6d4794SMaheedhar Bollapalli exit_label:
31513f6d4794SMaheedhar Bollapalli 	return status;
3152caae497dSRajan Vaja }
3153