Re: [PATCH 1/3]: ACPICA: actbl1.h: Add support for the new ACPI Table: DTPR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/16/2025 10:28 AM, Camacho Romero, Michal wrote:

Hello @Moore, Robert <mailto:robert.moore@xxxxxxxxx>, @Wysocki, Rafael J <mailto:rafael.j.wysocki@xxxxxxxxx>

According to the latest version of the Intel TXT DMA Protection Ranges specification

(Revision 0.73), there were defined a new the ACPI Table, structure and registers, which will be used to handle TPRs:

*    DTPR ACPI Table

*    TPR Base Register

*    TPR Serialize Request Register

*    TPR Limit Register

*    TPR Instance Structure

*    DMAR TXT Protected Reporting Structure

Link: https://uefi.org/sites/default/files/resources/633933_Intel_TXT_DMA_Protection_Ranges_rev_0p73.pdf

Signed-off-by: Michal Camacho Romero michal.camacho.romero@xxxxxxxxx

Can you please submit this as a pull request to the upstream ACPICA project on GitHub?


---

include/acpi/actbl1.h | 86 +++++++++++++++++++++++++++++++++++++++++++

1 file changed, 86 insertions(+)

diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h

index 387fc821703a..14802feb54fd 100644

--- a/include/acpi/actbl1.h

+++ b/include/acpi/actbl1.h

@@ -47,6 +47,7 @@

#define ACPI_SIG_HPET "HPET"           /* High Precision Event Timer table */

#define ACPI_SIG_IBFT           "IBFT"  /* iSCSI Boot Firmware Table */

#define ACPI_SIG_MSCT "MSCT"         /* Maximum System Characteristics Table */

+#define ACPI_SIG_DTPR           "DTPR"  /* TXT DMA Protection Ranges reporting table */

 #define ACPI_SIG_S3PT           "S3PT" /* S3 Performance (sub)Table */

#define ACPI_SIG_PCCS           "PCC" /* PCC Shared Memory Region */

@@ -1953,6 +1954,91 @@ struct acpi_ibft_target {

           u16 reverse_chap_secret_offset;

};

+/*******************************************************************************

+ *

+ * DTPR - DMA TPR Reporting

+ *        Version 1

+ *

+ * Conforms to "Intel® Trusted Execution Technology (Intel® TXT) DMA Protection

+ *              Ranges",

+ * Revision 0.73, August 2021

+ *

+ ******************************************************************************/

+

+struct acpi_table_dtpr {

+          struct acpi_table_header header;

+          u32 flags; // 36

+};

+

+struct acpi_tpr_array {

+          u64 base;

+};

+

+struct acpi_dtpr_instance {

+          u32 flags;

+          u32 tpr_cnt;

+          struct acpi_tpr_array tpr_array[];

+};

+

+/*******************************************************************************

+ * TPRn_BASE

+ *

+ * Specifies the start address of TPRn region. TPR region address and size must

+ * be with 1MB resolution. These bits are compared with the result of the

+ * TPRn_LIMIT[63:20] * applied to the incoming address, to determine if an

+ * access fall within the TPRn defined region.

+*******************************************************************************/

+struct acpi_dtprn_base_reg {

+          u64 reserved0 : 3;

+          u64 rw : 1; // access: 1 == RO, 0 == RW (for TPR must be RW)

+          u64 enable : 1; // 0 == range enabled, 1 == range disabled

+          u64 reserved1 : 15;

+          u64 tpr_base_rw : 44; // Minimal TPRn_Base resolution is 1MB.

+   // Applied to the incoming address, to determine if an

+   // access fall within the TPRn defined region.

+   // Width is determined by a bus width which can be

+   // obtainedvia CPUID function 0x80000008.

+          //u64 unused : 1;

+};

+

+/*******************************************************************************

+ * TPRn_LIMIT

+ *

+ * This register defines an isolated region of memory that can be enabled

+ * to prohibit certain system agents from accessing memory. When an agent

+ * sends a request upstream, whether snooped or not, a TPR prevents that

+ * transaction from changing the state of memory.

+*******************************************************************************/

+

+struct acpi_dtprn_limit_reg {

+          u64 reserved0 : 3;

+          u64 rw : 1; // access: 1 == RO, 0 == RW (for TPR must be RW)

+          u64 enable : 1; // 0 == range enabled, 1 == range disabled

+          u64 reserved1 : 15;

+          u64 tpr_limit_rw : 44; // Minimal TPRn_Limit resolution is 1MB.

+    // These bits define TPR limit address.

+    // Width is determined by a bus width.

+

+          //u64 unused : 1;

+};

+

+/*******************************************************************************

+ * SERIALIZE_REQUEST

+ *

+ * This register is used to request serialization of non-coherent DMA

+ * transactions. OS shall  issue it before changing of TPR settings

+ * (base / size).

+*******************************************************************************/

+

+struct acpi_tpr_serialize_request {

+          u64 sts : 1; // Status of serialization request (RO)

+                       // 0 == register idle, 1 == serialization in progress

+          u64 ctrl : 1; // Control field to initiate serialization (RW)

+                        // 0 == normal, 1 == initialize serialization

+   // (self-clear to allow multiple serialization requests)

+          u64 unused : 62;

+};

+

/* Reset to default packing */

 #pragma pack()

--

2.43.0





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux