conf/machine/raspberrypi4: Switch to 64-bit 89/22889/4
authorLeon Anavi <leon.anavi@konsulko.com>
Thu, 7 Nov 2019 16:26:02 +0000 (18:26 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 19 Nov 2019 16:32:44 +0000 (16:32 +0000)
Switch from 32-bit to 64-bit AGL image for Raspberry Pi 4.
Machine configuration has been modified according to the existing
configurations from meta-raspberrypi branches master and zeus.
When AGL moves to a newer release of the Yocto project and the BSP
these configurations can be removed from meta-agl.

Bug-AGL: SPEC-2936

Change-Id: Iddc3f75be179797e7d56f6806ec6ba52b080d766
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
meta-agl-bsp/conf/machine/include/rpi4-base.inc [new file with mode: 0644]
meta-agl-bsp/conf/machine/raspberrypi4.conf

diff --git a/meta-agl-bsp/conf/machine/include/rpi4-base.inc b/meta-agl-bsp/conf/machine/include/rpi4-base.inc
new file mode 100644 (file)
index 0000000..36a8daf
--- /dev/null
@@ -0,0 +1,121 @@
+include conf/machine/include/rpi-default-settings.inc
+include conf/machine/include/rpi-default-versions.inc
+include conf/machine/include/rpi-default-providers.inc
+
+SOC_FAMILY = "rpi"
+include conf/machine/include/soc-family.inc
+
+IMAGE_FSTYPES ?= "tar.bz2 ext3 rpi-sdimg"
+WKS_FILE ?= "sdimage-raspberrypi.wks"
+
+XSERVER = " \
+    xserver-xorg \
+    ${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "xserver-xorg-extension-glx", "", d)} \
+    ${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "xf86-video-modesetting", "xf86-video-fbdev", d)} \
+    "
+
+RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
+    overlays/at86rf233.dtbo \
+    overlays/dwc2.dtbo \
+    overlays/gpio-key.dtbo \
+    overlays/hifiberry-amp.dtbo \
+    overlays/hifiberry-dac.dtbo \
+    overlays/hifiberry-dacplus.dtbo \
+    overlays/hifiberry-digi.dtbo \
+    overlays/i2c-rtc.dtbo \
+    overlays/iqaudio-dac.dtbo \
+    overlays/iqaudio-dacplus.dtbo \
+    overlays/mcp2515-can0.dtbo \
+    overlays/pi3-disable-bt.dtbo \
+    overlays/pi3-miniuart-bt.dtbo \
+    overlays/pitft22.dtbo \
+    overlays/pitft28-resistive.dtbo \
+    overlays/pitft35-resistive.dtbo \
+    overlays/pps-gpio.dtbo \
+    overlays/rpi-ft5406.dtbo \
+    overlays/rpi-poe.dtbo \
+    overlays/vc4-kms-v3d.dtbo \
+    overlays/vc4-fkms-v3d.dtbo \
+    overlays/w1-gpio-pullup.dtbo \
+    overlays/w1-gpio.dtbo \
+    "
+
+RPI_KERNEL_DEVICETREE ?= " \
+    bcm2708-rpi-zero-w.dtb \
+    bcm2708-rpi-b.dtb \
+    bcm2708-rpi-b-plus.dtb \
+    bcm2709-rpi-2-b.dtb \
+    bcm2710-rpi-3-b.dtb \
+    bcm2710-rpi-3-b-plus.dtb \
+    bcm2711-rpi-4-b.dtb \
+    bcm2708-rpi-cm.dtb \
+    bcm2710-rpi-cm3.dtb \
+    "
+
+KERNEL_DEVICETREE ?= " \
+    ${RPI_KERNEL_DEVICETREE} \
+    ${RPI_KERNEL_DEVICETREE_OVERLAYS} \
+    "
+
+# By default:
+#
+# * When u-boot is disabled use the "Image" format which can be directly loaded
+#   by the rpi firmware.
+#
+# * When u-boot is enabled use the "uImage" format and the "bootm" command
+#   within u-boot to load the kernel.
+KERNEL_BOOTCMD ??= "bootm"
+KERNEL_IMAGETYPE_UBOOT ??= "uImage"
+KERNEL_IMAGETYPE_DIRECT ??= "zImage"
+KERNEL_IMAGETYPE ?= "${@bb.utils.contains('RPI_USE_U_BOOT', '1', \
+        '${KERNEL_IMAGETYPE_UBOOT}', '${KERNEL_IMAGETYPE_DIRECT}', d)}"
+
+MACHINE_FEATURES += "apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio ${@bb.utils.contains('DISABLE_VC4GRAPHICS', '1', '', 'vc4graphics', d)}"
+
+# Raspberry Pi has no hardware clock
+MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
+
+MACHINE_EXTRA_RRECOMMENDS += " kernel-modules udev-rules-rpi"
+
+# Set Raspberrypi splash image
+SPLASH = "psplash-raspberrypi"
+
+def make_dtb_boot_files(d):
+    # Generate IMAGE_BOOT_FILES entries for device tree files listed in
+    # KERNEL_DEVICETREE.
+    alldtbs = d.getVar('KERNEL_DEVICETREE')
+    imgtyp = d.getVar('KERNEL_IMAGETYPE')
+
+    def transform(dtb):
+        base = os.path.basename(dtb)
+        if dtb.endswith('dtb'):
+            # eg: whatever/bcm2708-rpi-b.dtb has:
+            #     DEPLOYDIR file: bcm2708-rpi-b.dtb
+            #     destination: bcm2708-rpi-b.dtb
+            return base
+        elif dtb.endswith('dtbo'):
+            # overlay dtb:
+            # eg: overlays/hifiberry-amp.dtbo has:
+            #     DEPLOYDIR file: hifiberry-amp.dtbo
+            #     destination: overlays/hifiberry-amp.dtbo
+            return '{};{}'.format(base, dtb)
+
+    return ' '.join([transform(dtb) for dtb in alldtbs.split(' ') if dtb])
+
+
+IMAGE_BOOT_FILES ?= "bcm2835-bootfiles/* \
+                 ${@make_dtb_boot_files(d)} \
+                 ${@bb.utils.contains('RPI_USE_U_BOOT', '1', \
+                    '${KERNEL_IMAGETYPE} u-boot.bin;${SDIMG_KERNELIMAGE} boot.scr', \
+                    '${KERNEL_IMAGETYPE};${SDIMG_KERNELIMAGE}', d)} \
+                 "
+do_image_wic[depends] += " \
+    bcm2835-bootfiles:do_deploy \
+    ${@bb.utils.contains('RPI_USE_U_BOOT', '1', 'u-boot:do_deploy', '',d)} \
+    "
+
+do_image_wic[recrdeps] = "do_build"
+
+# The kernel image is installed into the FAT32 boot partition and does not need
+# to also be installed into the rootfs.
+RDEPENDS_${KERNEL_PACKAGE_NAME}-base = ""
index 2f75928..1679fb5 100644 (file)
@@ -1,26 +1,36 @@
 #@TYPE: Machine
-#@NAME: RaspberryPi 4 Development Board (32bit)
-#@DESCRIPTION: Machine configuration for the RaspberryPi 4 in 32 bit mode
+#@NAME: RaspberryPi 4 Development Board (64bit)
+#@DESCRIPTION: Machine configuration for the RaspberryPi 4 in 64 bits mode
 
-DEFAULTTUNE ?= "cortexa7thf-neon-vfpv4"
-require conf/machine/include/tune-cortexa7.inc
-include conf/machine/include/rpi-base.inc
+MACHINEOVERRIDES = "raspberrypi4:${MACHINE}"
 
 MACHINE_EXTRA_RRECOMMENDS += "\
     linux-firmware-rpidistro-bcm43455 \
     bluez-firmware-rpidistro-bcm4345c0-hcd \
-    pi-bluetooth \
 "
 
-# 'l' stands for LPAE
-SDIMG_KERNELIMAGE ?= "kernel7l.img"
-UBOOT_MACHINE = "rpi_4_32b_config"
+require conf/machine/include/arm/arch-arm64.inc
+include conf/machine/include/rpi4-base.inc
+
+RPI_KERNEL_DEVICETREE = " \
+    broadcom/bcm2711-rpi-4-b.dtb \
+"
+
+SDIMG_KERNELIMAGE ?= "kernel8.img"
 SERIAL_CONSOLES ?= "115200;ttyS0"
 
 MACHINE_FEATURES_append = " vc4graphics"
+UBOOT_MACHINE = "rpi_4_config"
+
 VC4DTBO ?= "vc4-fkms-v3d"
 
-RPI_KERNEL_DEVICETREE_OVERLAYS_remove_raspberrypi4 = "overlays/lirc-rpi.dtbo"
-RPI_KERNEL_DEVICETREE_OVERLAYS_append_raspberrypi4 = " overlays/mcp2515-can0.dtbo overlays/vc4-fkms-v3d.dtbo"
-RPI_KERNEL_DEVICETREE_remove_raspberrypi4 = "bcm2708-rpi-0-w.dtb"
-RPI_KERNEL_DEVICETREE_append_raspberrypi4 = " bcm2708-rpi-zero-w.dtb bcm2711-rpi-4-b.dtb"
+# When u-boot is enabled we need to use the "Image" format and the "booti"
+# command to load the kernel
+KERNEL_IMAGETYPE_UBOOT ?= "Image"
+# "zImage" not supported on arm64 and ".gz" images not supported by bootloader yet
+KERNEL_IMAGETYPE_DIRECT ?= "Image"
+KERNEL_BOOTCMD ?= "booti"
+
+RPI_EXTRA_CONFIG ?= "\n# Force arm in 64bit mode. See: https://github.com/raspberrypi/firmware/issues/1193.\narm_64bit=1"
+
+ARMSTUB ?= "armstub8-gic.bin"