Home | History | Annotate | Download | only in mach
      1 /* SPDX-License-Identifier: GPL-2.0
      2  *
      3  * Copyright (C) 2016-2018 Intel Corporation <www.intel.com>
      4  *
      5  */
      6 
      7 #ifndef	_CLOCK_MANAGER_S10_
      8 #define	_CLOCK_MANAGER_S10_
      9 
     10 /* Clock speed accessors */
     11 unsigned long cm_get_mpu_clk_hz(void);
     12 unsigned long cm_get_sdram_clk_hz(void);
     13 unsigned int cm_get_l4_sp_clk_hz(void);
     14 unsigned int cm_get_mmc_controller_clk_hz(void);
     15 unsigned int cm_get_qspi_controller_clk_hz(void);
     16 unsigned int cm_get_spi_controller_clk_hz(void);
     17 const unsigned int cm_get_osc_clk_hz(void);
     18 const unsigned int cm_get_f2s_per_ref_clk_hz(void);
     19 const unsigned int cm_get_f2s_sdr_ref_clk_hz(void);
     20 const unsigned int cm_get_intosc_clk_hz(void);
     21 const unsigned int cm_get_fpga_clk_hz(void);
     22 
     23 #define CLKMGR_EOSC1_HZ		25000000
     24 #define CLKMGR_INTOSC_HZ	460000000
     25 #define CLKMGR_FPGA_CLK_HZ	50000000
     26 
     27 /* Clock configuration accessors */
     28 const struct cm_config * const cm_get_default_config(void);
     29 
     30 struct cm_config {
     31 	/* main group */
     32 	u32 main_pll_mpuclk;
     33 	u32 main_pll_nocclk;
     34 	u32 main_pll_cntr2clk;
     35 	u32 main_pll_cntr3clk;
     36 	u32 main_pll_cntr4clk;
     37 	u32 main_pll_cntr5clk;
     38 	u32 main_pll_cntr6clk;
     39 	u32 main_pll_cntr7clk;
     40 	u32 main_pll_cntr8clk;
     41 	u32 main_pll_cntr9clk;
     42 	u32 main_pll_nocdiv;
     43 	u32 main_pll_pllglob;
     44 	u32 main_pll_fdbck;
     45 	u32 main_pll_pllc0;
     46 	u32 main_pll_pllc1;
     47 	u32 spare;
     48 
     49 	/* peripheral group */
     50 	u32 per_pll_cntr2clk;
     51 	u32 per_pll_cntr3clk;
     52 	u32 per_pll_cntr4clk;
     53 	u32 per_pll_cntr5clk;
     54 	u32 per_pll_cntr6clk;
     55 	u32 per_pll_cntr7clk;
     56 	u32 per_pll_cntr8clk;
     57 	u32 per_pll_cntr9clk;
     58 	u32 per_pll_emacctl;
     59 	u32 per_pll_gpiodiv;
     60 	u32 per_pll_pllglob;
     61 	u32 per_pll_fdbck;
     62 	u32 per_pll_pllc0;
     63 	u32 per_pll_pllc1;
     64 
     65 	/* incoming clock */
     66 	u32 hps_osc_clk_hz;
     67 	u32 fpga_clk_hz;
     68 };
     69 
     70 void cm_basic_init(const struct cm_config * const cfg);
     71 
     72 struct socfpga_clock_manager_main_pll {
     73 	u32	en;
     74 	u32	ens;
     75 	u32	enr;
     76 	u32	bypass;
     77 	u32	bypasss;
     78 	u32	bypassr;
     79 	u32	mpuclk;
     80 	u32	nocclk;
     81 	u32	cntr2clk;
     82 	u32	cntr3clk;
     83 	u32	cntr4clk;
     84 	u32	cntr5clk;
     85 	u32	cntr6clk;
     86 	u32	cntr7clk;
     87 	u32	cntr8clk;
     88 	u32	cntr9clk;
     89 	u32	nocdiv;
     90 	u32	pllglob;
     91 	u32	fdbck;
     92 	u32	mem;
     93 	u32	memstat;
     94 	u32	pllc0;
     95 	u32	pllc1;
     96 	u32	vcocalib;
     97 	u32	_pad_0x90_0xA0[5];
     98 };
     99 
    100 struct socfpga_clock_manager_per_pll {
    101 	u32	en;
    102 	u32	ens;
    103 	u32	enr;
    104 	u32	bypass;
    105 	u32	bypasss;
    106 	u32	bypassr;
    107 	u32	cntr2clk;
    108 	u32	cntr3clk;
    109 	u32	cntr4clk;
    110 	u32	cntr5clk;
    111 	u32	cntr6clk;
    112 	u32	cntr7clk;
    113 	u32	cntr8clk;
    114 	u32	cntr9clk;
    115 	u32	emacctl;
    116 	u32	gpiodiv;
    117 	u32	pllglob;
    118 	u32	fdbck;
    119 	u32	mem;
    120 	u32	memstat;
    121 	u32	pllc0;
    122 	u32	pllc1;
    123 	u32	vcocalib;
    124 	u32	_pad_0x100_0x124[10];
    125 };
    126 
    127 struct socfpga_clock_manager {
    128 	u32	ctrl;
    129 	u32	stat;
    130 	u32	testioctrl;
    131 	u32	intrgen;
    132 	u32	intrmsk;
    133 	u32	intrclr;
    134 	u32	intrsts;
    135 	u32	intrstk;
    136 	u32	intrraw;
    137 	u32	_pad_0x24_0x2c[3];
    138 	struct socfpga_clock_manager_main_pll main_pll;
    139 	struct socfpga_clock_manager_per_pll per_pll;
    140 };
    141 
    142 #define CLKMGR_CTRL_SAFEMODE				BIT(0)
    143 #define CLKMGR_BYPASS_MAINPLL_ALL			0x00000007
    144 #define CLKMGR_BYPASS_PERPLL_ALL			0x0000007f
    145 
    146 #define CLKMGR_INTER_MAINPLLLOCKED_MASK			0x00000001
    147 #define CLKMGR_INTER_PERPLLLOCKED_MASK			0x00000002
    148 #define CLKMGR_INTER_MAINPLLLOST_MASK			0x00000004
    149 #define CLKMGR_INTER_PERPLLLOST_MASK			0x00000008
    150 #define CLKMGR_STAT_BUSY				BIT(0)
    151 #define CLKMGR_STAT_MAINPLL_LOCKED			BIT(8)
    152 #define CLKMGR_STAT_PERPLL_LOCKED			BIT(9)
    153 
    154 #define CLKMGR_PLLGLOB_PD_MASK				0x00000001
    155 #define CLKMGR_PLLGLOB_RST_MASK				0x00000002
    156 #define CLKMGR_PLLGLOB_VCO_PSRC_MASK			0X3
    157 #define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET			16
    158 #define CLKMGR_VCO_PSRC_EOSC1				0
    159 #define CLKMGR_VCO_PSRC_INTOSC				1
    160 #define CLKMGR_VCO_PSRC_F2S				2
    161 #define CLKMGR_PLLGLOB_REFCLKDIV_MASK			0X3f
    162 #define CLKMGR_PLLGLOB_REFCLKDIV_OFFSET			8
    163 
    164 #define CLKMGR_CLKSRC_MASK				0x7
    165 #define CLKMGR_CLKSRC_OFFSET				16
    166 #define CLKMGR_CLKSRC_MAIN				0
    167 #define CLKMGR_CLKSRC_PER				1
    168 #define CLKMGR_CLKSRC_OSC1				2
    169 #define CLKMGR_CLKSRC_INTOSC				3
    170 #define CLKMGR_CLKSRC_FPGA				4
    171 #define CLKMGR_CLKCNT_MSK				0x7ff
    172 
    173 #define CLKMGR_FDBCK_MDIV_MASK				0xff
    174 #define CLKMGR_FDBCK_MDIV_OFFSET			24
    175 
    176 #define CLKMGR_PLLC0_DIV_MASK				0xff
    177 #define CLKMGR_PLLC1_DIV_MASK				0xff
    178 #define CLKMGR_PLLC0_EN_OFFSET				27
    179 #define CLKMGR_PLLC1_EN_OFFSET				24
    180 
    181 #define CLKMGR_NOCDIV_L4MAIN_OFFSET			0
    182 #define CLKMGR_NOCDIV_L4MPCLK_OFFSET			8
    183 #define CLKMGR_NOCDIV_L4SPCLK_OFFSET			16
    184 #define CLKMGR_NOCDIV_CSATCLK_OFFSET			24
    185 #define CLKMGR_NOCDIV_CSTRACECLK_OFFSET			26
    186 #define CLKMGR_NOCDIV_CSPDBGCLK_OFFSET			28
    187 
    188 #define CLKMGR_NOCDIV_L4SPCLK_MASK			0X3
    189 #define CLKMGR_NOCDIV_DIV1				0
    190 #define CLKMGR_NOCDIV_DIV2				1
    191 #define CLKMGR_NOCDIV_DIV4				2
    192 #define CLKMGR_NOCDIV_DIV8				3
    193 #define CLKMGR_CSPDBGCLK_DIV1				0
    194 #define CLKMGR_CSPDBGCLK_DIV4				1
    195 
    196 #define CLKMGR_MSCNT_CONST				200
    197 #define CLKMGR_MDIV_CONST				6
    198 #define CLKMGR_HSCNT_CONST				9
    199 
    200 #define CLKMGR_VCOCALIB_MSCNT_MASK			0xff
    201 #define CLKMGR_VCOCALIB_MSCNT_OFFSET			9
    202 #define CLKMGR_VCOCALIB_HSCNT_MASK			0xff
    203 
    204 #define CLKMGR_EMACCTL_EMAC0SEL_OFFSET			26
    205 #define CLKMGR_EMACCTL_EMAC1SEL_OFFSET			27
    206 #define CLKMGR_EMACCTL_EMAC2SEL_OFFSET			28
    207 
    208 #define CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK		0x00000020
    209 
    210 #endif /* _CLOCK_MANAGER_S10_ */
    211