1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
@import url('../css/main.css');
div.contain {
max-width:100%;
}
b {
background:#ddd;
}
</style>
<title>dmp vortex86ex in libreboot</title>
</head>
<?php
include_once "../variables.php";
?>
<body>
<div class="contain">
<div id="libreboot" class="section intro">
<h1>dmp vortex86ex in libreboot</h1>
<p>
small embedded system (SoC), i586 CPU
made by a company called DMP. Seems like there are no blobs except a <a href="#kbd_fw">small firmware</a>
for a keyboard controller (PS/2), could use usb keyboard instead if
the ps/2 'blob' is an issue.
</p>
<p>
<a href="../">(Back to homepage)</a>
</p>
<p>
<b>Last updated 00:22 UTC+0100 on November 23rd, 2014</b>
</p>
</div>
<div class="section">
<h2>#libreboot on November 15th, 2014</h2>
<pre>
<pehjota> After the conversation yesterday about KolibriOS, I stumbled upon some hardware that community seems to like: the Vortex86 series of i586-compatible SoCs and the DMP EBOX nettops that use those SoCs. coreboot supports one computer by DMP (src/mainboard/dmp/vortex86ex/) which appears to be the EBOX-3100 (the only EBOX nettop AFAICT without VGA). Three years ago someone ported coreboot to the
<pehjota> EBOX-3300MX but apparently never upstreamed that work. These Vortex86 SoCs look pretty good, freedom-wise: I think there's no microcode at all, the VGA cores don't seem to need option ROMs, and there are no blobs for things like ME/MRC/AGESA. They have relatively low CPU clock rates (most at 600 or 933 MHz), so they aren't great for compiling or gaming. But they're sold as nettops, thin clients,
<pehjota> and embedded systems, and the prices ($95–$269 from the US distributor) aren't bad.
<pehjota> DMP EBOX computers: <a href="http://www.compactpc.com.tw/en/index.html">http://www.compactpc.com.tw/en/index.html</a>. EBOX-3300MX coreboot port: <a href="https://github.com/XVilka/coreboot">https://github.com/XVilka/coreboot</a> (last six commits). Basic (and incomplete) information on the Vortex86 SoCs: <a href="http://www.vortex86.com/">http://www.vortex86.com/</a>. Some technical overviews and resources: <a href="http://www.dmp.com.tw/tech/">http://www.dmp.com.tw/tech/</a>. DMP's BusyBox/Linux distribution (with a Linux config file but apparently no source code):
<pehjota> <a href="http://www.dmp.com.tw/tech/os-xlinux/">http://www.dmp.com.tw/tech/os-xlinux/</a>.
</pre>
<h2>#libreboot on November 16th, 2014</h2>
<pre>
<fchmmr> pehjota, I added info about those vortex86 machines to libreboot.org/release.html and to git.
<fchmmr> By the way, xvilka (the person behind those commits on that github page) is in #coreboot at the moment.
<pehjota> Cool. I can't discuss it right now either (busy and have to go idle soon), but I'm interested in his work and possibly seeing at least EBOX-3350MX (a nice cheap one with VGA) supported as well.
<pehjota> The EBOX systems are cheap (once you add the cost of a power supply and enclosure to a BBB, it isn't much cheaper than an EBOX is) and most have VGA. Some have dual Ethernet and miniPCI.
<mtjm> what is in dmp_kbd_fw_part1.inc in coreboot sources?
<fchmmr> mtjm, coreboot/src/cpu/dmp/vortex86ex/dmp_kbd_fw_part1.inc is part of the "DEBLOB" file in libreboot.
<fchmmr> I'll check it's contents in a coreboot clone.
<fchmmr> it's referenced (included) by src/cpu/dmp/vortex86ex/biosdata.{inc,lds}
<fchmmr> src/cpu/dmp/vortex86ex/biosdata.inc: #include "src/cpu/dmp/vortex86ex/dmp_kbd_fw_part1.inc"
<fchmmr> src/cpu/dmp/vortex86ex/Makefile.inc:chipset_bootblock_inc += $(src)/cpu/dmp/vortex86ex/biosdata.inc
<mtjm> are there other blobs for that platform?
<mtjm> for checking if it's code or data, see code that uses it (hardware only here?) and relevant documentation; if a disassembler produces reasonable code for an appropriate ISA, then it's most probably code, otherwise it's unknown
<mtjm> (or is it e.g. a keymap?)
<fchmmr> As far as I can tell, src/cpu/dmp/vortex86ex/dmp_kbd_fw_part1.inc is the only blob
<fchmmr> xvilka will know more, I'm sure
<i>I then asked for more info in #coreboot and emailed Andrew Wu (original maintainer for that board) asking the same question</i>
</pre>
<h2>#coreboot on November 16th, 2014</h2>
<pre>
<fchmmr> xvilka, what is src/cpu/dmp/vortex86ex/dmp_kbd_fw_part1.inc for? What kind of data is it?
<fchmmr> Is there a document that describes this data?
<idwer> fchmmr: you haven't looked at biosdata.inc/.lds then
<ruik> fchmmr: i think it is firmware for keyboard controller havent check
<fchmmr> idwer, i looked at biosdata.inc, not lds. checking now.
<fchmmr> ruik, keyboard as in ps/2 keyboard?
<ruik> fchmmr: yes
<ruik> fchmmr: could be 8051
<ruik> 0x2 can be LJMP
</pre>
<h2>back to #libreboot on November 16th, 2014</h2>
<pre>
<fchmmr> mtjm, just a hunch from #coreboot discussion: I think it might just be for PS/2 keyboards, not sure.
<fchmmr> If that is the case though, you could basically just ignore it (not use it) and use a usb keyboard, I imagine.
<pehjota> fchmmr: The EBOX-3100 (only Vortex86EX computer by DMP: <<a href="http://www.compactpc.com.tw/en/product/EBOX-3100/ebox-3100_1.html">http://www.compactpc.com.tw/en/product/EBOX-3100/ebox-3100_1.html</a>>.
<fchmmr> coreboot menuconfig just says DMP -> Vortex86EX
<pehjota> Yeah, it doesn't say which computer that is, but I'm guessing it's the EBOX-3100.
<fchmmr> maybe there are more that also work.
<fchmmr> I found a few "86duino" boards for isntance.
<fchmmr> <a href="http://www.bttr-software.de/forum/mix_entry.php?id=13074">http://www.bttr-software.de/forum/mix_entry.php?id=13074</a>
<fchmmr> <a href="http://www.86duino.com/?page_id=85/installation-troubleshooting-1/recompiling-coreboot-seabios-need-config-files">http://www.86duino.com/?page_id=85/installation-troubleshooting-1/recompiling-coreboot-seabios-need-config-files</a>
<pehjota> Yeah, there's 86duino which supposedly comes with coreboot installed. There were some old configs posted to a forum but the links are dead. Other than that I can't find source code. And it's not in upstream coreboot.
<i>Surely someone had a git repository somewhere? Was it public (and is it still online)?</i>
<i>So we need to check all the usual places (github, gitorious, search google/ddg, etc).</i>
<pehjota> Yeah, that thread; the links are dead.
<fchmmr> tried the wayback machine?
<fchmmr> <a href="https://archive.org/web/">https://archive.org/web/</a>
<pehjota> Oh right, that's a Vortex86EX. Maybe that's the one supported by coreboot. DMP sells that one too.
<fchmmr> a lot of the actual commits in coreboot seem to come from DMP themselves.
<pehjota> I didn't, but the Wayback Machine usually doesn't archive .zip files or other things that aren't Web documents.
<fchmmr> sometimes it does.
<pehjota> Yeah, there's a developer at DMP who contributes this code to coreboot.
<pehjota> And who is apparently active with KolibriOS too.
<fchmmr> Andrew Wu
<pehjota> Yup.
<fchmmr> does trisquel 7 run on i586-only hardware?
<fchmmr> i thought it was i686
<fchmmr> I asked in #trisquel
<pehjota> Not sure.
<pehjota> Rereading the message in 8522f99 ("Add support for DMP Vortex86EX PCI mainboard.") and looking at <<a href="http://www.86duino.com/index.php?p=68">http://www.86duino.com/index.php?p=68</a>>, I think that might be the board.
<fchmmr> maybe it runs on all vortex86ex soc's
<pehjota> The code in src/cpu/ should, but src/mainboard/ is specific to individual boards.
<fchmmr> I meant that maybe the same rom will work on multiple boards.
<i>Or maybe all those *many* menuconfig options means that it could...</i>
<pehjota> Although src/mainboard/dmp/vortex86ex/Kconfig appears to support configuration for different Vortex86EX-based boards, which is interesting.
<pehjota> With defaults for 86Duino ZERO.
<fchmmr> yes. lots of config options in menuconfig.
<fchmmr> the default microcode options when selecting that board is "do not include microcode", which is promising.
<pehjota> Yeah, as I said I don't think there's any microcode on Vortex86. I think the ISA is implemented directly in hardware.
<fchmmr> Where does it say 86Duino in that Kconfigfile?
<pehjota> It doesn't; I'm just guessing based on some of the default values.
<fchmmr> select BOARD_ROM_KB_256
<fchmmr> in Kconfig
<fchmmr> probably couldn't fit GRUB in there, then. Would hvae to use SeaBIOS.
<pehjota> And as I said, the initial commit message suggests it could have been originally for the 86Duino ZERO.
<fchmmr> But if there's no vbios, or if it's a full (and free) vbios implementation, then seabios would be ok.
<pehjota> Yeah, it uses SeaBIOS.
<pehjota> Yup.
<fchmmr> personally I'd prefer to use GRUB, but seabios is also fine.
<fchmmr> GRUB wouldn't fit in such a small space
<fchmmr> unless you build it with basically no modules
<pehjota> It's basic VGA hardware with no option ROM AFAICT. No GPU or anything to initialize. The Linux driver is just a framebuffer one.
<fchmmr> this all sounds very promising.
<fchmmr> That file for keyboard can apparently be ignored if it's a freedom issue
<pehjota> So just a framebuffer that gets sent out on VGA.
<fchmmr> (can use usb keyboard)
<pehjota> Yeah.
<fchmmr> <pehjota> So just a framebuffer that gets sent out on VGA.
<fchmmr> <pehjota> The Linux driver is just a framebuffer one.
<pehjota> There's no GPU driver enabled in DMP's Linux config, only a couple video framebuffer drivers.
<fchmmr> I'll ask on the mailing list (coreboot one) who has vortex86 hardware to test on
<pehjota> The Linux config file is in the "source" .zip files here: <<a href="http://www.dmp.com.tw/tech/os-xlinux/">http://www.dmp.com.tw/tech/os-xlinux/</a>>.
<pehjota> (Old version of Linux.)
<fchmmr> Source for Vortex86DX/MX: xlinux-5.7-src-dx.zip (4.74 MB)
<fchmmr> Source for Vortex86SX: xlinux-5.7-src-sx.zip (4.77 MB)
<fchmmr> isn't it vortex86ex that we're looking at?
<pehjota> fchmmr: Yeah, the SoC supported in mainline coreboot is the EX, for which there are apparently no "sources" on that page. I wouldn't use these systems for routers though; there are cheaper Atheros MIPS boards with dual Ethernet ports and built-in wireless chipsets, which should be able to run U-Boot.
<pehjota> Good call on asking Andrew Wu. I was planning to just ask DMP in general about coreboot support for the EBOX systems.
<pehjota> Personally I'm not all that interested in the EX-based systems like 86Duino. They don't have VGA, which would be necessary at least for the use cases I currently have in mind. I think the MX ones are more interesting from a practical perspective (they should be just as potentially free and xvilka ported coreboot to one of them). DX2 ones are also nice, but more expensive.
DMP sells the 86Duino directly, and distributors sell the EBOX-3100 (as well as the other EBOX computers).
</pre>
</div>
<div class="section" id="kbd_fw">
<h2>Firmware for keyboard</h2>
<p>
In coreboot, see src/cpu/dmp/vortex86ex/dmp_kbd_fw_part1.inc. It is believed to be
firmware for a PS/2 keyboard controller, though it's actual purpose is yet to be
confirmed. You could probably exclude this
(libreboot already does, in the DEBLOB script) and plug in a USB keyboard.
</p>
<p>
A copy of dmp_kbd_fw_part1.inc: <a href="dmp_kbd_fw_part1.inc.txt">dmp_kbd_fw_part1.inc.txt</a>.
</p>
<p>
The hex arrays were copied and formated in a PHP file.
This outputs the array in <a href="https://en.wikipedia.org/wiki/Intel_HEX#Format">intel hex format</a>.
See results at <a href="array.php">array.php</a> (for src, clone the libreboot site using the info from the
<a href="../">home page</a>).
The output was then saved as <b>dis.inc</b> and <b>dis.inc.hex</b>.
</p>
</p>
According to ruik in #coreboot IRC channel, this is either 8051 or 8052 assembly code. I installed
2 disassemblers: dis51 (8051 disassembly) and d52 (8052 disassembly). <br/>
$ <b>dis51 < dis.inc > dmp_kbd_fw_part1.inc.disassembled.dis51.txt</b><br/>
And for 8052 disassembly:<br/>
$ <b>d52 -dh dis.inc.hex</b><br/>
$ <b>mv dis.inc.d52 dmp_kbd_fw_part1.inc.disassembled.d52.txt</b>
</p>
<p>
Disassembly results here:<br/>
8051 (dis51) disassembly:
<a href="dmp_kbd_fw_part1.inc.disassembled.dis51.txt">dmp_kbd_fw_part1.inc.disassembled.dis51.txt</a>
- lots of data (non-instruction) sections, might be unknown instructions from 8052?<br/>
<s>8052 (d52) disassembly:
<a href="dmp_kbd_fw_part1.inc.disassembled.d52.txt">dmp_kbd_fw_part1.inc.disassembled.d52.txt</a></s> -
it's 8051 code. See below.
</p>
<p>
The original dmp_kbd_fw_part1.inc in coreboot also has a GPL licence attached, so it's possible
that DMP might give the source code for this. Otherwise, if all else fails, we have the
disassembled code to try to reverse engineer.
</p>
<p>
Todo's from mtjm:
</p>
<ul>
<li>check if there is any documented load address, check if jump addresses are reasonable</li>
<li>check if there are reasonable code sequences (so it's probably really 8051 code)</li>
<li>
make sure that it's really under the GPL, then work on generating the same binary from disassembly
+ comments added when trying to understand it
</li>
<li>check if anything reads the code (there are different memory spaces for code and modifiable data)</li>
<li>maybe it has data or unaligned instructions</li>
<li>(check that you disassembled it properly, in other words)</li>
<li>
you want to get code that a machine runs, while you send some (maybe not all) code to it,
that code has instructions that can read the available code and probably does some i/o that
can be used to send that code
</li>
<li>not sure if it would have any bootrom; 8051 starts running code at address 0</li>
</ul>
<p>
Andrew Wu replied to my email. The keyboard controller firmware is non-free; no source code available.
The GPL license on it is bogus. So libreboot will simply not include PS/2 keyboard support for this machine,
unless it can be reverse engineered based on the above. (not needed. just use USB)
</p>
<p>
Andrew also said that the firmware is <b>8051</b> code, not 8052. The firmware
implements a <b>standard PC/AT 8042 keyboard controller (handling PS/2 KB_CLK, KB_DATA signals, etc)
There are datasheets for this!!</b>.
</p>
<p>
Andrew also said that he doesn't know about specific hardware as he is in sotfware,
so he forwarded me to sales, they/he will let me know what vortex86ex systems are actually available for coreboot.
</p>
<pre>
The 8051 PS/2 keyboard controller firmware not only controls PS/2 keyboard/mouse, but also handles some system functions, like system reset, A20 line enable, etc, via I/O port 60h/64h.
(Because standard PC/AT 8042 keyboard controller does so).
In short, if software reads or writes I/O port 60h/64h in vortex86ex, then you need the 8051 firmware, otherwise these I/O ports won’t work correctly.
I think most OSes, like DOS or Windows, will access port 60h/64h on startup, so removing the firmware code may cause many compatibility problems.
</pre>
<pre>
Instead I propose that I take some minimal time to re-disassemble it
trough the usual free software tools like gdb, binutils(readelf, and
objdump), or radare2.
^ other approaches.
</pre>
<p>
If GNU/Linux will work, then it's ok.
</p>
</div>
<br/>
<hr/>
<div class="section footer">
<?php
include "../footer.php";
?>
</div>
</div>
</body>
</html>
|