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