gnu: emacs: Fix format strings for compatibility with Guile 3.
[jackhill/guix/guix.git] / gnu / packages / firmware.scm
CommitLineData
4902c3ec 1;;; GNU Guix --- Functional package management for GNU
bd2e1a8c 2;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
e36a67c9 3;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
ce03b453 4;;; Copyright © 2017 David Craven <david@craven.ch>
e9252fd1 5;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
bb5c3582 6;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
04e46b98 7;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
283fb648 8;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
a493a526 9;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
4902c3ec
LC
10;;;
11;;; This file is part of GNU Guix.
12;;;
13;;; GNU Guix is free software; you can redistribute it and/or modify it
14;;; under the terms of the GNU General Public License as published by
15;;; the Free Software Foundation; either version 3 of the License, or (at
16;;; your option) any later version.
17;;;
18;;; GNU Guix is distributed in the hope that it will be useful, but
19;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;;; GNU General Public License for more details.
22;;;
23;;; You should have received a copy of the GNU General Public License
24;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26(define-module (gnu packages firmware)
ce03b453 27 #:use-module ((guix licenses) #:prefix license:)
4902c3ec 28 #:use-module (guix packages)
e36a67c9 29 #:use-module (guix download)
e9252fd1 30 #:use-module (guix utils)
4902c3ec
LC
31 #:use-module (guix git-download)
32 #:use-module (guix build-system gnu)
33 #:use-module (gnu packages)
a5bc3dfe
DC
34 #:use-module (gnu packages admin)
35 #:use-module (gnu packages assembly)
a493a526 36 #:use-module (gnu packages base)
e36a67c9 37 #:use-module (gnu packages bison)
4902c3ec
LC
38 #:use-module (gnu packages cmake)
39 #:use-module (gnu packages cross-base)
e36a67c9 40 #:use-module (gnu packages flex)
e9252fd1 41 #:use-module (gnu packages gcc)
a5bc3dfe 42 #:use-module (gnu packages linux)
1b533bad
DC
43 #:use-module (gnu packages perl)
44 #:use-module (gnu packages python))
4902c3ec
LC
45
46(define-public ath9k-htc-firmware
47 (package
48 (name "ath9k-htc-firmware")
7c473310 49 (version "1.4.0")
4902c3ec
LC
50 (source (origin
51 (method git-fetch)
52 (uri (git-reference
53 (url "https://github.com/qca/open-ath9k-htc-firmware.git")
54 (commit version)))
55 (sha256
56 (base32
7c473310 57 "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
123334fa 58 (file-name (git-file-name name version))
fc1adab1 59 (patches (search-patches "ath9k-htc-firmware-objcopy.patch"))))
4902c3ec
LC
60 (build-system gnu-build-system)
61 (arguments
dc1d3cde
KK
62 '(#:phases
63 (modify-phases %standard-phases
64 (add-before 'configure 'pre-configure
283fb648 65 (lambda* (#:key inputs native-inputs #:allow-other-keys)
dc1d3cde 66 (chdir "target_firmware")
4902c3ec 67
dc1d3cde
KK
68 ;; 'configure' is a simple script that runs 'cmake' with
69 ;; the right flags.
70 (substitute* "configure"
71 (("^TOOLCHAIN=.*$")
72 (string-append "TOOLCHAIN="
283fb648 73 (assoc-ref (or native-inputs inputs) "cross-gcc")
dc1d3cde
KK
74 "\n")))
75 #t))
76 (replace 'install
77 (lambda* (#:key outputs #:allow-other-keys)
78 (let* ((out (assoc-ref outputs "out"))
79 (fw-dir (string-append out "/lib/firmware")))
dc1d3cde 80 (for-each (lambda (file)
65a3c342 81 (install-file file fw-dir))
dc1d3cde
KK
82 (find-files "." "\\.fw$"))
83 #t))))
4902c3ec
LC
84 #:tests? #f))
85
86 ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
87 ;; Use our own tool chain for that.
a493a526
MB
88 (native-inputs `(("cross-gcc" ,(cross-gcc
89 "xtensa-elf"
90 #:xbinutils (cross-binutils "xtensa-elf"
91 binutils-2.33)))
92 ("cross-binutils" ,(cross-binutils "xtensa-elf" binutils-2.33))
c69959f0 93 ("cmake" ,cmake-minimal)
4902c3ec
LC
94 ("perl" ,perl)))
95 (home-page "http://wireless.kernel.org/en/users/Drivers/ath9k_htc")
96 (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
97 (description
98 "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
e881752c 99802.11n NICs (aka Wi-Fi USB dongles). It is used by the ath9k driver of
4902c3ec 100Linux-libre.")
ce03b453 101 (license (license:non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
e36a67c9
EB
102
103(define-public b43-tools
bb5c3582
TGR
104 (let ((commit "27892ef741e7f1d08cb939744f8b8f5dac7b04ae")
105 (revision "1"))
e36a67c9
EB
106 (package
107 (name "b43-tools")
bb5c3582 108 (version (git-version "0.0.0" revision commit))
e36a67c9
EB
109 (source
110 (origin
111 (method git-fetch)
112 (uri (git-reference
113 (url "http://git.bues.ch/git/b43-tools.git")
114 (commit commit)))
123334fa 115 (file-name (git-file-name name version))
e36a67c9
EB
116 (sha256
117 (base32
bb5c3582 118 "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
e36a67c9
EB
119 (build-system gnu-build-system)
120 (native-inputs
121 `(("flex" ,flex)
122 ("bison" ,bison)))
123 (arguments
124 `(#:modules ((srfi srfi-1)
125 (guix build gnu-build-system)
126 (guix build utils))
bb5c3582 127 #:tests? #f ; no tests
e36a67c9
EB
128 #:phases
129 (let ((subdirs '("assembler" "disassembler")))
130 (modify-phases %standard-phases
bb5c3582 131 (delete 'configure) ; no configure script
e36a67c9
EB
132 (add-before 'build 'patch-/bin/true
133 (lambda _
134 (substitute* (find-files "." "Makefile")
135 (("/bin/true") ":"))
136 #t))
137 (replace 'build
138 (lambda _
315c89f5
TGR
139 (for-each (lambda (dir)
140 (invoke "make" "-C" dir "CC=gcc"))
141 subdirs)
142 #t))
e36a67c9
EB
143 (replace 'install
144 (lambda* (#:key outputs #:allow-other-keys)
145 (let ((out (assoc-ref outputs "out")))
146 (mkdir-p (string-append out "/bin"))
315c89f5
TGR
147 (for-each (lambda (dir)
148 (invoke "make" "-C" dir
149 (string-append "PREFIX=" out)
150 "install"))
151 subdirs)
152 #t)))))))
e36a67c9 153 (home-page
3ebf12ea 154 "https://bues.ch/cms/hacking/misc.html#linux_b43_driver_firmware_tools")
e36a67c9
EB
155 (synopsis "Collection of tools for the b43 wireless driver")
156 (description
157 "The b43 firmware tools is a collection of firmware extractor,
158assembler, disassembler, and debugging tools for the Linux kernel b43 wireless
159driver.")
ce03b453 160 (license license:gpl2))))
e36a67c9
EB
161
162(define-public openfwwf-firmware
163 (package
164 (name "openfwwf-firmware")
165 (version "5.2")
166 (source
167 (origin
168 (method url-fetch)
169 (uri (string-append "http://netweb.ing.unibs.it/~openfwwf/firmware/"
170 "openfwwf-" version ".tar.gz"))
171 (sha256
172 (base32
173 "1p60gdi7w88s7qw82d3g9v7mk887mhvidf4l5q5hh09j10h37q4x"))))
174 (build-system gnu-build-system)
175 (native-inputs
176 `(("b43-tools" ,b43-tools)))
177 (arguments
178 `(#:make-flags (list (string-append "PREFIX="
179 (assoc-ref %outputs "out")
180 "/lib/firmware/b43-open"))
181 #:tests? #f ;no tests
182 #:phases (modify-phases %standard-phases
183 (delete 'configure))))
184 (home-page "http://netweb.ing.unibs.it/~openfwwf/")
185 (synopsis "Firmware for BCM43xx devices")
186 (description
187 "This is firmware from Open FirmWare for WiFi networks (OpenFWWF) for the
188Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5. It is used
189by the b43-open driver of Linux-libre.")
ce03b453 190 (license license:gpl2)))
1b533bad 191
454403f1
VC
192(define* (make-opensbi-package platform variant #:optional (arch "riscv64"))
193 (package
cd63c2be
VC
194 (name (string-replace-substring
195 (string-append "opensbi-" platform "-" variant)
196 "_" "-"))
5eeb70a7 197 (version "0.6")
454403f1
VC
198 (source
199 (origin
200 (method git-fetch)
201 (uri (git-reference
202 (url "https://github.com/riscv/opensbi.git")
203 (commit (string-append "v" version))))
204 (file-name (git-file-name name version))
205 (sha256
5eeb70a7 206 (base32 "129ypdga0fzn657n2f42g2a1vx3hf8x7sd78h06d35pgkry0jkl7"))))
454403f1
VC
207 (build-system gnu-build-system)
208 (native-inputs
209 `(,@(if (and (not (string-prefix? "riscv64" (%current-system)))
210 (string-prefix? "riscv64" arch))
211 `(("cross-gcc" ,(cross-gcc "riscv64-linux-gnu" #:xgcc gcc-7))
212 ("cross-binutils" ,(cross-binutils "riscv64-linux-gnu")))
213 '())))
214 (arguments
215 `(#:tests? #f ; no check target
216 #:make-flags (list (string-append "PLATFORM=" ,platform "/" ,variant)
217 ,@(if (and (not (string-prefix? "riscv64"
218 (%current-system)))
219 (string-prefix? "riscv64" arch))
220 `("CROSS_COMPILE=riscv64-linux-gnu-")
221 '())
222 "FW_PAYLOAD=n"
223 "V=1")
224 #:phases
225 (modify-phases %standard-phases
226 (delete 'configure)
227 (replace 'install
228 (lambda* (#:key outputs #:allow-other-keys)
229 (let ((out (assoc-ref outputs "out"))
230 (bin (find-files "." ".*fw_.*.elf$")))
231 (for-each
232 (lambda (file)
233 (install-file file out))
234 bin))
235 #t)))))
236 (home-page "https://github.com/riscv/opensbi")
237 (synopsis "RISC-V Open Source Supervisor Binary Interface")
238 (description "A reference implementation of the RISC-V SBI specifications
239for platform-specific firmwares executing in M-mode.")
240 (license (list license:bsd-2
241 ;; lib/utils/libfdt/* is dual licensed under bsd-2 and gpl2+.
242 license:gpl2+
243 ;; platform/ariane-fpga/* is gpl2.
244 license:gpl2))))
245
246(define-public opensbi-qemu-virt
247 (make-opensbi-package "qemu" "virt"))
248
01501a30
VC
249(define-public opensbi-sifive-fu540
250 (make-opensbi-package "sifive" "fu540"))
251
2d9b0581
VC
252(define-public opensbi-qemu-sifive-u
253 ;; Dropped upstream, as all functionality is present in the sifive-fu540
254 ;; target for recent versions of qemu, u-boot and linux.
255 (deprecated-package "opensbi-qemu-sifive-u" opensbi-sifive-fu540))
256
1b533bad
DC
257(define-public seabios
258 (package
259 (name "seabios")
dbc533c1 260 (version "1.13.0")
ae623b3f
TGR
261 (source
262 (origin
263 (method git-fetch)
264 (uri (git-reference
265 (url "https://review.coreboot.org/seabios.git")
266 (commit (string-append "rel-" version))))
267 (file-name (git-file-name name version))
268 (sha256
dbc533c1 269 (base32 "1n1bd6msfs7xn8844sz2qnm7hb5x2qfl3zb06kp4bx9vdc3i6619"))))
1b533bad
DC
270 (build-system gnu-build-system)
271 (native-inputs
dbc533c1 272 `(("python" ,python-wrapper)))
1b533bad 273 (arguments
ae623b3f 274 `(#:tests? #f ; no check target
1b533bad
DC
275 #:phases
276 (modify-phases %standard-phases
277 (replace 'configure
278 (lambda _
279 (setenv "CC" "gcc")
280 #t))
281 (replace 'install
282 (lambda* (#:key outputs #:allow-other-keys)
283 (let* ((out (assoc-ref outputs "out"))
284 (fmw (string-append out "/share/firmware")))
285 (mkdir-p fmw)
5f82a9d5
TGR
286 (copy-file "out/bios.bin" (string-append fmw "/bios.bin"))
287 #t))))))
1b533bad
DC
288 (home-page "https://www.seabios.org/SeaBIOS")
289 (synopsis "x86 BIOS implementation")
5a80c15c
RW
290 (description "SeaBIOS is an implementation of a 16bit x86 BIOS. SeaBIOS
291can run in an emulator or it can run natively on X86 hardware with the use of
292coreboot.")
1b533bad
DC
293 ;; Dual licensed.
294 (license (list license:gpl3+ license:lgpl3+
295 ;; src/fw/acpi-dsdt.dsl is lgpl2
296 license:lgpl2.1
297 ;; src/fw/lzmadecode.c and src/fw/lzmadecode.h are lgpl3+ and
298 ;; cpl with a linking exception.
299 license:cpl1.0))))
a5bc3dfe
DC
300
301;; OVMF is part of the edk2 source tree.
302(define edk2-commit "13a50a6fe1dcfa6600c38456ee24e0f9ecf51b5f")
303(define edk2-version (git-version "20170116" "1" edk2-commit))
304(define edk2-origin
305 (origin
306 (method git-fetch)
307 (uri (git-reference
308 (url "https://github.com/tianocore/edk2")
309 (commit edk2-commit)))
310 (file-name (git-file-name "edk2" edk2-version))
311 (sha256
312 (base32
313 "1gy2332kdqk8bjzpcsripx10896rbvgl0ic7r344kmpiwdgm948b"))))
314
315(define-public ovmf
316 (package
317 (name "ovmf")
318 (version edk2-version)
319 (source edk2-origin)
320 (build-system gnu-build-system)
321 (native-inputs
322 `(("acpica" ,acpica)
90efc2f2 323 ("gcc" ,gcc-5)
a5bc3dfe
DC
324 ("nasm" ,nasm)
325 ("python-2" ,python-2)
bb93042c 326 ("util-linux" ,util-linux "lib")))
a5bc3dfe
DC
327 (arguments
328 `(#:tests? #f ; No check target.
329 #:phases
330 (modify-phases %standard-phases
331 (replace 'configure
332 (lambda _
333 (let* ((cwd (getcwd))
334 (tools (string-append cwd "/BaseTools"))
335 (bin (string-append tools "/BinWrappers/PosixLike")))
336 (setenv "WORKSPACE" cwd)
337 (setenv "EDK_TOOLS_PATH" tools)
338 (setenv "PATH" (string-append (getenv "PATH") ":" bin))
cee03b26
RH
339 ; FIXME: The below script errors out. When using 'invoke' instead
340 ; of 'system*' this causes the build to fail.
bb63502f 341 (system* "bash" "edksetup.sh")
a5bc3dfe
DC
342 (substitute* "Conf/target.txt"
343 (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n")
a5bc3dfe
DC
344 (("^MAX_CONCURRENT_THREAD_NUMBER[ ]*=.*$")
345 (format #f "MAX_CONCURRENT_THREAD_NUMBER = ~a~%"
346 (number->string (parallel-job-count)))))
347 ;; Build build support.
348 (setenv "BUILD_CC" "gcc")
bb63502f 349 (invoke "make" "-C" tools)
f563d199 350 #t)))
bb63502f 351 (replace 'build
a5bc3dfe 352 (lambda _
bb63502f
EF
353 (invoke "build" "-a" "IA32" "-t" "GCC49"
354 "-p" "OvmfPkg/OvmfPkgIa32.dsc")))
2eb95ade 355 ,@(if (string=? "x86_64-linux" (%current-system))
bfba1269
EF
356 '((add-after 'build 'build-x64
357 (lambda _
bb63502f
EF
358 (invoke "build" "-a" "X64" "-t" "GCC49"
359 "-p" "OvmfPkg/OvmfPkgX64.dsc"))))
2eb95ade 360 '())
a5bc3dfe
DC
361 (replace 'install
362 (lambda* (#:key outputs #:allow-other-keys)
363 (let* ((out (assoc-ref outputs "out"))
364 (fmw (string-append out "/share/firmware")))
365 (mkdir-p fmw)
366 (copy-file "Build/OvmfIa32/RELEASE_GCC49/FV/OVMF.fd"
367 (string-append fmw "/ovmf_ia32.bin"))
2eb95ade
EF
368 ,@(if (string=? "x86_64-linux" (%current-system))
369 '((copy-file "Build/OvmfX64/RELEASE_GCC49/FV/OVMF.fd"
370 (string-append fmw "/ovmf_x64.bin")))
371 '()))
a5bc3dfe
DC
372 #t)))))
373 (supported-systems '("x86_64-linux" "i686-linux"))
0dae4921 374 (home-page "https://www.tianocore.org")
a5bc3dfe
DC
375 (synopsis "UEFI firmware for QEMU")
376 (description "OVMF is an EDK II based project to enable UEFI support for
377Virtual Machines. OVMF contains a sample UEFI firmware for QEMU and KVM.")
378 (license (list license:expat
379 license:bsd-2 license:bsd-3 license:bsd-4))))
e9252fd1 380
cb97be5f
EF
381(define-public ovmf-aarch64
382 (package
383 (inherit ovmf)
384 (name "ovmf-aarch64")
385 (native-inputs
386 `(,@(package-native-inputs ovmf)
387 ,@(if (not (string-prefix? "aarch64" (%current-system)))
388 `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu"))
389 ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
390 '())))
391 (arguments
392 (substitute-keyword-arguments (package-arguments ovmf)
393 ((#:phases phases)
394 `(modify-phases ,phases
395 (add-before 'configure 'set-env
396 (lambda _
397 ,@(if (not (string-prefix? "aarch64" (%current-system)))
398 `((setenv "GCC49_AARCH64_PREFIX" "aarch64-linux-gnu-"))
399 '())
400 #t))
401 (replace 'build
402 (lambda _
403 (invoke "build" "-a" "AARCH64" "-t" "GCC49"
404 "-p" "ArmVirtPkg/ArmVirtQemu.dsc")))
405 (delete 'build-x64)
406 (replace 'install
407 (lambda* (#:key outputs #:allow-other-keys)
408 (let* ((out (assoc-ref outputs "out"))
409 (fmw (string-append out "/share/firmware")))
410 (mkdir-p fmw)
411 (copy-file "Build/ArmVirtQemu-AARCH64/RELEASE_GCC49/FV/QEMU_EFI.fd"
412 (string-append fmw "/ovmf_aarch64.bin"))
413 #t)))))))
414 (supported-systems %supported-systems)))
415
6da97043
EF
416(define-public ovmf-arm
417 (package
418 (inherit ovmf)
419 (name "ovmf-arm")
420 (native-inputs
421 `(,@(package-native-inputs ovmf)
422 ,@(if (not (string-prefix? "armhf" (%current-system)))
423 `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf"))
424 ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
425 '())))
426 (arguments
427 (substitute-keyword-arguments (package-arguments ovmf)
428 ((#:phases phases)
429 `(modify-phases ,phases
430 (add-before 'configure 'set-env
431 (lambda _
432 ,@(if (not (string-prefix? "armhf" (%current-system)))
433 `((setenv "GCC49_ARM_PREFIX" "arm-linux-gnueabihf-"))
434 '())
435 #t))
436 (replace 'build
437 (lambda _
438 (invoke "build" "-a" "ARM" "-t" "GCC49"
439 "-p" "ArmVirtPkg/ArmVirtQemu.dsc")))
440 (delete 'build-x64)
441 (replace 'install
442 (lambda* (#:key outputs #:allow-other-keys)
443 (let* ((out (assoc-ref outputs "out"))
444 (fmw (string-append out "/share/firmware")))
445 (mkdir-p fmw)
446 (copy-file "Build/ArmVirtQemu-ARM/RELEASE_GCC49/FV/QEMU_EFI.fd"
447 (string-append fmw "/ovmf_arm.bin"))
448 #t)))))))
449 (supported-systems %supported-systems)))
450
e9252fd1
EF
451(define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
452 (package
453 (name (string-append "arm-trusted-firmware-" platform))
a1fd8c5d 454 (version "2.2")
e9252fd1
EF
455 (source
456 (origin
457 (method git-fetch)
458 (uri (git-reference
459 ;; There are only GitHub generated release snapshots.
a1fd8c5d 460 (url "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/")
e9252fd1
EF
461 (commit (string-append "v" version))))
462 (file-name (git-file-name "arm-trusted-firmware" version))
475dac08 463 (patches (search-patches
a90fd72b 464 "arm-trusted-firmware-disable-hdcp.patch"))
e9252fd1
EF
465 (sha256
466 (base32
a1fd8c5d 467 "03fjl5hy1bqlya6fg553bqz7jrvilzrzpbs87cv6jd04v8qrvry8"))))
e9252fd1
EF
468 (build-system gnu-build-system)
469 (arguments
470 `(#:phases
471 (modify-phases %standard-phases
472 (delete 'configure) ; no configure script
a90fd72b
VC
473 ;; Remove binary blobs which do not contain source or proper license.
474 (add-after 'unpack 'remove-binary-blobs
475 (lambda _
476 (for-each (lambda (file)
477 (delete-file file))
478 (find-files "." ".*\\.bin$"))))
e9252fd1
EF
479 (replace 'install
480 (lambda* (#:key outputs #:allow-other-keys)
481 (let ((out (assoc-ref outputs "out"))
074554a2 482 (bin (find-files "." ".*\\.(bin|elf)$")))
e9252fd1
EF
483 (for-each
484 (lambda (file)
485 (install-file file out))
486 bin))
487 #t)))
488 #:make-flags (list (string-append "PLAT=" ,platform)
489 ,@(if (and (not (string-prefix? "aarch64"
490 (%current-system)))
491 (string-prefix? "aarch64" arch))
492 `("CROSS_COMPILE=aarch64-linux-gnu-")
493 '())
494 ,@(if (and (not (string-prefix? "armhf"
495 (%current-system)))
496 (string-prefix? "armhf" arch))
497 `("CROSS_COMPILE=arm-linux-gnueabihf-")
498 '())
499 "DEBUG=1")
500 #:tests? #f)) ; no tests
501 (native-inputs
502 `(,@(if (and (not (string-prefix? "aarch64" (%current-system)))
503 (string-prefix? "aarch64" arch))
504 ;; gcc-7 since it is used for u-boot, which needs gcc-7.
505 `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu" #:xgcc gcc-7))
506 ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
507 '())
508 ,@(if (and (not (string-prefix? "armhf" (%current-system)))
509 (string-prefix? "armhf" arch))
510 ;; gcc-7 since it is used for u-boot, which needs gcc-7.
511 `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf" #:xgcc gcc-7))
512 ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
513 '())
514 ))
a1fd8c5d 515 (home-page "https://www.trustedfirmware.org/")
e9252fd1
EF
516 (synopsis "Implementation of \"secure world software\"")
517 (description
518 "ARM Trusted Firmware provides a reference implementation of secure world
519software for ARMv7A and ARMv8-A, including a Secure Monitor executing at
520@dfn{Exception Level 3} (EL3). It implements various ARM interface standards,
521such as:
522@enumerate
523@item The Power State Coordination Interface (PSCI)
524@item Trusted Board Boot Requirements (TBBR, ARM DEN0006C-1)
525@item SMC Calling Convention
526@item System Control and Management Interface
527@item Software Delegated Exception Interface (SDEI)
528@end enumerate\n")
529 (license (list license:bsd-3
530 license:bsd-2)))) ; libfdt
ecff374e 531
95d91986 532(define-public arm-trusted-firmware-sun50i-a64
8b87b1bf 533 (let ((base (make-arm-trusted-firmware "sun50i_a64")))
ecff374e
EF
534 (package
535 (inherit base)
8b87b1bf 536 (name "arm-trusted-firmware-sun50i-a64"))))
6fe16577 537
c07f3b18
VC
538(define-public arm-trusted-firmware-rk3328
539 (make-arm-trusted-firmware "rk3328"))
540
6fe16577
VC
541(define-public arm-trusted-firmware-puma-rk3399
542 (let ((base (make-arm-trusted-firmware "rk3399"))
543 ;; Vendor's arm trusted firmware branch hasn't been upstreamed yet.
544 (commit "d71e6d83612df896774ec4c03d49500312d2c324")
545 (revision "1"))
546 (package
547 (inherit base)
548 (name "arm-trusted-firmware-puma-rk3399")
549 (version (git-version "1.3" revision commit))
550 (source
551 (origin
552 (method git-fetch)
553 (uri (git-reference
554 (url "https://git.theobroma-systems.com/arm-trusted-firmware.git")
555 (commit commit)))
556 (file-name (git-file-name name version))
557 (sha256
558 (base32
559 "0vqhwqqh8h9qlkpybg2v94911091c1418bc4pnzq5fd7zf0fjkf8")))))))
560
074554a2
CN
561(define-public arm-trusted-firmware-rk3399
562 (let ((base (make-arm-trusted-firmware "rk3399")))
563 (package
564 (inherit base)
565 (name "arm-trusted-firmware-rk3399")
566 (native-inputs
567 `(("cross32-gcc" ,(cross-gcc "arm-none-eabi"))
568 ("cross32-binutils", (cross-binutils "arm-none-eabi"))
569 ,@(package-native-inputs base))))))
570
6fe16577
VC
571(define-public rk3399-cortex-m0
572 (package
573 (name "rk3399-cortex-m0")
574 (version "1")
575 (source
576 (origin
577 (method git-fetch)
578 (uri (git-reference
579 (url "https://git.theobroma-systems.com/rk3399-cortex-m0.git")
580 (commit (string-append "v" version))))
581 (file-name (git-file-name "rk3399-cortex-m0" version))
582 (sha256
583 (base32
584 "02wz1vkf4j3zc8rx289z76xhrf71jhb2p05lvmygky393a9gjh9w"))))
585 (home-page "https://git.theobroma-systems.com/rk3399-cortex-m0.git/about/")
586 (synopsis "PMU Cortex M0 firmware for RK3399 Q7 (Puma)")
587 (description
588 "Cortex-M0 firmware used with the RK3399 to implement
589power-management functionality and helpers (e.g. DRAM frequency
590switching support).\n")
591 (license license:bsd-3)
592 (build-system gnu-build-system)
593 (arguments
594 `(#:phases
595 (modify-phases %standard-phases
596 (delete 'configure)
597 (delete 'check)
598 (replace 'install
599 (lambda* (#:key outputs #:allow-other-keys)
600 (let ((out (assoc-ref outputs "out"))
601 (mzerofiles (find-files "." "rk3399m0.(elf|bin)$")))
602 (for-each
603 (lambda (file)
604 (install-file file out))
605 mzerofiles))
606 #t))
607 (add-before 'build 'setenv
608 (lambda* (#:key inputs #:allow-other-keys)
609 (setenv "CROSS_COMPILE" "arm-none-eabi-")
610 #t)))))
611 (native-inputs `(("cross-gcc" ,(cross-gcc "arm-none-eabi" #:xgcc gcc-7))
612 ("cross-binutils" ,(cross-binutils "arm-none-eabi"))))))