From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.9311.1641102581597156063 for ; Sat, 01 Jan 2022 21:49:41 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: jeremy.linton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9DEF46D; Sat, 1 Jan 2022 21:49:40 -0800 (PST) Received: from u200856.usa.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 407EC3F5A1; Sat, 1 Jan 2022 21:49:40 -0800 (PST) From: "Jeremy Linton" To: devel@edk2.groups.io Cc: pete@akeo.ie, ardb+tianocore@kernel.org, leif@nuviainc.com, awarkentin@vmware.com, Sunny.Wang@arm.com, samer.el-haj-mahmoud@arm.com, mariobalanica02@gmail.com, Jeremy Linton Subject: [PATCH V2 00/10] Platform/RaspberryPi: Utilize SPI flash for EFI variables Date: Sat, 1 Jan 2022 23:49:14 -0600 Message-Id: <20220102054924.1195762-1-jeremy.linton@arm.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable The RPi4 has a SPI flash with unused capacity. This set detects if that capacity is sufficient for a UEFI variable store and utilizes it as such. This fixes a long list of problems, and along the way likely also fixes a random boot failure caused by the FaultTolerantWriteDxe garbage collecting, and erasing the flash volume header which is being used to return information about the underlying variable storage capacity= . This set was dependent on an earlier, mostly ignored set of changes to move the GPIO/etc devices into their own SSDT and disable them. Because of that, the two sets have been merged. Why is that? Because the SPI flash is mux'ed with the PWM used to play audio out the 3.5mm audio jack on this device. This causes a long list of problems we must try and avoid, starting with the fact that the pins need to be controlled by the uefi runtime service. The other problem is obviously that any time a variable is updated, if the user is utilizing the 3.5mm audio they will hear clicks and pops. Turns out that behavior isn't unique to this patch set because the low level boot/etc exhibits th= is when running in a TFA+uboot/edk2 environment. A fairly small tweak to TFA fixes the majority of this, and the remaining runtime problems caused by this patch actually are very slight and generally not noticeable unles= s one goes looking for them. OTOH, we revert to the earlier non persisted variable store if the firmware is running in a DT only mode, or the user enables the ACPI GPIO block. V1->V2: Move Rhpx.asl into GPIO SSDT, this fixes a windows problem if the GPIO description is removed. Add longer explanation to Readme.md as well as update it to note CM4/RPi400, newer menu item variables, etc. Various code cleanups caught by updated PatchCheck More agressive ifdef'ing out RPi4 only code for RPi3 Jeremy Linton (10): Platform/RaspberryPi: Cleanup menu visibility Platform/RaspberryPi: Give the user control over the XHCI mailbox Platform/RaspberryPi: Move GPIO/SPI/I2C to SSDT Platform/RaspberryPi: Add menu item to enable/disable GPIO Platform/RaspberryPi: Add constants for controlling SPI Platform/RaspberryPi: Add mailbox cmd to control audio amp Platform/RaspberryPi: Add SPI/GPIO to memory map Platform/RaspberryPi: Allow pin function selection at runtime Platform/RaspberryPi: Add SPI flash variable store. Platform/RaspberryPi: Update RPi4 Readme Platform/RaspberryPi/AcpiTables/AcpiTables.inf | 1 + Platform/RaspberryPi/AcpiTables/Dsdt.asl | 7 - Platform/RaspberryPi/AcpiTables/GpuDevs.asl | 126 ---- Platform/RaspberryPi/AcpiTables/SsdtGpio.asl | 159 +++++ Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c | 47 ++ .../RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf | 2 + .../RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni | 10 + .../RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr | 36 +- Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c | 4 + Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf | 1 + .../Drivers/RpiFirmwareDxe/RpiFirmwareDxe.c | 60 +- .../Drivers/VarBlockServiceDxe/FvbInfo.c | 8 +- .../Drivers/VarBlockServiceDxe/VarBlockService.c | 657 +++++++++++++++= +++++- .../Drivers/VarBlockServiceDxe/VarBlockService.h | 10 + .../VarBlockServiceDxe/VarBlockServiceDxe.c | 38 +- .../VarBlockServiceDxe/VarBlockServiceDxe.inf | 6 + Platform/RaspberryPi/Include/ConfigVars.h | 4 + .../RaspberryPi/Include/IndustryStandard/RpiMbox.h | 1 + .../RaspberryPi/Include/Protocol/RpiFirmware.h | 7 + Platform/RaspberryPi/RPi3/RPi3.dsc | 12 + Platform/RaspberryPi/RPi4/RPi4.dsc | 14 + Platform/RaspberryPi/RPi4/Readme.md | 63 +- Platform/RaspberryPi/RaspberryPi.dec | 2 + .../Bcm283x/Include/IndustryStandard/Bcm2836.h | 34 ++ Silicon/Broadcom/Bcm283x/Include/Library/GpioLib.h | 6 + Silicon/Broadcom/Bcm283x/Library/GpioLib/GpioLib.c | 16 +- 26 files changed, 1160 insertions(+), 171 deletions(-) create mode 100644 Platform/RaspberryPi/AcpiTables/SsdtGpio.asl --=20 2.13.7