Skip to content

Commit b398305

Browse files
committed
IOMMU: Add SDF Support
This commit adds iommu support to microkit sdfs. Define a constant to represent the a tool enforced limitation on the maximum virtual address suported for an IO address space. This is due to current x86 IOMMU behaviour in the kernel which dynamically detects the maximum virtual address for an IO address space. For more info read: BOOT_CODE bool_t vtd_init_num_iopts(uint32_t num_drhu) in seL4/src/plat/pc99/machine/intel-vtd.c. Add IOMMUDeviceIdentifier and IOMMUDeviceIdentifierParseError to support parsing the sdf based on the current architecture. This allows the sdf parsing to easily support ARM SMMU and RISCV IOMMU. The Display traits again remove repeated code when outputting IOMMUDeviceIdentifer or IOMMUDeviceIdentifierParseError, particularly useful for error messages. Add SysIOMapPerms. Representing the perms in an enum completely removes the existence of invalid IOMapPerms once we parse the sdf. Add SysIOMap. The dual to SysMap, used to represent a mapping in a devices IO virtual address space. Add check_io_maps adapter. Required because check_maps is designed to error check within one address space. Therefore we collect all the mappings that have been made on a per IO address space basis. Signed-off-by: Callum <c.berry@student.unsw.edu.au>
1 parent b49f787 commit b398305

22 files changed

Lines changed: 804 additions & 2 deletions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
Copyright 2026, UNSW
4+
5+
SPDX-License-Identifier: BSD-2-Clause
6+
-->
7+
<system>
8+
<memory_region name="edu_mmio_window" size="0x10_0000" page_size="0x1000" phys_addr="0xfe00_0000" />
9+
<memory_region name="dma_buffer" size="0x1000" page_size="0x1000" />
10+
<io_address_space name="QEMU EDU" peripheral_id="0:4.0">
11+
<iomap mr="dma_buffer" iovaddr="0x10_0000" />
12+
</io_address_space>
13+
14+
<protection_domain name="x86_64_iommu_dma_test" priority="100">
15+
<program_image path="x86_64_iommu_dma_test.elf" />
16+
<map mr="edu_mmio_window" vaddr="0x2000_0000" perms="rw" cached="false" setvar_vaddr="edu_mmio_window_vaddr" />
17+
<map mr="dma_buffer" vaddr="0x3000_0000" perms="rw" cached="true" setvar_vaddr="dma_buffer_vaddr" />
18+
<ioport id="0" addr="0xcf8" size="8" setvar_id="pci_config_ioport_id" />
19+
</protection_domain>
20+
</system>

0 commit comments

Comments
 (0)