<p>Philipp Deppenwiese has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/29194">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">security/tpm: Add generalized ACPI table generation<br><br>* Move ACPI table generation from TPM bus drivers<br>  to security/tpm/acpi<br>* Update TPPI interface implementation<br><br>Change-Id: I2afdf4872566353284ab7734205a3bea738a6e0e<br>Signed-off-by: Philipp Deppenwiese <zaolin@das-labor.org><br>---<br>M src/drivers/i2c/tpm/Makefile.inc<br>D src/drivers/i2c/tpm/chip.c<br>M src/drivers/pc80/tpm/tis.c<br>M src/drivers/spi/acpi/acpi.c<br>M src/security/tpm/Makefile.inc<br>5 files changed, 11 insertions(+), 480 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/94/29194/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/drivers/i2c/tpm/Makefile.inc b/src/drivers/i2c/tpm/Makefile.inc</span><br><span>index e24a66d..3c91bc0 100644</span><br><span>--- a/src/drivers/i2c/tpm/Makefile.inc</span><br><span>+++ b/src/drivers/i2c/tpm/Makefile.inc</span><br><span>@@ -18,4 +18,4 @@</span><br><span> verstage-$(CONFIG_MAINBOARD_HAS_I2C_TPM_CR50) += cr50.c</span><br><span> bootblock-$(CONFIG_MAINBOARD_HAS_I2C_TPM_CR50) += cr50.c</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-ramstage-$(CONFIG_DRIVER_I2C_TPM_ACPI) += chip.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-$(CONFIG_DRIVER_I2C_TPM_ACPI) += acpi.c</span><br><span>diff --git a/src/drivers/i2c/tpm/chip.c b/src/drivers/i2c/tpm/chip.c</span><br><span>deleted file mode 100644</span><br><span>index 3dbe811..0000000</span><br><span>--- a/src/drivers/i2c/tpm/chip.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,99 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * This file is part of the coreboot project.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright 2016 Google Inc.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">- * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">- * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">- * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">- * GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <arch/acpi_device.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <arch/acpigen.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <console/console.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <device/i2c_simple.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <device/device.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <device/path.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <stdint.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <string.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include "tpm.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "chip.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void i2c_tpm_fill_ssdt(struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    struct drivers_i2c_tpm_config *config = dev->chip_info;</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *scope = acpi_device_scope(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-     struct acpi_i2c i2c = {</span><br><span style="color: hsl(0, 100%, 40%);">-         .address = dev->path.i2c.device,</span><br><span style="color: hsl(0, 100%, 40%);">-             .mode_10bit = dev->path.i2c.mode_10bit,</span><br><span style="color: hsl(0, 100%, 40%);">-              .speed = config->speed ? : I2C_SPEED_FAST,</span><br><span style="color: hsl(0, 100%, 40%);">-           .resource = scope,</span><br><span style="color: hsl(0, 100%, 40%);">-      };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!dev->enabled || !scope)</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (!config->hid) {</span><br><span style="color: hsl(0, 100%, 40%);">-          printk(BIOS_ERR, "%s: ERROR: HID required\n", dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_scope(scope);</span><br><span style="color: hsl(0, 100%, 40%);">-     acpigen_write_device(acpi_device_name(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_name_string("_HID", config->hid);</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_name_integer("_UID", config->uid);</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_name_string("_DDN", dev->chip_ops->name);</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_write_STA(acpi_device_status(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Resources */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_write_name("_CRS");</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_resourcetemplate_header();</span><br><span style="color: hsl(0, 100%, 40%);">-        acpi_device_write_i2c(&i2c);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (config->irq_gpio.pin_count)</span><br><span style="color: hsl(0, 100%, 40%);">-              acpi_device_write_gpio(&config->irq_gpio);</span><br><span style="color: hsl(0, 100%, 40%);">-       else</span><br><span style="color: hsl(0, 100%, 40%);">-            acpi_device_write_interrupt(&config->irq);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_resourcetemplate_footer();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        acpigen_pop_len(); /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_pop_len(); /* Scope */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  printk(BIOS_INFO, "%s: %s at %s\n", acpi_device_path(dev),</span><br><span style="color: hsl(0, 100%, 40%);">-           dev->chip_ops->name, dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char *i2c_tpm_acpi_name(const struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return "TPMI";</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static struct device_operations i2c_tpm_ops = {</span><br><span style="color: hsl(0, 100%, 40%);">-        .read_resources           = DEVICE_NOOP,</span><br><span style="color: hsl(0, 100%, 40%);">-        .set_resources            = DEVICE_NOOP,</span><br><span style="color: hsl(0, 100%, 40%);">-        .enable_resources         = DEVICE_NOOP,</span><br><span style="color: hsl(0, 100%, 40%);">-        .acpi_name                = &i2c_tpm_acpi_name,</span><br><span style="color: hsl(0, 100%, 40%);">-     .acpi_fill_ssdt_generator = &i2c_tpm_fill_ssdt,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void i2c_tpm_enable(struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    struct drivers_i2c_tpm_config *config = dev->chip_info;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      dev->ops = &i2c_tpm_ops;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (config && config->desc) {</span><br><span style="color: hsl(0, 100%, 40%);">-                dev->name = config->desc;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct chip_operations drivers_i2c_tpm_ops = {</span><br><span style="color: hsl(0, 100%, 40%);">-        CHIP_NAME("I2C TPM")</span><br><span style="color: hsl(0, 100%, 40%);">-  .enable_dev = &i2c_tpm_enable</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span>diff --git a/src/drivers/pc80/tpm/tis.c b/src/drivers/pc80/tpm/tis.c</span><br><span>index 8c01ac3..7df9785 100644</span><br><span>--- a/src/drivers/pc80/tpm/tis.c</span><br><span>+++ b/src/drivers/pc80/tpm/tis.c</span><br><span>@@ -27,15 +27,13 @@</span><br><span> #include <string.h></span><br><span> #include <delay.h></span><br><span> #include <arch/io.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <arch/acpi.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <arch/acpigen.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <arch/acpi_device.h></span><br><span> #include <device/device.h></span><br><span> #include <console/console.h></span><br><span> #include <security/tpm/tis.h></span><br><span> #include <arch/early_variables.h></span><br><span> #include <device/pnp.h></span><br><span> #include "chip.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <security/tpm/acpi.h></span><br><span> </span><br><span> #define PREFIX "lpc_tpm: "</span><br><span> /* TCG Physical Presence Interface */</span><br><span>@@ -782,207 +780,11 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func0_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Functions 1-8. */</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 buf[] = {0xff, 0x01};</span><br><span style="color: hsl(0, 100%, 40%);">-        acpigen_write_return_byte_buffer(buf, 2);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func1_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      if (IS_ENABLED(CONFIG_TPM2))</span><br><span style="color: hsl(0, 100%, 40%);">-            /* Interface version: 2.0 */</span><br><span style="color: hsl(0, 100%, 40%);">-            acpigen_write_return_string("2.0");</span><br><span style="color: hsl(0, 100%, 40%);">-   else</span><br><span style="color: hsl(0, 100%, 40%);">-            /* Interface version: 1.2 */</span><br><span style="color: hsl(0, 100%, 40%);">-            acpigen_write_return_string("1.2");</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func2_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Submit operations: drop on the floor and return success. */</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_write_return_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func3_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Pending operation: none. */</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_emit_byte(RETURN_OP);</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_package(2);</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_write_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_pop_len();</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func4_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Pre-OS transition method: reboot. */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_write_return_byte(2);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func5_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Operation response: no operation executed. */</span><br><span style="color: hsl(0, 100%, 40%);">-        acpigen_emit_byte(RETURN_OP);</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_package(3);</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_write_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_write_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_pop_len();</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func6_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     /*</span><br><span style="color: hsl(0, 100%, 40%);">-       * Set preferred user language: deprecated and must return 3 aka</span><br><span style="color: hsl(0, 100%, 40%);">-         * "not implemented".</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">-     acpigen_write_return_byte(3);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func7_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Submit operations: deny. */</span><br><span style="color: hsl(0, 100%, 40%);">-  acpigen_write_return_byte(3);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_ppi_func8_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  /* All actions are forbidden. */</span><br><span style="color: hsl(0, 100%, 40%);">-        acpigen_write_return_byte(1);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void (*tpm_ppi_callbacks[])(void *) = {</span><br><span style="color: hsl(0, 100%, 40%);">-    tpm_ppi_func0_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func1_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func2_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func3_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func4_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func5_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func6_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func7_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_ppi_func8_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_mci_func0_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Function 1. */</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_return_singleton_buffer(0x3);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-static void tpm_mci_func1_cb(void *arg)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Just return success. */</span><br><span style="color: hsl(0, 100%, 40%);">-      acpigen_write_return_byte(0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void (*tpm_mci_callbacks[])(void *) = {</span><br><span style="color: hsl(0, 100%, 40%);">-    tpm_mci_func0_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-       tpm_mci_func1_cb,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void lpc_tpm_fill_ssdt(struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   const char *path = acpi_device_path(dev->bus->dev);</span><br><span style="color: hsl(0, 100%, 40%);">-       u32 arg;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!path) {</span><br><span style="color: hsl(0, 100%, 40%);">-            path = "\\_SB_.PCI0.LPCB";</span><br><span style="color: hsl(0, 100%, 40%);">-            printk(BIOS_DEBUG, "Using default TPM ACPI path: '%s'\n", path);</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_scope(path);</span><br><span style="color: hsl(0, 100%, 40%);">-      acpigen_write_device(acpi_device_name(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_name("_HID");</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_emit_eisaid("PNP0C31");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_name("_CID");</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_emit_eisaid("PNP0C31");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_name_integer("_UID", 1);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        u32 did_vid = tpm_read_did_vid(0);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (did_vid > 0 && did_vid < 0xffffffff)</span><br><span style="color: hsl(0, 100%, 40%);">-          acpigen_write_STA(ACPI_STATUS_DEVICE_ALL_ON);</span><br><span style="color: hsl(0, 100%, 40%);">-   else</span><br><span style="color: hsl(0, 100%, 40%);">-            acpigen_write_STA(ACPI_STATUS_DEVICE_ALL_OFF);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  u16 port = dev->path.pnp.port;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Resources */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_write_name("_CRS");</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_resourcetemplate_header();</span><br><span style="color: hsl(0, 100%, 40%);">-        acpigen_write_mem32fixed(1, CONFIG_TPM_TIS_BASE_ADDRESS, 0x5000);</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_io16(port, port, 1, 2, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if (CONFIG_TPM_PIRQ) {</span><br><span style="color: hsl(0, 100%, 40%);">-          /*</span><br><span style="color: hsl(0, 100%, 40%);">-               * PIRQ: Update interrupt vector with configured PIRQ</span><br><span style="color: hsl(0, 100%, 40%);">-            * Active-Low Level-Triggered Shared</span><br><span style="color: hsl(0, 100%, 40%);">-             */</span><br><span style="color: hsl(0, 100%, 40%);">-             struct acpi_irq tpm_irq_a = ACPI_IRQ_LEVEL_LOW(CONFIG_TPM_PIRQ);</span><br><span style="color: hsl(0, 100%, 40%);">-                acpi_device_write_interrupt(&tpm_irq_a);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (tpm_read_int_vector(0) > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-             u8 int_vec = tpm_read_int_vector(0);</span><br><span style="color: hsl(0, 100%, 40%);">-            u8 int_pol = tpm_read_int_polarity(0);</span><br><span style="color: hsl(0, 100%, 40%);">-          struct acpi_irq tpm_irq = ACPI_IRQ_LEVEL_LOW(int_vec);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          if (int_pol & 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                    tpm_irq.polarity = ACPI_IRQ_ACTIVE_LOW;</span><br><span style="color: hsl(0, 100%, 40%);">-         else</span><br><span style="color: hsl(0, 100%, 40%);">-                    tpm_irq.polarity = ACPI_IRQ_ACTIVE_HIGH;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                if (int_pol & 2)</span><br><span style="color: hsl(0, 100%, 40%);">-                    tpm_irq.mode = ACPI_IRQ_EDGE_TRIGGERED;</span><br><span style="color: hsl(0, 100%, 40%);">-         else</span><br><span style="color: hsl(0, 100%, 40%);">-                    tpm_irq.mode = ACPI_IRQ_LEVEL_TRIGGERED;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                acpi_device_write_interrupt(&tpm_irq);</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_resourcetemplate_footer();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             /*</span><br><span style="color: hsl(0, 100%, 40%);">-               * _DSM method</span><br><span style="color: hsl(0, 100%, 40%);">-           */</span><br><span style="color: hsl(0, 100%, 40%);">-             struct dsm_uuid ids[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-                       /* Physical presence interface.</span><br><span style="color: hsl(0, 100%, 40%);">-                  * This is used to submit commands like "Clear TPM" to</span><br><span style="color: hsl(0, 100%, 40%);">-                         * be run at next reboot provided that user confirms</span><br><span style="color: hsl(0, 100%, 40%);">-                     * them. Spec allows user to cancel all commands and/or</span><br><span style="color: hsl(0, 100%, 40%);">-                  * configure BIOS to reject commands. So we pretend that</span><br><span style="color: hsl(0, 100%, 40%);">-                         * user did just this: cancelled everything. If user</span><br><span style="color: hsl(0, 100%, 40%);">-                     * really wants to clear TPM the only option now is to</span><br><span style="color: hsl(0, 100%, 40%);">-                   * do it manually in payload.</span><br><span style="color: hsl(0, 100%, 40%);">-                    */</span><br><span style="color: hsl(0, 100%, 40%);">-                     DSM_UUID(TPM_PPI_UUID, &tpm_ppi_callbacks[0],</span><br><span style="color: hsl(0, 100%, 40%);">-                               ARRAY_SIZE(tpm_ppi_callbacks), (void *) &arg),</span><br><span style="color: hsl(0, 100%, 40%);">-                      /* Memory clearing on boot: just a dummy. */</span><br><span style="color: hsl(0, 100%, 40%);">-                    DSM_UUID(TPM_MCI_UUID, &tpm_mci_callbacks[0],</span><br><span style="color: hsl(0, 100%, 40%);">-                               ARRAY_SIZE(tpm_mci_callbacks), (void *) &arg),</span><br><span style="color: hsl(0, 100%, 40%);">-              };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              acpigen_write_dsm_uuid_arr(ids, ARRAY_SIZE(ids));</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_pop_len(); /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_pop_len(); /* Scope */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  printk(BIOS_INFO, "%s.%s: %s %s\n", path, acpi_device_name(dev),</span><br><span style="color: hsl(0, 100%, 40%);">-             dev->chip_ops->name, dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char *lpc_tpm_acpi_name(const struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return "TPM";</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static struct device_operations lpc_tpm_ops = {</span><br><span>    .read_resources   = &lpc_tpm_read_resources,</span><br><span>     .set_resources    = &lpc_tpm_set_resources,</span><br><span style="color: hsl(0, 100%, 40%);">-#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)</span><br><span style="color: hsl(0, 100%, 40%);">-  .acpi_name              = &lpc_tpm_acpi_name,</span><br><span style="color: hsl(0, 100%, 40%);">-       .acpi_fill_ssdt_generator = &lpc_tpm_fill_ssdt,</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(120, 100%, 40%);">+     .acpi_name              = &tpm_acpi_name,</span><br><span style="color: hsl(120, 100%, 40%);">+ .acpi_fill_ssdt_generator = &tpm_ssdt_generator,</span><br><span> };</span><br><span> </span><br><span> static struct pnp_info pnp_dev_info[] = {</span><br><span>diff --git a/src/drivers/spi/acpi/acpi.c b/src/drivers/spi/acpi/acpi.c</span><br><span>index cf75f9e..e1940c8 100644</span><br><span>--- a/src/drivers/spi/acpi/acpi.c</span><br><span>+++ b/src/drivers/spi/acpi/acpi.c</span><br><span>@@ -23,190 +23,14 @@</span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span> #include "chip.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int spi_acpi_get_bus(const struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      struct device *spi_dev;</span><br><span style="color: hsl(0, 100%, 40%);">- struct device_operations *ops;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (!dev->bus || !dev->bus->dev)</span><br><span style="color: hsl(0, 100%, 40%);">-               return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      spi_dev = dev->bus->dev;</span><br><span style="color: hsl(0, 100%, 40%);">-  ops = spi_dev->ops;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ops && ops->ops_spi_bus &&</span><br><span style="color: hsl(0, 100%, 40%);">-           ops->ops_spi_bus->dev_to_bus)</span><br><span style="color: hsl(0, 100%, 40%);">-         return ops->ops_spi_bus->dev_to_bus(spi_dev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static bool spi_acpi_add_gpios_to_crs(struct drivers_spi_acpi_config *config)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       /*</span><br><span style="color: hsl(0, 100%, 40%);">-       * Return false if:</span><br><span style="color: hsl(0, 100%, 40%);">-      * 1. Request to explicitly disable export of GPIOs in CRS, or</span><br><span style="color: hsl(0, 100%, 40%);">-   * 2. Both reset and enable GPIOs are not provided.</span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (config->disable_gpio_export_in_crs ||</span><br><span style="color: hsl(0, 100%, 40%);">-        ((config->reset_gpio.pin_count == 0) &&</span><br><span style="color: hsl(0, 100%, 40%);">-       (config->enable_gpio.pin_count == 0)))</span><br><span style="color: hsl(0, 100%, 40%);">-          return false;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   return true;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int spi_acpi_write_gpio(struct acpi_gpio *gpio, int *curr_index)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   int ret = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   if (gpio->pin_count == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-            return ret;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     acpi_device_write_gpio(gpio);</span><br><span style="color: hsl(0, 100%, 40%);">-   ret = *curr_index;</span><br><span style="color: hsl(0, 100%, 40%);">-      (*curr_index)++;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        return ret;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void spi_acpi_fill_ssdt_generator(struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       struct drivers_spi_acpi_config *config = dev->chip_info;</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *scope = acpi_device_scope(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *path = acpi_device_path(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-       struct acpi_spi spi = {</span><br><span style="color: hsl(0, 100%, 40%);">-         .device_select = dev->path.spi.cs,</span><br><span style="color: hsl(0, 100%, 40%);">-           .speed = config->speed ? : 1 * MHz,</span><br><span style="color: hsl(0, 100%, 40%);">-          .resource = scope,</span><br><span style="color: hsl(0, 100%, 40%);">-              .device_select_polarity = SPI_POLARITY_LOW,</span><br><span style="color: hsl(0, 100%, 40%);">-             .wire_mode = SPI_4_WIRE_MODE,</span><br><span style="color: hsl(0, 100%, 40%);">-           .data_bit_length = 8,</span><br><span style="color: hsl(0, 100%, 40%);">-           .clock_phase = SPI_CLOCK_PHASE_FIRST,</span><br><span style="color: hsl(0, 100%, 40%);">-           .clock_polarity = SPI_POLARITY_LOW,</span><br><span style="color: hsl(0, 100%, 40%);">-     };</span><br><span style="color: hsl(0, 100%, 40%);">-      int curr_index = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-     int irq_gpio_index = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-        int reset_gpio_index = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      int enable_gpio_index = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!dev->enabled || !scope)</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (spi_acpi_get_bus(dev) == -1) {</span><br><span style="color: hsl(0, 100%, 40%);">-              printk(BIOS_ERR, "%s: ERROR: Cannot get bus for device.\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                   dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!config->hid) {</span><br><span style="color: hsl(0, 100%, 40%);">-          printk(BIOS_ERR, "%s: ERROR: HID required.\n", dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-                return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_scope(scope);</span><br><span style="color: hsl(0, 100%, 40%);">-     acpigen_write_device(acpi_device_name(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_name_string("_HID", config->hid);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (config->cid)</span><br><span style="color: hsl(0, 100%, 40%);">-             acpigen_write_name_string("_CID", config->cid);</span><br><span style="color: hsl(0, 100%, 40%);">-    acpigen_write_name_integer("_UID", config->uid);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (config->desc)</span><br><span style="color: hsl(0, 100%, 40%);">-            acpigen_write_name_string("_DDN", config->desc);</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_STA(acpi_device_status(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Resources */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_write_name("_CRS");</span><br><span style="color: hsl(0, 100%, 40%);">-   acpigen_write_resourcetemplate_header();</span><br><span style="color: hsl(0, 100%, 40%);">-        acpi_device_write_spi(&spi);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Use either Interrupt() or GpioInt() */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (config->irq_gpio.pin_count)</span><br><span style="color: hsl(0, 100%, 40%);">-              irq_gpio_index = spi_acpi_write_gpio(&config->irq_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               &curr_index);</span><br><span style="color: hsl(0, 100%, 40%);">-  else</span><br><span style="color: hsl(0, 100%, 40%);">-            acpi_device_write_interrupt(&config->irq);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Add enable/reset GPIOs if needed */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (spi_acpi_add_gpios_to_crs(config)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                reset_gpio_index = spi_acpi_write_gpio(&config->reset_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     &curr_index);</span><br><span style="color: hsl(0, 100%, 40%);">-                enable_gpio_index = spi_acpi_write_gpio(&config->enable_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    &curr_index);</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_write_resourcetemplate_footer();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Wake capabilities */</span><br><span style="color: hsl(0, 100%, 40%);">- if (config->wake) {</span><br><span style="color: hsl(0, 100%, 40%);">-          acpigen_write_name_integer("_S0W", 4);</span><br><span style="color: hsl(0, 100%, 40%);">-                acpigen_write_PRW(config->wake, 3);</span><br><span style="color: hsl(0, 100%, 40%);">-  };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Write device properties if needed */</span><br><span style="color: hsl(0, 100%, 40%);">- if (config->compat_string || irq_gpio_index >= 0 ||</span><br><span style="color: hsl(0, 100%, 40%);">-           reset_gpio_index >= 0 || enable_gpio_index >= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            struct acpi_dp *dsd = acpi_dp_new_table("_DSD");</span><br><span style="color: hsl(0, 100%, 40%);">-              if (config->compat_string)</span><br><span style="color: hsl(0, 100%, 40%);">-                   acpi_dp_add_string(dsd, "compatible",</span><br><span style="color: hsl(0, 100%, 40%);">-                                    config->compat_string);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (irq_gpio_index >= 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                     acpi_dp_add_gpio(dsd, "irq-gpios", path,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       irq_gpio_index, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      config->irq_gpio.polarity);</span><br><span style="color: hsl(0, 100%, 40%);">-         if (reset_gpio_index >= 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                   acpi_dp_add_gpio(dsd, "reset-gpios", path,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     reset_gpio_index, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    config->reset_gpio.polarity);</span><br><span style="color: hsl(0, 100%, 40%);">-               if (enable_gpio_index >= 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                  acpi_dp_add_gpio(dsd, "enable-gpios", path,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    enable_gpio_index, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   config->enable_gpio.polarity);</span><br><span style="color: hsl(0, 100%, 40%);">-              acpi_dp_write(dsd);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Power Resource */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (config->has_power_resource) {</span><br><span style="color: hsl(0, 100%, 40%);">-            const struct acpi_power_res_params power_res_params = {</span><br><span style="color: hsl(0, 100%, 40%);">-                 &config->reset_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                     config->reset_delay_ms,</span><br><span style="color: hsl(0, 100%, 40%);">-                      config->reset_off_delay_ms,</span><br><span style="color: hsl(0, 100%, 40%);">-                  &config->enable_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                    config->enable_delay_ms,</span><br><span style="color: hsl(0, 100%, 40%);">-                     config->enable_off_delay_ms,</span><br><span style="color: hsl(0, 100%, 40%);">-                 &config->stop_gpio,</span><br><span style="color: hsl(0, 100%, 40%);">-                      config->stop_delay_ms,</span><br><span style="color: hsl(0, 100%, 40%);">-                       config->stop_off_delay_ms</span><br><span style="color: hsl(0, 100%, 40%);">-            };</span><br><span style="color: hsl(0, 100%, 40%);">-              acpi_device_add_power_res(&power_res_params);</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       acpigen_pop_len(); /* Device */</span><br><span style="color: hsl(0, 100%, 40%);">- acpigen_pop_len(); /* Scope */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  printk(BIOS_INFO, "%s: %s at %s\n", path,</span><br><span style="color: hsl(0, 100%, 40%);">-            config->desc ? : dev->chip_ops->name, dev_path(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char *spi_acpi_name(const struct device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       struct drivers_spi_acpi_config *config = dev->chip_info;</span><br><span style="color: hsl(0, 100%, 40%);">-     static char name[5];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if (config->name)</span><br><span style="color: hsl(0, 100%, 40%);">-            return config->name;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- snprintf(name, sizeof(name), "S%03.3X", spi_acpi_get_bus(dev));</span><br><span style="color: hsl(0, 100%, 40%);">-       name[4] = '\0';</span><br><span style="color: hsl(0, 100%, 40%);">- return name;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+#include <security/tpm/acpi.h></span><br><span> </span><br><span> static struct device_operations spi_acpi_ops = {</span><br><span>  .read_resources           = DEVICE_NOOP,</span><br><span>     .set_resources            = DEVICE_NOOP,</span><br><span>     .enable_resources         = DEVICE_NOOP,</span><br><span style="color: hsl(0, 100%, 40%);">-        .acpi_name                = &spi_acpi_name,</span><br><span style="color: hsl(0, 100%, 40%);">- .acpi_fill_ssdt_generator = &spi_acpi_fill_ssdt_generator,</span><br><span style="color: hsl(120, 100%, 40%);">+        .acpi_name                = &tpm_acpi_name,</span><br><span style="color: hsl(120, 100%, 40%);">+       .acpi_fill_ssdt_generator = &tpm_ssdt_generator,</span><br><span> };</span><br><span> </span><br><span> static void spi_acpi_enable(struct device *dev)</span><br><span>diff --git a/src/security/tpm/Makefile.inc b/src/security/tpm/Makefile.inc</span><br><span>index 34ead8f..cf65aa2 100644</span><br><span>--- a/src/security/tpm/Makefile.inc</span><br><span>+++ b/src/security/tpm/Makefile.inc</span><br><span>@@ -18,6 +18,8 @@</span><br><span> verstage-$(CONFIG_VBOOT) += tspi/tspi.c tspi/log.c</span><br><span> postcar-$(CONFIG_VBOOT) += tspi/tspi.c tspi/log.c</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi/acpi.c</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> endif # CONFIG_TPM1</span><br><span> </span><br><span> ifeq ($(CONFIG_TPM2),y)</span><br><span>@@ -42,4 +44,6 @@</span><br><span> verstage-$(CONFIG_VBOOT) += tspi/tspi.c tspi/log.c</span><br><span> postcar-$(CONFIG_VBOOT) += tspi/tspi.c tspi/log.c</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi/acpi.c</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> endif # CONFIG_TPM2</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/29194">change 29194</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/29194"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I2afdf4872566353284ab7734205a3bea738a6e0e </div>
<div style="display:none"> Gerrit-Change-Number: 29194 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Philipp Deppenwiese <zaolin.daisuki@gmail.com> </div>