gnu: ccid: Update to 1.4.32.
[jackhill/guix/guix.git] / gnu / packages / firmware.scm
index 0f3e100..e0a162f 100644 (file)
@@ -5,6 +5,8 @@
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +33,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages assembly)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages cross-base)
               (sha256
                (base32
                 "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
               (sha256
                (base32
                 "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
-              (file-name (string-append name "-" version "-checkout"))
+              (file-name (git-file-name name version))
               (patches (search-patches "ath9k-htc-firmware-objcopy.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
               (patches (search-patches "ath9k-htc-firmware-objcopy.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'pre-configure
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (chdir "target_firmware")
 
              ;; 'configure' is a simple script that runs 'cmake' with
              (chdir "target_firmware")
 
              ;; 'configure' is a simple script that runs 'cmake' with
@@ -67,7 +70,7 @@
              (substitute* "configure"
                (("^TOOLCHAIN=.*$")
                 (string-append "TOOLCHAIN="
              (substitute* "configure"
                (("^TOOLCHAIN=.*$")
                 (string-append "TOOLCHAIN="
-                               (assoc-ref inputs "cross-gcc")
+                               (assoc-ref (or native-inputs inputs) "cross-gcc")
                                "\n")))
              #t))
          (replace 'install
                                "\n")))
              #t))
          (replace 'install
 
     ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
     ;; Use our own tool chain for that.
 
     ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
     ;; Use our own tool chain for that.
-    (native-inputs `(("cross-gcc" ,(cross-gcc "xtensa-elf"))
-                     ("cross-binutils" ,(cross-binutils "xtensa-elf"))
-                     ("cmake" ,cmake)
+    (native-inputs `(("cross-gcc" ,(cross-gcc
+                                    "xtensa-elf"
+                                    #:xbinutils (cross-binutils "xtensa-elf"
+                                                                binutils-2.33)))
+                     ("cross-binutils" ,(cross-binutils "xtensa-elf" binutils-2.33))
+                     ("cmake" ,cmake-minimal)
                      ("perl" ,perl)))
                      ("perl" ,perl)))
-    (home-page "http://wireless.kernel.org/en/users/Drivers/ath9k_htc")
+    (home-page "https://wireless.wiki.kernel.org/en/users/Drivers/ath9k_htc")
     (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
     (description
      "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
     (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
     (description
      "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
@@ -106,7 +112,7 @@ Linux-libre.")
          (uri (git-reference
                (url "http://git.bues.ch/git/b43-tools.git")
                (commit commit)))
          (uri (git-reference
                (url "http://git.bues.ch/git/b43-tools.git")
                (commit commit)))
-         (file-name (string-append name "-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
           (base32
            "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
          (sha256
           (base32
            "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
@@ -183,22 +189,89 @@ Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5.  It is used
 by the b43-open driver of Linux-libre.")
     (license license:gpl2)))
 
 by the b43-open driver of Linux-libre.")
     (license license:gpl2)))
 
+(define* (make-opensbi-package platform variant #:optional (arch "riscv64"))
+  (package
+    (name (string-replace-substring
+           (string-append "opensbi-" platform "-" variant)
+           "_" "-"))
+    (version "0.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/riscv/opensbi.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "129ypdga0fzn657n2f42g2a1vx3hf8x7sd78h06d35pgkry0jkl7"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(,@(if (and (not (string-prefix? "riscv64" (%current-system)))
+                  (string-prefix? "riscv64" arch))
+           `(("cross-gcc" ,(cross-gcc "riscv64-linux-gnu" #:xgcc gcc-7))
+             ("cross-binutils" ,(cross-binutils "riscv64-linux-gnu")))
+           '())))
+    (arguments
+     `(#:tests? #f ; no check target
+       #:make-flags (list (string-append "PLATFORM=" ,platform "/" ,variant)
+                          ,@(if (and (not (string-prefix? "riscv64"
+                                                          (%current-system)))
+                                     (string-prefix? "riscv64" arch))
+                                `("CROSS_COMPILE=riscv64-linux-gnu-")
+                                '())
+                          "FW_PAYLOAD=n"
+                          "V=1")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (find-files "." ".*fw_.*.elf$")))
+               (for-each
+                 (lambda (file)
+                   (install-file file out))
+                 bin))
+             #t)))))
+    (home-page "https://github.com/riscv/opensbi")
+    (synopsis "RISC-V Open Source Supervisor Binary Interface")
+    (description "A reference implementation of the RISC-V SBI specifications
+for platform-specific firmwares executing in M-mode.")
+    (license (list license:bsd-2
+                   ;; lib/utils/libfdt/* is dual licensed under bsd-2 and gpl2+.
+                   license:gpl2+
+                   ;; platform/ariane-fpga/* is gpl2.
+                   license:gpl2))))
+
+(define-public opensbi-qemu-virt
+  (make-opensbi-package "qemu" "virt"))
+
+(define-public opensbi-sifive-fu540
+  (make-opensbi-package "sifive" "fu540"))
+
+(define-public opensbi-qemu-sifive-u
+  ;; Dropped upstream, as all functionality is present in the sifive-fu540
+  ;; target for recent versions of qemu, u-boot and linux.
+  (deprecated-package "opensbi-qemu-sifive-u" opensbi-sifive-fu540))
+
 (define-public seabios
   (package
     (name "seabios")
 (define-public seabios
   (package
     (name "seabios")
-    (version "1.12.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.seabios.org/downloads/"
-                                  "seabios-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0jx7pnsc2s4a7wbvvwqig6x8wmkw7f2sz0pbgj4jfp77cpjvh5yz"))))
+    (version "1.13.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://review.coreboot.org/seabios.git")
+             (commit (string-append "rel-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1n1bd6msfs7xn8844sz2qnm7hb5x2qfl3zb06kp4bx9vdc3i6619"))))
     (build-system gnu-build-system)
     (native-inputs
     (build-system gnu-build-system)
     (native-inputs
-     `(("python-2" ,python-2)))
+     `(("python" ,python-wrapper)))
     (arguments
     (arguments
-     `(#:tests? #f ; No check target.
+     `(#:tests? #f                      ; no check target
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -247,13 +320,26 @@ coreboot.")
     (build-system gnu-build-system)
     (native-inputs
      `(("acpica" ,acpica)
     (build-system gnu-build-system)
     (native-inputs
      `(("acpica" ,acpica)
+       ("gcc@5" ,gcc-5)
        ("nasm" ,nasm)
        ("python-2" ,python-2)
        ("nasm" ,nasm)
        ("python-2" ,python-2)
-       ("util-linux" ,util-linux)))
+       ("util-linux" ,util-linux "lib")))
     (arguments
      `(#:tests? #f ; No check target.
        #:phases
        (modify-phases %standard-phases
     (arguments
      `(#:tests? #f ; No check target.
        #:phases
        (modify-phases %standard-phases
+         ;; Hide the default GCC from CPLUS_INCLUDE_PATH to prevent it from
+         ;; shadowing the version of GCC provided in native-inputs.
+         (add-after 'set-paths 'hide-gcc7
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((gcc (assoc-ref inputs "gcc")))
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-join
+                        (delete (string-append gcc "/include/c++")
+                                (string-split (getenv "CPLUS_INCLUDE_PATH")
+                                              #\:))
+                        ":"))
+               #t)))
          (replace 'configure
            (lambda _
              (let* ((cwd (getcwd))
          (replace 'configure
            (lambda _
              (let* ((cwd (getcwd))
@@ -377,27 +463,33 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
 (define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
   (package
     (name (string-append "arm-trusted-firmware-" platform))
 (define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
   (package
     (name (string-append "arm-trusted-firmware-" platform))
-    (version "1.5")
+    (version "2.3")
     (source
       (origin
         (method git-fetch)
         (uri (git-reference
                ;; There are only GitHub generated release snapshots.
     (source
       (origin
         (method git-fetch)
         (uri (git-reference
                ;; There are only GitHub generated release snapshots.
-               (url "https://github.com/ARM-software/arm-trusted-firmware.git")
+               (url "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/")
                (commit (string-append "v" version))))
         (file-name (git-file-name "arm-trusted-firmware" version))
        (sha256
         (base32
                (commit (string-append "v" version))))
         (file-name (git-file-name "arm-trusted-firmware" version))
        (sha256
         (base32
-         "1gm0bn2llzfzz9bfsz11fhwxj5lxvyrq7bc13fjj033nljzxn7k8"))))
+         "113mcf1hwwl0i90cqh08lywxs1bfbg0nwqibay9wlkmx1a5v0bnj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (delete 'configure) ; no configure script
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (delete 'configure) ; no configure script
+         ;; Remove binary blobs which do not contain source or proper license.
+         (add-after 'unpack 'remove-binary-blobs
+           (lambda _
+             (for-each (lambda (file)
+                         (delete-file file))
+                       (find-files "." ".*\\.bin$"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
-                   (bin (find-files "." ".*\\.bin$")))
+                   (bin (find-files "." ".*\\.(bin|elf)$")))
                (for-each
                  (lambda (file)
                    (install-file file out))
                (for-each
                  (lambda (file)
                    (install-file file out))
@@ -430,7 +522,7 @@ Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
              ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
            '())
         ))
              ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
            '())
         ))
-    (home-page "https://github.com/ARM-software/arm-trusted-firmware")
+    (home-page "https://www.trustedfirmware.org/")
     (synopsis "Implementation of \"secure world software\"")
     (description
      "ARM Trusted Firmware provides a reference implementation of secure world
     (synopsis "Implementation of \"secure world software\"")
     (description
      "ARM Trusted Firmware provides a reference implementation of secure world
@@ -448,25 +540,13 @@ such as:
                    license:bsd-2)))) ; libfdt
 
 (define-public arm-trusted-firmware-sun50i-a64
                    license:bsd-2)))) ; libfdt
 
 (define-public arm-trusted-firmware-sun50i-a64
-  (let ((base (make-arm-trusted-firmware "sun50i_a64"))
-        ;; Use unreleased version which enables additional features needed for
-        ;; LCD support
-        (commit "98aab97484b27e40aa74a93e5d1c1ac037a7e0b8")
-        (revision "2"))
+  (let ((base (make-arm-trusted-firmware "sun50i_a64")))
     (package
       (inherit base)
     (package
       (inherit base)
-      (name "arm-trusted-firmware-sun50i-a64")
-      (version (git-version "2.0" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/ARM-software/arm-trusted-firmware.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "0z5si034vcn4m68zaixc5v8fs1c7vxbh7n4hggxs55p0jg01dan5")))))))
+      (name "arm-trusted-firmware-sun50i-a64"))))
+
+(define-public arm-trusted-firmware-rk3328
+  (make-arm-trusted-firmware "rk3328"))
 
 (define-public arm-trusted-firmware-puma-rk3399
   (let ((base (make-arm-trusted-firmware "rk3399"))
 
 (define-public arm-trusted-firmware-puma-rk3399
   (let ((base (make-arm-trusted-firmware "rk3399"))
@@ -488,6 +568,16 @@ such as:
            (base32
             "0vqhwqqh8h9qlkpybg2v94911091c1418bc4pnzq5fd7zf0fjkf8")))))))
 
            (base32
             "0vqhwqqh8h9qlkpybg2v94911091c1418bc4pnzq5fd7zf0fjkf8")))))))
 
+(define-public arm-trusted-firmware-rk3399
+  (let ((base (make-arm-trusted-firmware "rk3399")))
+    (package
+      (inherit base)
+      (name "arm-trusted-firmware-rk3399")
+      (native-inputs
+       `(("cross32-gcc" ,(cross-gcc "arm-none-eabi"))
+         ("cross32-binutils", (cross-binutils "arm-none-eabi"))
+         ,@(package-native-inputs base))))))
+
 (define-public rk3399-cortex-m0
   (package
     (name "rk3399-cortex-m0")
 (define-public rk3399-cortex-m0
   (package
     (name "rk3399-cortex-m0")