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