1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2016 Socionext Inc. 4*4882a593Smuzhiyun * Author: Masahiro Yamada <yamada.masahiro@socionext.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/stddef.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include "clk-uniphier.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define UNIPHIER_LD4_SYS_CLK_SD \ 12*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 8), \ 13*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-133m", -1, "vpll27a", 1, 2) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define UNIPHIER_PRO5_SYS_CLK_SD \ 16*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 12), \ 17*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 18) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define UNIPHIER_LD20_SYS_CLK_SD \ 20*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 10), \ 21*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 15) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define UNIPHIER_LD4_SYS_CLK_NAND(idx) \ 24*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 32), \ 25*4882a593Smuzhiyun UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x2104, 2) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define UNIPHIER_PRO5_SYS_CLK_NAND(idx) \ 28*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 48), \ 29*4882a593Smuzhiyun UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x2104, 2) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_NAND(idx) \ 32*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("nand-50m", -1, "spll", 1, 40), \ 33*4882a593Smuzhiyun UNIPHIER_CLK_GATE("nand", (idx), "nand-50m", 0x210c, 0) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define UNIPHIER_SYS_CLK_NAND_4X(idx) \ 36*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("nand-4x", (idx), "nand", 4, 1) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_EMMC(idx) \ 39*4882a593Smuzhiyun UNIPHIER_CLK_GATE("emmc", (idx), NULL, 0x210c, 2) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define UNIPHIER_LD4_SYS_CLK_STDMAC(idx) \ 42*4882a593Smuzhiyun UNIPHIER_CLK_GATE("stdmac", (idx), NULL, 0x2104, 10) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_STDMAC(idx) \ 45*4882a593Smuzhiyun UNIPHIER_CLK_GATE("stdmac", (idx), NULL, 0x210c, 8) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_HSC(idx) \ 48*4882a593Smuzhiyun UNIPHIER_CLK_GATE("hsc", (idx), NULL, 0x210c, 9) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define UNIPHIER_PRO4_SYS_CLK_GIO(idx) \ 51*4882a593Smuzhiyun UNIPHIER_CLK_GATE("gio", (idx), NULL, 0x2104, 6) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define UNIPHIER_PRO4_SYS_CLK_USB3(idx, ch) \ 54*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb3" #ch, (idx), NULL, 0x2104, 16 + (ch)) 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #define UNIPHIER_PRO4_SYS_CLK_AIO(idx) \ 57*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 8), \ 58*4882a593Smuzhiyun UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2104, 13) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define UNIPHIER_PRO5_SYS_CLK_AIO(idx) \ 61*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 12), \ 62*4882a593Smuzhiyun UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2104, 13) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_AIO(idx) \ 65*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 10), \ 66*4882a593Smuzhiyun UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2108, 0) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_EVEA(idx) \ 69*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("evea-io100m", -1, "spll", 1, 20), \ 70*4882a593Smuzhiyun UNIPHIER_CLK_GATE("evea", (idx), "evea-io100m", 0x2108, 1) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_EXIV(idx) \ 73*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("exiv-io200m", -1, "spll", 1, 10), \ 74*4882a593Smuzhiyun UNIPHIER_CLK_GATE("exiv", (idx), "exiv-io200m", 0x2110, 2) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define UNIPHIER_PRO4_SYS_CLK_ETHER(idx) \ 77*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x2104, 12) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define UNIPHIER_LD11_SYS_CLK_ETHER(idx) \ 80*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x210c, 6) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_ld4_sys_clk_data[] = { 83*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 65, 1), /* 1597.44 MHz */ 84*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("upll", -1, "ref", 6000, 512), /* 288 MHz */ 85*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("a2pll", -1, "ref", 24, 1), /* 589.824 MHz */ 86*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 5625, 512), /* 270 MHz */ 87*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 16), 88*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16), 89*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 32), 90*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_NAND(2), 91*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 92*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_SD, 93*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12), 94*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */ 95*4882a593Smuzhiyun { /* sentinel */ } 96*4882a593Smuzhiyun }; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_pro4_sys_clk_data[] = { 99*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 64, 1), /* 1600 MHz */ 100*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("upll", -1, "ref", 288, 25), /* 288 MHz */ 101*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("a2pll", -1, "upll", 256, 125), /* 589.824 MHz */ 102*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25), /* 270 MHz */ 103*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("gpll", -1, "ref", 10, 1), /* 250 MHz */ 104*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 8), 105*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 32), 106*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", 1, "spll", 1, 32), 107*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_NAND(2), 108*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 109*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_SD, 110*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12), 111*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_ETHER(6), 112*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether-gb", 7, "gpll", 0x2104, 5), 113*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC, MIO, RLE */ 114*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether-phy", 10, "ref", 0x2260, 0), 115*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_GIO(12), /* Ether, SATA, USB3 */ 116*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(14, 0), 117*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(15, 1), 118*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-hsphy0", 16, "upll", 1, 12), 119*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-ssphy0", 17, "ref", 1, 1), 120*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb31-ssphy0", 20, "ref", 1, 1), 121*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x2104, 18), 122*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata1", 29, NULL, 0x2104, 19), 123*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_AIO(40), 124*4882a593Smuzhiyun { /* sentinel */ } 125*4882a593Smuzhiyun }; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_sld8_sys_clk_data[] = { 128*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 64, 1), /* 1600 MHz */ 129*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("upll", -1, "ref", 288, 25), /* 288 MHz */ 130*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25), /* 270 MHz */ 131*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 20), 132*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16), 133*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 32), 134*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_NAND(2), 135*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 136*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_SD, 137*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12), 138*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */ 139*4882a593Smuzhiyun { /* sentinel */ } 140*4882a593Smuzhiyun }; 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_pro5_sys_clk_data[] = { 143*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 120, 1), /* 2400 MHz */ 144*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("dapll1", -1, "ref", 128, 1), /* 2560 MHz */ 145*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("dapll2", -1, "dapll1", 144, 125), /* 2949.12 MHz */ 146*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "dapll2", 1, 40), 147*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48), 148*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 48), 149*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_NAND(2), 150*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 151*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_SD, 152*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC */ 153*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_GIO(12), /* PCIe, USB3 */ 154*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(14, 0), 155*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(15, 1), 156*4882a593Smuzhiyun UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x2108, 2), 157*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_AIO(40), 158*4882a593Smuzhiyun { /* sentinel */ } 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[] = { 162*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 96, 1), /* 2400 MHz */ 163*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 27), 164*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48), 165*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 48), 166*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_NAND(2), 167*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 168*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_SD, 169*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_ETHER(6), 170*4882a593Smuzhiyun UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC, RLE */ 171*4882a593Smuzhiyun /* GIO is always clock-enabled: no function for 0x2104 bit6 */ 172*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(14, 0), 173*4882a593Smuzhiyun UNIPHIER_PRO4_SYS_CLK_USB3(15, 1), 174*4882a593Smuzhiyun /* The document mentions 0x2104 bit 18, but not functional */ 175*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x2104, 19), 176*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-ssphy0", 17, "ref", 1, 1), 177*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-ssphy1", 18, "ref", 1, 1), 178*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb31-hsphy0", 20, NULL, 0x2104, 20), 179*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb31-ssphy0", 21, "ref", 1, 1), 180*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x2104, 22), 181*4882a593Smuzhiyun UNIPHIER_PRO5_SYS_CLK_AIO(40), 182*4882a593Smuzhiyun { /* sentinel */ } 183*4882a593Smuzhiyun }; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_ld11_sys_clk_data[] = { 186*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 392, 5), /* 1960 MHz */ 187*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("mpll", -1, "ref", 64, 1), /* 1600 MHz */ 188*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1), /* 2000 MHz */ 189*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("vspll", -1, "ref", 80, 1), /* 2000 MHz */ 190*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34), 191*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40), 192*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40), 193*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_NAND(2), 194*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 195*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EMMC(4), 196*4882a593Smuzhiyun /* Index 5 reserved for eMMC PHY */ 197*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_ETHER(6), 198*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_STDMAC(8), /* HSC, MIO */ 199*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_HSC(9), 200*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb2", -1, "ref", 24, 25), 201*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_AIO(40), 202*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EVEA(41), 203*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EXIV(42), 204*4882a593Smuzhiyun /* CPU gears */ 205*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8), 206*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("mpll", 2, 3, 4, 8), 207*4882a593Smuzhiyun UNIPHIER_CLK_DIV3("spll", 3, 4, 8), 208*4882a593Smuzhiyun /* Note: both gear1 and gear4 are spll/4. This is not a bug. */ 209*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8, 210*4882a593Smuzhiyun "cpll/2", "spll/4", "cpll/3", "spll/3", 211*4882a593Smuzhiyun "spll/4", "spll/8", "cpll/4", "cpll/8"), 212*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8, 213*4882a593Smuzhiyun "mpll/2", "spll/4", "mpll/3", "spll/3", 214*4882a593Smuzhiyun "spll/4", "spll/8", "mpll/4", "mpll/8"), 215*4882a593Smuzhiyun { /* sentinel */ } 216*4882a593Smuzhiyun }; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_ld20_sys_clk_data[] = { 219*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 88, 1), /* ARM: 2200 MHz */ 220*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("gppll", -1, "ref", 52, 1), /* Mali: 1300 MHz */ 221*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("mpll", -1, "ref", 64, 1), /* Codec: 1600 MHz */ 222*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1), /* 2000 MHz */ 223*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("s2pll", -1, "ref", 88, 1), /* IPP: 2200 MHz */ 224*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("vppll", -1, "ref", 504, 5), /* 2520 MHz */ 225*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34), 226*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40), 227*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40), 228*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_NAND(2), 229*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 230*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EMMC(4), 231*4882a593Smuzhiyun /* Index 5 reserved for eMMC PHY */ 232*4882a593Smuzhiyun UNIPHIER_LD20_SYS_CLK_SD, 233*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_ETHER(6), 234*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_STDMAC(8), /* HSC */ 235*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_HSC(9), 236*4882a593Smuzhiyun /* GIO is always clock-enabled: no function for 0x210c bit5 */ 237*4882a593Smuzhiyun /* 238*4882a593Smuzhiyun * clock for USB Link is enabled by the logic "OR" of bit 14 and bit 15. 239*4882a593Smuzhiyun * We do not use bit 15 here. 240*4882a593Smuzhiyun */ 241*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30", 14, NULL, 0x210c, 14), 242*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 12), 243*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-hsphy1", 17, NULL, 0x210c, 13), 244*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-ssphy0", 18, "ref", 1, 1), 245*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("usb30-ssphy1", 19, "ref", 1, 1), 246*4882a593Smuzhiyun UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 4), 247*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_AIO(40), 248*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EVEA(41), 249*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EXIV(42), 250*4882a593Smuzhiyun /* CPU gears */ 251*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8), 252*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8), 253*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("s2pll", 2, 3, 4, 8), 254*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ca72", 32, 0x8000, 0xf, 8, 255*4882a593Smuzhiyun "cpll/2", "spll/2", "cpll/3", "spll/3", 256*4882a593Smuzhiyun "spll/4", "spll/8", "cpll/4", "cpll/8"), 257*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8, 258*4882a593Smuzhiyun "cpll/2", "spll/2", "cpll/3", "spll/3", 259*4882a593Smuzhiyun "spll/4", "spll/8", "cpll/4", "cpll/8"), 260*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8, 261*4882a593Smuzhiyun "s2pll/2", "spll/2", "s2pll/3", "spll/3", 262*4882a593Smuzhiyun "spll/4", "spll/8", "s2pll/4", "s2pll/8"), 263*4882a593Smuzhiyun { /* sentinel */ } 264*4882a593Smuzhiyun }; 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[] = { 267*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 104, 1), /* ARM: 2600 MHz */ 268*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1), /* 2000 MHz */ 269*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("s2pll", -1, "ref", 88, 1), /* IPP: 2400 MHz */ 270*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34), 271*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40), 272*4882a593Smuzhiyun UNIPHIER_CLK_FACTOR("spi", -1, "spll", 1, 40), 273*4882a593Smuzhiyun UNIPHIER_LD20_SYS_CLK_SD, 274*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_NAND(2), 275*4882a593Smuzhiyun UNIPHIER_SYS_CLK_NAND_4X(3), 276*4882a593Smuzhiyun UNIPHIER_LD11_SYS_CLK_EMMC(4), 277*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether0", 6, NULL, 0x210c, 9), 278*4882a593Smuzhiyun UNIPHIER_CLK_GATE("ether1", 7, NULL, 0x210c, 10), 279*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30", 12, NULL, 0x210c, 4), /* =GIO0 */ 280*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb31-0", 13, NULL, 0x210c, 5), /* =GIO1 */ 281*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb31-1", 14, NULL, 0x210c, 6), /* =GIO1-1 */ 282*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-hsphy0", 16, NULL, 0x210c, 16), 283*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-ssphy0", 17, NULL, 0x210c, 18), 284*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb30-ssphy1", 18, NULL, 0x210c, 20), 285*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb31-hsphy0", 20, NULL, 0x210c, 17), 286*4882a593Smuzhiyun UNIPHIER_CLK_GATE("usb31-ssphy0", 21, NULL, 0x210c, 19), 287*4882a593Smuzhiyun UNIPHIER_CLK_GATE("pcie", 24, NULL, 0x210c, 3), 288*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata0", 28, NULL, 0x210c, 7), 289*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata1", 29, NULL, 0x210c, 8), 290*4882a593Smuzhiyun UNIPHIER_CLK_GATE("sata-phy", 30, NULL, 0x210c, 21), 291*4882a593Smuzhiyun /* CPU gears */ 292*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8), 293*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8), 294*4882a593Smuzhiyun UNIPHIER_CLK_DIV4("s2pll", 2, 3, 4, 8), 295*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8, 296*4882a593Smuzhiyun "cpll/2", "spll/2", "cpll/3", "spll/3", 297*4882a593Smuzhiyun "spll/4", "spll/8", "cpll/4", "cpll/8"), 298*4882a593Smuzhiyun UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8, 299*4882a593Smuzhiyun "s2pll/2", "spll/2", "s2pll/3", "spll/3", 300*4882a593Smuzhiyun "spll/4", "spll/8", "s2pll/4", "s2pll/8"), 301*4882a593Smuzhiyun { /* sentinel */ } 302*4882a593Smuzhiyun }; 303