1*177ba1f9SLey Foon Tan /* 2*177ba1f9SLey Foon Tan * Copyright (C) 2016-2017 Intel Corporation 3*177ba1f9SLey Foon Tan * 4*177ba1f9SLey Foon Tan * SPDX-License-Identifier: GPL-2.0 5*177ba1f9SLey Foon Tan */ 6*177ba1f9SLey Foon Tan 7*177ba1f9SLey Foon Tan #ifndef CLOCK_MANAGER_ARRIA10 8*177ba1f9SLey Foon Tan #define CLOCK_MANAGER_ARRIA10 9*177ba1f9SLey Foon Tan 10*177ba1f9SLey Foon Tan #ifndef __ASSEMBLER__ 11*177ba1f9SLey Foon Tan 12*177ba1f9SLey Foon Tan struct socfpga_clock_manager_main_pll { 13*177ba1f9SLey Foon Tan u32 vco0; 14*177ba1f9SLey Foon Tan u32 vco1; 15*177ba1f9SLey Foon Tan u32 en; 16*177ba1f9SLey Foon Tan u32 ens; 17*177ba1f9SLey Foon Tan u32 enr; 18*177ba1f9SLey Foon Tan u32 bypass; 19*177ba1f9SLey Foon Tan u32 bypasss; 20*177ba1f9SLey Foon Tan u32 bypassr; 21*177ba1f9SLey Foon Tan u32 mpuclk; 22*177ba1f9SLey Foon Tan u32 nocclk; 23*177ba1f9SLey Foon Tan u32 cntr2clk; 24*177ba1f9SLey Foon Tan u32 cntr3clk; 25*177ba1f9SLey Foon Tan u32 cntr4clk; 26*177ba1f9SLey Foon Tan u32 cntr5clk; 27*177ba1f9SLey Foon Tan u32 cntr6clk; 28*177ba1f9SLey Foon Tan u32 cntr7clk; 29*177ba1f9SLey Foon Tan u32 cntr8clk; 30*177ba1f9SLey Foon Tan u32 cntr9clk; 31*177ba1f9SLey Foon Tan u32 pad_0x48_0x5b[5]; 32*177ba1f9SLey Foon Tan u32 cntr15clk; 33*177ba1f9SLey Foon Tan u32 outrst; 34*177ba1f9SLey Foon Tan u32 outrststat; 35*177ba1f9SLey Foon Tan u32 nocdiv; 36*177ba1f9SLey Foon Tan u32 pad_0x6c_0x80[5]; 37*177ba1f9SLey Foon Tan }; 38*177ba1f9SLey Foon Tan 39*177ba1f9SLey Foon Tan struct socfpga_clock_manager_per_pll { 40*177ba1f9SLey Foon Tan u32 vco0; 41*177ba1f9SLey Foon Tan u32 vco1; 42*177ba1f9SLey Foon Tan u32 en; 43*177ba1f9SLey Foon Tan u32 ens; 44*177ba1f9SLey Foon Tan u32 enr; 45*177ba1f9SLey Foon Tan u32 bypass; 46*177ba1f9SLey Foon Tan u32 bypasss; 47*177ba1f9SLey Foon Tan u32 bypassr; 48*177ba1f9SLey Foon Tan u32 pad_0x20_0x27[2]; 49*177ba1f9SLey Foon Tan u32 cntr2clk; 50*177ba1f9SLey Foon Tan u32 cntr3clk; 51*177ba1f9SLey Foon Tan u32 cntr4clk; 52*177ba1f9SLey Foon Tan u32 cntr5clk; 53*177ba1f9SLey Foon Tan u32 cntr6clk; 54*177ba1f9SLey Foon Tan u32 cntr7clk; 55*177ba1f9SLey Foon Tan u32 cntr8clk; 56*177ba1f9SLey Foon Tan u32 cntr9clk; 57*177ba1f9SLey Foon Tan u32 pad_0x48_0x5f[6]; 58*177ba1f9SLey Foon Tan u32 outrst; 59*177ba1f9SLey Foon Tan u32 outrststat; 60*177ba1f9SLey Foon Tan u32 emacctl; 61*177ba1f9SLey Foon Tan u32 gpiodiv; 62*177ba1f9SLey Foon Tan u32 pad_0x70_0x80[4]; 63*177ba1f9SLey Foon Tan }; 64*177ba1f9SLey Foon Tan 65*177ba1f9SLey Foon Tan struct socfpga_clock_manager_altera { 66*177ba1f9SLey Foon Tan u32 mpuclk; 67*177ba1f9SLey Foon Tan u32 nocclk; 68*177ba1f9SLey Foon Tan u32 mainmisc0; 69*177ba1f9SLey Foon Tan u32 mainmisc1; 70*177ba1f9SLey Foon Tan u32 perimisc0; 71*177ba1f9SLey Foon Tan u32 perimisc1; 72*177ba1f9SLey Foon Tan }; 73*177ba1f9SLey Foon Tan 74*177ba1f9SLey Foon Tan struct socfpga_clock_manager { 75*177ba1f9SLey Foon Tan /* clkmgr */ 76*177ba1f9SLey Foon Tan u32 ctrl; 77*177ba1f9SLey Foon Tan u32 intr; 78*177ba1f9SLey Foon Tan u32 intrs; 79*177ba1f9SLey Foon Tan u32 intrr; 80*177ba1f9SLey Foon Tan u32 intren; 81*177ba1f9SLey Foon Tan u32 intrens; 82*177ba1f9SLey Foon Tan u32 intrenr; 83*177ba1f9SLey Foon Tan u32 stat; 84*177ba1f9SLey Foon Tan u32 testioctrl; 85*177ba1f9SLey Foon Tan u32 _pad_0x24_0x40[7]; 86*177ba1f9SLey Foon Tan /* mainpllgrp */ 87*177ba1f9SLey Foon Tan struct socfpga_clock_manager_main_pll main_pll; 88*177ba1f9SLey Foon Tan /* perpllgrp */ 89*177ba1f9SLey Foon Tan struct socfpga_clock_manager_per_pll per_pll; 90*177ba1f9SLey Foon Tan struct socfpga_clock_manager_altera altera; 91*177ba1f9SLey Foon Tan }; 92*177ba1f9SLey Foon Tan 93*177ba1f9SLey Foon Tan void cm_use_intosc(void); 94*177ba1f9SLey Foon Tan unsigned int cm_get_noc_clk_hz(void); 95*177ba1f9SLey Foon Tan unsigned int cm_get_l4_noc_hz(unsigned int nocdivshift); 96*177ba1f9SLey Foon Tan int cm_basic_init(const void *blob); 97*177ba1f9SLey Foon Tan 98*177ba1f9SLey Foon Tan unsigned int cm_get_l4_sp_clk_hz(void); 99*177ba1f9SLey Foon Tan unsigned int cm_get_main_vco_clk_hz(void); 100*177ba1f9SLey Foon Tan unsigned int cm_get_per_vco_clk_hz(void); 101*177ba1f9SLey Foon Tan unsigned long cm_get_mpu_clk_hz(void); 102*177ba1f9SLey Foon Tan 103*177ba1f9SLey Foon Tan unsigned int cm_get_qspi_controller_clk_hz(void); 104*177ba1f9SLey Foon Tan unsigned int cm_get_mmc_controller_clk_hz(void); 105*177ba1f9SLey Foon Tan unsigned int cm_get_spi_controller_clk_hz(void); 106*177ba1f9SLey Foon Tan 107*177ba1f9SLey Foon Tan #endif /* __ASSEMBLER__ */ 108*177ba1f9SLey Foon Tan 109*177ba1f9SLey Foon Tan #define CLKMGR_ALTERAGRP_MPU_CLK_OFFSET 0x140 110*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOC_CLK_OFFSET 0x144 111*177ba1f9SLey Foon Tan #define LOCKED_MASK (CLKMGR_CLKMGR_STAT_MAINPLLLOCKED_SET_MSK | \ 112*177ba1f9SLey Foon Tan CLKMGR_CLKMGR_STAT_PERPLLLOCKED_SET_MSK) 113*177ba1f9SLey Foon Tan 114*177ba1f9SLey Foon Tan /* value */ 115*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_BYPASS_RESET 0x0000003f 116*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_BYPASS_RESET 0x000000ff 117*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_RESET 0x00010053 118*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_RESET 0x00010001 119*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_RESET 0x00010053 120*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_RESET 0x00010001 121*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_EOSC 0x0 122*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_E_INTOSC 0x1 123*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_F2S 0x2 124*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_EOSC 0x0 125*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_E_INTOSC 0x1 126*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_F2S 0x2 127*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_MAIN 0x3 128*177ba1f9SLey Foon Tan 129*177ba1f9SLey Foon Tan /* mask */ 130*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_EN_S2FUSER0CLKEN_SET_MSK BIT(6) 131*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_EN_HMCPLLREFCLKEN_SET_MSK BIT(7) 132*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_MAINPLLLOCKED_SET_MSK BIT(8) 133*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_PERPLLLOCKED_SET_MSK BIT(9) 134*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_BOOTCLKSRC_SET_MSK BIT(17) 135*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_BGPWRDN_SET_MSK BIT(0) 136*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PWRDN_SET_MSK BIT(1) 137*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_EN_SET_MSK BIT(2) 138*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_OUTRSTALL_SET_MSK BIT(3) 139*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_REGEXTSEL_SET_MSK BIT(4) 140*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_BGPWRDN_SET_MSK BIT(0) 141*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PWRDN_SET_MSK BIT(1) 142*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_EN_SET_MSK BIT(2) 143*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_OUTRSTALL_SET_MSK BIT(3) 144*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_REGEXTSEL_SET_MSK BIT(4) 145*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLACHIEVED_SET_MSK BIT(0) 146*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLACHIEVED_SET_MSK BIT(1) 147*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLLOST_SET_MSK BIT(2) 148*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLLOST_SET_MSK BIT(3) 149*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLRFSLIP_SET_MSK BIT(8) 150*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLRFSLIP_SET_MSK BIT(9) 151*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLFBSLIP_SET_MSK BIT(10) 152*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLFBSLIP_SET_MSK BIT(11) 153*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_CTL_BOOTMOD_SET_MSK BIT(0) 154*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_CTL_BOOTCLK_INTOSC_SET_MSK 0x00000300 155*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EN_RESET 0x00000f7f 156*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK BIT(5) 157*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_MSK 0x00000003 158*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_NUMER_MSK 0x00001fff 159*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_DENOM_MSK 0x0000003f 160*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTRCLK_MSK 0x000003ff 161*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_MSK 0x00000003 162*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_NUMER_MSK 0x00001fff 163*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_DENOM_MSK 0x0000003f 164*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTRCLK_MSK 0x000003ff 165*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_MSK 0x00000007 166*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_CNT_MSK 0x000003ff 167*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_MAIN 0 168*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_PERI 1 169*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_OSC1 2 170*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_INTOSC 3 171*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_FPGA 4 172*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_MSK 0x00000003 173*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_CNT_MSK 0x000003ff 174*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_MSK 0x00000007 175*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_MAIN 0 176*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_PERI 1 177*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_OSC1 2 178*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_INTOSC 3 179*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_FPGA 4 180*177ba1f9SLey Foon Tan 181*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_MSK 0x00000007 182*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_MAIN 0 183*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_PERI 1 184*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_OSC1 2 185*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_INTOSC 3 186*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_FPGA 4 187*177ba1f9SLey Foon Tan 188*177ba1f9SLey Foon Tan /* bit shifting macro */ 189*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_LSB 8 190*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_LSB 8 191*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_DENOM_LSB 16 192*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_DENOM_LSB 16 193*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_PERICNT_LSB 16 194*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_LSB 16 195*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4MAINCLK_LSB 0 196*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4MPCLK_LSB 8 197*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4SPCLK_LSB 16 198*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSATCLK_LSB 24 199*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSTRACECLK_LSB 26 200*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSPDBGCLK_LSB 28 201*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_LSB 16 202*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_PERICNT_LSB 16 203*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_LSB 16 204*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTR7CLK_SRC_LSB 16 205*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTR9CLK_SRC_LSB 16 206*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR2CLK_SRC_LSB 16 207*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR3CLK_SRC_LSB 16 208*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR4CLK_SRC_LSB 16 209*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR5CLK_SRC_LSB 16 210*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR6CLK_SRC_LSB 16 211*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR8CLK_SRC_LSB 16 212*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC0SEL_LSB 26 213*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC1SEL_LSB 27 214*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC2SEL_LSB 28 215*177ba1f9SLey Foon Tan 216*177ba1f9SLey Foon Tan /* PLL ramping work around */ 217*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_MPUCLK_THRESHOLD_HZ 900000000 218*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_NOCCLK_THRESHOLD_HZ 300000000 219*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_MPUCLK_INCREMENT_HZ 100000000 220*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_NOCCLK_INCREMENT_HZ 33000000 221*177ba1f9SLey Foon Tan 222*177ba1f9SLey Foon Tan #define CLKMGR_STAT_BUSY BIT(0) 223*177ba1f9SLey Foon Tan 224*177ba1f9SLey Foon Tan #endif /* CLOCK_MANAGER_ARRIA10 */ 225