Subject: Re: [PATCH v3] Install guix system on Raspberry Pi

From: Vagrant Cascadian <[email-masked]>
Date: Thu, 14 Apr 2022 08:56:26 -0700

On 2022-04-14, [email-masked] wrote:
> (u-boot-rpi-0-w, u-boot-rpi, u-boot-rpi-2, u-boot-rpi-3, u-boot-rpi-4,
> u-boot-rpi-64, u-boot-rpi-0-w-efi, u-boot-rpi-efi, u-boot-rpi-2-efi,
> u-boot-rpi-3-efi, u-boot-rpi-4-efi, u-boot-rpi-efi-64): New packages.

Comments from November are still relevent:

  https://issues.guix.gnu.org/48314#12

(e.g. drop drop u-boot-rpi-0-w*, u-boot-rpi, u-boot-rpi-efi, maybe
consider droping u-boot-rpi-2* and the 32-bit variants for rpi3 and
rpi4, as armhf is not well maintained at the moment).

Basically, ARMv6 is not supportable by guix, ARMv7 is poorly supported
in the armhf architecture, and ARMv8 is capable of running aarch64
(a.k.a. arm64):

  https://en.wikipedia.org/wiki/Raspberry_Pi#Specifications

Only proposing aarch64 variants would pretty much leave you with
rpi-arm64. The EFI variants and 32-bit variants supported on armhf could
be easily added later once the other patches land.

> +(define-public %u-boot-rpi-efi-configs
> +  '("CONFIG_OF_EMBED="
> +    "CONFIG_OF_BOARD=y"
> +    "CONFIG_BOOTDELAY=0"))

See comment:

  https://issues.guix.gnu.org/48314#15

e.g. Please do not set BOOTDELAY=0. It makes it nearly impossible to
debug. For people who want to live on the edge, they could build custom
variants and set it to 0.

> +(define-public u-boot-rpi-64
> +  (make-preinstalled-u-boot-package
> +   "rpi_arm64"
> +   "aarch64-linux-gnu"
> +   #:name "rpi-64"
> +   #:description %u-boot-rpi-description-64-bit))

Please keep package names consistent with defconfig
name. (e.g. u-boot-rpi-arm64). It's confusing enough without extra newly
invented names! :)

> +(define-public u-boot-rpi-3-efi
> +  (make-preinstalled-u-boot-package
> +   "rpi_3_32b"
> +   "arm-linux-gnueabihf"
> +   #:name "rpi-3-efi"
> +   #:configs %u-boot-rpi-efi-configs
> +   #:description %u-boot-rpi-efi-description-32-bit))

Ditto, or drop this variant; same for the 32-bit rpi-4 variants.

> Subject: [PATCH v3 2/8] build: kconfig: Add new module to modify a defconfig
>  file.
...
>  (define-public u-boot-pinebook
> -  (let ((base (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu")))
> -    (package
> -      (inherit base)
> -      (arguments
> -       (substitute-keyword-arguments (package-arguments base)
> -         ((#:phases phases)
> -          `(modify-phases ,phases
> -             (add-after 'unpack 'patch-pinebook-config
> -               ;; Fix regression with LCD video output introduced in 2020.01
> -               ;; https://patchwork.ozlabs.org/patch/1225130/
> -               (lambda _
> -                 (substitute* "configs/pinebook_defconfig"
> -                   (("CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y") "CONFIG_VIDEO_BRIDGE_ANALOGIX_ANX6345=y\nCONFIG_VIDEO_BPP32=y"))
> -                 #t)))))))))
> +  (make-u-boot-sunxi64-package "pinebook" "aarch64-linux-gnu"
> +   ;; Fix regression with LCD video output introduced in 2020.01
> +   ;; https://patchwork.ozlabs.org/patch/1225130/
> +   #:configs '("CONFIG_VIDEO_BPP32=y")))

I like how this simplifies the package definitions where you need to
adjust the defconfig!

This particular workaround for u-boot-pinebook may no longer be needed,
thanks for the reminder to check.

>  (define-public u-boot-novena
> -  (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf")))
> +  (let ((base (make-u-boot-package "novena" "arm-linux-gnueabihf"
> +               ;; Patch configuration to disable loading u-boot.img from FAT
> +               ;; partition, allowing it to be installed at a device offset.
> +               #:configs '("CONFIG_SPL_FS_FAT="))))

Maybe this is different in upstream u-boot, but in the past setting it
to an empty value could result in the default value, which is why:

> -                 (substitute* "configs/novena_defconfig"
> -                   (("CONFIG_SPL_FS_FAT=y") "# CONFIG_SPL_FS_FAT is not set"))
> -                 #t)))))))))

... was used previously.

> Subject: [PATCH v3 5/8] gnu: raspberry-pi: Add defconfig objects to build
>  customized Linux kernels.
>
> gnu/packages/raspberry-pi.scm (make-raspi-defconig): New function to make
> downloaded defconfig objects from the Linux repository of the Raspberry Pi
> Foundation.
> (%bcm2709-defconfig, %bcm2710-defconfig, %bcm2711-defconfig,
> %bcm2835-defconfig, %bcmrpi-defconfig, %bcm2711-defconfig-64,
> %bcmrpi3-defconfig): New variables containing defconfig objects to build
> Linux kernels customized for Raspberry Pi single board computers.

Similar to my comments on u-boot variants, some of these are for models
that are not supportable on guix (rpi, rpi-0), so probably best to leave
out entirely, and the 32-bit variants for armhf are debatable at this
point.

live well,
  vagrant