Support SMMUv3 IORT nodes as well in the midlayers. This allows IOMMU
authorpatrick <patrick@openbsd.org>
Wed, 31 Aug 2022 20:49:12 +0000 (20:49 +0000)
committerpatrick <patrick@openbsd.org>
Wed, 31 Aug 2022 20:49:12 +0000 (20:49 +0000)
mappings to reach a future SMMUv3 implementation.

ok kettenis@, mlarkin@

sys/arch/arm64/dev/acpiiort.c
sys/arch/arm64/dev/acpipci.c

index f00f6e1..0d408fa 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpiiort.c,v 1.6 2022/04/06 18:59:26 naddy Exp $ */
+/* $OpenBSD: acpiiort.c,v 1.7 2022/08/31 20:49:12 patrick Exp $ */
 /*
  * Copyright (c) 2021 Patrick Wildt <patrick@blueri.se>
  *
@@ -176,7 +176,7 @@ acpiiort_device_map(struct aml_node *root, bus_dma_tag_t dmat)
                return dmat;
 
        node = (struct acpi_iort_node *)((char *)iort + offset);
-       if (node->type == ACPI_IORT_SMMU)
+       if (node->type == ACPI_IORT_SMMU || node->type == ACPI_IORT_SMMU_V3)
                return acpiiort_smmu_map(node, rid, dmat);
 
        return dmat;
index 769087a..76334ee 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: acpipci.c,v 1.37 2022/08/31 20:16:02 kettenis Exp $   */
+/*     $OpenBSD: acpipci.c,v 1.38 2022/08/31 20:49:12 patrick Exp $    */
 /*
  * Copyright (c) 2018 Mark Kettenis
  *
@@ -436,7 +436,7 @@ acpipci_probe_device_hook(void *v, struct pci_attach_args *pa)
                return 0;
 
        node = (struct acpi_iort_node *)((char *)iort + offset);
-       if (node->type == ACPI_IORT_SMMU) {
+       if (node->type == ACPI_IORT_SMMU || node->type == ACPI_IORT_SMMU_V3) {
                pa->pa_dmat = acpiiort_smmu_map(node, rid, pa->pa_dmat);
                for (at = pa->pa_iot->bus_private; at; at = at->at_next) {
                        acpiiort_smmu_reserve_region(node, rid,