History log of /openbsd-current/sys/arch/arm64/dev/acpiiort.h
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.4 25-Jun-2021 patrick

While it seems like we can choose any I/O virtual address for peripheral
devices, this isn't really the case. It depends on the bus topology of
how devices are connected. In the case of PCIe, devices are assigned
addresses (in PCI BARs) from the PCI address spaces. Now if we take an
address from one of these address spaces for our IOVA, transfers from
from a PCI device to that address will terminate inside of the PCI bus.
This is because from the PCI buses' point-of-view, the address we chose
is part of its address space. To make sure we don't allocate addresses
from there, reserve the PCI addresses in the IOVA.

Note that smmu(4) currently gives each device its own IOVA. So the PCI
addresses will be reserved only in IOVA from PCI devices, and only the
addresses concerning the PCI bus it is connected to will be reserved.
All other devices behind an smmu(4) will not have any changes to their
IOVA.

ok kettenis@


Revision tags: OPENBSD_6_9_BASE
# 1.3 15-Mar-2021 patrick

Add code to acpiiort(4) to look up named components in the IORT and
map them. This makes ACPI's call to acpi_iommu_device_map() do work
through acpiiort(4).

ok kettenis@


# 1.2 15-Mar-2021 patrick

Change API of acpiiort(4). It was written as a hook before, taking the
PCI attach args and replacing the DMA tag inside. Our other IOMMU API
though takes a DMA tag and returns the old one or a new one. To have
acpiiort(4) integrate better with non-PCI ACPI devices, change the API
so that it is more similar to the other API. This also makes the code
easier to understand.

ok kettenis@


# 1.1 28-Feb-2021 patrick

Add acpiiort(4), a driver for the ACPI I/O Remapping Table. This table
contains information which IOMMUs we have and how the devices are routed.

ok kettenis@