From 121fdd353c3f194d3f1199c14c4e8fe13679d764 Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Thu, 27 Aug 2026 06:17:54 -0500 Subject: [PATCH 1/2] Build the vc4 driver into the arm64 kernel so a Pi has a console FOS builds without DRM and relies on firmware handing over a framebuffer, the way CONFIG_FB_EFI/FB_VESA works off EFI GOP on a PC. That assumption does not hold on a Raspberry Pi. Our bcm2711-rpi-4-b.dtb carries brcm,bcm2711-hdmi0/1 nodes but no simple-framebuffer node, and the simple-framebuffer node the VideoCore firmware would otherwise inject is suppressed whenever config.txt enables the vc4-kms-v3d overlay -- which current Raspberry Pi OS ships on by default. The result is a Pi that produces no console output at all, so a healthy boot and an early hang are indistinguishable (forums topic 18229). DRM_VC4 cannot simply be switched on. It depends on DRM, on SND && SND_SOC because HDMI audio is integral to the driver, and on PM -- three subsystems this config deliberately excludes. Enabling only CONFIG_DRM_VC4 is silently dropped by oldconfig with no error, which is the ADR-0010 trap; it took two rounds of adding a dependency and re-running olddefconfig before the symbol survived. Verified linked rather than merely configured: 378 vc4_* symbols in vmlinux. Cost measured on matched builds, same box and toolchain: Image grows from 28,353,024 to 29,420,032 bytes, +1,067,008 (+3.8%). DRM_V3D is deliberately not enabled -- it is the 3D accelerator and buys nothing for a console. This is a branch build for hardware testing. It needs an ADR and a guard in tests/checks/arm64-platform-config.sh before it belongs on master, since a silently-dropped DRM_VC4 would reintroduce exactly the blank screen this fixes. Co-Authored-By: Claude Opus 5 --- configs/kernelarm64.config | 708 ++++++++++++++++++++++++++++++++++++- 1 file changed, 702 insertions(+), 6 deletions(-) diff --git a/configs/kernelarm64.config b/configs/kernelarm64.config index f9e38c8..927a354 100644 --- a/configs/kernelarm64.config +++ b/configs/kernelarm64.config @@ -200,7 +200,7 @@ CONFIG_IO_URING=y # CONFIG_IO_URING_MOCK_FILE is not set CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y -# CONFIG_KCMP is not set +CONFIG_KCMP=y CONFIG_RSEQ=y # CONFIG_DEBUG_RSEQ is not set CONFIG_CACHESTAT_SYSCALL=y @@ -500,7 +500,12 @@ CONFIG_DMI=y # Power management options # # CONFIG_SUSPEND is not set -# CONFIG_PM is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_PM_GENERIC_DOMAINS_OF=y CONFIG_CPU_PM=y # CONFIG_ENERGY_MODEL is not set CONFIG_ARCH_HIBERNATION_POSSIBLE=y @@ -773,6 +778,7 @@ CONFIG_EFI_PARTITION=y # CONFIG_OF_PARTITION is not set # end of Partition Types +CONFIG_BLK_PM=y CONFIG_BLOCK_HOLDER_DEPRECATED=y CONFIG_BLK_MQ_STACKING=y @@ -949,6 +955,7 @@ CONFIG_ARCH_HAS_USER_SHADOW_STACK=y # end of Memory Management options CONFIG_NET=y +CONFIG_NET_DEVMEM=y CONFIG_NET_SHAPER=y # @@ -1083,6 +1090,7 @@ CONFIG_PCIEASPM_DEFAULT=y # CONFIG_PCIEASPM_POWERSAVE is not set # CONFIG_PCIEASPM_POWER_SUPERSAVE is not set # CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y # CONFIG_PCIE_PTM is not set CONFIG_PCI_MSI=y CONFIG_PCI_QUIRKS=y @@ -1197,7 +1205,10 @@ CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_SOC_BUS=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SPI=y CONFIG_REGMAP_MMIO=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set # end of Generic Driver Options @@ -1520,6 +1531,7 @@ CONFIG_PATA_TIMINGS=y CONFIG_ATA_VERBOSE_ERROR=y CONFIG_ATA_FORCE=y CONFIG_ATA_ACPI=y +# CONFIG_SATA_ZPODD is not set CONFIG_SATA_PMP=y # @@ -1928,6 +1940,10 @@ CONFIG_8139TOO_8129=y # CONFIG_8139_OLD_RX_RESET is not set CONFIG_R8169=y # CONFIG_RTASE is not set +# CONFIG_R8125 is not set +# CONFIG_R8126 is not set +# CONFIG_R8127 is not set +# CONFIG_R8168 is not set CONFIG_NET_VENDOR_RENESAS=y CONFIG_NET_VENDOR_ROCKER=y CONFIG_NET_VENDOR_SAMSUNG=y @@ -3044,7 +3060,179 @@ CONFIG_APERTURE_HELPERS=y CONFIG_SCREEN_INFO=y CONFIG_VIDEO=y # CONFIG_AUXDISPLAY is not set -# CONFIG_DRM is not set +CONFIG_DRM=y + +# +# DRM debugging options +# +# CONFIG_DRM_WERROR is not set +# CONFIG_DRM_DEBUG_MM is not set +# end of DRM debugging options + +CONFIG_DRM_MIPI_DSI=y +CONFIG_DRM_KMS_HELPER=y +# CONFIG_DRM_PANIC is not set +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_CLIENT=y +CONFIG_DRM_CLIENT_LIB=y +CONFIG_DRM_CLIENT_SELECTION=y +CONFIG_DRM_CLIENT_SETUP=y + +# +# Supported DRM clients +# +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +# CONFIG_DRM_CLIENT_LOG is not set +CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y +CONFIG_DRM_CLIENT_DEFAULT="fbdev" +# end of Supported DRM clients + +# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +CONFIG_DRM_DISPLAY_HELPER=y +# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set +# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set +CONFIG_DRM_DISPLAY_HDMI_AUDIO_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_STATE_HELPER=y +CONFIG_DRM_EXEC=y +CONFIG_DRM_GEM_DMA_HELPER=y + +# +# Drivers for system framebuffers +# +# CONFIG_DRM_EFIDRM is not set +# CONFIG_DRM_SIMPLEDRM is not set +# end of Drivers for system framebuffers + +# +# ARM devices +# +# CONFIG_DRM_HDLCD is not set +# CONFIG_DRM_MALI_DISPLAY is not set +# CONFIG_DRM_KOMEDA is not set +# end of ARM devices + +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_AMDGPU is not set +# CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_XE is not set +# CONFIG_DRM_VGEM is not set +# CONFIG_DRM_VKMS is not set +# CONFIG_DRM_VMWGFX is not set +# CONFIG_DRM_UDL is not set +# CONFIG_DRM_AST is not set +# CONFIG_DRM_MGAG200 is not set +# CONFIG_DRM_QXL is not set +# CONFIG_DRM_VIRTIO_GPU is not set +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set +# CONFIG_DRM_PANEL_ARM_VERSATILE is not set +# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set +# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set +# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set +# CONFIG_DRM_PANEL_LG_LB035Q02 is not set +# CONFIG_DRM_PANEL_LG_LG4573 is not set +# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set +# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM67200 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set +# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_CHIPONE_ICN6211 is not set +# CONFIG_DRM_CHRONTEL_CH7033 is not set +# CONFIG_DRM_DISPLAY_CONNECTOR is not set +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_ITE_IT6263 is not set +# CONFIG_DRM_ITE_IT6505 is not set +# CONFIG_DRM_LONTIUM_LT8912B is not set +# CONFIG_DRM_LONTIUM_LT9211 is not set +# CONFIG_DRM_LONTIUM_LT9611 is not set +# CONFIG_DRM_LONTIUM_LT9611UXC is not set +# CONFIG_DRM_ITE_IT66121 is not set +# CONFIG_DRM_LVDS_CODEC is not set +# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set +# CONFIG_DRM_NWL_MIPI_DSI is not set +# CONFIG_DRM_NXP_PTN3460 is not set +# CONFIG_DRM_PARADE_PS8622 is not set +# CONFIG_DRM_PARADE_PS8640 is not set +# CONFIG_DRM_SAMSUNG_DSIM is not set +# CONFIG_DRM_SIL_SII8620 is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_SII9234 is not set +# CONFIG_DRM_SIMPLE_BRIDGE is not set +# CONFIG_DRM_SOLOMON_SSD2825 is not set +# CONFIG_DRM_THINE_THC63LVD1024 is not set +# CONFIG_DRM_TOSHIBA_TC358762 is not set +# CONFIG_DRM_TOSHIBA_TC358764 is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_TOSHIBA_TC358768 is not set +# CONFIG_DRM_TOSHIBA_TC358775 is not set +# CONFIG_DRM_TI_DLPC3433 is not set +# CONFIG_DRM_TI_TDP158 is not set +# CONFIG_DRM_TI_TFP410 is not set +# CONFIG_DRM_TI_SN65DSI83 is not set +# CONFIG_DRM_TI_SN65DSI86 is not set +# CONFIG_DRM_TI_TPD12S015 is not set +# CONFIG_DRM_ANALOGIX_ANX6345 is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# CONFIG_DRM_ANALOGIX_ANX7625 is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_CDNS_DSI is not set +# CONFIG_DRM_CDNS_MHDP8546 is not set +# end of Display Interface Bridges + +# CONFIG_DRM_V3D is not set +CONFIG_DRM_VC4=y +# CONFIG_DRM_VC4_HDMI_CEC is not set +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_HISI_HIBMC is not set +# CONFIG_DRM_HISI_KIRIN is not set +# CONFIG_DRM_LOGICVC is not set +# CONFIG_DRM_ARCPGU is not set +# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_PANEL_MIPI_DBI is not set +# CONFIG_DRM_PIXPAPER is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9163 is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_ILI9486 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_SHARP_MEMORY is not set +# CONFIG_DRM_PL111 is not set +# CONFIG_DRM_LIMA is not set +# CONFIG_DRM_PANFROST is not set +# CONFIG_DRM_PANTHOR is not set +# CONFIG_DRM_TIDSS is not set +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_ST7571_I2C is not set +# CONFIG_DRM_ST7586 is not set +# CONFIG_DRM_ST7735R is not set +# CONFIG_DRM_SSD130X is not set +# CONFIG_DRM_POWERVR is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y # @@ -3092,7 +3280,14 @@ CONFIG_FB_DEVICE=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y # CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYSMEM_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_DMAMEM_HELPERS=y +CONFIG_FB_DMAMEM_HELPERS_DEFERRED=y CONFIG_FB_IOMEM_FOPS=y CONFIG_FB_IOMEM_HELPERS=y # CONFIG_FB_MODE_HELPERS is not set @@ -3106,6 +3301,8 @@ CONFIG_FB_IOMEM_HELPERS=y # CONFIG_BACKLIGHT_CLASS_DEVICE is not set # end of Backlight & LCD device support +CONFIG_HDMI=y + # # Console display driver support # @@ -3114,7 +3311,7 @@ CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 CONFIG_FRAMEBUFFER_CONSOLE=y # CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set # CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set # end of Console display driver support @@ -3123,7 +3320,495 @@ CONFIG_FRAMEBUFFER_CONSOLE=y # CONFIG_TRACE_GPU_MEM is not set # end of Graphics support -# CONFIG_SOUND is not set +# CONFIG_DRM_ACCEL is not set +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_PCM_ELD=y +CONFIG_SND_PCM_IEC958=y +CONFIG_SND_DMAENGINE_PCM=y +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +# CONFIG_SND_OSSEMUL is not set +CONFIG_SND_PCM_TIMER=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_CTL_FAST_LOOKUP=y +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_CTL_INPUT_VALIDATION is not set +# CONFIG_SND_UTIMER is not set +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_DRIVERS=y +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_ALOOP is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LOLA is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SE6X is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# HD-Audio +# +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDA_ACPI is not set +# end of HD-Audio + +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set +# CONFIG_SND_USB_CAIAQ is not set +# CONFIG_SND_USB_6FIRE is not set +# CONFIG_SND_USB_HIFACE is not set +# CONFIG_SND_BCD2000 is not set +# CONFIG_SND_USB_POD is not set +# CONFIG_SND_USB_PODHD is not set +# CONFIG_SND_USB_TONEPORT is not set +# CONFIG_SND_USB_VARIAX is not set +CONFIG_SND_SOC=y +CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y + +# +# Analog Devices +# +# CONFIG_SND_SOC_ADI_AXI_I2S is not set +# CONFIG_SND_SOC_ADI_AXI_SPDIF is not set +# end of Analog Devices + +# +# AMD +# +# CONFIG_SND_SOC_AMD_ACP is not set +# CONFIG_SND_AMD_ACP_CONFIG is not set +# end of AMD + +# +# Apple +# +# end of Apple + +# +# Atmel +# +# CONFIG_SND_SOC_MIKROE_PROTO is not set +# end of Atmel + +# +# Au1x +# +# end of Au1x + +# +# Broadcom +# +# CONFIG_SND_BCM2835_SOC_I2S is not set +# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set +# end of Broadcom + +# +# Cirrus Logic +# +# end of Cirrus Logic + +# +# DesignWare +# +# CONFIG_SND_DESIGNWARE_I2S is not set +# end of DesignWare + +# +# Freescale +# + +# +# Common SoC Audio options for Freescale CPUs: +# +# CONFIG_SND_SOC_FSL_ASRC is not set +# CONFIG_SND_SOC_FSL_SAI is not set +# CONFIG_SND_SOC_FSL_AUDMIX is not set +# CONFIG_SND_SOC_FSL_SSI is not set +# CONFIG_SND_SOC_FSL_SPDIF is not set +# CONFIG_SND_SOC_FSL_ESAI is not set +# CONFIG_SND_SOC_FSL_MICFIL is not set +# CONFIG_SND_SOC_FSL_XCVR is not set +# CONFIG_SND_SOC_IMX_AUDMUX is not set +# end of Freescale + +# +# Google +# +# CONFIG_SND_SOC_CHV3_I2S is not set +# end of Google + +# +# Hisilicon +# +# CONFIG_SND_I2S_HI6210_I2S is not set +# end of Hisilicon + +# +# JZ4740 +# +# end of JZ4740 + +# +# Kirkwood +# +# end of Kirkwood + +# +# Loongson +# +# end of Loongson + +# +# Intel +# +# end of Intel + +# +# Mediatek +# +# CONFIG_SND_SOC_MTK_BTCVSD is not set +# end of Mediatek + +# +# PXA +# +# end of PXA + +# +# SoundWire (SDCA) +# +CONFIG_SND_SOC_SDCA_OPTIONAL=y +# end of SoundWire (SDCA) + +# +# ST SPEAr +# +# end of ST SPEAr + +# +# Spreadtrum +# +# end of Spreadtrum + +# +# STMicroelectronics STM32 +# +# end of STMicroelectronics STM32 + +# +# Tegra +# +# end of Tegra + +# +# Xilinx +# +# CONFIG_SND_SOC_XILINX_I2S is not set +# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set +# CONFIG_SND_SOC_XILINX_SPDIF is not set +# end of Xilinx + +# +# Xtensa +# +# CONFIG_SND_SOC_XTFPGA_I2S is not set +# end of Xtensa + +# CONFIG_SND_SOC_SOF_TOPLEVEL is not set +CONFIG_SND_SOC_I2C_AND_SPI=y + +# +# CODEC drivers +# +# CONFIG_SND_SOC_AC97_CODEC is not set +# CONFIG_SND_SOC_ADAU1372_I2C is not set +# CONFIG_SND_SOC_ADAU1372_SPI is not set +# CONFIG_SND_SOC_ADAU1373 is not set +# CONFIG_SND_SOC_ADAU1701 is not set +# CONFIG_SND_SOC_ADAU1761_I2C is not set +# CONFIG_SND_SOC_ADAU1761_SPI is not set +# CONFIG_SND_SOC_ADAU7002 is not set +# CONFIG_SND_SOC_ADAU7118_HW is not set +# CONFIG_SND_SOC_ADAU7118_I2C is not set +# CONFIG_SND_SOC_AK4104 is not set +# CONFIG_SND_SOC_AK4118 is not set +# CONFIG_SND_SOC_AK4375 is not set +# CONFIG_SND_SOC_AK4458 is not set +# CONFIG_SND_SOC_AK4554 is not set +# CONFIG_SND_SOC_AK4613 is not set +# CONFIG_SND_SOC_AK4619 is not set +# CONFIG_SND_SOC_AK4642 is not set +# CONFIG_SND_SOC_AK5386 is not set +# CONFIG_SND_SOC_AK5558 is not set +# CONFIG_SND_SOC_ALC5623 is not set +# CONFIG_SND_SOC_AW8738 is not set +# CONFIG_SND_SOC_AW88395 is not set +# CONFIG_SND_SOC_AW88166 is not set +# CONFIG_SND_SOC_AW88261 is not set +# CONFIG_SND_SOC_AW88081 is not set +# CONFIG_SND_SOC_AW87390 is not set +# CONFIG_SND_SOC_AW88399 is not set +# CONFIG_SND_SOC_BD28623 is not set +# CONFIG_SND_SOC_BT_SCO is not set +# CONFIG_SND_SOC_CHV3_CODEC is not set +# CONFIG_SND_SOC_CS35L32 is not set +# CONFIG_SND_SOC_CS35L33 is not set +# CONFIG_SND_SOC_CS35L34 is not set +# CONFIG_SND_SOC_CS35L35 is not set +# CONFIG_SND_SOC_CS35L36 is not set +# CONFIG_SND_SOC_CS35L41_SPI is not set +# CONFIG_SND_SOC_CS35L41_I2C is not set +# CONFIG_SND_SOC_CS35L45_SPI is not set +# CONFIG_SND_SOC_CS35L45_I2C is not set +# CONFIG_SND_SOC_CS35L56_I2C is not set +# CONFIG_SND_SOC_CS35L56_SPI is not set +# CONFIG_SND_SOC_CS42L42 is not set +# CONFIG_SND_SOC_CS42L51_I2C is not set +# CONFIG_SND_SOC_CS42L52 is not set +# CONFIG_SND_SOC_CS42L56 is not set +# CONFIG_SND_SOC_CS42L73 is not set +# CONFIG_SND_SOC_CS42L83 is not set +# CONFIG_SND_SOC_CS42L84 is not set +# CONFIG_SND_SOC_CS4234 is not set +# CONFIG_SND_SOC_CS4265 is not set +# CONFIG_SND_SOC_CS4270 is not set +# CONFIG_SND_SOC_CS4271_I2C is not set +# CONFIG_SND_SOC_CS4271_SPI is not set +# CONFIG_SND_SOC_CS42XX8_I2C is not set +# CONFIG_SND_SOC_CS43130 is not set +# CONFIG_SND_SOC_CS4341 is not set +# CONFIG_SND_SOC_CS4349 is not set +# CONFIG_SND_SOC_CS48L32 is not set +# CONFIG_SND_SOC_CS53L30 is not set +# CONFIG_SND_SOC_CS530X_I2C is not set +# CONFIG_SND_SOC_CX2072X is not set +# CONFIG_SND_SOC_DA7213 is not set +# CONFIG_SND_SOC_DMIC is not set +CONFIG_SND_SOC_HDMI_CODEC=y +# CONFIG_SND_SOC_ES7134 is not set +# CONFIG_SND_SOC_ES7241 is not set +# CONFIG_SND_SOC_ES8311 is not set +# CONFIG_SND_SOC_ES8316 is not set +# CONFIG_SND_SOC_ES8323 is not set +# CONFIG_SND_SOC_ES8326 is not set +# CONFIG_SND_SOC_ES8328_I2C is not set +# CONFIG_SND_SOC_ES8328_SPI is not set +# CONFIG_SND_SOC_ES8375 is not set +# CONFIG_SND_SOC_ES8389 is not set +# CONFIG_SND_SOC_FS210X is not set +# CONFIG_SND_SOC_GTM601 is not set +# CONFIG_SND_SOC_HDA is not set +# CONFIG_SND_SOC_ICS43432 is not set +# CONFIG_SND_SOC_IDT821034 is not set +# CONFIG_SND_SOC_MAX98088 is not set +# CONFIG_SND_SOC_MAX98090 is not set +# CONFIG_SND_SOC_MAX98357A is not set +# CONFIG_SND_SOC_MAX98504 is not set +# CONFIG_SND_SOC_MAX9867 is not set +# CONFIG_SND_SOC_MAX98927 is not set +# CONFIG_SND_SOC_MAX98520 is not set +# CONFIG_SND_SOC_MAX98373_I2C is not set +# CONFIG_SND_SOC_MAX98388 is not set +# CONFIG_SND_SOC_MAX98390 is not set +# CONFIG_SND_SOC_MAX98396 is not set +# CONFIG_SND_SOC_MAX9860 is not set +# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set +# CONFIG_SND_SOC_PCM1681 is not set +# CONFIG_SND_SOC_PCM1754 is not set +# CONFIG_SND_SOC_PCM1789_I2C is not set +# CONFIG_SND_SOC_PCM179X_I2C is not set +# CONFIG_SND_SOC_PCM179X_SPI is not set +# CONFIG_SND_SOC_PCM186X_I2C is not set +# CONFIG_SND_SOC_PCM186X_SPI is not set +# CONFIG_SND_SOC_PCM3060_I2C is not set +# CONFIG_SND_SOC_PCM3060_SPI is not set +# CONFIG_SND_SOC_PCM3168A_I2C is not set +# CONFIG_SND_SOC_PCM3168A_SPI is not set +# CONFIG_SND_SOC_PCM5102A is not set +# CONFIG_SND_SOC_PCM512x_I2C is not set +# CONFIG_SND_SOC_PCM512x_SPI is not set +# CONFIG_SND_SOC_PCM6240 is not set +# CONFIG_SND_SOC_PEB2466 is not set +# CONFIG_SND_SOC_RT5616 is not set +# CONFIG_SND_SOC_RT5631 is not set +# CONFIG_SND_SOC_RT5640 is not set +# CONFIG_SND_SOC_RT5659 is not set +# CONFIG_SND_SOC_RT9120 is not set +# CONFIG_SND_SOC_RT9123 is not set +# CONFIG_SND_SOC_RT9123P is not set +# CONFIG_SND_SOC_RTQ9124 is not set +# CONFIG_SND_SOC_RTQ9128 is not set +# CONFIG_SND_SOC_SGTL5000 is not set +# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set +# CONFIG_SND_SOC_SIMPLE_MUX is not set +# CONFIG_SND_SOC_SMA1303 is not set +# CONFIG_SND_SOC_SMA1307 is not set +# CONFIG_SND_SOC_SPDIF is not set +# CONFIG_SND_SOC_SRC4XXX_I2C is not set +# CONFIG_SND_SOC_SSM2305 is not set +# CONFIG_SND_SOC_SSM2518 is not set +# CONFIG_SND_SOC_SSM2602_SPI is not set +# CONFIG_SND_SOC_SSM2602_I2C is not set +# CONFIG_SND_SOC_SSM3515 is not set +# CONFIG_SND_SOC_SSM4567 is not set +# CONFIG_SND_SOC_STA32X is not set +# CONFIG_SND_SOC_STA350 is not set +# CONFIG_SND_SOC_STI_SAS is not set +# CONFIG_SND_SOC_TAS2552 is not set +# CONFIG_SND_SOC_TAS2562 is not set +# CONFIG_SND_SOC_TAS2764 is not set +# CONFIG_SND_SOC_TAS2770 is not set +# CONFIG_SND_SOC_TAS2780 is not set +# CONFIG_SND_SOC_TAS2781_I2C is not set +# CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TAS571X is not set +# CONFIG_SND_SOC_TAS5720 is not set +# CONFIG_SND_SOC_TAS5805M is not set +# CONFIG_SND_SOC_TAS6424 is not set +# CONFIG_SND_SOC_TDA7419 is not set +# CONFIG_SND_SOC_TFA9879 is not set +# CONFIG_SND_SOC_TFA989X is not set +# CONFIG_SND_SOC_TLV320ADC3XXX is not set +# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +# CONFIG_SND_SOC_TLV320AIC23_SPI is not set +# CONFIG_SND_SOC_TLV320AIC31XX is not set +# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set +# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set +# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set +# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set +# CONFIG_SND_SOC_TLV320ADCX140 is not set +# CONFIG_SND_SOC_TS3A227E is not set +# CONFIG_SND_SOC_TSCS42XX is not set +# CONFIG_SND_SOC_TSCS454 is not set +# CONFIG_SND_SOC_UDA1334 is not set +# CONFIG_SND_SOC_UDA1342 is not set +# CONFIG_SND_SOC_WM8510 is not set +# CONFIG_SND_SOC_WM8523 is not set +# CONFIG_SND_SOC_WM8524 is not set +# CONFIG_SND_SOC_WM8580 is not set +# CONFIG_SND_SOC_WM8711 is not set +# CONFIG_SND_SOC_WM8728 is not set +# CONFIG_SND_SOC_WM8731_I2C is not set +# CONFIG_SND_SOC_WM8731_SPI is not set +# CONFIG_SND_SOC_WM8737 is not set +# CONFIG_SND_SOC_WM8741 is not set +# CONFIG_SND_SOC_WM8750 is not set +# CONFIG_SND_SOC_WM8753 is not set +# CONFIG_SND_SOC_WM8770 is not set +# CONFIG_SND_SOC_WM8776 is not set +# CONFIG_SND_SOC_WM8782 is not set +# CONFIG_SND_SOC_WM8804_I2C is not set +# CONFIG_SND_SOC_WM8804_SPI is not set +# CONFIG_SND_SOC_WM8903 is not set +# CONFIG_SND_SOC_WM8904 is not set +# CONFIG_SND_SOC_WM8940 is not set +# CONFIG_SND_SOC_WM8960 is not set +# CONFIG_SND_SOC_WM8961 is not set +# CONFIG_SND_SOC_WM8962 is not set +# CONFIG_SND_SOC_WM8974 is not set +# CONFIG_SND_SOC_WM8978 is not set +# CONFIG_SND_SOC_WM8985 is not set +# CONFIG_SND_SOC_ZL38060 is not set +# CONFIG_SND_SOC_MAX9759 is not set +# CONFIG_SND_SOC_MT6351 is not set +# CONFIG_SND_SOC_MT6357 is not set +# CONFIG_SND_SOC_MT6358 is not set +# CONFIG_SND_SOC_MT6660 is not set +# CONFIG_SND_SOC_NAU8315 is not set +# CONFIG_SND_SOC_NAU8325 is not set +# CONFIG_SND_SOC_NAU8540 is not set +# CONFIG_SND_SOC_NAU8810 is not set +# CONFIG_SND_SOC_NAU8821 is not set +# CONFIG_SND_SOC_NAU8822 is not set +# CONFIG_SND_SOC_NAU8824 is not set +# CONFIG_SND_SOC_NTP8918 is not set +# CONFIG_SND_SOC_NTP8835 is not set +# CONFIG_SND_SOC_TPA6130A2 is not set +# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set +# CONFIG_SND_SOC_LPASS_VA_MACRO is not set +# CONFIG_SND_SOC_LPASS_RX_MACRO is not set +# CONFIG_SND_SOC_LPASS_TX_MACRO is not set +# end of CODEC drivers + +# +# Generic drivers +# +# CONFIG_SND_SIMPLE_CARD is not set +# CONFIG_SND_AUDIO_GRAPH_CARD is not set +# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set +# CONFIG_SND_TEST_COMPONENT is not set +# end of Generic drivers + +# CONFIG_SND_VIRTIO is not set CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_BATTERY_STRENGTH is not set @@ -3146,6 +3831,7 @@ CONFIG_HID_CHERRY=y CONFIG_HID_CHICONY=y # CONFIG_HID_COUGAR is not set # CONFIG_HID_MACALLY is not set +# CONFIG_HID_PRODIKEYS is not set # CONFIG_HID_CMEDIA is not set # CONFIG_HID_CP2112 is not set # CONFIG_HID_CREATIVE_SB0540 is not set @@ -3266,6 +3952,7 @@ CONFIG_USB_PCI=y CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_FEW_INIT_RETRIES is not set # CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set # CONFIG_USB_OTG_PRODUCTLIST is not set # CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set CONFIG_USB_AUTOSUSPEND_DELAY=2 @@ -3453,6 +4140,7 @@ CONFIG_TYPEC_MUX_PI3USB30532=y # # USB Type-C Alternate Mode drivers # +# CONFIG_TYPEC_DP_ALTMODE is not set # CONFIG_TYPEC_TBT_ALTMODE is not set # end of USB Type-C Alternate Mode drivers @@ -3552,8 +4240,12 @@ CONFIG_DMA_BCM2835=y # # DMABUF options # -# CONFIG_SYNC_FILE is not set +CONFIG_SYNC_FILE=y +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set # CONFIG_DMABUF_HEAPS is not set +# CONFIG_DMABUF_SYSFS_STATS is not set # end of DMABUF options CONFIG_UIO=y @@ -3608,6 +4300,7 @@ CONFIG_STAGING=y # CONFIG_STAGING_MEDIA is not set CONFIG_BCM_VIDEOCORE=y # CONFIG_BCM2835_VCHIQ is not set +# CONFIG_SND_BCM2835 is not set # CONFIG_XIL_AXIS_FIFO is not set # CONFIG_VME_BUS is not set # CONFIG_GPIB is not set @@ -3698,6 +4391,8 @@ CONFIG_BCM2835_MBOX=y # CONFIG_RPMSG_VIRTIO is not set # end of Rpmsg drivers +# CONFIG_SOUNDWIRE is not set + # # SOC (System On Chip) specific Drivers # @@ -4545,6 +5240,7 @@ CONFIG_DECOMPRESS_GZIP=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_ZSTD=y CONFIG_GENERIC_ALLOCATOR=y +CONFIG_XARRAY_MULTI=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y From 582ac0d3d3a3e56a4183807462d78e169a09ff6a Mon Sep 17 00:00:00 2001 From: Tom Elliott Date: Thu, 27 Aug 2026 10:17:49 -0500 Subject: [PATCH 2/2] Record the vc4 decision and guard it against a silent Kconfig drop Validated on real hardware 2026-08-27 (forums topic 18229): with EXP_20260827-114033 the Pi 4 initialised HDMI, reached FOS userspace, and Partclone captured /dev/sda to the server. First end-to-end FOS imaging run on a Raspberry Pi, and the first real-hardware exercise of ADR-0015's platform support and of the mount -t nfs fix, both of which had only ever run under QEMU and VirtualBox. ADR-0017 records why the firmware-framebuffer approach that works on every PC does not reach a Pi: our shipped bcm2711-rpi-4-b.dtb has no simple-framebuffer node, and the node the VideoCore firmware would inject into its own DTB is suppressed once config.txt enables vc4-kms-v3d, which current Raspberry Pi OS ships enabled. It also records the measured cost (+1,067,008 bytes, +3.8%) and why DRM_V3D stays off. The harness gains DRM, DRM_VC4, DRM_FBDEV_EMULATION and FRAMEBUFFER_CONSOLE, and also PM, SND and SND_SOC -- the dependencies whose absence makes oldconfig drop DRM_VC4 with no error, for the same reason SERIAL_8250_SHARE_IRQ is already listed beside SERIAL_8250_BCM2835AUX. Proven to fail before being trusted: three mutations, each restored from a copy rather than git checkout. Dropping DRM_VC4 from the committed config goes red, dropping SND_SOC goes red, and dropping DRM_VC4 from the post-oldconfig .config goes red under -b, which is the mode that catches the actual trap. Full suite green: 15/15 checks plus the golden fixture. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 19 ++++++ docs/adr/0017-arm64-display-vc4.md | 89 +++++++++++++++++++++++++++ tests/checks/arm64-platform-config.sh | 25 ++++++++ 3 files changed, 133 insertions(+) create mode 100644 docs/adr/0017-arm64-display-vc4.md diff --git a/CLAUDE.md b/CLAUDE.md index d1c5f61..57b1b3d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -341,6 +341,25 @@ and add a new ADR for any similarly hard-to-reverse decision: ADR-0003's fail-loud apply is the only reason anyone found out — so reverting to an older init re-hides it rather than fixing it. Guarded by `tests/checks/resize-engine.sh`. +- **0017 — arm64 display / vc4.** FOS builds no DRM anywhere and attaches + `fbcon` to a framebuffer the *firmware* set up — `FB_EFI`/`FB_VESA` off EFI + GOP on a PC, which is guaranteed there. On a Pi it is not: mainline's + `bcm2711-rpi-4-b.dtb` that `arm_dtbs.tar.gz` ships has the + `brcm,bcm2711-hdmi0/1` nodes only vc4 binds to and **no** + `simple-framebuffer`, and the node the VideoCore firmware would inject into + *its own* DTB is suppressed as soon as `config.txt` enables `vc4-kms-v3d` — + which current Raspberry Pi OS ships enabled. A Pi therefore had no console at + all, and a healthy boot was indistinguishable from an early hang, which is + what made forums topic 18229 unreadable. `CONFIG_DRM_VC4` now builds in, at a + measured `Image` cost of +1,067,008 bytes (+3.8%); `DRM_V3D` stays off, being + the 3D accelerator. The trap this ADR exists for is ADR-0010's again and it + fired twice: `DRM_VC4` `depends on SND && SND_SOC` (HDMI audio is integral) + and on `PM`, all three excluded by FOS, and missing any one makes + `oldconfig` drop the driver **silently** — so assert it is *linked* + (`nm vmlinux | grep vc4_`), never merely configured. Validated on real + hardware 2026-08-27: first end-to-end FOS capture on a Raspberry Pi, which + also first-exercised ADR-0015 and the `mount -t nfs` fix off QEMU. Guarded by + `tests/checks/arm64-platform-config.sh`. General conventions to preserve when editing `funcs.sh`/`partition-funcs.sh`: diff --git a/docs/adr/0017-arm64-display-vc4.md b/docs/adr/0017-arm64-display-vc4.md new file mode 100644 index 0000000..f2e1b07 --- /dev/null +++ b/docs/adr/0017-arm64-display-vc4.md @@ -0,0 +1,89 @@ +# The arm64 kernel drives the Pi's display itself, instead of trusting the firmware to + +Reported as forums topic 18229. + +A Raspberry Pi 4 booting FOS stopped on the firmware's four-raspberry splash and +produced no text at all — no kernel messages, no FOS, nothing to type into. It +looked exactly like an early hang, and was diagnosed as one twice. It was not. +The kernel was running fine and had no way to say so. + +`configs/kernelarm64.config` now carries `CONFIG_DRM`, `CONFIG_DRM_VC4` and +`CONFIG_DRM_FBDEV_EMULATION`, so the kernel programs the Pi's HDMI block itself. + +## Why the existing approach doesn't reach a Pi + +FOS builds no DRM on any architecture. It has never needed to: `CONFIG_FB_EFI` +and `CONFIG_FB_VESA` attach `fbcon` to a linear framebuffer the *firmware* +already set up, and on a PC that is guaranteed — every UEFI implementation +publishes a GOP. The same three lines are in `kernelx64.config` today and are +the reason an x86 client has a console. + +The Pi looks like it should work the same way, and this is the trap: the +VideoCore firmware does publish a `simple-framebuffer` node, `CONFIG_FB_SIMPLE` +is already enabled, and the pieces appear to line up. Two things break it. + +- **Our own device tree cannot carry that node.** `arm_dtbs.tar.gz` ships + mainline's `broadcom/bcm2711-rpi-4-b.dtb`, which has `brcm,bcm2711-hdmi0` and + `brcm,bcm2711-hdmi1` — nodes only the vc4 driver binds to — and **zero** + `simple-framebuffer` nodes. The firmware injects that node into *the DTB it + hands the bootloader*; a DTB fetched over TFTP has never been through the + firmware and never will. +- **Even the firmware's DTB stops carrying it once KMS is on.** The + `vc4-kms-v3d` overlay tells the firmware not to set the display up, because a + KMS driver is expected to. Current Raspberry Pi OS ships that overlay enabled, + so the fallback is absent on exactly the machines most likely to be tested. + +So on a Pi the firmware-framebuffer assumption fails in both directions, and the +failure is silent in the worst way: a healthy boot and a dead one render +identically, which is what made the original report unreadable and cost two +rounds of wrong diagnosis. + +## What it costs, measured + +`Image` grows from 28,353,024 to 29,420,032 bytes — **+1,067,008, +3.8%** — +measured on matched local builds, same box and same toolchain. The published CI +pair moved 30,253,568 → 31,386,112, agreeing to within 0.1 percentage points. + +`CONFIG_DRM_V3D` is deliberately **not** enabled. It is the 3D accelerator; a +console does not use it. + +## The dependency trap, which is the part worth remembering + +`CONFIG_DRM_VC4=y` cannot be switched on by itself. From +`drivers/gpu/drm/vc4/Kconfig` it `depends on DRM`, on `SND && SND_SOC` — HDMI +audio is integral to the driver, not optional — and on `PM`. FOS deliberately +excludes all three. + +Miss any one and `make oldconfig` **drops `CONFIG_DRM_VC4` with no error at +all**, leaving a config that reads correctly in git and a kernel with no display +driver. This is the ADR-0010 trap, and it fired twice while making this change: +once for `SND`/`SND_SOC`, then again for `PM`. Each time the only evidence was +the symbol quietly absent from the generated `.config`. + +Two habits follow, and neither is optional here: + +- Assert on the symbol being **linked**, not configured. `nm vmlinux | grep + vc4_` returning 378 symbols is proof; `CONFIG_DRM_VC4=y` in a file is not. +- `tests/checks/arm64-platform-config.sh` lists `PM`, `SND` and `SND_SOC` + alongside `DRM_VC4` for the same reason it already lists + `SERIAL_8250_SHARE_IRQ` alongside `SERIAL_8250_BCM2835AUX`: the dependency is + the thing that silently removes the driver, so the dependency is what gets + guarded. Run it with `-b` — that mode inspects the config Kconfig *produced*, + which is the only one that can prove the symbol survived. + +## Validation + +Confirmed on real hardware by the reporter, 2026-08-27, against +`EXP_20260827-114033`: HDMI initialised, FOS reached userspace, and Partclone +captured `/dev/sda` to the FOG server. That is the first end-to-end FOS imaging +run on a Raspberry Pi, and it also became the first real-hardware exercise of +ADR-0015's platform support and of the `mount -t nfs` fix, both of which had +only ever run under QEMU and in VirtualBox. + +One reporting note recorded because it will recur: passing the raw +`arm_init.cpio.gz` to `booti` failed with `Wrong Ramdisk Image Format` until it +was given a size. U-Boot reads a bare address as a legacy uImage and demands a +header; `booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}` +passes it as a raw initrd. Wrapping with `mkimage -C none` works too and is what +the reporter used — `-C none` matters, since `-C gzip` would have U-Boot +decompress it and the kernel's own gzip support would go untested. diff --git a/tests/checks/arm64-platform-config.sh b/tests/checks/arm64-platform-config.sh index 18dfb49..03c71eb 100755 --- a/tests/checks/arm64-platform-config.sh +++ b/tests/checks/arm64-platform-config.sh @@ -99,6 +99,31 @@ REQUIRED=( CONFIG_MISC_RP1=y CONFIG_COMMON_CLK_RP1=y CONFIG_PINCTRL_RP1=y + + # Display. Everywhere else FOS builds without DRM and leans on a + # framebuffer the firmware set up -- FB_EFI/FB_VESA off EFI GOP on a PC. + # That does not survive on a Pi: our own bcm2711-rpi-4-b.dtb carries + # brcm,bcm2711-hdmi0/1 but no simple-framebuffer node, and the node the + # VideoCore firmware would otherwise inject is suppressed the moment + # config.txt enables the vc4-kms-v3d overlay -- which current Raspberry Pi + # OS ships enabled. The result is a board with no console at all, which is + # indistinguishable from an early hang and is exactly how forums topic + # 18229 presented. See docs/adr/0017-arm64-display-vc4.md. + # + # DRM_VC4 depends on SND && SND_SOC (HDMI audio is integral to the driver) + # and on PM. Miss any one and Kconfig drops DRM_VC4 without a word, so they + # are listed here for the same reason SHARE_IRQ is listed above -- both + # were dropped exactly this way while writing the change. + # + # DRM_V3D is deliberately absent: it is the 3D accelerator and buys a + # console nothing. + CONFIG_DRM=y + CONFIG_DRM_VC4=y + CONFIG_DRM_FBDEV_EMULATION=y + CONFIG_FRAMEBUFFER_CONSOLE=y + CONFIG_PM=y + CONFIG_SND=y + CONFIG_SND_SOC=y ) fails=0