Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 Dec 2012 12:40:59 -0800
From:      Thomas Skibo <ThomasSkibo@sbcglobal.net>
To:        freebsd-arm@freebsd.org
Subject:   FreeBSD on Zedboard (Xilinx Zynq-7000)
Message-ID:  <50DF555B.9060601@sbcglobal.net>
In-Reply-To: <50DF4BD9.8080601@sbcglobal.net>
References:  <50DF4BD9.8080601@sbcglobal.net>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------070705020506020703020902
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit


Hello.

I have been tinkering with this for several weeks:  I booted FreeBSD
on a Zedboard (a low-cost evaluation board for the Xilinx Zynq-7000 SoC).

It was just a matter of coming up with a device tree file, implementing
a UART driver, attaching the generic sdhci driver to the Zynq's SD
hardware, and adding a new CPU id.  I don't have an ethernet driver yet
but I've started on it.

I created an sdhci_fdt driver based on sdhci_pci.c.  It should be
useful for other platforms.  I won't be surprised if somebody points
out there is one already.

One thing that stumped me for a while is that the interrupt controller
driver, gic.c, does not initialize the priority mask register
(GICC_PMR).  The boot-loader left it at zero which masked all
interrupts.  For now, I plug 0xff into it in my initarm_late_init()
function in zynq7_machdep.c.

I'll provide my source soon.  I want to do a few clean-ups of course
and I'll take any feed-back on my naming conventions and how I organized 
the files.

Thanks,

-- 
--------
Thomas Skibo
ThomasSkibo@sbcglobal.net










--------------070705020506020703020902
Content-Type: text/plain; charset=UTF-8;
 name="boot2.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="boot2.txt"

