Prepare v2023.10
[platform/kernel/u-boot.git] / arch / arm / mach-exynos / clock_init.h
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