Home | History | Annotate | Download | only in mach-exynos
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Clock initialization routines
      4  *
      5  * Copyright (c) 2011 The Chromium OS Authors.
      6  */
      7 
      8 #ifndef __EXYNOS_CLOCK_INIT_H
      9 #define __EXYNOS_CLOCK_INIT_H
     10 
     11 enum {
     12 #ifdef CONFIG_EXYNOS5420
     13 	MEM_TIMINGS_MSR_COUNT	= 5,
     14 #else
     15 	MEM_TIMINGS_MSR_COUNT	= 4,
     16 #endif
     17 };
     18 
     19 /* These are the ratio's for configuring ARM clock */
     20 struct arm_clk_ratios {
     21 	unsigned arm_freq_mhz;		/* Frequency of ARM core in MHz */
     22 
     23 	unsigned apll_mdiv;
     24 	unsigned apll_pdiv;
     25 	unsigned apll_sdiv;
     26 
     27 	unsigned arm2_ratio;
     28 	unsigned apll_ratio;
     29 	unsigned pclk_dbg_ratio;
     30 	unsigned atb_ratio;
     31 	unsigned periph_ratio;
     32 	unsigned acp_ratio;
     33 	unsigned cpud_ratio;
     34 	unsigned arm_ratio;
     35 };
     36 
     37 /* These are the memory timings for a particular memory type and speed */
     38 struct mem_timings {
     39 	enum mem_manuf mem_manuf;	/* Memory manufacturer */
     40 	enum ddr_mode mem_type;		/* Memory type */
     41 	unsigned frequency_mhz;		/* Frequency of memory in MHz */
     42 
     43 	/* Here follow the timing parameters for the selected memory */
     44 	unsigned apll_mdiv;
     45 	unsigned apll_pdiv;
     46 	unsigned apll_sdiv;
     47 	unsigned mpll_mdiv;
     48 	unsigned mpll_pdiv;
     49 	unsigned mpll_sdiv;
     50 	unsigned cpll_mdiv;
     51 	unsigned cpll_pdiv;
     52 	unsigned cpll_sdiv;
     53 	unsigned gpll_mdiv;
     54 	unsigned gpll_pdiv;
     55 	unsigned gpll_sdiv;
     56 	unsigned epll_mdiv;
     57 	unsigned epll_pdiv;
     58 	unsigned epll_sdiv;
     59 	unsigned vpll_mdiv;
     60 	unsigned vpll_pdiv;
     61 	unsigned vpll_sdiv;
     62 	unsigned bpll_mdiv;
     63 	unsigned bpll_pdiv;
     64 	unsigned bpll_sdiv;
     65 	unsigned kpll_mdiv;
     66 	unsigned kpll_pdiv;
     67 	unsigned kpll_sdiv;
     68 	unsigned dpll_mdiv;
     69 	unsigned dpll_pdiv;
     70 	unsigned dpll_sdiv;
     71 	unsigned ipll_mdiv;
     72 	unsigned ipll_pdiv;
     73 	unsigned ipll_sdiv;
     74 	unsigned spll_mdiv;
     75 	unsigned spll_pdiv;
     76 	unsigned spll_sdiv;
     77 	unsigned rpll_mdiv;
     78 	unsigned rpll_pdiv;
     79 	unsigned rpll_sdiv;
     80 	unsigned pclk_cdrex_ratio;
     81 	unsigned direct_cmd_msr[MEM_TIMINGS_MSR_COUNT];
     82 
     83 	unsigned timing_ref;
     84 	unsigned timing_row;
     85 	unsigned timing_data;
     86 	unsigned timing_power;
     87 
     88 	/* DQS, DQ, DEBUG offsets */
     89 	unsigned phy0_dqs;
     90 	unsigned phy1_dqs;
     91 	unsigned phy0_dq;
     92 	unsigned phy1_dq;
     93 	unsigned phy0_tFS;
     94 	unsigned phy1_tFS;
     95 	unsigned phy0_pulld_dqs;
     96 	unsigned phy1_pulld_dqs;
     97 
     98 	unsigned lpddr3_ctrl_phy_reset;
     99 	unsigned ctrl_start_point;
    100 	unsigned ctrl_inc;
    101 	unsigned ctrl_start;
    102 	unsigned ctrl_dll_on;
    103 	unsigned ctrl_ref;
    104 
    105 	unsigned ctrl_force;
    106 	unsigned ctrl_rdlat;
    107 	unsigned ctrl_bstlen;
    108 
    109 	unsigned fp_resync;
    110 	unsigned iv_size;
    111 	unsigned dfi_init_start;
    112 	unsigned aref_en;
    113 
    114 	unsigned rd_fetch;
    115 
    116 	unsigned zq_mode_dds;
    117 	unsigned zq_mode_term;
    118 	unsigned zq_mode_noterm;	/* 1 to allow termination disable */
    119 
    120 	unsigned memcontrol;
    121 	unsigned memconfig;
    122 
    123 	unsigned membaseconfig0;
    124 	unsigned membaseconfig1;
    125 	unsigned prechconfig_tp_cnt;
    126 	unsigned dpwrdn_cyc;
    127 	unsigned dsref_cyc;
    128 	unsigned concontrol;
    129 	/* Channel and Chip Selection */
    130 	uint8_t dmc_channels;		/* number of memory channels */
    131 	uint8_t chips_per_channel;	/* number of chips per channel */
    132 	uint8_t chips_to_configure;	/* number of chips to configure */
    133 	uint8_t send_zq_init;		/* 1 to send this command */
    134 	unsigned impedance;		/* drive strength impedeance */
    135 	uint8_t gate_leveling_enable;	/* check gate leveling is enabled */
    136 	uint8_t read_leveling_enable;	/* check h/w read leveling is enabled */
    137 };
    138 
    139 /**
    140  * Get the correct memory timings for our selected memory type and speed.
    141  *
    142  * This function can be called from SPL or the main U-Boot.
    143  *
    144  * @return pointer to the memory timings that we should use
    145  */
    146 struct mem_timings *clock_get_mem_timings(void);
    147 
    148 /*
    149  * Initialize clock for the device
    150  */
    151 void system_clock_init(void);
    152 
    153 /*
    154  * Set clock divisor value for booting from EMMC.
    155  */
    156 void emmc_boot_clk_div_set(void);
    157 #endif
    158