I've run into an issue recently with testing q35 DMAR/intel iommu with ahci driver. My ahci driver writes the upper-32 bits (PORT_FIS_ADDR_HI) first then the lower 32-bits (PORT_FIS_ADDR).
The contents of PORT_FIS_ADDR therefore are stale when the PORT_FIS_ADDR_HI write calls map_page(). DMAR translation fails at this point as the old stale address (from SEABIOS initialization) is not in the DMAR page table.