So apparently the DBI is being accessed anytime you read/write memory 0x01FFC000 - 0x01FFFFFF. Ok fine, but then why do all the register definitions for the PCIe EP/RC say "read-only, must write via the DBI"? That's really quite confusing because you actually *do* write them by writing those memory addresses - which are marked read-only in the reference manual!
The whole thing about asserting DBI_CS2 to write the mask registers is also very cryptic. You assert DBI_CS2 by flipping the 12th address line, ie writing to the corresponding BAR address + 4k (1 << 12). So why not just define them as a separate register at that address??? Why specifically say the mask reg address is the same as the base address register? Dead wrong, from the ARM core's perspective it's absolutely not! And that's the problem, this whole section on PCIe is a cut and paste from the Synopsys PCIe IP core documentation which doesn't tell us much about how it's actually wired up to the ARM core and which options are enabled, etc. Seriously this is the best we can do!?!?