summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/std_analysers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools/qeditor/std_analysers.cpp')
-rw-r--r--utils/regtools/qeditor/std_analysers.cpp229
1 files changed, 228 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
34bool ClockAnalyser::SupportSoc(const QString& soc_name) 34bool 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
39QString ClockAnalyser::GetFreq(unsigned freq) 39QString 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
92void 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
91void ClockAnalyser::FillTreeRK27XX() 318void ClockAnalyser::FillTreeRK27XX()
92{ 319{
93 soc_word_t value, value2, value3, value4; 320 soc_word_t value, value2, value3, value4;