diff mbox series

[v3] Add genericarm64 MACHINE

Message ID 20240228114415.345202-1-ross.burton@arm.com (mailing list archive)
State New
Headers show
Series [v3] Add genericarm64 MACHINE | expand

Commit Message

Ross Burton Feb. 28, 2024, 11:44 a.m. UTC
From: Ross Burton <ross.burton@arm.com>

This is a new 64-bit "generic" Arm machine, that expects the hardware to
be SystemReady IR compatible.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 .../conf/templates/default/local.conf.sample  |  1 +
 meta-yocto-bsp/README.hardware.md             | 18 +++++++++++-
 meta-yocto-bsp/conf/machine/genericarm64.conf | 29 +++++++++++++++++++
 .../linux/linux-yocto_6.6.bbappend            |  5 ++++
 meta-yocto-bsp/wic/genericarm64.wks.in        | 11 +++++++
 5 files changed, 63 insertions(+), 1 deletion(-)
 create mode 100644 meta-yocto-bsp/conf/machine/genericarm64.conf
 create mode 100644 meta-yocto-bsp/wic/genericarm64.wks.in

Comments

Tom Rini Feb. 29, 2024, 2:55 p.m. UTC | #1
On Wed, Feb 28, 2024 at 11:44:15AM +0000, ross.burton@arm.com wrote:

> From: Ross Burton <ross.burton@arm.com>
> 
> This is a new 64-bit "generic" Arm machine, that expects the hardware to
> be SystemReady IR compatible.

A general comment is that some parts of the documentation / comments say
"SystemReady" and others "SystemReady IR". Since there's differences
between IR/ES/SR and that includes userspace, we should be clear I think
that this is just IR. For example...

[snip]
> diff --git a/meta-yocto-bsp/conf/machine/genericarm64.conf b/meta-yocto-bsp/conf/machine/genericarm64.conf
> new file mode 100644
> index 00000000000..83f1aca137a
> --- /dev/null
> +++ b/meta-yocto-bsp/conf/machine/genericarm64.conf
> @@ -0,0 +1,29 @@
> +#@TYPE: Machine
> +#@NAME: genericarm64
> +#@DESCRIPTION: Generic Arm64 machine for typical SystemReady platforms, which
> +#have working firmware and boot via EFI.
> +
> +require conf/machine/include/arm/arch-armv8a.inc
> +
> +# Arm Base System Architecture says v8.0+ is allowed, but FEAT_CRC32 is required
> +DEFAULTTUNE = "armv8a-crc"
> +
> +MACHINE_FEATURES = "acpi alsa bluetooth efi keyboard pci qemu-usermode rtc screen usbhost vfat wifi"

acpi isn't required for IR, just ES and SR.
Ross Burton Feb. 29, 2024, 3:29 p.m. UTC | #2
On 29 Feb 2024, at 14:55, Tom Rini <trini@konsulko.com> wrote:
> 
> On Wed, Feb 28, 2024 at 11:44:15AM +0000, ross.burton@arm.com wrote:
> 
>> From: Ross Burton <ross.burton@arm.com>
>> 
>> This is a new 64-bit "generic" Arm machine, that expects the hardware to
>> be SystemReady IR compatible.
> 
> A general comment is that some parts of the documentation / comments say
> "SystemReady" and others "SystemReady IR". Since there's differences
> between IR/ES/SR and that includes userspace, we should be clear I think
> that this is just IR. For example...
> 
> [snip]
>> +MACHINE_FEATURES = "acpi alsa bluetooth efi keyboard pci qemu-usermode rtc screen usbhost vfat wifi"
> 
> acpi isn't required for IR, just ES and SR.

This was _sort of_ intentional: whilst the expectation is that most boards will be IR, I didn’t want to do anything that would stop the same image working on an SR system.  Utterly untested right now, but in theory we’re just some more kernel configuration changes away from the machine working on an Ampere Altra.

I’ll reword and try and make this clearer.