CnplZC1ib290PiB0ZnRwIDB4MTAwMDAwIGtlcm5lbC5iaW4KVXNpbmcgenlucV9nZW0gZGV2
aWNlClRGVFAgZnJvbSBzZXJ2ZXIgMTkyLjE2OC4yLjEwOyBvdXIgSVAgYWRkcmVzcyBpcyAx
OTIuMTY4LjIuMTEKRmlsZW5hbWUgJ2tlcm5lbC5iaW4nLgpMb2FkIGFkZHJlc3M6IDB4MTAw
MDAwCkxvYWRpbmc6ICoIIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CgkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkgIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIwoJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpk
b25lCkJ5dGVzIHRyYW5zZmVycmVkID0gMjgyOTc1MiAoMmIyZGI4IGhleCkKemVkLWJvb3Q+
IGdvIDB4MTAwMDAwCiMjIFN0YXJ0aW5nIGFwcGxpY2F0aW9uIGF0IDB4MDAxMDAwMDAgLi4u
CktEQjogZGVidWdnZXIgYmFja2VuZHM6IGRkYgpLREI6IGN1cnJlbnQgYmFja2VuZDogZGRi
CkNvcHlyaWdodCAoYykgMTk5Mi0yMDEyIFRoZSBGcmVlQlNEIFByb2plY3QuCkNvcHlyaWdo
dCAoYykgMTk3OSwgMTk4MCwgMTk4MywgMTk4NiwgMTk4OCwgMTk4OSwgMTk5MSwgMTk5Miwg
MTk5MywgMTk5NAoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p
YS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KRnJlZUJTRCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVt
YXJrIG9mIFRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCkZyZWVCU0QgMTAuMC1DVVJSRU5UICMx
NDYgcjI0NDc2OE06IFNhdCBEZWMgMjkgMTA6MTQ6NDMgUFNUIDIwMTIKICAgIHJvb3RAZnJl
ZWJzZDovdXNyL29iai9hcm0uYXJtL3Vzci9ob21lL3NraWJvL3NyYy9zeXMvWkVEQk9BUkQg
YXJtClByZWxvYWRlZCBlbGYga2VybmVsICJrZXJuZWwiIGF0IDB4YzAzY2RmZDAuCkNQVTog
Q29ydGV4IEE5LXIzIHJldiAwIChDb3J0ZXgtQSBjb3JlKQogU3VwcG9ydGVkIGZlYXR1cmVz
OiBBUk1fSVNBIFRIVU1CMiBKQVpFTExFIFRIVU1CRUUgQVJNdjQgU2VjdXJpdHlfRXh0CiBX
QiBkaXNhYmxlZCBFQUJUIGJyYW5jaCBwcmVkaWN0aW9uIGVuYWJsZWQKTG9VVToyIExvQzox
IExvVUlTOjIgCkNhY2hlIGxldmVsIDE6IAogMzJLQi8zMkIgNC13YXkgZGF0YSBjYWNoZSBX
QiBSZWFkLUFsbG9jIFdyaXRlLUFsbG9jCiAzMktCLzMyQiA0LXdheSBpbnN0cnVjdGlvbiBj
YWNoZSBSZWFkLUFsbG9jCnJlYWwgbWVtb3J5ICA9IDUzNjg3MDkxMiAoNTEyIE1CKQpQaHlz
aWNhbCBtZW1vcnkgY2h1bmsocyk6CjB4MDAxMDAwIC0gMHgwZmZmZmYsIDEwNDQ0ODAgYnl0
ZXMgKDI1NSBwYWdlcykKMHg0ODgwMDAgLSAweDFmNWJiZmZmLCA1MjEzNTUyNjQgYnl0ZXMg
KDEyNzI4NCBwYWdlcykKYXZhaWwgbWVtb3J5ID0gNTE5NzA4NjcyICg0OTUgTUIpCnJhbmRv
bSBkZXZpY2Ugbm90IGxvYWRlZDsgdXNpbmcgaW5zZWN1cmUgZW50cm9weQpudWxsOiA8bnVs
bCBkZXZpY2UsIHplcm8gZGV2aWNlPgpvcGVuZmlybTogPE9wZW4gRmlybXdhcmUgY29udHJv
bCBkZXZpY2U+CnJhbmRvbTogPGVudHJvcHkgc291cmNlLCBTb2Z0d2FyZSwgWWFycm93Pgpt
ZW06IDxtZW1vcnk+CmZkdGJ1czA6IDxGRFQgbWFpbiBidXM+CnNpbXBsZWJ1czA6IDxGbGF0
dGVuZWQgZGV2aWNlIHRyZWUgc2ltcGxlIGJ1cz4gb24gZmR0YnVzMApnaWMwOiA8QVJNIEdl
bmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXI+IG1lbSAweGY4ZjAxMDAwLTB4ZjhmMDFmZmYs
MHhmOGYwMDEwMC0weGY4ZjAwMWZmIG9uIHNpbXBsZWJ1czAKZ2ljMDogcG4gMHgzOTAsIGFy
Y2ggMHgxLCByZXYgMHgyLCBpbXBsZW1lbnRlciAweDQzYiBuaXJxcyA5NgptcF90bXIwOiA8
QVJNIEdlbmVyaWMgTVBDb3JlIFRpbWVycz4gbWVtIDB4ZjhmMDAyMDAtMHhmOGYwMDJmZiww
eGY4ZjAwNjAwLTB4ZjhmMDA2MWYgaXJxIDI3LDI5IG9uIHNpbXBsZWJ1czAKVGltZWNvdW50
ZXIgIkFSTSBNUENvcmUgVGltZWNvdW50ZXIiIGZyZXF1ZW5jeSA1MDAwMDAwMCBIeiBxdWFs
aXR5IDEwMDAKRXZlbnQgdGltZXIgIkFSTSBNUENvcmUgRXZlbnR0aW1lciIgZnJlcXVlbmN5
IDUwMDAwMDAwIEh6IHF1YWxpdHkgMTAwMApsMmNhY2hlMDogPFBMMzEwIEwyIGNhY2hlIGNv
bnRyb2xsZXI+IG1lbSAweGY4ZjAyMDAwLTB4ZjhmMDJmZmYgb24gc2ltcGxlYnVzMAogIEwy
IENhY2hlOiA1MTJLQi8zMkIgOCB3YXlzCnNpbXBsZWJ1czE6IDxGbGF0dGVuZWQgZGV2aWNl
IHRyZWUgc2ltcGxlIGJ1cz4gb24gZmR0YnVzMAp1YXJ0MDogPHp5bnE3X3VhcnQ+IG1lbSAw
eGUwMDAxMDAwLTB4ZTAwMDFmZmYgaXJxIDgyIG9uIHNpbXBsZWJ1czEKdWFydDA6IGZhc3Qg
aW50ZXJydXB0CnVhcnQwOiBjb25zb2xlICgxMTUyMDAsbiw4LDEpCnNkaGNpX2ZkdDA6IDxa
eW5xLTcwMDAgZ2VuZXJpYyBmZHQgU0RIQ0kgY29udHJvbGxlcj4gbWVtIDB4ZTAxMDAwMDAt
MHhlMDEwMGZmZiBpcnEgNTYgb24gc2ltcGxlYnVzMQpzZGhjaV9mZHQwLXNsb3QwOiA0OE1I
eiBIUyA0Yml0cyAzLjNWIERNQQpzZGhjaV9mZHQwLXNsb3QwOiA9PT09PT09PT09PT09PSBS
RUdJU1RFUiBEVU1QID09PT09PT09PT09PT09CnNkaGNpX2ZkdDAtc2xvdDA6IFN5cyBhZGRy
OiAweDAwMDAwMDAwIHwgVmVyc2lvbjogIDB4MDAwMDg5MDEKc2RoY2lfZmR0MC1zbG90MDog
QmxrIHNpemU6IDB4MDAwMDAwMDAgfCBCbGsgY250OiAgMHgwMDAwMDAwMApzZGhjaV9mZHQw
LXNsb3QwOiBBcmd1bWVudDogMHgwMDAwMDAwMCB8IFRybiBtb2RlOiAweDAwMDAwMDAwCnNk
aGNpX2ZkdDAtc2xvdDA6IFByZXNlbnQ6ICAweDAxZmYwMDAwIHwgSG9zdCBjdGw6IDB4MDAw
MDAwMDAKc2RoY2lfZmR0MC1zbG90MDogUG93ZXI6ICAgIDB4MDAwMDAwMDAgfCBCbGsgZ2Fw
OiAgMHgwMDAwMDAwMApzZGhjaV9mZHQwLXNsb3QwOiBXYWtlLXVwOiAgMHgwMDAwMDAwMCB8
IENsb2NrOiAgICAweDAwMDAwMDAwCnNkaGNpX2ZkdDAtc2xvdDA6IFRpbWVvdXQ6ICAweDAw
MDAwMDAwIHwgSW50IHN0YXQ6IDB4MDAwMDAwMDAKc2RoY2lfZmR0MC1zbG90MDogSW50IGVu
YWI6IDB4MDFmZjAwZmIgfCBTaWcgZW5hYjogMHgwMWZmMDBmYgpzZGhjaV9mZHQwLXNsb3Qw
OiBBQzEyIGVycjogMHgwMDAwMDAwMCB8IFNsb3QgaW50OiAweDAwMDAwMDAwCnNkaGNpX2Zk
dDAtc2xvdDA6IENhcHM6ICAgICAweDY5ZWYzMGIwIHwgTWF4IGN1cnI6IDB4MDAwMDAwMDEK
c2RoY2lfZmR0MC1zbG90MDogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpzZGhjaV9mZHQwOiAxIHNsb3QocykgYWxsb2NhdGVkCm1tYzA6IDxNTUMvU0Qg
YnVzPiBvbiBzZGhjaV9mZHQwClRpbWVjb3VudGVycyB0aWNrIGV2ZXJ5IDEwLjAwMCBtc2Vj
CnRjcF9pbml0OiBuZXQuaW5ldC50Y3AudGNiaGFzaHNpemUgYXV0byB0dW5lZCB0byA4MTky
CmxvMDogYnBmIGF0dGFjaGVkCnNkaGNpX2ZkdDAtc2xvdDA6IERpdmlkZXIgMTI4IGZvciBm
cmVxIDE4NzUwMCAobWF4IDQ4MDAwMDAwKQptbWMwOiBQcm9iaW5nIGJ1cwptbWMwOiBTRCAy
LjAgaW50ZXJmYWNlIGNvbmRpdGlvbnM6IE9LCm1tYzA6IFNEIHByb2JlOiBPSyAoT0NSOiAw
eDAwZmY4MDAwKQptbWMwOiBDdXJyZW50IE9DUjogMHgwMGZmODAwMAptbWMwOiBQcm9iaW5n
IGNhcmRzCm1tYzA6IE5ldyBjYXJkIGRldGVjdGVkIChDSUQgMDI1NDRkNTM0MTMwMzQ0NzA2
MjFkNTNmY2IwMGFiMDApCm1tYzA6IE5ldyBjYXJkIGRldGVjdGVkIChDU0QgNDAwZTAwMzI1
YjU5MDAwMDFkNmY3ZjgwMGE0MDAwMDApCm1tYzA6IENhcmQgYXQgcmVsYXRpdmUgYWRkcmVz
cyA0NjYwIGFkZGVkOgptbWMwOiAgY2FyZDogU0RIQyBTQTA0RyAwLjYgU04gNTY3NjIzNjI3
IE1GRyAxMS8yMDEwIGJ5IDIgVE0KbW1jMDogIGJ1czogNGJpdCwgNTBNSHosIGhpZ2ggc3Bl
ZWQgdGltaW5nCm1tYzA6ICBtZW1vcnk6IDc3MTY4NjQgYmxvY2tzLCBlcmFzZSBzZWN0b3Ig
ODE5MiBibG9ja3MKbW1jMDogc2V0dGluZyB0cmFuc2ZlciByYXRlIHRvIDQ4LjAwME1IeiAo
aGlnaCBzcGVlZCB0aW1pbmcpCnNkaGNpX2ZkdDAtc2xvdDA6IERpdmlkZXIgMCBmb3IgZnJl
cSA0ODAwMDAwMCAobWF4IDQ4MDAwMDAwKQptbWNzZDA6IDM3NjhNQiA8U0RIQyBTQTA0RyAw
LjYgU04gNTY3NjIzNjI3IE1GRyAxMS8yMDEwIGJ5IDIgVE0+IGF0IG1tYzAgNDguME1Iei80
Yml0LzY1NTM1LWJsb2NrCkdFT006IG5ldyBkaXNrIG1tY3NkMAptbWMwOiBzZXR0aW5nIGJ1
cyB3aWR0aCB0byA0IGJpdHMKR0VPTV9QQVJUOiBwYXJ0aXRpb24gMSBpcyBub3QgYWxpZ25l
ZCBvbiA0MTk0MzA0IGJ5dGVzCkdFT01fUEFSVDogcGFydGl0aW9uIDIgaXMgbm90IGFsaWdu
ZWQgb24gNDE5NDMwNCBieXRlcwpHRU9NX1BBUlQ6IHBhcnRpdGlvbiAzIGlzIG5vdCBhbGln
bmVkIG9uIDQxOTQzMDQgYnl0ZXMKVHJ5aW5nIHRvIG1vdW50IHJvb3QgZnJvbSB1ZnM6bW1j
c2QwczIgW10uLi4Kd2FybmluZzogbm8gdGltZS1vZi1kYXkgY2xvY2sgcmVnaXN0ZXJlZCwg
c3lzdGVtIHRpbWUgd2lsbCBub3QgYmUgc2V0IGFjY3VyYXRlbHkKc3RhcnRfaW5pdDogdHJ5
aW5nIC9zYmluL2luaXQKU2V0dGluZyBob3N0dXVpZDogOTA2N2M5NGMtNTE0ZC0xMWUyLTg1
OGYtYjc3OWU3OWQxZWE3LgpTZXR0aW5nIGhvc3RpZDogMHg3YmI1MmViYy4KTm8gc3VpdGFi
bGUgZHVtcCBkZXZpY2Ugd2FzIGZvdW5kLgpFbnRyb3B5IGhhcnZlc3Rpbmc6IGludGVycnVw
dHMgZXRoZXJuZXQgcG9pbnRfdG9fcG9pbnRzaGEyNTY6IC9rZXJuZWw6IE5vIHN1Y2ggZmls
ZSBvciBkaXJlY3RvcnkKIGtpY2tzdGFydC4KU3RhcnRpbmcgZmlsZSBzeXN0ZW0gY2hlY2tz
OgovZGV2L21tY3NkMHMyOiBGSUxFIFNZU1RFTSBDTEVBTjsgU0tJUFBJTkcgQ0hFQ0tTCi9k
ZXYvbW1jc2QwczI6IGNsZWFuLCA2OTAxMiBmcmVlICgyOCBmcmFncywgODYyMyBibG9ja3Ms
IDAuMCUgZnJhZ21lbnRhdGlvbikKTW91bnRpbmcgbG9jYWwgZmlsZSBzeXN0ZW1zOi4KV3Jp
dGluZyBlbnRyb3B5IGZpbGU6LgpTZXR0aW5nIGhvc3RuYW1lOiB6ZWRib2FyZC4KU3RhcnRp
bmcgTmV0d29yazogbG8wLgpsbzA6IGZsYWdzPTgwNDk8VVAsTE9PUEJBQ0ssUlVOTklORyxN
VUxUSUNBU1Q+IG1ldHJpYyAwIG10dSAxNjM4NAlvcHRpb25zPTYwMDAwMzxSWENTVU0sVFhD
U1VNLFJYQ1NVTV9JUFY2LFRYQ1NVTV9JUFY2PgoJaW5ldCAxMjcuMC4wLjEgbmV0bWFzayAw
eGZmMDAwMDAwIApTdGFydGluZyBkZXZkLgpDcmVhdGluZyBhbmQvb3IgdHJpbW1pbmcgbG9n
IGZpbGVzLgpTdGFydGluZyBzeXNsb2dkLgpzeXNsb2dkOiB0aW1lZCBvdXQgd2FpdGluZyBm
b3IgY2hpbGQKL2V0Yy9yYzogV0FSTklORzogZmFpbGVkIHRvIHN0YXJ0IHN5c2xvZ2QKcmVh
bHBhdGg6IC9kZXYvZHVtcGRldjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQovZXRjL3Jj
OiBXQVJOSU5HOiBEdW1wIGRldmljZSBkb2VzIG5vdCBleGlzdC4gIFNhdmVjb3JlIG5vdCBy
dW4uCkVMRiBsZGNvbmZpZyBwYXRoOiAvbGliIC91c3IvbGliIC91c3IvbGliL2NvbXBhdApD
bGVhcmluZyAvdG1wIChYIHJlbGF0ZWQpLgpVcGRhdGluZyBtb3RkOi4KU3RhcnRpbmcgY3Jv
bi4KU3RhcnRpbmcgYmFja2dyb3VuZCBmaWxlIHN5c3RlbSBjaGVja3MgaW4gNjAgc2Vjb25k
cy4KClNhdCBEZWMgMjkgMDM6NTE6NDkgVVRDIDIwMTIKCkZyZWVCU0QvYXJtICh6ZWRib2Fy
ZCkgKHR0eXUwKQoKbG9naW46IHJvb3QKRGVjIDI5IDAzOjUzOjAzIHplZGJvYXJkIGxvZ2lu
OiBST09UIExPR0lOIChyb290KSBPTiB0dHl1MApMYXN0IGxvZ2luOiBTYXQgRGVjIDI5IDAz
OjEzOjEyIG9uIHR0eXUwCkZyZWVCU0QgMTAuMC1DVVJSRU5UIChaRURCT0FSRCkgIzE0NiBy
MjQ0NzY4TTogU2F0IERlYyAyOSAxMDoxNDo0MyBQU1QgMjAxMgoKV2VsY29tZSB0byBGcmVl
QlNEIQoKLi4uW2VkaXRlZF0uLi4KCnJvb3RAemVkYm9hcmQ6LyAjIHVuYW1lIC1hCkZyZWVC
U0QgemVkYm9hcmQgMTAuMC1DVVJSRU5UIEZyZWVCU0QgMTAuMC1DVVJSRU5UICMxNDYgcjI0
NDc2OE06IFNhdCBEZWMgMjkgMTA6MTQ6NDMgUFNUIDIwMTIgICAgIHJvb3RAZnJlZWJzZDov
dXNyL29iai9hcm0uYXJtL3Vzci9ob21lL3NraWJvL3NyYy9zeXMvWkVEQk9BUkQgIGFybQpy
b290QHplZGJvYXJkOi8gIyBoYWx0CkRlYyAyOSAwNDowNzozNiB6ZWRib2FyZCBoYWx0OiBo
YWx0ZWQgYnkgcm9vdApEZWMgMjkgMDQ6MDc6MzkgemVkYm9hcmQgc3lzbG9nZDogZXhpdGlu
ZyBvbiBzaWduYWwgMTUKV2FpdGluZyAobWF4IDYwIHNlY29uZHMpIGZvciBzeXN0ZW0gcHJv
Y2VzcyBgdm5scnUnIHRvIHN0b3AuLi5kb25lCldhaXRpbmcgKG1heCA2MCBzZWNvbmRzKSBm
b3Igc3lzdGVtIHByb2Nlc3MgYGJ1ZmRhZW1vbicgdG8gc3RvcC4uLmRvbmUKV2FpdGluZyAo
bWF4IDYwIHNlY29uZHMpIGZvciBzeXN0ZW0gcHJvY2VzcyBgc3luY2VyJyB0byBzdG9wLi4u
ClN5bmNpbmcgZGlza3MsIHZub2RlcyByZW1haW5pbmcuLi4yIDEgMCBkb25lClN5bmNpbmcg
ZGlza3MsIGJ1ZmZlcnMgcmVtYWluaW5nLi4uIDYgNiA2IDYgNiA2IDYgNiA2IDYgNSA1IDUg
NSA1IDUgNSA1IDUgNSA1IDUgNCA0IDQgNCA0IDQgNCA0IDQgNCA0IDQgMyAzIDMgMyAzIDMg
MyAzIDMgMyAzIDMgCkZpbmFsIHN5bmMgY29tcGxldGUKVXB0aW1lOiA1Mm01MXMKClRoZSBv
cGVyYXRpbmcgc3lzdGVtIGhhcyBoYWx0ZWQuClBsZWFzZSBwcmVzcyBhbnkga2V5IHRvIHJl
Ym9vdC4KCgo=
--------------070705020506020703020902--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50DF555B.9060601>