Package: guix-patches;
Reported by: Vagrant Cascadian <vagrant <at> debian.org>
Date: Tue, 11 May 2021 22:17:01 UTC
Severity: normal
Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Bug is archived. No further changes may be made.
Message #14 received at 48371 <at> debbugs.gnu.org (full text, mbox):
From: Vagrant Cascadian <vagrant <at> debian.org> To: Maxime Devos <maximedevos <at> telenet.be>, 48371 <at> debbugs.gnu.org Subject: Re: [bug#48371] Add crust firmware for sunxi devices Date: Sat, 29 May 2021 18:30:26 -0700
[Message part 1 (text/plain, inline)]
On 2021-05-29, Vagrant Cascadian wrote: > On 2021-05-13, Maxime Devos wrote: >> Vagrant Cascadian schreef op di 11-05-2021 om 15:15 [-0700]: >>> + #:make-flags (list >>> + "CROSS_COMPILE=or1k-elf-" >>> + "DEBUG=1" >>> + "HOSTCC=gcc" >>> + "HOSTAR=ar" >>> + "HOST_COMPILE=aarch64-linux-gnu-" >>> + "LEX=flex") >> >> IIUC, CROSS_COMPILE is the system Crust will run on, and HOST_COMPILE >> is the system where Crust is compiled. So shouldn't HOST_COMPILE be >> >> (string-append (nix-system->gnu-triplet (%current-system)) "-") >> >> such that Crust can be cross-compiled from non-aarch64 or non-linux systems? > > Good point! ... > Setting HOST_COMPILE to an empty value appears to work and it just uses > the defined HOSTCC and HOSTAR, so this is probably better anyways! Or dropping it entirely; it was only used to define HOSTCC and HOSTAR, which we set explicitly. > There's a new crust version available, so I'll give that a quick test > before sending updated patches. Updated patches attached. live well, vagrant
[0001-gnu-Add-crust-pinebook-and-crust-pine64-plus.patch (text/x-diff, inline)]
From 75dff89f75481cea087890d28568017996e88da5 Mon Sep 17 00:00:00 2001 From: Vagrant Cascadian <vagrant <at> debian.org> Date: Tue, 11 May 2021 20:57:50 +0000 Subject: [PATCH 1/2] gnu: Add crust-pinebook and crust-pine64-plus. * gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add or1k-elf. gnu/packages/firmware.scm (make-crust-package, crust-pinebook, crust-pine64-plus): New variables. --- gnu/packages/bootstrap.scm | 1 + gnu/packages/firmware.scm | 70 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index c598cedc0a..b23ac04586 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -315,6 +315,7 @@ or false to signal an error." ((string=? system "i686-mingw") "no-ld.so") ((string=? system "x86_64-mingw") "no-ld.so") ((string=? system "vc4-elf") "no-ld.so") + ((string=? system "or1k-elf") "no-ld.so") (else (error "dynamic linker name not known for this system" system)))) diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm index c9a68f5a93..4b6dbdb733 100644 --- a/gnu/packages/firmware.scm +++ b/gnu/packages/firmware.scm @@ -559,3 +559,73 @@ such as: `(("cross32-gcc" ,(cross-gcc "arm-none-eabi")) ("cross32-binutils", (cross-binutils "arm-none-eabi")) ,@(package-native-inputs base)))))) + +(define (make-crust-package platform) + (package + (name (string-append "crust-" + (string-replace-substring (string-downcase platform) + "_" "-"))) + (version "0.4") + (source + (origin + (method git-fetch) + (uri (git-reference + ;; There are only GitHub generated release snapshots. + (url "https://github.com/crust-firmware/crust") + (commit (string-append "v" version)))) + (file-name (git-file-name "crust" version)) + (sha256 + (base32 + "19xxp43b6dhdfssahspyl7y15dbby0kfbfqnmhc42vz1hkp7b4q6")))) + (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'defconfig + (lambda* (#:key outputs make-flags #:allow-other-keys) + (let ((config-name (string-append ,platform "_defconfig"))) + (apply invoke "make" `(,@make-flags ,config-name))))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (bin (find-files "." "(scp.bin|\\.config)"))) + (for-each + (lambda (file) + (install-file file out)) + bin)) + #t))) + #:make-flags (list + "CROSS_COMPILE=or1k-elf-" + "DEBUG=1" + "HOSTCC=gcc" + "HOSTAR=ar" + "LEX=flex") + #:tests? #f)) ; no tests + ;; 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 "or1k-elf" #:xgcc gcc-9)) + ("cross-binutils" ,(cross-binutils "or1k-elf" binutils)) + ("bison" ,bison) + ("flex" ,flex))) + (home-page "https://github.com/crust-firmware/crust") + (synopsis "System control processor firmware for Allwinner sunxi boards") + (description + "Crust improves battery life and thermal performance by implementing a +deep sleep state. During deep sleep, the CPU cores, the DRAM controller, and +most onboard peripherals are powered down, reducing power consumption by 80% +or more compared to an idle device. On boards without a PMIC, Crust is also +responsible for orderly power-off and power-on of the device. + +For this to work, Crust runs outside the main CPU and DRAM, on a dedicated +always-on microprocessor called a System Control Processor (SCP). Crust is +designed to run on a specific SCP implementation, Allwinner's AR100.") + ;; Most files are dual-licensed "BSD-3 OR GPL2", a few are GPL2 only. + (license (list license:bsd-3 + license:gpl2)))) + +(define-public crust-pinebook + (make-crust-package "pinebook")) + +(define-public crust-pine64-plus + (make-crust-package "pine64_plus")) -- 2.30.2
[0002-gnu-u-boot-Add-crust-firmware-to-pinebook-pine64_plu.patch (text/x-diff, inline)]
From 719fc2874daa5fd5772c2c0d146e8d6fb9f1377b Mon Sep 17 00:00:00 2001 From: Vagrant Cascadian <vagrant <at> debian.org> Date: Tue, 11 May 2021 21:15:15 +0000 Subject: [PATCH 2/2] gnu: u-boot: Add crust firmware to pinebook, pine64_plus and pine64-lts. * gnu/packages/bootloaders.scm (make-u-boot-sunxi64-package): Take argument for System Control Processor (SCP) firmware. [native-inputs]: Add SCP firmware. (u-boot-pine64-plus, u-boot-pine64-lts, u-boot-pinebook): Pass appropriate crust firmware as the SCP firmware. --- gnu/packages/bootloaders.scm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 56bef57cb7..6f1bb5b8c9 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -737,7 +737,7 @@ it fits within common partitioning schemes.") (define-public u-boot-am335x-evm (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf")) -(define-public (make-u-boot-sunxi64-package board triplet) +(define-public (make-u-boot-sunxi64-package board triplet scpfirmware) (let ((base (make-u-boot-package board triplet))) (package (inherit base) @@ -752,6 +752,9 @@ it fits within common partitioning schemes.") (assoc-ref (or native-inputs inputs) "firmware") "/bl31.bin"))) (setenv "BL31" bl31) + (setenv "SCP" (string-append + (assoc-ref inputs "scpfirmware") + "/scp.bin")) ;; This is necessary when we're using the bundled dtc. ;(setenv "PATH" (string-append (getenv "PATH") ":" ; "scripts/dtc")) @@ -759,16 +762,20 @@ it fits within common partitioning schemes.") #t)))))) (native-inputs `(("firmware" ,arm-trusted-firmware-sun50i-a64) + ("scpfirmware" ,scpfirmware) ,@(package-native-inputs base)))))) (define-public u-boot-pine64-plus - (make-u-boot-sunxi64-package "pine64_plus" "aarch64-linux-gnu")) + (make-u-boot-sunxi64-package "pine64_plus" "aarch64-linux-gnu" + crust-pine64-plus)) (define-public u-boot-pine64-lts - (make-u-boot-sunxi64-package "pine64-lts" "aarch64-linux-gnu")) + (make-u-boot-sunxi64-package "pine64-lts" "aarch64-linux-gnu" + crust-pine64-plus)) (define-public u-boot-pinebook - (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu"))) + (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu" + crust-pinebook))) (package (inherit base) (arguments -- 2.30.2
[signature.asc (application/pgp-signature, inline)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.