Ross
Tom Rini Feb. 29, 2024, 3:31 p.m. UTC | #3
On Thu, Feb 29, 2024 at 03:29:15PM +0000, Ross Burton wrote:
> On 29 Feb 2024, at 14:55, Tom Rini <trini@konsulko.com> wrote:
> > 
> > On Wed, Feb 28, 2024 at 11:44:15AM +0000, ross.burton@arm.com wrote:
> > 
> >> From: Ross Burton <ross.burton@arm.com>
> >> 
> >> This is a new 64-bit "generic" Arm machine, that expects the hardware to
> >> be SystemReady IR compatible.
> > 
> > A general comment is that some parts of the documentation / comments say
> > "SystemReady" and others "SystemReady IR". Since there's differences
> > between IR/ES/SR and that includes userspace, we should be clear I think
> > that this is just IR. For example...
> > 
> > [snip]
> >> +MACHINE_FEATURES = "acpi alsa bluetooth efi keyboard pci qemu-usermode rtc screen usbhost vfat wifi"
> > 
> > acpi isn't required for IR, just ES and SR.
> 
> This was _sort of_ intentional: whilst the expectation is that most boards will be IR, I didn’t want to do anything that would stop the same image working on an SR system.  Utterly untested right now, but in theory we’re just some more kernel configuration changes away from the machine working on an Ampere Altra.
> 
> I’ll reword and try and make this clearer.

OK, thanks. I'm a little surprised the kernel defconfig doesn't Just
Work.
Ross Burton Feb. 29, 2024, 3:37 p.m. UTC | #4
On 29 Feb 2024, at 15:31, Tom Rini <trini@konsulko.com> wrote:
> OK, thanks. I'm a little surprised the kernel defconfig doesn't Just
> Work.

It does, but the Yocto way is to use fragments. Basically, the same reason that Fedora and Debian don’t just use defconfig.

Ross
diff mbox series

Patch

diff --git a/meta-poky/conf/templates/default/local.conf.sample b/meta-poky/conf/templates/default/local.conf.sample
index 5fb6944f3f0..1a93c9bdcf3 100644
--- a/meta-poky/conf/templates/default/local.conf.sample
+++ b/meta-poky/conf/templates/default/local.conf.sample
@@ -31,6 +31,7 @@ 
 # demonstration purposes:
 #
 #MACHINE ?= "beaglebone-yocto"
+#MACHINE ?= "genericarm64"
 #MACHINE ?= "genericx86"
 #MACHINE ?= "genericx86-64"
 #
diff --git a/meta-yocto-bsp/README.hardware.md b/meta-yocto-bsp/README.hardware.md
index a8f38cb21a6..bb8f57913fd 100644
--- a/meta-yocto-bsp/README.hardware.md
+++ b/meta-yocto-bsp/README.hardware.md
@@ -28,6 +28,7 @@  Hardware Reference Boards
 The following boards are supported by the meta-yocto-bsp layer:
 
   * Texas Instruments Beaglebone (beaglebone-yocto)
+  * General 64-bit Arm SystemReady platforms (genericarm64)
   * General IA platforms (genericx86 and genericx86-64)
 
 For more information see the board's section below. The appropriate MACHINE
@@ -55,7 +56,8 @@  Consumer Devices
 
 The following consumer devices are supported by the meta-yocto-bsp layer:
 
-  * Intel x86 based PCs and devices (genericx86)
+  * Arm-based SystemReady devices (genericarm64)
+  * Intel x86 based PCs and devices (genericx86 and genericx86-64)
 
 For more information see the device's section below. The appropriate MACHINE
 variable value corresponding to the device is given in brackets.
@@ -126,6 +128,20 @@  USB Device:
        dd command to write the image to a USB stick.
 
 
+SystemReady Arm Platforms
+=========================
+
+The genericarm64 MACHINE is designed to work on standard SystemReady IR
+compliant boards with preinstalled firmware.
+
+The genericarm64 MACHINE is currently tested on the following platforms:
+
+  * Texas Instruments BeaglePlay
+
+The images built are EFI bootable disk images and can be written directly to a
+SD card for booting, for example.
+
+
 Texas Instruments Beaglebone (beaglebone-yocto)
 ===============================================
 
