summaryrefslogtreecommitdiff
path: root/utils/regtools/desc
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2016-02-06 15:01:24 +0000
committerAmaury Pouly <amaury.pouly@gmail.com>2016-02-06 15:12:55 +0000
commit0f701a64bee43e79f95970ae9c0ec43ea7fcdf17 (patch)
treec8ac6b5516eac120797eb6a06f633919e9f48f9b /utils/regtools/desc
parent16c915ec1826dcef2e58ecc055a3f5dfcefb235a (diff)
downloadrockbox-0f701a64bee43e79f95970ae9c0ec43ea7fcdf17.tar.gz
rockbox-0f701a64bee43e79f95970ae9c0ec43ea7fcdf17.zip
regtools: update v2 specification, library and tools
A v2 register description file can now include register variants and instances addresses can now be a list (previously it could only be a stride or a formula). Update the library to deal with that. The convert option of swiss_knife was updated and one incompatible change was introduce: if a v1 device has several addresses, those are converted to a single v2 instance with list (instead of several single instances). This should have been the behaviour from the start. Swiss_knife can now also convert regdumps, in which case it needs to be given both the dump and register description file. Also introduce two register descriptions files (vsoc1000 and vsoc2000) which give more complicated examples of v2 register description files. Change-Id: Id9415b8363269ffaf9216abfc6dd1bd1adbfcf8d
Diffstat (limited to 'utils/regtools/desc')
-rw-r--r--utils/regtools/desc/regs-example-v1.xml2
-rw-r--r--utils/regtools/desc/regs-example.xml153
-rw-r--r--utils/regtools/desc/regs-vsoc1000.xml248
-rw-r--r--utils/regtools/desc/regs-vsoc2000.xml396
-rw-r--r--utils/regtools/desc/spec-2.0.txt30
5 files changed, 675 insertions, 154 deletions
diff --git a/utils/regtools/desc/regs-example-v1.xml b/utils/regtools/desc/regs-example-v1.xml
index 4f3cf81ff2..fcb9f7f55e 100644
--- a/utils/regtools/desc/regs-example-v1.xml
+++ b/utils/regtools/desc/regs-example-v1.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<soc name="imx233" desc="i.MX233"> 2<soc name="example" desc="i.MX233">
3 <dev name="APBH" long_name="APHB DMA" desc="AHB-to-APBH Bridge with DMA" version="3.2.0"> 3 <dev name="APBH" long_name="APHB DMA" desc="AHB-to-APBH Bridge with DMA" version="3.2.0">
4 <addr name="APBH" addr="0x80004000"/> 4 <addr name="APBH" addr="0x80004000"/>
5 <reg name="CTRL0" desc="" sct="yes"> 5 <reg name="CTRL0" desc="" sct="yes">
diff --git a/utils/regtools/desc/regs-example.xml b/utils/regtools/desc/regs-example.xml
deleted file mode 100644
index 6fb8f759fe..0000000000
--- a/utils/regtools/desc/regs-example.xml
+++ /dev/null
@@ -1,153 +0,0 @@
1<?xml version="1.0"?>
2<soc version="2">
3 <name>vsoc</name>
4 <title>Virtual SOC</title>
5 <desc>Virtual SoC is a nice and powerful chip.</desc>
6 <author>Amaury Pouly</author>
7 <isa>ARM</isa>
8 <version>0.5</version>
9 <node>
10 <name>int</name>
11 <title>Interrupt Collector</title>
12 <desc>The interrupt collector controls the routing of interrupt to the processor</desc>
13 <instance>
14 <name>ICOLL</name>
15 <title>Interrupt collector</title>
16 <address>0x80000000</address>
17 </instance>
18 <node>
19 <name>status</name>
20 <access>read-only</access>
21 <title>Interrupt status register</title>
22 <instance>
23 <name>STATUS</name>
24 <address>0x4</address>
25 </instance>
26 <register>
27 <width>8</width>
28 <field>
29 <name>VDDIO_BO</name>
30 <desc>VDDIO brownout interrupt status</desc>
31 <position>0</position>
32 </field>
33 </register>
34 </node>
35 <node>
36 <name>enable</name>
37 <title>Interrupt enable register</title>
38 <instance>
39 <name>ENABLE</name>
40 <address>0x8</address>
41 </instance>
42 <register>
43 <width>16</width>
44 <field>
45 <name>VDDIO_BO</name>
46 <desc>VDDIO brownout interrupt enable</desc>
47 <position>0</position>
48 <width>2</width>
49 <enum>
50 <name>DISABLED</name>
51 <desc>Interrupt is disabled</desc>
52 <value>0</value>
53 </enum>
54 <enum>
55 <name>ENABLED</name>
56 <desc>Interrupt is enabled</desc>
57 <value>1</value>
58 </enum>
59 <enum>
60 <name>NMI</name>
61 <desc>Interrupt is non-maskable</desc>
62 <value>2</value>
63 </enum>
64 </field>
65 </register>
66 <variant>
67 <type>set</type>
68 <offset>4</offset>
69 </variant>
70 <variant>
71 <type>clr</type>
72 <offset>8</offset>
73 </variant>
74 </node>
75 </node>
76 <node>
77 <name>gpio</name>
78 <title>GPIO controller</title>
79 <desc>A GPIO controller manages several ports</desc>
80 <instance>
81 <name>CPU_GPIO</name>
82 <title>CPU GPIO controller 1 through 3</title>
83 <range>
84 <first>1</first>
85 <count>3</count>
86 <formula variable="n">0x80001000+(n-1)*0x1000</formula>
87 </range>
88 </instance>
89 <instance>
90 <name>COP_GPIO</name>
91 <title>Companion processor GPIO controller</title>
92 <desc>Although the companion processor GPIO controller is accessible from the CPU, it incurs an extra penalty on the bus</desc>
93 <address>0x90000000</address>
94 </instance>
95 <node>
96 <name>port</name>
97 <title>GPIO port</title>
98 <instance>
99 <name>PORT</name>
100 <range>
101 <first>0</first>
102 <count>4</count>
103 <base>0</base>
104 <stride>0x100</stride>
105 </range>
106 </instance>
107 <node>
108 <name>input</name>
109 <title>Input register</title>
110 <instance>
111 <name>IN</name>
112 <address>0</address>
113 </instance>
114 <register>
115 <width>8</width>
116 <field>
117 <name>VALUE</name>
118 <position>0</position>
119 <width>8</width>
120 </field>
121 </register>
122 </node>
123 <node>
124 <name>output_enable</name>
125 <title>Output enable register</title>
126 <instance>
127 <name>OE</name>
128 <address>0x10</address>
129 </instance>
130 <register>
131 <width>8</width>
132 <field>
133 <name>ENABLE</name>
134 <position>0</position>
135 <width>8</width>
136 </field>
137 </register>
138 <variant>
139 <type>set</type>
140 <address>4</address>
141 </variant>
142 <variant>
143 <type>clr</type>
144 <address>8</address>
145 </variant>
146 <variant>
147 <type>mask</type>
148 <address>12</address>
149 </variant>
150 </node>
151 </node>
152 </node>
153</soc> \ No newline at end of file
diff --git a/utils/regtools/desc/regs-vsoc1000.xml b/utils/regtools/desc/regs-vsoc1000.xml
new file mode 100644
index 0000000000..d909d85b53
--- /dev/null
+++ b/utils/regtools/desc/regs-vsoc1000.xml
@@ -0,0 +1,248 @@
1<?xml version="1.0"?>
2<soc version="2">
3 <name>vsoc1000</name>
4 <title>Virtual SOC 1000</title>
5 <desc>Virtual SoC 1000 is a nice chip. Its dual-core architecture makes it super powerful.</desc>
6 <author>Amaury Pouly</author>
7 <isa>ARM</isa>
8 <version>0.5</version>
9 <node>
10 <name>int</name>
11 <title>Interrupt Collector</title>
12 <desc>The interrupt collector controls the routing of the interrupts to the processors. It has 32 interrupts sources, which can be routed as FIQ or IRQ to the main processor or the coprocessor.</desc>
13 <instance>
14 <name>ICOLL</name>
15 <title>Interrupt collector</title>
16 <address>0x80000000</address>
17 </instance>
18 <node>
19 <name>ctrl</name>
20 <title>Control register</title>
21 <instance>
22 <name>CTRL</name>
23 <address>0x0</address>
24 </instance>
25 <register>
26 <width>8</width>
27 <field>
28 <name>CLKGATE</name>
29 <desc>Clock gating control</desc>
30 <position>7</position>
31 </field>
32 <field>
33 <name>SFTRST</name>
34 <desc>Soft reset, the bit will automatically reset to 0 when reset is completed</desc>
35 <position>6</position>
36 </field>
37 <variant>
38 <type>set</type>
39 <offset>4</offset>
40 </variant>
41 <variant>
42 <type>clr</type>
43 <offset>8</offset>
44 </variant>
45 </register>
46 </node>
47 <node>
48 <name>status</name>
49 <title>Interrupt status register</title>
50 <instance>
51 <name>STATUS</name>
52 <address>0x10</address>
53 </instance>
54 <register>
55 <field>
56 <name>STATUS</name>
57 <desc>Bit is set to 1 is the interrupt is pending, write a 1 to the clear variant to clear it</desc>
58 <position>0</position>
59 <width>32</width>
60 </field>
61 <variant>
62 <type>clr</type>
63 <offset>8</offset>
64 </variant>
65 </register>
66 </node>
67 <node>
68 <name>enable</name>
69 <title>Interrupt enable register</title>
70 <instance>
71 <name>ENABLE</name>
72 <range>
73 <first>0</first>
74 <count>32</count>
75 <base>0x20</base>
76 <stride>0x10</stride>
77 </range>
78 </instance>
79 <register>
80 <width>16</width>
81 <desc>This register controls the routing of the interrupt</desc>
82 <field>
83 <name>COP_PRIO</name>
84 <desc>Coprocessor priority</desc>
85 <position>5</position>
86 <width>2</width>
87 <enum>
88 <name>MASKED</name>
89 <desc>Interrupt is masked</desc>
90 <value>0x0</value>
91 </enum>
92 <enum>
93 <name>LOW</name>
94 <value>0x1</value>
95 </enum>
96 <enum>
97 <name>HIGH</name>
98 <value>0x2</value>
99 </enum>
100 <enum>
101 <name>NMI</name>
102 <desc>Interrupt is non maskable</desc>
103 <value>0x3</value>
104 </enum>
105 </field>
106 <field>
107 <name>COP_TYPE</name>
108 <desc>Interrupt type</desc>
109 <position>4</position>
110 <enum>
111 <name>IRQ</name>
112 <value>0x0</value>
113 </enum>
114 <enum>
115 <name>FIQ</name>
116 <value>0x1</value>
117 </enum>
118 </field>
119 <field>
120 <name>CPU_PRIO</name>
121 <desc>CPU priority</desc>
122 <position>2</position>
123 <width>2</width>
124 <enum>
125 <name>MASKED</name>
126 <desc>Interrupt will never be sent to the CPU</desc>
127 <value>0x0</value>
128 </enum>
129 <enum>
130 <name>LOW</name>
131 <value>0x1</value>
132 </enum>
133 <enum>
134 <name>HIGH</name>
135 <value>0x2</value>
136 </enum>
137 <enum>
138 <name>NMI</name>
139 <desc>Interrupt is non maskable</desc>
140 <value>0x3</value>
141 </enum>
142 </field>
143 <field>
144 <name>CPU_TYPE</name>
145 <desc>Interrupt type</desc>
146 <position>1</position>
147 <enum>
148 <name>IRQ</name>
149 <value>0x0</value>
150 </enum>
151 <enum>
152 <name>FIQ</name>
153 <value>0x1</value>
154 </enum>
155 </field>
156 <field>
157 <name>ENABLE</name>
158 <position>0</position>
159 </field>
160 <variant>
161 <type>set</type>
162 <offset>4</offset>
163 </variant>
164 <variant>
165 <type>clr</type>
166 <offset>8</offset>
167 </variant>
168 </register>
169 </node>
170 </node>
171 <node>
172 <name>gpio</name>
173 <title>GPIO controller</title>
174 <desc>A GPIO controller manages several ports</desc>
175 <instance>
176 <name>CPU_GPIO</name>
177 <title>CPU GPIO controller 1 through 3</title>
178 <range>
179 <first>1</first>
180 <count>3</count>
181 <formula variable="n">0x80001000+(n-1)*0x1000</formula>
182 </range>
183 </instance>
184 <instance>
185 <name>COP_GPIO</name>
186 <title>Companion processor GPIO controller</title>
187 <desc>Although the companion processor GPIO controller is accessible from the CPU, it incurs an extra penalty on the bus</desc>
188 <address>0x90000000</address>
189 </instance>
190 <node>
191 <name>port</name>
192 <title>GPIO port</title>
193 <instance>
194 <name>PORT</name>
195 <range>
196 <first>0</first>
197 <count>2</count>
198 <base>0x0</base>
199 <stride>0x100</stride>
200 </range>
201 </instance>
202 <node>
203 <name>input</name>
204 <title>Input register</title>
205 <instance>
206 <name>IN</name>
207 <address>0x0</address>
208 </instance>
209 <register>
210 <width>8</width>
211 <field>
212 <name>VALUE</name>
213 <position>0</position>
214 <width>8</width>
215 </field>
216 </register>
217 </node>
218 <node>
219 <name>output_enable</name>
220 <title>Output enable register</title>
221 <instance>
222 <name>OE</name>
223 <address>0x10</address>
224 </instance>
225 <register>
226 <width>8</width>
227 <field>
228 <name>ENABLE</name>
229 <position>0</position>
230 <width>8</width>
231 </field>
232 <variant>
233 <type>set</type>
234 <offset>4</offset>
235 </variant>
236 <variant>
237 <type>clr</type>
238 <offset>8</offset>
239 </variant>
240 <variant>
241 <type>mask</type>
242 <offset>12</offset>
243 </variant>
244 </register>
245 </node>
246 </node>
247 </node>
248</soc>
diff --git a/utils/regtools/desc/regs-vsoc2000.xml b/utils/regtools/desc/regs-vsoc2000.xml
new file mode 100644
index 0000000000..bcd6d08d38
--- /dev/null
+++ b/utils/regtools/desc/regs-vsoc2000.xml
@@ -0,0 +1,396 @@
1<?xml version="1.0"?>
2<soc version="2">
3 <name>vsoc2000</name>
4 <title>Virtual SOC 2000</title>
5 <desc>Virtual SoC 2000 is a nice chip. Its quad-core architecture with trustzone makes it super powerful.</desc>
6 <author>Amaury Pouly</author>
7 <isa>ARM</isa>
8 <version>0.5</version>
9 <node>
10 <name>int</name>
11 <title>Interrupt Collector</title>
12 <desc>The interrupt collector controls the routing of the interrupts to the processors. It has 32 interrupts sources, which can be routed as FIQ or IRQ to the either processor.</desc>
13 <instance>
14 <name>ICOLL</name>
15 <title>Interrupt collector</title>
16 <address>0x80000000</address>
17 </instance>
18 <node>
19 <name>ctrl</name>
20 <title>Control register</title>
21 <instance>
22 <name>CTRL</name>
23 <address>0x0</address>
24 </instance>
25 <register>
26 <width>8</width>
27 <field>
28 <name>CLKGATE</name>
29 <desc>Clock gating control. This bit can be protected by TZ lock.</desc>
30 <position>7</position>
31 </field>
32 <field>
33 <name>SFTRST</name>
34 <desc>Soft reset, the bit will automatically reset to 0 when reset is completed. This bit can be protected by TZ lock.</desc>
35 <position>6</position>
36 </field>
37 <field>
38 <name>TZ_LOCK</name>
39 <desc>Trust Zone lock</desc>
40 <position>5</position>
41 <enum>
42 <name>UNLOCKED</name>
43 <value>0x0</value>
44 </enum>
45 <enum>
46 <name>LOCKED</name>
47 <desc>When the interrupt collector is locked, only a secured processor can modify protected fields.</desc>
48 <value>0x1</value>
49 </enum>
50 </field>
51 <variant>
52 <type>set</type>
53 <offset>4</offset>
54 </variant>
55 <variant>
56 <type>clr</type>
57 <offset>8</offset>
58 </variant>
59 </register>
60 </node>
61 <node>
62 <name>status</name>
63 <title>Interrupt status register</title>
64 <instance>
65 <name>STATUS</name>
66 <address>0x10</address>
67 </instance>
68 <register>
69 <field>
70 <name>STATUS</name>
71 <desc>Bit is set to 1 is the interrupt is pending, write a 1 to the clear variant to clear it. Secured interrupts can only be cleared or polled by secured processors (non-secure will always read 0 for those).</desc>
72 <position>0</position>
73 <width>32</width>
74 </field>
75 <variant>
76 <type>clr</type>
77 <offset>8</offset>
78 </variant>
79 </register>
80 </node>
81 <node>
82 <name>enable</name>
83 <title>Interrupt enable register</title>
84 <instance>
85 <name>ENABLE</name>
86 <range>
87 <first>0</first>
88 <count>32</count>
89 <base>0x20</base>
90 <stride>0x10</stride>
91 </range>
92 </instance>
93 <register>
94 <width>16</width>
95 <desc>This register controls the routing of the interrupt</desc>
96 <field>
97 <name>CPU3_PRIO</name>
98 <desc>Interrupt priority</desc>
99 <position>14</position>
100 <width>2</width>
101 <enum>
102 <name>MASKED</name>
103 <desc>Interrupt is masked</desc>
104 <value>0x0</value>
105 </enum>
106 <enum>
107 <name>LOW</name>
108 <value>0x1</value>
109 </enum>
110 <enum>
111 <name>HIGH</name>
112 <value>0x2</value>
113 </enum>
114 <enum>
115 <name>NMI</name>
116 <desc>Interrupt is non maskable</desc>
117 <value>0x3</value>
118 </enum>
119 </field>
120 <field>
121 <name>CPU3_TYPE</name>
122 <desc>Interrupt type</desc>
123 <position>13</position>
124 <enum>
125 <name>IRQ</name>
126 <value>0x0</value>
127 </enum>
128 <enum>
129 <name>FIQ</name>
130 <value>0x1</value>
131 </enum>
132 </field>
133 <field>
134 <name>CPU3_TZ</name>
135 <desc>Trust Zone interrupt: when set, only a secured processor can modify the parameters for secured interrupts.</desc>
136 <position>12</position>
137 </field>
138 <field>
139 <name>CPU2_PRIO</name>
140 <position>10</position>
141 <width>2</width>
142 <enum>
143 <name>MASKED</name>
144 <desc>Interrupt is masked</desc>
145 <value>0x0</value>
146 </enum>
147 <enum>
148 <name>LOW</name>
149 <value>0x1</value>
150 </enum>
151 <enum>
152 <name>HIGH</name>
153 <value>0x2</value>
154 </enum>
155 <enum>
156 <name>NMI</name>
157 <desc>Interrupt is non maskable</desc>
158 <value>0x3</value>
159 </enum>
160 </field>
161 <field>
162 <name>CPU2_TYPE</name>
163 <desc>Interrupt type</desc>
164 <position>9</position>
165 <enum>
166 <name>IRQ</name>
167 <value>0x0</value>
168 </enum>
169 <enum>
170 <name>FIQ</name>
171 <value>0x1</value>
172 </enum>
173 </field>
174 <field>
175 <name>CPU2_TZ</name>
176 <desc>Trust Zone interrupt: when set, only a secured processor can modify the parameters for secured interrupts.</desc>
177 <position>8</position>
178 </field>
179 <field>
180 <name>CPU1_PRIO</name>
181 <desc>Interrupt priority</desc>
182 <position>6</position>
183 <width>2</width>
184 <enum>
185 <name>MASKED</name>
186 <desc>Interrupt is masked</desc>
187 <value>0x0</value>
188 </enum>
189 <enum>
190 <name>LOW</name>
191 <value>0x1</value>
192 </enum>
193 <enum>
194 <name>HIGH</name>
195 <value>0x2</value>
196 </enum>
197 <enum>
198 <name>NMI</name>
199 <desc>Interrupt is non maskable</desc>
200 <value>0x3</value>
201 </enum>
202 </field>
203 <field>
204 <name>CPU1_TYPE</name>
205 <desc>Interrupt type</desc>
206 <position>5</position>
207 <enum>
208 <name>IRQ</name>
209 <value>0x0</value>
210 </enum>
211 <enum>
212 <name>FIQ</name>
213 <value>0x1</value>
214 </enum>
215 </field>
216 <field>
217 <name>CPU1_TZ</name>
218 <desc>Trust Zone interrupt: when set, only a secured processor can modify the parameters for secured interrupts.</desc>
219 <position>4</position>
220 </field>
221 <field>
222 <name>CPU0_PRIO</name>
223 <desc>Interrupt priority</desc>
224 <position>2</position>
225 <width>2</width>
226 <enum>
227 <name>MASKED</name>
228 <desc>Interrupt will never be sent to the CPU</desc>
229 <value>0x0</value>
230 </enum>
231 <enum>
232 <name>LOW</name>
233 <value>0x1</value>
234 </enum>
235 <enum>
236 <name>HIGH</name>
237 <value>0x2</value>
238 </enum>
239 <enum>
240 <name>NMI</name>
241 <desc>Interrupt is non maskable</desc>
242 <value>0x3</value>
243 </enum>
244 </field>
245 <field>
246 <name>CPU0_TYPE</name>
247 <desc>Interrupt type</desc>
248 <position>1</position>
249 <enum>
250 <name>IRQ</name>
251 <value>0x0</value>
252 </enum>
253 <enum>
254 <name>FIQ</name>
255 <value>0x1</value>
256 </enum>
257 </field>
258 <field>
259 <name>CPU0_TZ</name>
260 <desc>Trust Zone interrupt: when set, only a secured processor can modify the parameters for secured interrupts.</desc>
261 <position>0</position>
262 </field>
263 <variant>
264 <type>set</type>
265 <offset>4</offset>
266 </variant>
267 <variant>
268 <type>clr</type>
269 <offset>8</offset>
270 </variant>
271 </register>
272 </node>
273 </node>
274 <node>
275 <name>gpio</name>
276 <title>GPIO controller</title>
277 <desc>A GPIO controller manages several ports.</desc>
278 <instance>
279 <name>CPU_GPIO</name>
280 <title>CPU GPIO controllers 1 through 7</title>
281 <range>
282 <first>1</first>
283 <count>8</count>
284 <formula variable="n">0x80001000+(n-1)*0x1000</formula>
285 </range>
286 </instance>
287 <node>
288 <name>port</name>
289 <title>GPIO port</title>
290 <instance>
291 <name>PORT</name>
292 <range>
293 <first>0</first>
294 <count>2</count>
295 <base>0x0</base>
296 <stride>0x100</stride>
297 </range>
298 </instance>
299 <node>
300 <name>input</name>
301 <title>Input register</title>
302 <instance>
303 <name>IN</name>
304 <address>0x0</address>
305 </instance>
306 <register>
307 <width>8</width>
308 <field>
309 <name>VALUE</name>
310 <position>0</position>
311 <width>8</width>
312 </field>
313 </register>
314 </node>
315 <node>
316 <name>output_enable</name>
317 <title>Output enable register</title>
318 <instance>
319 <name>OE</name>
320 <address>0x10</address>
321 </instance>
322 <register>
323 <width>8</width>
324 <field>
325 <name>ENABLE</name>
326 <position>0</position>
327 <width>8</width>
328 </field>
329 <variant>
330 <type>set</type>
331 <offset>4</offset>
332 </variant>
333 <variant>
334 <type>clr</type>
335 <offset>8</offset>
336 </variant>
337 <variant>
338 <type>mask</type>
339 <offset>12</offset>
340 </variant>
341 </register>
342 </node>
343 </node>
344 </node>
345 <node>
346 <name>tz</name>
347 <title>Trust Zone</title>
348 <instance>
349 <name>TZ</name>
350 <address>0xa0000000</address>
351 </instance>
352 <node>
353 <name>ctrl</name>
354 <title>Control Register</title>
355 <instance>
356 <name>CTRL</name>
357 <address>0x0</address>
358 </instance>
359 <register>
360 <width>8</width>
361 <field>
362 <name>SCRATCH</name>
363 <desc>TZ protected scratch value</desc>
364 <position>4</position>
365 <width>4</width>
366 </field>
367 <field>
368 <name>DISABLE</name>
369 <desc>One bit per CPU: set to 1 to prevent the processor from being able to enter TZ mode. Can only be set by a secured processor. By default all processors can enter TZ mode.</desc>
370 <position>0</position>
371 <width>4</width>
372 </field>
373 </register>
374 </node>
375 <node>
376 <name>debug</name>
377 <title>Debug register</title>
378 <instance>
379 <name>DEBUG</name>
380 <title>Debug register</title>
381 <desc>Don't touch it!</desc>
382 <range>
383 <first>42</first>
384 <address>0x50</address>
385 <address>0x60</address>
386 <address>0x90</address>
387 <address>0x110</address>
388 <address>0x130</address>
389 </range>
390 </instance>
391 <register>
392 <width>8</width>
393 </register>
394 </node>
395 </node>
396</soc>
diff --git a/utils/regtools/desc/spec-2.0.txt b/utils/regtools/desc/spec-2.0.txt
index 79b9f6be44..be97fbc41a 100644
--- a/utils/regtools/desc/spec-2.0.txt
+++ b/utils/regtools/desc/spec-2.0.txt
@@ -120,6 +120,23 @@ usual arithmetic operators. The example below illustrate such a use:
120 </instance> 120 </instance>
121</node> 121</node>
122 122
123In the case when the addresses do not follow a regular pattern or a formula would
124be too complicated, it is always possible to specify the addresses as a list:
125
126<node>
127 <name>N</name>
128 <instance>
129 <name>F</name>
130 <range>
131 <first>0</first>
132 <address>0x50</address>
133 <address>0x60</address>
134 <address>0x90</address>
135 <address>0x110</address>
136 </range>
137 </instance>
138</node>
139
123In this example we generate four nodes F[0], ..., F[3] with a formula. Here "/" 140In this example we generate four nodes F[0], ..., F[3] with a formula. Here "/"
124is the euclidian division and "%" is the modulo operator. Note the use of an 141is the euclidian division and "%" is the modulo operator. Note the use of an
125attribute to specify which variable represents the index. The generated addresses 142attribute to specify which variable represents the index. The generated addresses
@@ -177,6 +194,7 @@ and an optional description. The example below illustrates all these concepts:
177 194
178<register> 195<register>
179 <width>8</width> 196 <width>8</width>
197 <desc>This register controls the parameters of the interrupt: priority, IRQ/FIQ and enable</desc>
180 <field> 198 <field>
181 <name>MODE</name> 199 <name>MODE</name>
182 <desc>Interrupt mode</desc> 200 <desc>Interrupt mode</desc>
@@ -218,6 +236,10 @@ and an optional description. The example below illustrates all these concepts:
218 <value>1</value> 236 <value>1</value>
219 </enum> 237 </enum>
220 </field> 238 </field>
239 <variant>
240 <type>set</type>
241 <offset>0x4</offset>
242 </variant>
221</register> 243</register>
222 244
223In this example, the 8-bit registers has three fields: 245In this example, the 8-bit registers has three fields:
@@ -350,7 +372,15 @@ Element: register
350It can contain at most one of each of the following tags: 372It can contain at most one of each of the following tags:
351- width: width in bits (positive number) 373- width: width in bits (positive number)
352It can contain any number of the following tags: 374It can contain any number of the following tags:
375- desc: free form description of the register
353- field: field description 376- field: field description
377- variant: variant description
378
379Element: variant
380--------------
381It must contain the following tags:
382- type: name of type, only made of alphanumerical characters
383- offset: offset with respect to register address
354 384
355Element: field 385Element: field
356-------------- 386--------------