diff options
Diffstat (limited to 'gnu/packages/firmware.scm')
-rw-r--r-- | gnu/packages/firmware.scm | 160 |
1 files changed, 142 insertions, 18 deletions
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm index 9e91ceca4e..176eef5137 100644 --- a/gnu/packages/firmware.scm +++ b/gnu/packages/firmware.scm @@ -209,7 +209,8 @@ by the b43-open driver of Linux-libre.") (let* ((out (assoc-ref outputs "out")) (fmw (string-append out "/share/firmware"))) (mkdir-p fmw) - (copy-file "out/bios.bin" (string-append fmw "/bios.bin")))))))) + (copy-file "out/bios.bin" (string-append fmw "/bios.bin")) + #t)))))) (home-page "https://www.seabios.org/SeaBIOS") (synopsis "x86 BIOS implementation") (description "SeaBIOS is an implementation of a 16bit x86 BIOS. SeaBIOS @@ -262,36 +263,26 @@ coreboot.") (setenv "PATH" (string-append (getenv "PATH") ":" bin)) ; FIXME: The below script errors out. When using 'invoke' instead ; of 'system*' this causes the build to fail. - (system* "bash" "edksetup.sh" "BaseTools") + (system* "bash" "edksetup.sh") (substitute* "Conf/target.txt" (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n") - (("^TOOL_CHAIN_TAG[ ]*=.*$") "TOOL_CHAIN_TAG = GCC49\n") (("^MAX_CONCURRENT_THREAD_NUMBER[ ]*=.*$") (format #f "MAX_CONCURRENT_THREAD_NUMBER = ~a~%" (number->string (parallel-job-count))))) ;; Build build support. (setenv "BUILD_CC" "gcc") - (invoke "make" "-C" (string-append tools "/Source/C")) + (invoke "make" "-C" tools) #t))) - (add-after 'build 'build-ia32 + (replace 'build (lambda _ - (substitute* "Conf/target.txt" - (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = IA32\n") - (("^ACTIVE_PLATFORM[ ]*=.*$") - "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgIa32.dsc\n")) - (invoke "build") - #t)) + (invoke "build" "-a" "IA32" "-t" "GCC49" + "-p" "OvmfPkg/OvmfPkgIa32.dsc"))) ,@(if (string=? "x86_64-linux" (%current-system)) '((add-after 'build 'build-x64 (lambda _ - (substitute* "Conf/target.txt" - (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = X64\n") - (("^ACTIVE_PLATFORM[ ]*=.*$") - "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc\n")) - (invoke "build") - #t))) + (invoke "build" "-a" "X64" "-t" "GCC49" + "-p" "OvmfPkg/OvmfPkgX64.dsc")))) '()) - (delete 'build) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -312,6 +303,76 @@ Virtual Machines. OVMF contains a sample UEFI firmware for QEMU and KVM.") (license (list license:expat license:bsd-2 license:bsd-3 license:bsd-4)))) +(define-public ovmf-aarch64 + (package + (inherit ovmf) + (name "ovmf-aarch64") + (native-inputs + `(,@(package-native-inputs ovmf) + ,@(if (not (string-prefix? "aarch64" (%current-system))) + `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu")) + ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu"))) + '()))) + (arguments + (substitute-keyword-arguments (package-arguments ovmf) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'configure 'set-env + (lambda _ + ,@(if (not (string-prefix? "aarch64" (%current-system))) + `((setenv "GCC49_AARCH64_PREFIX" "aarch64-linux-gnu-")) + '()) + #t)) + (replace 'build + (lambda _ + (invoke "build" "-a" "AARCH64" "-t" "GCC49" + "-p" "ArmVirtPkg/ArmVirtQemu.dsc"))) + (delete 'build-x64) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (fmw (string-append out "/share/firmware"))) + (mkdir-p fmw) + (copy-file "Build/ArmVirtQemu-AARCH64/RELEASE_GCC49/FV/QEMU_EFI.fd" + (string-append fmw "/ovmf_aarch64.bin")) + #t))))))) + (supported-systems %supported-systems))) + +(define-public ovmf-arm + (package + (inherit ovmf) + (name "ovmf-arm") + (native-inputs + `(,@(package-native-inputs ovmf) + ,@(if (not (string-prefix? "armhf" (%current-system))) + `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf")) + ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf"))) + '()))) + (arguments + (substitute-keyword-arguments (package-arguments ovmf) + ((#:phases phases) + `(modify-phases ,phases + (add-before 'configure 'set-env + (lambda _ + ,@(if (not (string-prefix? "armhf" (%current-system))) + `((setenv "GCC49_ARM_PREFIX" "arm-linux-gnueabihf-")) + '()) + #t)) + (replace 'build + (lambda _ + (invoke "build" "-a" "ARM" "-t" "GCC49" + "-p" "ArmVirtPkg/ArmVirtQemu.dsc"))) + (delete 'build-x64) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (fmw (string-append out "/share/firmware"))) + (mkdir-p fmw) + (copy-file "Build/ArmVirtQemu-ARM/RELEASE_GCC49/FV/QEMU_EFI.fd" + (string-append fmw "/ovmf_arm.bin")) + #t))))))) + (supported-systems %supported-systems))) + (define* (make-arm-trusted-firmware platform #:optional (arch "aarch64")) (package (name (string-append "arm-trusted-firmware-" platform)) @@ -404,3 +465,66 @@ such as: (sha256 (base32 "0r4xnlq7v9khjfcg6gqp7nmrmnw4z1r8bipwdr07png1dcbb8214"))))))) + +(define-public arm-trusted-firmware-puma-rk3399 + (let ((base (make-arm-trusted-firmware "rk3399")) + ;; Vendor's arm trusted firmware branch hasn't been upstreamed yet. + (commit "d71e6d83612df896774ec4c03d49500312d2c324") + (revision "1")) + (package + (inherit base) + (name "arm-trusted-firmware-puma-rk3399") + (version (git-version "1.3" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://git.theobroma-systems.com/arm-trusted-firmware.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0vqhwqqh8h9qlkpybg2v94911091c1418bc4pnzq5fd7zf0fjkf8"))))))) + +(define-public rk3399-cortex-m0 + (package + (name "rk3399-cortex-m0") + (version "1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://git.theobroma-systems.com/rk3399-cortex-m0.git") + (commit (string-append "v" version)))) + (file-name (git-file-name "rk3399-cortex-m0" version)) + (sha256 + (base32 + "02wz1vkf4j3zc8rx289z76xhrf71jhb2p05lvmygky393a9gjh9w")))) + (home-page "https://git.theobroma-systems.com/rk3399-cortex-m0.git/about/") + (synopsis "PMU Cortex M0 firmware for RK3399 Q7 (Puma)") + (description + "Cortex-M0 firmware used with the RK3399 to implement +power-management functionality and helpers (e.g. DRAM frequency +switching support).\n") + (license license:bsd-3) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (delete 'configure) + (delete 'check) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (mzerofiles (find-files "." "rk3399m0.(elf|bin)$"))) + (for-each + (lambda (file) + (install-file file out)) + mzerofiles)) + #t)) + (add-before 'build 'setenv + (lambda* (#:key inputs #:allow-other-keys) + (setenv "CROSS_COMPILE" "arm-none-eabi-") + #t))))) + (native-inputs `(("cross-gcc" ,(cross-gcc "arm-none-eabi" #:xgcc gcc-7)) + ("cross-binutils" ,(cross-binutils "arm-none-eabi")))))) |