diff --git a/meta-yocto-bsp/conf/machine/genericarm64.conf b/meta-yocto-bsp/conf/machine/genericarm64.conf
new file mode 100644
index 00000000000..83f1aca137a
--- /dev/null
+++ b/meta-yocto-bsp/conf/machine/genericarm64.conf
@@ -0,0 +1,29 @@ 
+#@TYPE: Machine
+#@NAME: genericarm64
+#@DESCRIPTION: Generic Arm64 machine for typical SystemReady platforms, which
+#have working firmware and boot via EFI.
+
+require conf/machine/include/arm/arch-armv8a.inc
+
+# Arm Base System Architecture says v8.0+ is allowed, but FEAT_CRC32 is required
+DEFAULTTUNE = "armv8a-crc"
+
+MACHINE_FEATURES = "acpi alsa bluetooth efi keyboard pci qemu-usermode rtc screen usbhost vfat wifi"
+
+# Install all the kernel modules and all the firmware
+MACHINE_EXTRA_RRECOMMENDS += "kernel-modules linux-firmware"
+
+KERNEL_IMAGETYPE = "Image"
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
+
+# Use an initramfs and populate it with the kernel modules
+INITRAMFS_IMAGE ?= "core-image-initramfs-boot"
+PACKAGE_INSTALL:append:pn-core-image-initramfs-boot = " kernel-modules"
+
+IMAGE_FSTYPES ?= "wic"
+WKS_FILE ?= "genericarm64.wks.in"
+
+EFI_PROVIDER ?= "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boot", "grub-efi", d)}"
+
+# Try to bring up one physical serial console, or a virtualized serial console
+SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
diff --git a/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.6.bbappend b/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.6.bbappend
index 8e465c241e8..ca7b2b09df7 100644
--- a/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.6.bbappend
+++ b/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.6.bbappend
@@ -1,19 +1,24 @@ 
+KBRANCH:genericarm64  = "v6.6/standard/base"
 KBRANCH:genericx86  = "v6.6/standard/base"
 KBRANCH:genericx86-64  = "v6.6/standard/base"
 KBRANCH:beaglebone-yocto = "v6.6/standard/beaglebone"
 
+KMACHINE:genericarm64 ?= "genericarm64"
 KMACHINE:genericx86 ?= "common-pc"
 KMACHINE:genericx86-64 ?= "common-pc-64"
 KMACHINE:beaglebone-yocto ?= "beaglebone"
 
+SRCREV_machine:genericarm64 ?= "e064a7d658a30b027b999183e21cd37305caff2a"
 SRCREV_machine:genericx86 ?= "332d4668fcc32826907d4f3c4938845206006089"
 SRCREV_machine:genericx86-64 ?= "332d4668fcc32826907d4f3c4938845206006089"
 SRCREV_machine:beaglebone-yocto ?= "332d4668fcc32826907d4f3c4938845206006089"
 
+COMPATIBLE_MACHINE:genericarm64 = "genericarm64"
 COMPATIBLE_MACHINE:genericx86 = "genericx86"
 COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
 COMPATIBLE_MACHINE:beaglebone-yocto = "beaglebone-yocto"
 
+LINUX_VERSION:genericarm64 = "6.6.18"
 LINUX_VERSION:genericx86 = "6.6.15"
 LINUX_VERSION:genericx86-64 = "6.6.15"
 LINUX_VERSION:beaglebone-yocto = "6.6.15"
diff --git a/meta-yocto-bsp/wic/genericarm64.wks.in b/meta-yocto-bsp/wic/genericarm64.wks.in
new file mode 100644
index 00000000000..417d4d88104
--- /dev/null
+++ b/meta-yocto-bsp/wic/genericarm64.wks.in
@@ -0,0 +1,11 @@ 
+# short-description: Create an EFI disk image
+# long-description: Creates a partitioned EFI disk image that the user
+# can directly dd to boot media.
+
+part /boot --source bootimg-efi --sourceparams="loader=${EFI_PROVIDER},initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --label boot --active --align 1024 --use-uuid
+
+part / --source rootfs --fstype=ext4 --label root --align 1024 --use-uuid
+
+part swap --size 44 --label swap --fstype=swap --use-uuid
+
+bootloader --ptable gpt --timeout=5 --append="rootwait rootfstype=ext4"