xref: /openbmc/linux/drivers/clk/uniphier/clk-uniphier-sys.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1c942fddfSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
27f4d3b52SMasahiro Yamada /*
37f4d3b52SMasahiro Yamada  * Copyright (C) 2016 Socionext Inc.
47f4d3b52SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
57f4d3b52SMasahiro Yamada  */
67f4d3b52SMasahiro Yamada 
77f4d3b52SMasahiro Yamada #include <linux/stddef.h>
87f4d3b52SMasahiro Yamada 
97f4d3b52SMasahiro Yamada #include "clk-uniphier.h"
107f4d3b52SMasahiro Yamada 
11e66d57a9SMasahiro Yamada #define UNIPHIER_LD4_SYS_CLK_SD					\
127f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 8),		\
137f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-133m", -1, "vpll27a", 1, 2)
147f4d3b52SMasahiro Yamada 
157f4d3b52SMasahiro Yamada #define UNIPHIER_PRO5_SYS_CLK_SD					\
167f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 12),		\
177f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 18)
187f4d3b52SMasahiro Yamada 
197f4d3b52SMasahiro Yamada #define UNIPHIER_LD20_SYS_CLK_SD					\
207f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 10),		\
217f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 15)
227f4d3b52SMasahiro Yamada 
23bed51629SKunihiko Hayashi #define UNIPHIER_NX1_SYS_CLK_SD						\
24bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 4),		\
25bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 6)
26bed51629SKunihiko Hayashi 
27e66d57a9SMasahiro Yamada #define UNIPHIER_LD4_SYS_CLK_NAND(idx)					\
280316c018SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 32),		\
290316c018SMasahiro Yamada 	UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x2104, 2)
3072d0d867SMasahiro Yamada 
3172d0d867SMasahiro Yamada #define UNIPHIER_PRO5_SYS_CLK_NAND(idx)					\
320316c018SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 48),		\
330316c018SMasahiro Yamada 	UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x2104, 2)
3419771622SMasahiro Yamada 
3519771622SMasahiro Yamada #define UNIPHIER_LD11_SYS_CLK_NAND(idx)					\
360316c018SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 40),		\
370316c018SMasahiro Yamada 	UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x210c, 0)
380316c018SMasahiro Yamada 
390316c018SMasahiro Yamada #define UNIPHIER_SYS_CLK_NAND_4X(idx)					\
400316c018SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("nand-4x", (idx), "nand", 4, 1)
4119771622SMasahiro Yamada 
422a353221SMasahiro Yamada #define UNIPHIER_LD11_SYS_CLK_EMMC(idx)					\
432a353221SMasahiro Yamada 	UNIPHIER_CLK_GATE("emmc", (idx), NULL, 0x210c, 2)
442a353221SMasahiro Yamada 
45e66d57a9SMasahiro Yamada #define UNIPHIER_LD4_SYS_CLK_STDMAC(idx)				\
467f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_GATE("stdmac", (idx), NULL, 0x2104, 10)
477f4d3b52SMasahiro Yamada 
487f4d3b52SMasahiro Yamada #define UNIPHIER_LD11_SYS_CLK_STDMAC(idx)				\
497f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_GATE("stdmac", (idx), NULL, 0x210c, 8)
507f4d3b52SMasahiro Yamada 
51c5fc9cf2SKatsuhiro Suzuki #define UNIPHIER_LD11_SYS_CLK_HSC(idx)					\
52c5fc9cf2SKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("hsc", (idx), NULL, 0x210c, 9)
53c5fc9cf2SKatsuhiro Suzuki 
547f4d3b52SMasahiro Yamada #define UNIPHIER_PRO4_SYS_CLK_GIO(idx)					\
557f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_GATE("gio", (idx), NULL, 0x2104, 6)
567f4d3b52SMasahiro Yamada 
577f4d3b52SMasahiro Yamada #define UNIPHIER_PRO4_SYS_CLK_USB3(idx, ch)				\
587f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb3" #ch, (idx), NULL, 0x2104, 16 + (ch))
597f4d3b52SMasahiro Yamada 
60afeb079bSKatsuhiro Suzuki #define UNIPHIER_PRO4_SYS_CLK_AIO(idx)					\
61afeb079bSKatsuhiro Suzuki 	UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 8),		\
62afeb079bSKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2104, 13)
63afeb079bSKatsuhiro Suzuki 
64afeb079bSKatsuhiro Suzuki #define UNIPHIER_PRO5_SYS_CLK_AIO(idx)					\
65afeb079bSKatsuhiro Suzuki 	UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 12),		\
66afeb079bSKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2104, 13)
67afeb079bSKatsuhiro Suzuki 
68e3dd2058SKatsuhiro Suzuki #define UNIPHIER_LD11_SYS_CLK_AIO(idx)					\
69e3dd2058SKatsuhiro Suzuki 	UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 10),		\
70e3dd2058SKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2108, 0)
71e3dd2058SKatsuhiro Suzuki 
72e3dd2058SKatsuhiro Suzuki #define UNIPHIER_LD11_SYS_CLK_EVEA(idx)					\
73e3dd2058SKatsuhiro Suzuki 	UNIPHIER_CLK_FACTOR("evea-io100m", -1, "spll", 1, 20),		\
74e3dd2058SKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("evea", (idx), "evea-io100m", 0x2108, 1)
75e3dd2058SKatsuhiro Suzuki 
766c264416SKatsuhiro Suzuki #define UNIPHIER_LD11_SYS_CLK_EXIV(idx)					\
776c264416SKatsuhiro Suzuki 	UNIPHIER_CLK_FACTOR("exiv-io200m", -1, "spll", 1, 10),		\
786c264416SKatsuhiro Suzuki 	UNIPHIER_CLK_GATE("exiv", (idx), "exiv-io200m", 0x2110, 2)
796c264416SKatsuhiro Suzuki 
809959989fSKunihiko Hayashi #define UNIPHIER_PRO4_SYS_CLK_ETHER(idx)				\
819959989fSKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x2104, 12)
829959989fSKunihiko Hayashi 
839959989fSKunihiko Hayashi #define UNIPHIER_LD11_SYS_CLK_ETHER(idx)				\
849959989fSKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x210c, 6)
859959989fSKunihiko Hayashi 
867f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_ld4_sys_clk_data[] = {
877f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 65, 1),		/* 1597.44 MHz */
887f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("upll", -1, "ref", 6000, 512),	/* 288 MHz */
897f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("a2pll", -1, "ref", 24, 1),		/* 589.824 MHz */
907f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 5625, 512),	/* 270 MHz */
917f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 16),
927f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
93ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 32),
94e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_NAND(2),
950316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
96e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_SD,
977f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
98e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_STDMAC(8),			/* Ether, HSC, MIO */
997f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
1007f4d3b52SMasahiro Yamada };
1017f4d3b52SMasahiro Yamada 
1027f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_pro4_sys_clk_data[] = {
1037f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 64, 1),		/* 1600 MHz */
1047f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("upll", -1, "ref", 288, 25),	/* 288 MHz */
1057f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("a2pll", -1, "upll", 256, 125),	/* 589.824 MHz */
1067f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25),	/* 270 MHz */
1076f1aa4efSKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("gpll", -1, "ref", 10, 1),		/* 250 MHz */
1087f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 8),
1097f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 32),
110ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", 1, "spll", 1, 32),
111e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_NAND(2),
1120316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
113e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_SD,
1147f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
1159959989fSKunihiko Hayashi 	UNIPHIER_PRO4_SYS_CLK_ETHER(6),
1166f1aa4efSKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether-gb", 7, "gpll", 0x2104, 5),
117e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_STDMAC(8),			/* HSC, MIO, RLE */
1186f1aa4efSKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether-phy", 10, "ref", 0x2260, 0),
1197f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_GIO(12),			/* Ether, SATA, USB3 */
1207f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
1217f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
1229d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-hsphy0", 16, "upll", 1, 12),
1239d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-ssphy0", 17, "ref", 1, 1),
1249d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb31-ssphy0", 20, "ref", 1, 1),
12554e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x2104, 18),
12654e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata1", 29, NULL, 0x2104, 19),
127afeb079bSKatsuhiro Suzuki 	UNIPHIER_PRO4_SYS_CLK_AIO(40),
1287f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
1297f4d3b52SMasahiro Yamada };
1307f4d3b52SMasahiro Yamada 
1317f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_sld8_sys_clk_data[] = {
1327f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 64, 1),		/* 1600 MHz */
1337f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("upll", -1, "ref", 288, 25),	/* 288 MHz */
1347f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25),	/* 270 MHz */
1357f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 20),
1367f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
137ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 32),
138e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_NAND(2),
1390316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
140e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_SD,
1417f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
142e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_STDMAC(8),			/* Ether, HSC, MIO */
1437f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
1447f4d3b52SMasahiro Yamada };
1457f4d3b52SMasahiro Yamada 
1467f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_pro5_sys_clk_data[] = {
1477f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 120, 1),		/* 2400 MHz */
1487f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("dapll1", -1, "ref", 128, 1),	/* 2560 MHz */
14967affb78SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("dapll2", -1, "dapll1", 144, 125),	/* 2949.12 MHz */
1507f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "dapll2", 1, 40),
1517f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48),
152ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 48),
15372d0d867SMasahiro Yamada 	UNIPHIER_PRO5_SYS_CLK_NAND(2),
1540316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
1557f4d3b52SMasahiro Yamada 	UNIPHIER_PRO5_SYS_CLK_SD,
156e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_STDMAC(8),				/* HSC */
1577f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_GIO(12),				/* PCIe, USB3 */
1587f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
1597f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
1602e277efbSKunihiko Hayashi 	UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x2108, 2),
161afeb079bSKatsuhiro Suzuki 	UNIPHIER_PRO5_SYS_CLK_AIO(40),
1627f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
1637f4d3b52SMasahiro Yamada };
1647f4d3b52SMasahiro Yamada 
1657f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[] = {
1667f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 96, 1),		/* 2400 MHz */
1677f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 27),
1687f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48),
169ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 48),
17072d0d867SMasahiro Yamada 	UNIPHIER_PRO5_SYS_CLK_NAND(2),
1710316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
1727f4d3b52SMasahiro Yamada 	UNIPHIER_PRO5_SYS_CLK_SD,
1739959989fSKunihiko Hayashi 	UNIPHIER_PRO4_SYS_CLK_ETHER(6),
174e66d57a9SMasahiro Yamada 	UNIPHIER_LD4_SYS_CLK_STDMAC(8),				/* HSC, RLE */
1757f4d3b52SMasahiro Yamada 	/* GIO is always clock-enabled: no function for 0x2104 bit6 */
1767f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
1777f4d3b52SMasahiro Yamada 	UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
1787f4d3b52SMasahiro Yamada 	/* The document mentions 0x2104 bit 18, but not functional */
1799d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x2104, 19),
1809d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-ssphy0", 17, "ref", 1, 1),
1819d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-ssphy1", 18, "ref", 1, 1),
1829d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb31-hsphy0", 20, NULL, 0x2104, 20),
1839d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb31-ssphy0", 21, "ref", 1, 1),
18454e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x2104, 22),
185afeb079bSKatsuhiro Suzuki 	UNIPHIER_PRO5_SYS_CLK_AIO(40),
1867f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
1877f4d3b52SMasahiro Yamada };
1887f4d3b52SMasahiro Yamada 
1897f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_ld11_sys_clk_data[] = {
1901221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 392, 5),		/* 1960 MHz */
1911221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("mpll", -1, "ref", 64, 1),		/* 1600 MHz */
1927f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1),		/* 2000 MHz */
1931221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("vspll", -1, "ref", 80, 1),		/* 2000 MHz */
1947f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34),
1957f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40),
196ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40),
19719771622SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_NAND(2),
1980316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
1992a353221SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_EMMC(4),
2002a353221SMasahiro Yamada 	/* Index 5 reserved for eMMC PHY */
2019959989fSKunihiko Hayashi 	UNIPHIER_LD11_SYS_CLK_ETHER(6),
2027f4d3b52SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_STDMAC(8),			/* HSC, MIO */
203c5fc9cf2SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_HSC(9),
2047f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb2", -1, "ref", 24, 25),
205e3dd2058SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_AIO(40),
206e3dd2058SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_EVEA(41),
2076c264416SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_EXIV(42),
2081221ae21SMasahiro Yamada 	/* CPU gears */
2091221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
2101221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV4("mpll", 2, 3, 4, 8),
2111221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV3("spll", 3, 4, 8),
2121221ae21SMasahiro Yamada 	/* Note: both gear1 and gear4 are spll/4.  This is not a bug. */
2131221ae21SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8,
2141221ae21SMasahiro Yamada 			     "cpll/2", "spll/4", "cpll/3", "spll/3",
2151221ae21SMasahiro Yamada 			     "spll/4", "spll/8", "cpll/4", "cpll/8"),
2161221ae21SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8,
2171221ae21SMasahiro Yamada 			     "mpll/2", "spll/4", "mpll/3", "spll/3",
2181221ae21SMasahiro Yamada 			     "spll/4", "spll/8", "mpll/4", "mpll/8"),
2197f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
2207f4d3b52SMasahiro Yamada };
2217f4d3b52SMasahiro Yamada 
2227f4d3b52SMasahiro Yamada const struct uniphier_clk_data uniphier_ld20_sys_clk_data[] = {
2231221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 88, 1),		/* ARM: 2200 MHz */
2241221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("gppll", -1, "ref", 52, 1),		/* Mali: 1300 MHz */
2251221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("mpll", -1, "ref", 64, 1),		/* Codec: 1600 MHz */
2267f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1),		/* 2000 MHz */
2271221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("s2pll", -1, "ref", 88, 1),		/* IPP: 2200 MHz */
2281221ae21SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("vppll", -1, "ref", 504, 5),	/* 2520 MHz */
2297f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34),
2307f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40),
231ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40),
23219771622SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_NAND(2),
2330316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
2342a353221SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_EMMC(4),
2352a353221SMasahiro Yamada 	/* Index 5 reserved for eMMC PHY */
2367f4d3b52SMasahiro Yamada 	UNIPHIER_LD20_SYS_CLK_SD,
2379959989fSKunihiko Hayashi 	UNIPHIER_LD11_SYS_CLK_ETHER(6),
2387f4d3b52SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_STDMAC(8),			/* HSC */
239c5fc9cf2SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_HSC(9),
2407f4d3b52SMasahiro Yamada 	/* GIO is always clock-enabled: no function for 0x210c bit5 */
2417f4d3b52SMasahiro Yamada 	/*
2427f4d3b52SMasahiro Yamada 	 * clock for USB Link is enabled by the logic "OR" of bit 14 and bit 15.
2437f4d3b52SMasahiro Yamada 	 * We do not use bit 15 here.
2447f4d3b52SMasahiro Yamada 	 */
2457f4d3b52SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30", 14, NULL, 0x210c, 14),
2469d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 12),
2479d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-hsphy1", 17, NULL, 0x210c, 13),
2489d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-ssphy0", 18, "ref", 1, 1),
2499d222574SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("usb30-ssphy1", 19, "ref", 1, 1),
2502e277efbSKunihiko Hayashi 	UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 4),
251e3dd2058SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_AIO(40),
252e3dd2058SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_EVEA(41),
2536c264416SKatsuhiro Suzuki 	UNIPHIER_LD11_SYS_CLK_EXIV(42),
2541221ae21SMasahiro Yamada 	/* CPU gears */
2551221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
2561221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8),
2571221ae21SMasahiro Yamada 	UNIPHIER_CLK_DIV4("s2pll", 2, 3, 4, 8),
2581221ae21SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ca72", 32, 0x8000, 0xf, 8,
2591221ae21SMasahiro Yamada 			     "cpll/2", "spll/2", "cpll/3", "spll/3",
2601221ae21SMasahiro Yamada 			     "spll/4", "spll/8", "cpll/4", "cpll/8"),
2611221ae21SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8,
2621221ae21SMasahiro Yamada 			     "cpll/2", "spll/2", "cpll/3", "spll/3",
2631221ae21SMasahiro Yamada 			     "spll/4", "spll/8", "cpll/4", "cpll/8"),
2641221ae21SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8,
2651221ae21SMasahiro Yamada 			     "s2pll/2", "spll/2", "s2pll/3", "spll/3",
2661221ae21SMasahiro Yamada 			     "spll/4", "spll/8", "s2pll/4", "s2pll/8"),
2677f4d3b52SMasahiro Yamada 	{ /* sentinel */ }
2687f4d3b52SMasahiro Yamada };
269736de651SMasahiro Yamada 
270736de651SMasahiro Yamada const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[] = {
271736de651SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 104, 1),		/* ARM: 2600 MHz */
272736de651SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1),		/* 2000 MHz */
273736de651SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("s2pll", -1, "ref", 88, 1),		/* IPP: 2400 MHz */
274736de651SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34),
275736de651SMasahiro Yamada 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40),
276ff388ee3SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40),
277736de651SMasahiro Yamada 	UNIPHIER_LD20_SYS_CLK_SD,
278736de651SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_NAND(2),
2790316c018SMasahiro Yamada 	UNIPHIER_SYS_CLK_NAND_4X(3),
280736de651SMasahiro Yamada 	UNIPHIER_LD11_SYS_CLK_EMMC(4),
281c2fd8756SKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether0", 6, NULL, 0x210c, 9),
282c2fd8756SKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether1", 7, NULL, 0x210c, 10),
283db9d79f6SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30", 12, NULL, 0x210c, 4),	/* =GIO0 */
284db9d79f6SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb31-0", 13, NULL, 0x210c, 5),	/* =GIO1 */
285db9d79f6SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb31-1", 14, NULL, 0x210c, 6),	/* =GIO1-1 */
2869d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 16),
2879d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-ssphy0", 17, NULL, 0x210c, 18),
2889d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb30-ssphy1", 18, NULL, 0x210c, 20),
2899d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb31-hsphy0", 20, NULL, 0x210c, 17),
2909d222574SMasahiro Yamada 	UNIPHIER_CLK_GATE("usb31-ssphy0", 21, NULL, 0x210c, 19),
2912e277efbSKunihiko Hayashi 	UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 3),
29254e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x210c, 7),
29354e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata1", 29, NULL, 0x210c, 8),
29454e1f7eeSKunihiko Hayashi 	UNIPHIER_CLK_GATE("sata-phy", 30, NULL, 0x210c, 21),
2954c4065c7SKunihiko Hayashi 	UNIPHIER_LD11_SYS_CLK_AIO(40),
2964c4065c7SKunihiko Hayashi 	UNIPHIER_LD11_SYS_CLK_EXIV(42),
297736de651SMasahiro Yamada 	/* CPU gears */
298736de651SMasahiro Yamada 	UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
299736de651SMasahiro Yamada 	UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8),
300736de651SMasahiro Yamada 	UNIPHIER_CLK_DIV4("s2pll", 2, 3, 4, 8),
301736de651SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8,
302736de651SMasahiro Yamada 			     "cpll/2", "spll/2", "cpll/3", "spll/3",
303736de651SMasahiro Yamada 			     "spll/4", "spll/8", "cpll/4", "cpll/8"),
304736de651SMasahiro Yamada 	UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8,
305736de651SMasahiro Yamada 			     "s2pll/2", "spll/2", "s2pll/3", "spll/3",
306736de651SMasahiro Yamada 			     "spll/4", "spll/8", "s2pll/4", "s2pll/8"),
307736de651SMasahiro Yamada 	{ /* sentinel */ }
308736de651SMasahiro Yamada };
309bed51629SKunihiko Hayashi 
310bed51629SKunihiko Hayashi const struct uniphier_clk_data uniphier_nx1_sys_clk_data[] = {
311bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 100, 1),		/* ARM: 2500 MHz */
312bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("spll", -1, "ref", 32, 1),		/* 800 MHz */
313bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 6),
314bed51629SKunihiko Hayashi 	UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
315bed51629SKunihiko Hayashi 	UNIPHIER_NX1_SYS_CLK_SD,
316bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("emmc", 4, NULL, 0x2108, 8),
317bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("ether", 6, NULL, 0x210c, 0),
318bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("usb30-0", 12, NULL, 0x210c, 16),	/* =GIO */
319bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("usb30-1", 13, NULL, 0x210c, 20),	/* =GIO1P */
320bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 24),
321bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("usb30-ssphy0", 17, NULL, 0x210c, 25),
322bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("usb30-ssphy1", 18, NULL, 0x210c, 26),
323bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 8),
324bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("voc", 52, NULL, 0x2110, 0),
325bed51629SKunihiko Hayashi 	UNIPHIER_CLK_GATE("hdmitx", 58, NULL, 0x2110, 8),
326bed51629SKunihiko Hayashi 	/* CPU gears */
327bed51629SKunihiko Hayashi 	UNIPHIER_CLK_DIV5("cpll", 2, 4, 8, 16, 32),
328bed51629SKunihiko Hayashi 	UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 5,
329bed51629SKunihiko Hayashi 			     "cpll/2", "cpll/4", "cpll/8", "cpll/16",
330bed51629SKunihiko Hayashi 			     "cpll/32"),
331bed51629SKunihiko Hayashi 	{ /* sentinel */ }
332bed51629SKunihiko Hayashi };
333*c64daf36SKunihiko Hayashi 
334*c64daf36SKunihiko Hayashi const struct uniphier_clk_data uniphier_pro4_sg_clk_data[] = {
335*c64daf36SKunihiko Hayashi 	UNIPHIER_CLK_DIV("gpll", 4),
336*c64daf36SKunihiko Hayashi 	{
337*c64daf36SKunihiko Hayashi 		.name = "sata-ref",
338*c64daf36SKunihiko Hayashi 		.type = UNIPHIER_CLK_TYPE_MUX,
339*c64daf36SKunihiko Hayashi 		.idx = 0,
340*c64daf36SKunihiko Hayashi 		.data.mux = {
341*c64daf36SKunihiko Hayashi 			.parent_names = { "gpll/4", "ref", },
342*c64daf36SKunihiko Hayashi 			.num_parents = 2,
343*c64daf36SKunihiko Hayashi 			.reg = 0x1a28,
344*c64daf36SKunihiko Hayashi 			.masks = { 0x1, 0x1, },
345*c64daf36SKunihiko Hayashi 			.vals  = { 0x0, 0x1, },
346*c64daf36SKunihiko Hayashi 		},
347*c64daf36SKunihiko Hayashi 	},
348*c64daf36SKunihiko Hayashi 	{ /* sentinel */ }
349*c64daf36SKunihiko Hayashi };
350