Rework virtio-aarch64 machine definition 19/30119/2
authorScott Murray <scott.murray@konsulko.com>
Mon, 8 Jul 2024 16:51:15 +0000 (12:51 -0400)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 9 Jul 2024 09:32:15 +0000 (09:32 +0000)
Start on potentially removing separate virtio-arch64 machine by
simplifying it and moving as much of its virtio kernel configuration
over to our generic kernel configuration scheme.  From some
experimentation, it is not obvious that genericarm64 or qemuarm64
are directly reusable as guest MACHINEs as is, so further
investigation is required on whether maintaining our own machine
and potentially custom kernel metadata cache is perhaps worthwhile.

Changes:
- Update virtio-aarch64 linux-yocto bbappend for new version in
  scarthgap, and drop its use of a custom kernel metadata cache for
  reusing qemuarm64's BSP as a starting point for now.
- Move the various virtio-*.cfg kernel configuration fragments over to
  meta-agl-core, using a new "agl-virtio-guest" AGL_FEATURES flag to
  control whether they are used.  The aim is to make it more obvious
  where any virtio kernel configuration comes from and hopefully make
  it more easily reusable.

Bug-AGL: SPEC-5137, SPEC-5201

Change-Id: I861cd1f80643aca632a5ab103eae2cc46de3922e
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/30119
ci-image-build: Jenkins Job builder account
Tested-by: Jenkins Job builder account
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
ci-image-boot-test: Jenkins Job builder account

meta-agl-bsp/conf/machine/include/virtio.inc
meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend [deleted file]
meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc [deleted file]
meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend
meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc [new file with mode: 0644]
meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
meta-agl-core/recipes-kernel/linux/linux-agl.inc
meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg [new file with mode: 0644]
meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg [moved from meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg with 100% similarity]
meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg [moved from meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg with 100% similarity]
meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg [new file with mode: 0644]

index 6f8a638..1e4875b 100644 (file)
@@ -15,9 +15,6 @@ RDEPENDS:${KERNEL_PACKAGE_NAME}-base = ""
 # Use a common kernel recipe for all VirtIO machines
 PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
 
-# Use newer kernel
-PREFERRED_VERSION_linux-yocto = "5.15.%"
-
 EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
 
 IMAGE_CLASSES += "qemuboot"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
deleted file mode 100644 (file)
index 5970414..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/linux-yocto:"
-
-SRC_URI:append:virtio-all = " \
-    git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=master \
-    file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
-"
-
-SRCREV_agl-meta = "c5008f4ba9e1b9f11c1014b53477079e605ceab7"
-
-COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
deleted file mode 100644 (file)
index 2d1570e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: MIT
-define KMACHINE virtio-aarch64
-define KTYPE standard
-define KARCH arm64
-
-include ktypes/standard/standard.scc nopatch
-include arch/arm/aarch64.scc
-include cfg/8250.scc
-include cfg/virtio.scc
-include bsp/virtio/agl-virtio.scc
-
-# enable the ability to run 32 bit apps
-include arch/arm/32bit-compat.scc
index 6952436..15cb9ea 100644 (file)
@@ -1,17 +1,6 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-# Cannot just append to SRC_URI, as the metadata interferes with the
-# AGL config fragment scheme
-AGL_KERNEL_SRC:prepend:virtio-all = " \
-    git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=kernel-5.15 \
-    file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
-"
-
-SRCREV_agl-meta = "4deb7357eab5962b0553a5ad1f11be5ac35f9da9"
-
-AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
-    virtio-drm.cfg \
-    virtio-pci.cfg \
-"
-
+# NOTE: Has to be in bbappend itself because BitBake does not fully
+#       parse recipes when checking it
 COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
+
+# Reuse base qemuarm64 machine to avoid needing our own kernel metadata
+KMACHINE:virtio-aarch64 = "qemuarm64"
\ No newline at end of file
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc
new file mode 100644 (file)
index 0000000..e0d30b1
--- /dev/null
@@ -0,0 +1,8 @@
+AGL_KCONFIG_FRAGMENTS += " \
+    virtio-${TUNE_ARCH} \
+    virtio-drm.cfg \
+    virtio-pci.cfg \
+    virtio-scmi.cfg \
+    sound-hda.cfg \
+    virtio-snd.cfg \
+"
index 4799a61..5cf008a 100644 (file)
@@ -71,10 +71,6 @@ AGL_KCONFIG_FRAGMENTS:append:qemuall = " \
     qemu-drm.cfg \
 "
 
-AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
-    sound-hda.cfg \
-"
-
 # Configuration for using the ARM virt machine (and not versatilepb)
 AGL_KCONFIG_FRAGMENTS:append:qemuarm = " qemuarm.cfg"
 
index c318716..f41e35b 100644 (file)
@@ -3,7 +3,8 @@
 
 DEPENDS += "kern-tools-native"
 
-include linux-agl-config.inc
+require linux-agl-config.inc
+include ${@bb.utils.contains('AGL_FEATURES', 'agl-virtio-guest', 'linux-agl-config-virtio.inc', '', d)}
 
 # returns all the elements from the src uri that are .cfg files
 def find_cfgs(d):
diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg
new file mode 100644 (file)
index 0000000..25381e1
--- /dev/null
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: MIT
+#
+# ARM64
+#
+CONFIG_ARM64=y
+CONFIG_64BIT=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+
+#
+# RTC
+#
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL031=y
diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg
new file mode 100644 (file)
index 0000000..5ae0193
--- /dev/null
@@ -0,0 +1,25 @@
+# Enable ARM_SCMI_PROTOCOL ("ARM System Control and Management Interface (SCMI)
+# Message Protocol") config located in menu
+# 
+#     -> Device Drivers
+#       -> Firmware Drivers
+#         -> ARM System Control and Management Interface Protocol
+# 
+# After that, in the same menu enabled:
+# 
+# * ARM_SCMI_TRANSPORT_VIRTIO ("SCMI transport based on VirtIO")
+# 
+# and disabled not used features:
+# 
+# * ARM_SCMI_TRANSPORT_SMC ("SCMI transport based on SMC")
+# * ARM_SCMI_POWER_DOMAIN ("SCMI power domain driver")
+
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
+CONFIG_ARM_SCMI_HAVE_MSG=y
+# CONFIG_ARM_SCMI_TRANSPORT_SMC is not set
+CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
+# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
+# CONFIG_SENSORS_ARM_SCMI is not set
+# CONFIG_COMMON_CLK_SCMI is not set
+CONFIG_IIO_SCMI=y