diff options
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/bootloader/u-boot.scm | 16 | ||||
-rw-r--r-- | gnu/packages/bootloaders.scm | 33 | ||||
-rw-r--r-- | gnu/packages/firmware.scm | 63 | ||||
-rw-r--r-- | gnu/system/install.scm | 6 |
4 files changed, 117 insertions, 1 deletions
diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm index ea0f67b3cd..52b38dd1ab 100644 --- a/gnu/bootloader/u-boot.scm +++ b/gnu/bootloader/u-boot.scm @@ -37,6 +37,7 @@ u-boot-nintendo-nes-classic-edition-bootloader u-boot-novena-bootloader u-boot-pine64-plus-bootloader + u-boot-puma-rk3399-bootloader u-boot-wandboard-bootloader)) (define install-u-boot @@ -84,6 +85,15 @@ (write-file-on-device u-boot (stat:size (stat u-boot)) device (* 69 1024))))) +(define install-puma-rk3399-u-boot + #~(lambda (bootloader device mount-point) + (let ((spl (string-append bootloader "/libexec/u-boot-spl.rksd")) + (u-boot (string-append bootloader "/libexec/u-boot.itb"))) + (write-file-on-device spl (stat:size (stat spl)) + device (* 64 512)) + (write-file-on-device u-boot (stat:size (stat u-boot)) + device (* 512 512))))) + ;;; @@ -162,3 +172,9 @@ (bootloader (inherit u-boot-allwinner64-bootloader) (package u-boot-pine64-plus))) + +(define u-boot-puma-rk3399-bootloader + (bootloader + (inherit u-boot-bootloader) + (package u-boot-puma-rk3399) + (installer install-puma-rk3399-u-boot))) diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 2dd530125f..a86c73731e 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -489,7 +489,7 @@ board-independent tools."))) (let* ((out (assoc-ref outputs "out")) (libexec (string-append out "/libexec")) (uboot-files (append - (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb)$") + (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb|rksd)$") (find-files "." "^(MLO|SPL)$")))) (mkdir-p libexec) (install-file ".config" libexec) @@ -560,6 +560,37 @@ board-independent tools."))) (define-public u-boot-cubieboard (make-u-boot-package "Cubieboard" "arm-linux-gnueabihf")) +(define-public u-boot-puma-rk3399 + (let ((base (make-u-boot-package "puma-rk3399" "aarch64-linux-gnu"))) + (package + (inherit base) + (arguments + (substitute-keyword-arguments (package-arguments base) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'set-environment + (lambda* (#:key inputs #:allow-other-keys) + ;; Need to copy the firmware into u-boot build + ;; directory. + (copy-file (string-append (assoc-ref inputs "firmware") + "/bl31.bin") "bl31-rk3399.bin") + (copy-file (string-append (assoc-ref inputs "firmware-m0") + "/rk3399m0.bin") "rk3399m0.bin") + #t)) + (add-after 'build 'build-itb + (lambda* (#:key make-flags #:allow-other-keys) + ;; The u-boot.itb is not built by default. + (apply invoke "make" `(,@make-flags ,"u-boot.itb")))) + (add-after 'build-itb 'build-rksd + (lambda* (#:key inputs #:allow-other-keys) + ;; Build Rockchip SD card images. + (invoke "./tools/mkimage" "-T" "rksd" "-n" "rk3399" "-d" + "spl/u-boot-spl.bin" "u-boot-spl.rksd"))))))) + (native-inputs + `(("firmware" ,arm-trusted-firmware-puma-rk3399) + ("firmware-m0" ,rk3399-cortex-m0) + ,@(package-native-inputs base)))))) + (define-public vboot-utils (package (name "vboot-utils") diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm index 9e91ceca4e..986e1d6219 100644 --- a/gnu/packages/firmware.scm +++ b/gnu/packages/firmware.scm @@ -404,3 +404,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")))))) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index acc9f15e0d..35f4ba9c24 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -53,6 +53,7 @@ nintendo-nes-classic-edition-installation-os novena-installation-os pine64-plus-installation-os + rk3399-puma-installation-os wandboard-installation-os)) ;;; Commentary: @@ -451,6 +452,11 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET." "/dev/mmcblk0" ; SD card storage "ttyS0")) +(define rk3399-puma-installation-os + (embedded-installation-os u-boot-puma-rk3399-bootloader + "/dev/mmcblk0" ; SD card storage + "ttyS0")) + (define wandboard-installation-os (embedded-installation-os u-boot-wandboard-bootloader "/dev/mmcblk0" ; SD card storage |