system: Add u-boot-puma-rk3399.

* gnu/packages/bootloaders.scm (u-boot-puma-rk3399): New variable.
(make-u-boot-package)[arguments]: Add '.rksd' files to the files installed
during custom 'install phase.
* gnu/bootloader/u-boot.scm (u-boot-puma-rk3399-bootloader):
New exported variable.
* gnu/system/install.scm (rk3399-puma-installation-os):
New exported variable.
* gnu/packages/firmware.scm (arm-trusted-firmware-puma-rk3399): New variable.
(rk3399-cortex-m0): New variable.

Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org>
This commit is contained in:
Vagrant Cascadian 2018-05-28 21:10:15 -07:00 committed by Danny Milosavljevic
parent 2a49aee4d1
commit 6fe1657705
No known key found for this signature in database
GPG key ID: E71A35542C30BAA5
4 changed files with 117 additions and 1 deletions

View file

@ -37,6 +37,7 @@ (define-module (gnu bootloader u-boot)
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 @@ (define install-imx-u-boot
(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 @@ (define u-boot-pine64-plus-bootloader
(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)))

View file

@ -489,7 +489,7 @@ (define (make-u-boot-package board triplet)
(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 @@ (define-public u-boot-novena
(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")

View file

@ -404,3 +404,66 @@ (define-public arm-trusted-firmware-pine64-plus
(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"))))))

View file

@ -53,6 +53,7 @@ (define-module (gnu system install)
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 @@ (define pine64-plus-installation-os
"/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