* These tables are not consumed directly by the ACPICA subsystem, but are
  * included here to support device drivers and the AML disassembler.
  *
- * The tables in this file are defined by third-party specifications, and are
- * not defined directly by the ACPI specification itself.
+ * Generally, the tables in this file are defined by third-party specifications,
+ * and are not defined directly by the ACPI specification itself.
  *
  ******************************************************************************/
 
 #define ACPI_SIG_SPCR           "SPCR" /* Serial Port Console Redirection table */
 #define ACPI_SIG_SPMI           "SPMI" /* Server Platform Management Interface table */
 #define ACPI_SIG_TCPA           "TCPA" /* Trusted Computing Platform Alliance table */
+#define ACPI_SIG_TPM2           "TPM2" /* Trusted Platform Module 2.0 H/W interface table */
 #define ACPI_SIG_UEFI           "UEFI" /* Uefi Boot Optimization Table */
 #define ACPI_SIG_VRTC           "VRTC" /* Virtual Real Time Clock Table */
 #define ACPI_SIG_WAET           "WAET" /* Windows ACPI Emulated devices Table */
 /*******************************************************************************
  *
  * TCPA - Trusted Computing Platform Alliance table
- *        Version 1
+ *        Version 2
+ *
+ * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
+ * December 19, 2014
  *
- * Conforms to "TCG PC Specific Implementation Specification",
- * Version 1.1, August 18, 2003
+ * NOTE: There are two versions of the table with the same signature --
+ * the client version and the server version.
  *
  ******************************************************************************/
 
-struct acpi_table_tcpa {
+struct acpi_table_tcpa_client {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
+       u32 minimum_log_length; /* Minimum length for the event log area */
+       u64 log_address;        /* Address of the event log area */
+};
+
+struct acpi_table_tcpa_server {
        struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
        u16 reserved;
-       u32 max_log_length;     /* Maximum length for the event log area */
+       u64 minimum_log_length; /* Minimum length for the event log area */
        u64 log_address;        /* Address of the event log area */
+       u16 spec_revision;
+       u8 device_flags;
+       u8 interrupt_flags;
+       u8 gpe_number;
+       u8 reserved2[3];
+       u32 global_interrupt;
+       struct acpi_generic_address address;
+       u32 reserved3;
+       struct acpi_generic_address config_address;
+       u8 group;
+       u8 bus;                 /* PCI Bus/Segment/Function numbers */
+       u8 device;
+       u8 function;
+};
+
+/* Values for device_flags above */
+
+#define ACPI_TCPA_PCI_DEVICE            (1)
+#define ACPI_TCPA_BUS_PNP               (1<<1)
+#define ACPI_TCPA_ADDRESS_VALID         (1<<2)
+
+/* Values for interrupt_flags above */
+
+#define ACPI_TCPA_INTERRUPT_MODE        (1)
+#define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
+#define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
+#define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
+
+/*******************************************************************************
+ *
+ * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
+ *        Version 4
+ *
+ * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
+ * December 19, 2014
+ *
+ ******************************************************************************/
+
+struct acpi_table_tpm2 {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
+       u16 reserved;
+       u64 control_address;
+       u32 start_method;
+
+       /* Platform-specific data follows */
+};
+
+/* Control area structure (not part of table, pointed to by control_address) */
+
+struct acpi_tpm2_control {
+       u32 reserved;
+       u32 error;
+       u32 cancel;
+       u32 start;
+       u64 interrupt_control;
+       u32 command_size;
+       u64 command_address;
+       u32 response_size;
+       u64 response_address;
 };
 
 /*******************************************************************************
 
  * These tables are not consumed directly by the ACPICA subsystem, but are
  * included here to support device drivers and the AML disassembler.
  *
- * The tables in this file are fully defined within the ACPI specification.
+ * In general, the tables in this file are fully defined within the ACPI
+ * specification.
  *
  ******************************************************************************/
 
 #define ACPI_SIG_PMTT           "PMTT" /* Platform Memory Topology Table */
 #define ACPI_SIG_RASF           "RASF" /* RAS Feature table */
 #define ACPI_SIG_STAO           "STAO" /* Status Override table */
-#define ACPI_SIG_TPM2           "TPM2" /* Trusted Platform Module 2.0 H/W interface table */
 #define ACPI_SIG_WPBT           "WPBT" /* Windows Platform Binary Table */
 #define ACPI_SIG_XENV           "XENV" /* Xen Environment table */
 
        u8 ignore_uart;
 };
 
-/*******************************************************************************
- *
- * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
- *        Version 3
- *
- * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011
- *
- ******************************************************************************/
-
-struct acpi_table_tpm2 {
-       struct acpi_table_header header;        /* Common ACPI table header */
-       u32 flags;
-       u64 control_address;
-       u32 start_method;
-};
-
-/* Control area structure (not part of table, pointed to by control_address) */
-
-struct acpi_tpm2_control {
-       u32 reserved;
-       u32 error;
-       u32 cancel;
-       u32 start;
-       u64 interrupt_control;
-       u32 command_size;
-       u64 command_address;
-       u32 response_size;
-       u64 response_address;
-};
-
 /*******************************************************************************
  *
  * WPBT - Windows Platform Environment Table (ACPI 6.0)