xref: /openbmc/linux/drivers/clk/renesas/rcar-gen4-cpg.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1470e3f0dSYoshihiro Shimoda /* SPDX-License-Identifier: GPL-2.0 */
2470e3f0dSYoshihiro Shimoda /*
3470e3f0dSYoshihiro Shimoda  * R-Car Gen4 Clock Pulse Generator
4470e3f0dSYoshihiro Shimoda  *
5470e3f0dSYoshihiro Shimoda  * Copyright (C) 2021 Renesas Electronics Corp.
6470e3f0dSYoshihiro Shimoda  *
7470e3f0dSYoshihiro Shimoda  */
8470e3f0dSYoshihiro Shimoda 
9470e3f0dSYoshihiro Shimoda #ifndef __CLK_RENESAS_RCAR_GEN4_CPG_H__
10470e3f0dSYoshihiro Shimoda #define __CLK_RENESAS_RCAR_GEN4_CPG_H__
11470e3f0dSYoshihiro Shimoda 
12470e3f0dSYoshihiro Shimoda enum rcar_gen4_clk_types {
13470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_MAIN = CLK_TYPE_CUSTOM,
14470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL1,
15470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL2,
16*584d2991SGeert Uytterhoeven 	CLK_TYPE_GEN4_PLL2_VAR,
17470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL2X_3X,	/* r8a779a0 only */
18470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL3,
197f906eaaSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL4,
20121d5713SGeert Uytterhoeven 	CLK_TYPE_GEN4_PLL5,
21470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_PLL6,
22470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_SDSRC,
23470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_SDH,
24470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_SD,
25470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_MDSEL,	/* Select parent/divider using mode pin */
26470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_Z,
27470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_OSC,	/* OSC EXTAL predivider and fixed divider */
28470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_RPCSRC,
29470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_RPC,
30470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_RPCD2,
31470e3f0dSYoshihiro Shimoda 
32470e3f0dSYoshihiro Shimoda 	/* SoC specific definitions start here */
33470e3f0dSYoshihiro Shimoda 	CLK_TYPE_GEN4_SOC_BASE,
34470e3f0dSYoshihiro Shimoda };
35470e3f0dSYoshihiro Shimoda 
36470e3f0dSYoshihiro Shimoda #define DEF_GEN4_SDH(_name, _id, _parent, _offset)	\
37470e3f0dSYoshihiro Shimoda 	DEF_BASE(_name, _id, CLK_TYPE_GEN4_SDH, _parent, .offset = _offset)
38470e3f0dSYoshihiro Shimoda 
39470e3f0dSYoshihiro Shimoda #define DEF_GEN4_SD(_name, _id, _parent, _offset)	\
40470e3f0dSYoshihiro Shimoda 	DEF_BASE(_name, _id, CLK_TYPE_GEN4_SD, _parent, .offset = _offset)
41470e3f0dSYoshihiro Shimoda 
42470e3f0dSYoshihiro Shimoda #define DEF_GEN4_MDSEL(_name, _id, _md, _parent0, _div0, _parent1, _div1) \
43470e3f0dSYoshihiro Shimoda 	DEF_BASE(_name, _id, CLK_TYPE_GEN4_MDSEL,	\
44470e3f0dSYoshihiro Shimoda 		 (_parent0) << 16 | (_parent1),		\
45470e3f0dSYoshihiro Shimoda 		 .div = (_div0) << 16 | (_div1), .offset = _md)
46470e3f0dSYoshihiro Shimoda 
47470e3f0dSYoshihiro Shimoda #define DEF_GEN4_OSC(_name, _id, _parent, _div)		\
48470e3f0dSYoshihiro Shimoda 	DEF_BASE(_name, _id, CLK_TYPE_GEN4_OSC, _parent, .div = _div)
49470e3f0dSYoshihiro Shimoda 
50470e3f0dSYoshihiro Shimoda #define DEF_GEN4_Z(_name, _id, _type, _parent, _div, _offset)	\
51470e3f0dSYoshihiro Shimoda 	DEF_BASE(_name, _id, _type, _parent, .div = _div, .offset = _offset)
52470e3f0dSYoshihiro Shimoda 
53470e3f0dSYoshihiro Shimoda struct rcar_gen4_cpg_pll_config {
54470e3f0dSYoshihiro Shimoda 	u8 extal_div;
55470e3f0dSYoshihiro Shimoda 	u8 pll1_mult;
56470e3f0dSYoshihiro Shimoda 	u8 pll1_div;
57470e3f0dSYoshihiro Shimoda 	u8 pll2_mult;
58470e3f0dSYoshihiro Shimoda 	u8 pll2_div;
59470e3f0dSYoshihiro Shimoda 	u8 pll3_mult;
60470e3f0dSYoshihiro Shimoda 	u8 pll3_div;
617f906eaaSYoshihiro Shimoda 	u8 pll4_mult;
627f906eaaSYoshihiro Shimoda 	u8 pll4_div;
63470e3f0dSYoshihiro Shimoda 	u8 pll5_mult;
64470e3f0dSYoshihiro Shimoda 	u8 pll5_div;
65470e3f0dSYoshihiro Shimoda 	u8 pll6_mult;
66470e3f0dSYoshihiro Shimoda 	u8 pll6_div;
67470e3f0dSYoshihiro Shimoda 	u8 osc_prediv;
68470e3f0dSYoshihiro Shimoda };
69470e3f0dSYoshihiro Shimoda 
70470e3f0dSYoshihiro Shimoda #define CPG_RPCCKCR	0x874
71470e3f0dSYoshihiro Shimoda #define SD0CKCR1	0x8a4
72470e3f0dSYoshihiro Shimoda 
73470e3f0dSYoshihiro Shimoda struct clk *rcar_gen4_cpg_clk_register(struct device *dev,
74470e3f0dSYoshihiro Shimoda 	const struct cpg_core_clk *core, const struct cpg_mssr_info *info,
75470e3f0dSYoshihiro Shimoda 	struct clk **clks, void __iomem *base,
76470e3f0dSYoshihiro Shimoda 	struct raw_notifier_head *notifiers);
77470e3f0dSYoshihiro Shimoda int rcar_gen4_cpg_init(const struct rcar_gen4_cpg_pll_config *config,
78470e3f0dSYoshihiro Shimoda 		       unsigned int clk_extalr, u32 mode);
79470e3f0dSYoshihiro Shimoda 
80470e3f0dSYoshihiro Shimoda #endif
81