++ Laszlo and Michael On Tue, Nov 7, 2023 at 10:54 AM Jose Lopez wrote: > ++ CC'd > > > On Mon, Nov 6, 2023 at 6:02 PM Joe Lopez wrote: > >> From: joelopez333 >> >> REF:https://edk2.groups.io/g/devel/topic/102310377#110456 >> >> Problem Report: >> >> On AARCH64, there is no ordering guarantee between configuration >> space (ECAM) writes and memory space reads (MMIO). ARM AMBA CHI >> only guarantees ordering for reads and writes within a single address >> region, >> however, on some systems MMIO and ECAM may be split into separate >> address regions. >> >> A problem may arise when an ECAM write is issued a completion before >> a subsequent >> MMIO read is issued and receives a completion. >> >> For example, a typical PCI software flow is the following: >> >> 1. ECAM write to device command register to enable memory space >> 2. MMIO read from device memory space for which access was enabled >> in step 1. >> >> There is no guarantee that step 2. will not begin before the >> completion of step 1. >> on systems where ECAM/MMIO are specified as separate address regions, >> even >> if both spaces have the memory attributes device-nGnRnE. >> >> Fix: >> >> - Add a read after the final PCI Configuration space write >> in RootBridgeIoPciAccess. >> >> - When configuration space is strongly ordered, this ensures >> that program execution cannot continue until the completion >> is received for the previous Cfg-Write, which may have side-effects. >> >> - Risk of reading a "write-only" register and causing a CA which >> leaves the device >> unresponsive. The expectation based on the PCI Base Spec v6.1 >> section 7.4 is that >> all PCI Spec-defined registers will be readable, however, there may >> exist >> design-specific registers that fall into this category. >> >> Cc: Leif Lindholm >> Cc: Ard Biesheuvel >> Cc: Sami Mujawar >> Cc: Jian J Wang >> Cc: Liming Gao >> Cc: Hao A Wu >> Cc: Ray Ni >> Cc: Pedro Falcato >> Cc: Michael Brown >> Signed-off-by: Joe Lopez >> --- >> MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> index 157a0ada80..c2dc2018d6 100644 >> --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> @@ -1238,6 +1238,14 @@ RootBridgeIoPciAccess ( >> } >> } >> >> + // >> + // Perform readback after write to confirm completion was received for >> the last write >> + // before subsequent memory operations can be issued. >> + // >> + if (!Read) { >> + PciSegmentRead8 (Address - InStride); >> + } >> + >> return EFI_SUCCESS; >> } >> >> -- >> 2.25.1 >> >> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110876): https://edk2.groups.io/g/devel/message/110876 Mute This Topic: https://groups.io/mt/102435564/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-