From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.29550.1613385158504563275 for ; Mon, 15 Feb 2021 02:32:38 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: vivek.gautam@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 17656101E; Mon, 15 Feb 2021 02:32:38 -0800 (PST) Received: from usa.arm.com (a074945.blr.arm.com [10.162.16.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 693C73F40C; Mon, 15 Feb 2021 02:32:36 -0800 (PST) From: "Vivek Kumar Gautam" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Leif Lindholm , Sami Mujawar , Vivek Gautam Subject: [edk2-platforms][PATCH V1 1/2] Platform/Sgi: Add smmu node in the iort acpi table Date: Mon, 15 Feb 2021 16:02:28 +0530 Message-Id: <20210215103229.12310-2-vivek.gautam@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210215103229.12310-1-vivek.gautam@arm.com> References: <20210215103229.12310-1-vivek.gautam@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Add the generic SMMUv3 type node in the iort table and setup the rid->stream-id->device-id mapping accordingly. Signed-off-by: Vivek Gautam --- Platform/ARM/SgiPkg/AcpiTables/Iort.aslc | 58 ++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/Platform/ARM/SgiPkg/AcpiTables/Iort.aslc b/Platform/ARM/SgiP= kg/AcpiTables/Iort.aslc index 58ec31ddc837..df9bd501158c 100644 --- a/Platform/ARM/SgiPkg/AcpiTables/Iort.aslc +++ b/Platform/ARM/SgiPkg/AcpiTables/Iort.aslc @@ -20,6 +20,12 @@ typedef struct UINT32 ItsIdentifiers; } ARM_EFI_ACPI_6_0_IO_REMAPPING_ITS_NODE; =20 +typedef struct +{ + EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE SmmuNode; + EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE SmmuIdMap[2]; +} ARM_EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE; + typedef struct { EFI_ACPI_6_0_IO_REMAPPING_RC_NODE RcNode; @@ -30,6 +36,7 @@ typedef struct { EFI_ACPI_6_0_IO_REMAPPING_TABLE Header; ARM_EFI_ACPI_6_0_IO_REMAPPING_ITS_NODE ItsNode; + ARM_EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE SmmuNode; ARM_EFI_ACPI_6_0_IO_REMAPPING_RC_NODE RcNode; } ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE; =20 @@ -45,7 +52,7 @@ ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE Iort =3D ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE, EFI_ACPI_IO_REMAPPING_TABLE_REVISION ), - 2, // NumNodes + 3, // NumNodes sizeof (EFI_ACPI_6_0_IO_REMAPPING_TABLE), // NodeOffset 0, // Reserved }, @@ -62,9 +69,52 @@ ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE Iort =3D 0, // NumIdMappings 0, // IdReference }, - 1, // GIC ITS Identifiers + 1, // ITS count + }, + 0, // GIC ITS Identifiers + }, + // SMMU + { + // EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE + { + // EFI_ACPI_6_0_IO_REMAPPING_NODE + { + EFI_ACPI_IORT_TYPE_SMMUv3, // Type + sizeof (ARM_EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE), // Length + 2, // Revision + 0, // Reserved + 2, // NumIdMapping + __builtin_offsetof (ARM_EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE, Sm= muIdMap), // IdReference + }, + 0x4F000000, // Base address + EFI_ACPI_IORT_SMMUv3_FLAG_COHAC_OVERRIDE, // Flags + 0, // Reserved + 0, // VATOS address + EFI_ACPI_IORT_SMMUv3_MODEL_GENERIC, // SMMUv3 Model + 260, // Event + 0, // Pri + 262, // Gerror + 261, // Sync + 0, // Proximity domain + 1, // DevIDMappingIndex + }, + // EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE + { + { + 0x0000, // InputBase + 0xffff, // NumIds + 0x0000, // OutputBase + __builtin_offsetof (ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE, ItsNode= ), // OutputReference + 0, // Flags + }, + { + 0x0, // InputBase + 0x1, // NumIds + 0x10000, // OutputBase + __builtin_offsetof (ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE, ItsNode= ), // OutputReference + EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE, // Flags + }, }, - 0, }, // ARM_EFI_ACPI_6_0_IO_REMAPPING_RC_NODE { @@ -91,7 +141,7 @@ ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE Iort =3D 0x0000, // InputBase 0xffff, // NumIds 0x0000, // OutputBase - OFFSET_OF (ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE, ItsNode), // Outp= utReference + OFFSET_OF (ARM_EFI_ACPI_6_0_IO_REMAPPING_TABLE, SmmuNode), // Out= putReference 0, // Flags } } --=20 2.17.1