diff options
Diffstat (limited to 'utils/regtools/qeditor')
-rw-r--r-- | utils/regtools/qeditor/std_analysers.cpp | 229 | ||||
-rw-r--r-- | utils/regtools/qeditor/std_analysers.h | 1 |
2 files changed, 229 insertions, 1 deletions
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp index 8aae007093..6dcefb344f 100644 --- a/utils/regtools/qeditor/std_analysers.cpp +++ b/utils/regtools/qeditor/std_analysers.cpp | |||
@@ -33,7 +33,7 @@ QWidget *ClockAnalyser::GetWidget() | |||
33 | 33 | ||
34 | bool ClockAnalyser::SupportSoc(const QString& soc_name) | 34 | bool ClockAnalyser::SupportSoc(const QString& soc_name) |
35 | { | 35 | { |
36 | return soc_name == "imx233" || soc_name == "rk27xx"; | 36 | return (soc_name == "imx233" || soc_name == "rk27xx" || soc_name == "atj213x"); |
37 | } | 37 | } |
38 | 38 | ||
39 | QString ClockAnalyser::GetFreq(unsigned freq) | 39 | QString ClockAnalyser::GetFreq(unsigned freq) |
@@ -84,10 +84,237 @@ void ClockAnalyser::FillTree() | |||
84 | m_tree_widget->clear(); | 84 | m_tree_widget->clear(); |
85 | if(m_soc.GetSoc().name == "imx233") FillTreeIMX233(); | 85 | if(m_soc.GetSoc().name == "imx233") FillTreeIMX233(); |
86 | else if(m_soc.GetSoc().name == "rk27xx") FillTreeRK27XX(); | 86 | else if(m_soc.GetSoc().name == "rk27xx") FillTreeRK27XX(); |
87 | else if(m_soc.GetSoc().name == "atj213x") FillTreeATJ213X(); | ||
87 | m_tree_widget->expandAll(); | 88 | m_tree_widget->expandAll(); |
88 | m_tree_widget->resizeColumnToContents(0); | 89 | m_tree_widget->resizeColumnToContents(0); |
89 | } | 90 | } |
90 | 91 | ||
92 | void ClockAnalyser::FillTreeATJ213X() | ||
93 | { | ||
94 | soc_word_t pllbypass, pllclk, en, coreclks, tmp0, tmp1, tmp2, tmp3; | ||
95 | |||
96 | BackendHelper helper(m_io_backend, m_soc); | ||
97 | |||
98 | // system oscillators 32.768k and 24M | ||
99 | QTreeWidgetItem *losc_clk = AddClock(0, "losc clk", 32768); | ||
100 | QTreeWidgetItem *hosc_clk = AddClock(0, "hosc clk", 24000000); | ||
101 | |||
102 | // core pll | ||
103 | QTreeWidgetItem *corepll = 0; | ||
104 | if (helper.ReadRegisterField("CMU", "COREPLL", "CPEN", en) && | ||
105 | helper.ReadRegisterField("CMU", "COREPLL", "CPBY", pllbypass) && | ||
106 | helper.ReadRegisterField("CMU", "COREPLL", "CPCK", pllclk)) | ||
107 | { | ||
108 | corepll = AddClock(hosc_clk, "core pll", en ? FROM_PARENT : DISABLED, | ||
109 | pllbypass ? 1 : pllclk, pllbypass ? 1 : 4); | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | corepll = AddClock(hosc_clk, "core pll", INVALID); | ||
114 | } | ||
115 | |||
116 | // dsp pll | ||
117 | QTreeWidgetItem *dsppll = 0; | ||
118 | if (helper.ReadRegisterField("CMU", "DSPPLL", "DPEN", en) && | ||
119 | helper.ReadRegisterField("CMU", "DSPPLL", "DPCK", pllclk)) | ||
120 | { | ||
121 | dsppll = AddClock(hosc_clk, "dsp pll", en ? FROM_PARENT : DISABLED, | ||
122 | pllbypass ? 1 : pllclk, pllbypass ? 1 : 4); | ||
123 | } | ||
124 | else | ||
125 | { | ||
126 | dsppll = AddClock(hosc_clk, "dsp pll", INVALID); | ||
127 | } | ||
128 | |||
129 | // audio pll | ||
130 | QTreeWidgetItem *adcpll = 0; | ||
131 | QTreeWidgetItem *dacpll = 0; | ||
132 | if (helper.ReadRegisterField("CMU", "AUDIOPLL", "APEN", en) && | ||
133 | helper.ReadRegisterField("CMU", "AUDIOPLL", "ADCCLK", tmp0) && | ||
134 | helper.ReadRegisterField("CMU", "AUDIOPLL", "DACCLK", tmp1)) | ||
135 | { | ||
136 | if (en) | ||
137 | { | ||
138 | adcpll = AddClock(hosc_clk, "audio adc pll", tmp0 ? 22579200 : 24576000); | ||
139 | dacpll = AddClock(hosc_clk, "audio dac pll", tmp1 ? 22579200 : 24576000); | ||
140 | } | ||
141 | else | ||
142 | { | ||
143 | adcpll = AddClock(hosc_clk, "audio adc pll", DISABLED); | ||
144 | dacpll = AddClock(hosc_clk, "audio dac pll", DISABLED); | ||
145 | } | ||
146 | } | ||
147 | else | ||
148 | { | ||
149 | adcpll = AddClock(hosc_clk, "audio adc pll", INVALID); | ||
150 | dacpll = AddClock(hosc_clk, "audio dac pll", INVALID); | ||
151 | } | ||
152 | |||
153 | // audio clocks | ||
154 | QTreeWidgetItem *adcclk = 0; | ||
155 | QTreeWidgetItem *dacclk = 0; | ||
156 | if (helper.ReadRegisterField("CMU", "AUDIOPLL", "ADCCLK", tmp0) && | ||
157 | helper.ReadRegisterField("CMU", "AUDIOPLL", "DACCLK", tmp1)) | ||
158 | { | ||
159 | adcclk = AddClock(adcpll, "audio adc clk", FROM_PARENT, 1, tmp0+1); | ||
160 | dacclk = AddClock(dacpll, "audio dac clk", FROM_PARENT, 1, tmp1+1); | ||
161 | } | ||
162 | else | ||
163 | { | ||
164 | adcclk = AddClock(adcpll, "audio adc clk", INVALID); | ||
165 | dacclk = AddClock(adcpll, "audio dac clk", INVALID); | ||
166 | } | ||
167 | |||
168 | // cpu clock | ||
169 | QTreeWidgetItem *cpuclk = 0; | ||
170 | if (helper.ReadRegisterField("CMU", "BUSCLK", "CORECLKS", coreclks) && | ||
171 | helper.ReadRegisterField("CMU", "BUSCLK", "CCLKDIV", tmp0)) | ||
172 | { | ||
173 | if (coreclks == 0) | ||
174 | cpuclk = AddClock(losc_clk, "cpu clk", FROM_PARENT, 1, tmp0+1); | ||
175 | else if (coreclks == 1) | ||
176 | cpuclk = AddClock(hosc_clk, "cpu clk", FROM_PARENT, 1, tmp0+1); | ||
177 | else if (coreclks == 2) | ||
178 | cpuclk = AddClock(corepll, "cpu clk", FROM_PARENT, 1, tmp0+1); | ||
179 | else | ||
180 | cpuclk = AddClock(corepll, "cpu clk", INVALID); | ||
181 | } | ||
182 | else | ||
183 | { | ||
184 | cpuclk = AddClock(corepll, "cpu clk", INVALID); | ||
185 | } | ||
186 | |||
187 | // system clock | ||
188 | QTreeWidgetItem *sysclk = 0; | ||
189 | if (helper.ReadRegisterField("CMU", "BUSCLK", "SCLKDIV", tmp0)) | ||
190 | sysclk = AddClock(cpuclk, "system clk", FROM_PARENT, 1, tmp0+1); | ||
191 | else | ||
192 | sysclk = AddClock(cpuclk, "system clk", INVALID); | ||
193 | |||
194 | // peripherial clk | ||
195 | QTreeWidgetItem *pclk = 0; | ||
196 | if (helper.ReadRegisterField("CMU", "BUSCLK", "PCLKDIV", tmp0)) | ||
197 | pclk = AddClock(sysclk, "peripherial clk", FROM_PARENT, 1, tmp0 ? tmp0+1 : 2); | ||
198 | else | ||
199 | pclk = AddClock(sysclk, "peripherial clk", INVALID); | ||
200 | |||
201 | // sdram clk | ||
202 | QTreeWidgetItem *sdrclk = 0; | ||
203 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "SDRC", en) && | ||
204 | helper.ReadRegisterField("CMU", "DEVCLKEN", "SDRM", tmp0) && | ||
205 | helper.ReadRegisterField("SDR", "EN", "EN", tmp1) && | ||
206 | helper.ReadRegisterField("CMU", "SDRCLK", "SDRDIV", tmp2)) | ||
207 | { | ||
208 | en &= tmp0 & tmp1; | ||
209 | sdrclk = AddClock(sysclk, "sdram clk", en ? FROM_PARENT: DISABLED, 1, tmp2+1); | ||
210 | } | ||
211 | else | ||
212 | sdrclk = AddClock(sysclk, "sdram clk", INVALID); | ||
213 | |||
214 | // nand clk | ||
215 | QTreeWidgetItem *nandclk = 0; | ||
216 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "NAND", en) && | ||
217 | helper.ReadRegisterField("CMU", "NANDCLK", "NANDDIV", tmp0)) | ||
218 | nandclk = AddClock(corepll, "nand clk", en ? FROM_PARENT : DISABLED, 1, tmp0+1); | ||
219 | else | ||
220 | nandclk = AddClock(corepll, "nand clk", INVALID); | ||
221 | |||
222 | // sd clk | ||
223 | QTreeWidgetItem *sdclk = 0; | ||
224 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "SD", tmp0) && | ||
225 | helper.ReadRegisterField("CMU", "SDCLK", "CKEN" , tmp1) && | ||
226 | helper.ReadRegisterField("CMU", "SDCLK", "D128" , tmp2) && | ||
227 | helper.ReadRegisterField("CMU", "SDCLK", "SDDIV" , tmp3)) | ||
228 | { | ||
229 | en = tmp0 & tmp1; | ||
230 | sdclk = AddClock(corepll, "sd clk", en ? FROM_PARENT : DISABLED, | ||
231 | 1, tmp2 ? 128*(tmp3+1) : (tmp3)); | ||
232 | } | ||
233 | else | ||
234 | sdclk = AddClock(corepll, "sd clk", INVALID); | ||
235 | |||
236 | // mha clk | ||
237 | QTreeWidgetItem *mhaclk = 0; | ||
238 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "MHA", en) && | ||
239 | helper.ReadRegisterField("CMU", "MHACLK", "MHADIV", tmp1)) | ||
240 | mhaclk = AddClock(corepll, "mha clk", en ? FROM_PARENT : DISABLED, | ||
241 | 1, tmp1+1); | ||
242 | else | ||
243 | mhaclk = AddClock(corepll, "mha clk", INVALID); | ||
244 | |||
245 | // mca clk | ||
246 | QTreeWidgetItem *mcaclk = 0; | ||
247 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "MCA", en) && | ||
248 | helper.ReadRegisterField("CMU", "MCACLK", "MCADIV", tmp1)) | ||
249 | mcaclk = AddClock(corepll, "mca clk", en ? FROM_PARENT : DISABLED, | ||
250 | 1, tmp1+1); | ||
251 | else | ||
252 | mcaclk = AddClock(corepll, "mca clk", INVALID); | ||
253 | |||
254 | // backlight pwm | ||
255 | QTreeWidgetItem *pwmclk = 0; | ||
256 | if (helper.ReadRegisterField("CMU", "FMCLK", "BCKE", en) && | ||
257 | helper.ReadRegisterField("CMU", "FMCLK", "BCKS", tmp1) && | ||
258 | helper.ReadRegisterField("CMU", "FMCLK", "BCKCON", tmp2)) | ||
259 | { | ||
260 | if (tmp1) | ||
261 | { | ||
262 | // HOSC/8 input clk | ||
263 | pwmclk = AddClock(hosc_clk, "pwm clk", en ? FROM_PARENT : DISABLED, | ||
264 | 1, 3*(tmp2+1)); | ||
265 | } | ||
266 | else | ||
267 | { | ||
268 | // LOSC input clk | ||
269 | pwmclk = AddClock(losc_clk, "pwm clk", en ? FROM_PARENT : DISABLED, | ||
270 | 1, tmp2+1); | ||
271 | } | ||
272 | } | ||
273 | else | ||
274 | pwmclk = AddClock(losc_clk, "pwm clk", INVALID); | ||
275 | |||
276 | // i2c clk | ||
277 | QTreeWidgetItem *i2c1clk = 0; | ||
278 | QTreeWidgetItem *i2c2clk = 0; | ||
279 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "I2C", en) && | ||
280 | helper.ReadRegisterField("I2C1", "CTL", "EN", tmp0) && | ||
281 | helper.ReadRegisterField("I2C1", "CLKDIV", "CLKDIV", tmp1)) | ||
282 | { | ||
283 | en &= tmp0; | ||
284 | i2c1clk = AddClock(pclk, "i2c1 clk", en ? FROM_PARENT : DISABLED, | ||
285 | 1, 16*(tmp1+1)); | ||
286 | } | ||
287 | else | ||
288 | { | ||
289 | i2c1clk = AddClock(pclk, "i2c1 clk", INVALID); | ||
290 | } | ||
291 | |||
292 | if (helper.ReadRegisterField("CMU", "DEVCLKEN", "I2C", en) && | ||
293 | helper.ReadRegisterField("I2C2", "CTL", "EN", tmp0) && | ||
294 | helper.ReadRegisterField("I2C2", "CLKDIV", "CLKDIV", tmp1)) | ||
295 | { | ||
296 | en &= tmp0; | ||
297 | i2c2clk = AddClock(pclk, "i2c2 clk", en ? FROM_PARENT : DISABLED, | ||
298 | 1, 16*(tmp1+1)); | ||
299 | } | ||
300 | else | ||
301 | { | ||
302 | i2c2clk = AddClock(pclk, "i2c2 clk", INVALID); | ||
303 | } | ||
304 | |||
305 | Q_UNUSED(dsppll); | ||
306 | Q_UNUSED(adcclk); | ||
307 | Q_UNUSED(dacclk); | ||
308 | Q_UNUSED(sdrclk); | ||
309 | Q_UNUSED(nandclk); | ||
310 | Q_UNUSED(sdclk); | ||
311 | Q_UNUSED(mhaclk); | ||
312 | Q_UNUSED(mcaclk); | ||
313 | Q_UNUSED(pwmclk); | ||
314 | Q_UNUSED(i2c1clk); | ||
315 | Q_UNUSED(i2c2clk); | ||
316 | } | ||
317 | |||
91 | void ClockAnalyser::FillTreeRK27XX() | 318 | void ClockAnalyser::FillTreeRK27XX() |
92 | { | 319 | { |
93 | soc_word_t value, value2, value3, value4; | 320 | soc_word_t value, value2, value3, value4; |
diff --git a/utils/regtools/qeditor/std_analysers.h b/utils/regtools/qeditor/std_analysers.h index a9b3022b41..ee95c88f3c 100644 --- a/utils/regtools/qeditor/std_analysers.h +++ b/utils/regtools/qeditor/std_analysers.h | |||
@@ -42,6 +42,7 @@ private: | |||
42 | void FillTree(); | 42 | void FillTree(); |
43 | void FillTreeIMX233(); | 43 | void FillTreeIMX233(); |
44 | void FillTreeRK27XX(); | 44 | void FillTreeRK27XX(); |
45 | void FillTreeATJ213X(); | ||
45 | 46 | ||
46 | private: | 47 | private: |
47 | QGroupBox *m_group; | 48 | QGroupBox *m_group; |