2020-07-07 17:18:10 +01:00
// SPDX-License-Identifier: GPL-2.0
/*
* r8a774e1 Clock Pulse Generator / Module Standby and Software Reset
*
* Copyright ( C ) 2020 Renesas Electronics Corp .
*
* Based on r8a7795 - cpg - mssr . c
*
* Copyright ( C ) 2015 Glider bvba
*/
# include <linux/device.h>
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/soc/renesas/rcar-rst.h>
# include <dt-bindings/clock/r8a774e1-cpg-mssr.h>
# include "renesas-cpg-mssr.h"
# include "rcar-gen3-cpg.h"
enum clk_ids {
/* Core Clock Outputs exported to DT */
LAST_DT_CORE_CLK = R8A774E1_CLK_CANFD ,
/* External Input Clocks */
CLK_EXTAL ,
CLK_EXTALR ,
/* Internal Core Clocks */
CLK_MAIN ,
CLK_PLL0 ,
CLK_PLL1 ,
CLK_PLL2 ,
CLK_PLL3 ,
CLK_PLL4 ,
CLK_PLL1_DIV2 ,
CLK_PLL1_DIV4 ,
CLK_S0 ,
CLK_S1 ,
CLK_S2 ,
CLK_S3 ,
CLK_SDSRC ,
CLK_RPCSRC ,
CLK_RINT ,
/* Module Clocks */
MOD_CLK_BASE
} ;
static const struct cpg_core_clk r8a774e1_core_clks [ ] __initconst = {
/* External Clock Inputs */
DEF_INPUT ( " extal " , CLK_EXTAL ) ,
DEF_INPUT ( " extalr " , CLK_EXTALR ) ,
/* Internal Core Clocks */
DEF_BASE ( " .main " , CLK_MAIN , CLK_TYPE_GEN3_MAIN , CLK_EXTAL ) ,
DEF_BASE ( " .pll0 " , CLK_PLL0 , CLK_TYPE_GEN3_PLL0 , CLK_MAIN ) ,
DEF_BASE ( " .pll1 " , CLK_PLL1 , CLK_TYPE_GEN3_PLL1 , CLK_MAIN ) ,
DEF_BASE ( " .pll2 " , CLK_PLL2 , CLK_TYPE_GEN3_PLL2 , CLK_MAIN ) ,
DEF_BASE ( " .pll3 " , CLK_PLL3 , CLK_TYPE_GEN3_PLL3 , CLK_MAIN ) ,
DEF_BASE ( " .pll4 " , CLK_PLL4 , CLK_TYPE_GEN3_PLL4 , CLK_MAIN ) ,
DEF_FIXED ( " .pll1_div2 " , CLK_PLL1_DIV2 , CLK_PLL1 , 2 , 1 ) ,
DEF_FIXED ( " .pll1_div4 " , CLK_PLL1_DIV4 , CLK_PLL1_DIV2 , 2 , 1 ) ,
DEF_FIXED ( " .s0 " , CLK_S0 , CLK_PLL1_DIV2 , 2 , 1 ) ,
DEF_FIXED ( " .s1 " , CLK_S1 , CLK_PLL1_DIV2 , 3 , 1 ) ,
DEF_FIXED ( " .s2 " , CLK_S2 , CLK_PLL1_DIV2 , 4 , 1 ) ,
DEF_FIXED ( " .s3 " , CLK_S3 , CLK_PLL1_DIV2 , 6 , 1 ) ,
DEF_FIXED ( " .sdsrc " , CLK_SDSRC , CLK_PLL1_DIV2 , 2 , 1 ) ,
2022-04-11 14:59:44 +02:00
DEF_BASE ( " .rpcsrc " , CLK_RPCSRC , CLK_TYPE_GEN3_RPCSRC , CLK_PLL1 ) ,
2020-07-07 17:18:10 +01:00
DEF_GEN3_OSC ( " .r " , CLK_RINT , CLK_EXTAL , 32 ) ,
/* Core Clock Outputs */
DEF_GEN3_Z ( " z " , R8A774E1_CLK_Z , CLK_TYPE_GEN3_Z , CLK_PLL0 , 2 , 8 ) ,
DEF_GEN3_Z ( " z2 " , R8A774E1_CLK_Z2 , CLK_TYPE_GEN3_Z , CLK_PLL2 , 2 , 0 ) ,
DEF_FIXED ( " ztr " , R8A774E1_CLK_ZTR , CLK_PLL1_DIV2 , 6 , 1 ) ,
DEF_FIXED ( " ztrd2 " , R8A774E1_CLK_ZTRD2 , CLK_PLL1_DIV2 , 12 , 1 ) ,
DEF_FIXED ( " zt " , R8A774E1_CLK_ZT , CLK_PLL1_DIV2 , 4 , 1 ) ,
DEF_FIXED ( " zx " , R8A774E1_CLK_ZX , CLK_PLL1_DIV2 , 2 , 1 ) ,
DEF_FIXED ( " s0d1 " , R8A774E1_CLK_S0D1 , CLK_S0 , 1 , 1 ) ,
DEF_FIXED ( " s0d2 " , R8A774E1_CLK_S0D2 , CLK_S0 , 2 , 1 ) ,
DEF_FIXED ( " s0d3 " , R8A774E1_CLK_S0D3 , CLK_S0 , 3 , 1 ) ,
DEF_FIXED ( " s0d4 " , R8A774E1_CLK_S0D4 , CLK_S0 , 4 , 1 ) ,
DEF_FIXED ( " s0d6 " , R8A774E1_CLK_S0D6 , CLK_S0 , 6 , 1 ) ,
DEF_FIXED ( " s0d8 " , R8A774E1_CLK_S0D8 , CLK_S0 , 8 , 1 ) ,
DEF_FIXED ( " s0d12 " , R8A774E1_CLK_S0D12 , CLK_S0 , 12 , 1 ) ,
DEF_FIXED ( " s1d2 " , R8A774E1_CLK_S1D2 , CLK_S1 , 2 , 1 ) ,
DEF_FIXED ( " s1d4 " , R8A774E1_CLK_S1D4 , CLK_S1 , 4 , 1 ) ,
DEF_FIXED ( " s2d1 " , R8A774E1_CLK_S2D1 , CLK_S2 , 1 , 1 ) ,
DEF_FIXED ( " s2d2 " , R8A774E1_CLK_S2D2 , CLK_S2 , 2 , 1 ) ,
DEF_FIXED ( " s2d4 " , R8A774E1_CLK_S2D4 , CLK_S2 , 4 , 1 ) ,
DEF_FIXED ( " s3d1 " , R8A774E1_CLK_S3D1 , CLK_S3 , 1 , 1 ) ,
DEF_FIXED ( " s3d2 " , R8A774E1_CLK_S3D2 , CLK_S3 , 2 , 1 ) ,
DEF_FIXED ( " s3d4 " , R8A774E1_CLK_S3D4 , CLK_S3 , 4 , 1 ) ,
2021-11-10 20:15:51 +01:00
DEF_GEN3_SDH ( " sd0h " , R8A774E1_CLK_SD0H , CLK_SDSRC , 0x074 ) ,
DEF_GEN3_SDH ( " sd1h " , R8A774E1_CLK_SD1H , CLK_SDSRC , 0x078 ) ,
DEF_GEN3_SDH ( " sd2h " , R8A774E1_CLK_SD2H , CLK_SDSRC , 0x268 ) ,
DEF_GEN3_SDH ( " sd3h " , R8A774E1_CLK_SD3H , CLK_SDSRC , 0x26c ) ,
DEF_GEN3_SD ( " sd0 " , R8A774E1_CLK_SD0 , R8A774E1_CLK_SD0H , 0x074 ) ,
DEF_GEN3_SD ( " sd1 " , R8A774E1_CLK_SD1 , R8A774E1_CLK_SD1H , 0x078 ) ,
DEF_GEN3_SD ( " sd2 " , R8A774E1_CLK_SD2 , R8A774E1_CLK_SD2H , 0x268 ) ,
DEF_GEN3_SD ( " sd3 " , R8A774E1_CLK_SD3 , R8A774E1_CLK_SD3H , 0x26c ) ,
2020-07-07 17:18:10 +01:00
2022-04-11 14:59:44 +02:00
DEF_BASE ( " rpc " , R8A774E1_CLK_RPC , CLK_TYPE_GEN3_RPC , CLK_RPCSRC ) ,
DEF_BASE ( " rpcd2 " , R8A774E1_CLK_RPCD2 , CLK_TYPE_GEN3_RPCD2 , R8A774E1_CLK_RPC ) ,
2020-07-07 17:18:10 +01:00
DEF_FIXED ( " cl " , R8A774E1_CLK_CL , CLK_PLL1_DIV2 , 48 , 1 ) ,
DEF_FIXED ( " cr " , R8A774E1_CLK_CR , CLK_PLL1_DIV4 , 2 , 1 ) ,
DEF_FIXED ( " cp " , R8A774E1_CLK_CP , CLK_EXTAL , 2 , 1 ) ,
DEF_FIXED ( " cpex " , R8A774E1_CLK_CPEX , CLK_EXTAL , 2 , 1 ) ,
DEF_DIV6P1 ( " canfd " , R8A774E1_CLK_CANFD , CLK_PLL1_DIV4 , 0x244 ) ,
DEF_DIV6P1 ( " csi0 " , R8A774E1_CLK_CSI0 , CLK_PLL1_DIV4 , 0x00c ) ,
DEF_DIV6P1 ( " mso " , R8A774E1_CLK_MSO , CLK_PLL1_DIV4 , 0x014 ) ,
DEF_DIV6P1 ( " hdmi " , R8A774E1_CLK_HDMI , CLK_PLL1_DIV4 , 0x250 ) ,
DEF_GEN3_OSC ( " osc " , R8A774E1_CLK_OSC , CLK_EXTAL , 8 ) ,
DEF_BASE ( " r " , R8A774E1_CLK_R , CLK_TYPE_GEN3_R , CLK_RINT ) ,
} ;
static const struct mssr_mod_clk r8a774e1_mod_clks [ ] __initconst = {
DEF_MOD ( " fdp1-1 " , 118 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fdp1-0 " , 119 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " tmu4 " , 121 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " tmu3 " , 122 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " tmu2 " , 123 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " tmu1 " , 124 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " tmu0 " , 125 , R8A774E1_CLK_CP ) ,
DEF_MOD ( " vcplf " , 130 , R8A774E1_CLK_S2D1 ) ,
DEF_MOD ( " vdpb " , 131 , R8A774E1_CLK_S2D1 ) ,
DEF_MOD ( " scif5 " , 202 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scif4 " , 203 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scif3 " , 204 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scif1 " , 206 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scif0 " , 207 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " msiof3 " , 208 , R8A774E1_CLK_MSO ) ,
DEF_MOD ( " msiof2 " , 209 , R8A774E1_CLK_MSO ) ,
DEF_MOD ( " msiof1 " , 210 , R8A774E1_CLK_MSO ) ,
DEF_MOD ( " msiof0 " , 211 , R8A774E1_CLK_MSO ) ,
DEF_MOD ( " sys-dmac2 " , 217 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " sys-dmac1 " , 218 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " sys-dmac0 " , 219 , R8A774E1_CLK_S0D3 ) ,
DEF_MOD ( " cmt3 " , 300 , R8A774E1_CLK_R ) ,
DEF_MOD ( " cmt2 " , 301 , R8A774E1_CLK_R ) ,
DEF_MOD ( " cmt1 " , 302 , R8A774E1_CLK_R ) ,
DEF_MOD ( " cmt0 " , 303 , R8A774E1_CLK_R ) ,
DEF_MOD ( " tpu0 " , 304 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scif2 " , 310 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " sdif3 " , 311 , R8A774E1_CLK_SD3 ) ,
DEF_MOD ( " sdif2 " , 312 , R8A774E1_CLK_SD2 ) ,
DEF_MOD ( " sdif1 " , 313 , R8A774E1_CLK_SD1 ) ,
DEF_MOD ( " sdif0 " , 314 , R8A774E1_CLK_SD0 ) ,
DEF_MOD ( " pcie1 " , 318 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " pcie0 " , 319 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " usb3-if0 " , 328 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " usb-dmac0 " , 330 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " usb-dmac1 " , 331 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " rwdt " , 402 , R8A774E1_CLK_R ) ,
DEF_MOD ( " intc-ex " , 407 , R8A774E1_CLK_CP ) ,
DEF_MOD ( " intc-ap " , 408 , R8A774E1_CLK_S0D3 ) ,
DEF_MOD ( " audmac1 " , 501 , R8A774E1_CLK_S1D2 ) ,
DEF_MOD ( " audmac0 " , 502 , R8A774E1_CLK_S1D2 ) ,
DEF_MOD ( " hscif4 " , 516 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " hscif3 " , 517 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " hscif2 " , 518 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " hscif1 " , 519 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " hscif0 " , 520 , R8A774E1_CLK_S3D1 ) ,
DEF_MOD ( " thermal " , 522 , R8A774E1_CLK_CP ) ,
DEF_MOD ( " pwm " , 523 , R8A774E1_CLK_S0D12 ) ,
DEF_MOD ( " fcpvd1 " , 602 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " fcpvd0 " , 603 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " fcpvb1 " , 606 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpvb0 " , 607 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpvi1 " , 610 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpvi0 " , 611 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpf1 " , 614 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpf0 " , 615 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " fcpcs " , 619 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " vspd1 " , 622 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vspd0 " , 623 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vspbc " , 624 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " vspbd " , 626 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " vspi1 " , 630 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " vspi0 " , 631 , R8A774E1_CLK_S0D1 ) ,
DEF_MOD ( " ehci1 " , 702 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " ehci0 " , 703 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " hsusb " , 704 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " csi20 " , 714 , R8A774E1_CLK_CSI0 ) ,
DEF_MOD ( " csi40 " , 716 , R8A774E1_CLK_CSI0 ) ,
DEF_MOD ( " du3 " , 721 , R8A774E1_CLK_S2D1 ) ,
DEF_MOD ( " du1 " , 723 , R8A774E1_CLK_S2D1 ) ,
DEF_MOD ( " du0 " , 724 , R8A774E1_CLK_S2D1 ) ,
DEF_MOD ( " lvds " , 727 , R8A774E1_CLK_S0D4 ) ,
DEF_MOD ( " hdmi0 " , 729 , R8A774E1_CLK_HDMI ) ,
DEF_MOD ( " vin7 " , 804 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin6 " , 805 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin5 " , 806 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin4 " , 807 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin3 " , 808 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin2 " , 809 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin1 " , 810 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " vin0 " , 811 , R8A774E1_CLK_S0D2 ) ,
DEF_MOD ( " etheravb " , 812 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " sata0 " , 815 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " gpio7 " , 905 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio6 " , 906 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio5 " , 907 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio4 " , 908 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio3 " , 909 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio2 " , 910 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio1 " , 911 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " gpio0 " , 912 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " can-fd " , 914 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " can-if1 " , 915 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " can-if0 " , 916 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " rpc-if " , 917 , R8A774E1_CLK_RPCD2 ) ,
DEF_MOD ( " i2c6 " , 918 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " i2c5 " , 919 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " adg " , 922 , R8A774E1_CLK_S0D1 ) ,
2021-06-18 13:46:21 +02:00
DEF_MOD ( " iic-pmic " , 926 , R8A774E1_CLK_CP ) ,
2020-07-07 17:18:10 +01:00
DEF_MOD ( " i2c4 " , 927 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " i2c3 " , 928 , R8A774E1_CLK_S0D6 ) ,
DEF_MOD ( " i2c2 " , 929 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " i2c1 " , 930 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " i2c0 " , 931 , R8A774E1_CLK_S3D2 ) ,
DEF_MOD ( " ssi-all " , 1005 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " ssi9 " , 1006 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi8 " , 1007 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi7 " , 1008 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi6 " , 1009 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi5 " , 1010 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi4 " , 1011 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi3 " , 1012 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi2 " , 1013 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi1 " , 1014 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " ssi0 " , 1015 , MOD_CLK_ID ( 1005 ) ) ,
DEF_MOD ( " scu-all " , 1017 , R8A774E1_CLK_S3D4 ) ,
DEF_MOD ( " scu-dvc1 " , 1018 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-dvc0 " , 1019 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-ctu1-mix1 " , 1020 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-ctu0-mix0 " , 1021 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src9 " , 1022 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src8 " , 1023 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src7 " , 1024 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src6 " , 1025 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src5 " , 1026 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src4 " , 1027 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src3 " , 1028 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src2 " , 1029 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src1 " , 1030 , MOD_CLK_ID ( 1017 ) ) ,
DEF_MOD ( " scu-src0 " , 1031 , MOD_CLK_ID ( 1017 ) ) ,
} ;
static const unsigned int r8a774e1_crit_mod_clks [ ] __initconst = {
MOD_CLK_ID ( 402 ) , /* RWDT */
MOD_CLK_ID ( 408 ) , /* INTC-AP (GIC) */
} ;
/*
* CPG Clock Data
*/
/*
* MD EXTAL PLL0 PLL1 PLL2 PLL3 PLL4 OSC
* 14 13 19 17 ( MHz )
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 0 0 0 0 16.66 x 1 x180 x192 x144 x192 x144 / 16
* 0 0 0 1 16.66 x 1 x180 x192 x144 x128 x144 / 16
* 0 0 1 0 Prohibited setting
* 0 0 1 1 16.66 x 1 x180 x192 x144 x192 x144 / 16
* 0 1 0 0 20 x 1 x150 x160 x120 x160 x120 / 19
* 0 1 0 1 20 x 1 x150 x160 x120 x106 x120 / 19
* 0 1 1 0 Prohibited setting
* 0 1 1 1 20 x 1 x150 x160 x120 x160 x120 / 19
* 1 0 0 0 25 x 1 x120 x128 x96 x128 x96 / 24
* 1 0 0 1 25 x 1 x120 x128 x96 x84 x96 / 24
* 1 0 1 0 Prohibited setting
* 1 0 1 1 25 x 1 x120 x128 x96 x128 x96 / 24
* 1 1 0 0 33.33 / 2 x180 x192 x144 x192 x144 / 32
* 1 1 0 1 33.33 / 2 x180 x192 x144 x128 x144 / 32
* 1 1 1 0 Prohibited setting
* 1 1 1 1 33.33 / 2 x180 x192 x144 x192 x144 / 32
*/
# define CPG_PLL_CONFIG_INDEX(md) ((((md) & BIT(14)) >> 11) | \
( ( ( md ) & BIT ( 13 ) ) > > 11 ) | \
( ( ( md ) & BIT ( 19 ) ) > > 18 ) | \
( ( ( md ) & BIT ( 17 ) ) > > 17 ) )
static const struct rcar_gen3_cpg_pll_config cpg_pll_configs [ 16 ] __initconst = {
/* EXTAL div PLL1 mult/div PLL3 mult/div OSC prediv */
{ 1 , 192 , 1 , 192 , 1 , 16 , } ,
{ 1 , 192 , 1 , 128 , 1 , 16 , } ,
{ 0 , /* Prohibited setting */ } ,
{ 1 , 192 , 1 , 192 , 1 , 16 , } ,
{ 1 , 160 , 1 , 160 , 1 , 19 , } ,
{ 1 , 160 , 1 , 106 , 1 , 19 , } ,
{ 0 , /* Prohibited setting */ } ,
{ 1 , 160 , 1 , 160 , 1 , 19 , } ,
{ 1 , 128 , 1 , 128 , 1 , 24 , } ,
{ 1 , 128 , 1 , 84 , 1 , 24 , } ,
{ 0 , /* Prohibited setting */ } ,
{ 1 , 128 , 1 , 128 , 1 , 24 , } ,
{ 2 , 192 , 1 , 192 , 1 , 32 , } ,
{ 2 , 192 , 1 , 128 , 1 , 32 , } ,
{ 0 , /* Prohibited setting */ } ,
{ 2 , 192 , 1 , 192 , 1 , 32 , } ,
} ;
static int __init r8a774e1_cpg_mssr_init ( struct device * dev )
{
const struct rcar_gen3_cpg_pll_config * cpg_pll_config ;
u32 cpg_mode ;
int error ;
error = rcar_rst_read_mode_pins ( & cpg_mode ) ;
if ( error )
return error ;
cpg_pll_config = & cpg_pll_configs [ CPG_PLL_CONFIG_INDEX ( cpg_mode ) ] ;
if ( ! cpg_pll_config - > extal_div ) {
dev_err ( dev , " Prohibited setting (cpg_mode=0x%x) \n " , cpg_mode ) ;
return - EINVAL ;
}
return rcar_gen3_cpg_init ( cpg_pll_config , CLK_EXTALR , cpg_mode ) ;
}
const struct cpg_mssr_info r8a774e1_cpg_mssr_info __initconst = {
/* Core Clocks */
. core_clks = r8a774e1_core_clks ,
. num_core_clks = ARRAY_SIZE ( r8a774e1_core_clks ) ,
. last_dt_core_clk = LAST_DT_CORE_CLK ,
. num_total_core_clks = MOD_CLK_BASE ,
/* Module Clocks */
. mod_clks = r8a774e1_mod_clks ,
. num_mod_clks = ARRAY_SIZE ( r8a774e1_mod_clks ) ,
. num_hw_mod_clks = 12 * 32 ,
/* Critical Module Clocks */
. crit_mod_clks = r8a774e1_crit_mod_clks ,
. num_crit_mod_clks = ARRAY_SIZE ( r8a774e1_crit_mod_clks ) ,
/* Callbacks */
. init = r8a774e1_cpg_mssr_init ,
. cpg_clk_register = rcar_gen3_cpg_clk_register ,
} ;