summaryrefslogtreecommitdiff
path: root/sys/dev/acpi
diff options
context:
space:
mode:
authormaxv <maxv@NetBSD.org>2019-10-08 18:43:02 +0000
committermaxv <maxv@NetBSD.org>2019-10-08 18:43:02 +0000
commit2ce354a9032fc36a95fb7b119a72bbaf600d3dac (patch)
tree5256b6e2940f2c56ac11da33420a9f8cc394ee06 /sys/dev/acpi
parent3ab8a58864231d5ce0088c4acde5731bbe405fb7 (diff)
Improvements in tpm(4):
- Remove interrupt support, do polling only, avoids unnecessary trouble. - Simplify a few things. - Fix the suspend function, the SaveState command is 0x98, not 0x9C. - Make the driver MP-safe. - Sync the man page with reality.
Diffstat (limited to 'sys/dev/acpi')
-rw-r--r--sys/dev/acpi/tpm_acpi.c46
1 files changed, 15 insertions, 31 deletions
diff --git a/sys/dev/acpi/tpm_acpi.c b/sys/dev/acpi/tpm_acpi.c
index bfbbd76526a..08c415451c4 100644
--- a/sys/dev/acpi/tpm_acpi.c
+++ b/sys/dev/acpi/tpm_acpi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: tpm_acpi.c,v 1.8 2019/06/22 12:57:40 maxv Exp $ */
+/* $NetBSD: tpm_acpi.c,v 1.9 2019/10/08 18:43:02 maxv Exp $ */
/*
* Copyright (c) 2012, 2019 The NetBSD Foundation, Inc.
@@ -30,10 +30,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tpm_acpi.c,v 1.8 2019/06/22 12:57:40 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tpm_acpi.c,v 1.9 2019/10/08 18:43:02 maxv Exp $");
#include <sys/param.h>
-#include <sys/device.h>
#include <sys/systm.h>
#include <sys/device.h>
#include <sys/bus.h>
@@ -45,8 +44,6 @@ __KERNEL_RCSID(0, "$NetBSD: tpm_acpi.c,v 1.8 2019/06/22 12:57:40 maxv Exp $");
#include <dev/acpi/acpireg.h>
#include <dev/acpi/acpivar.h>
-#include <dev/isa/isavar.h>
-
#include "ioconf.h"
#define _COMPONENT ACPI_RESOURCE_COMPONENT
@@ -100,41 +97,41 @@ tpm_acpi_attach(device_t parent, device_t self, void *aux)
struct acpi_attach_args *aa = aux;
struct acpi_resources res;
struct acpi_mem *mem;
- struct acpi_irq *irq;
bus_addr_t base;
bus_addr_t size;
- int rv, inum;
-
- sc->sc_dev = self;
- sc->sc_ver = TPM_2_0;
+ int rv;
rv = acpi_resource_parse(self, aa->aa_node->ad_handle, "_CRS", &res,
&acpi_resource_parse_ops_default);
if (ACPI_FAILURE(rv)) {
- aprint_error_dev(sc->sc_dev, "cannot parse resources %d\n", rv);
+ aprint_error_dev(self, "cannot parse resources %d\n", rv);
return;
}
mem = acpi_res_mem(&res, 0);
if (mem == NULL) {
- aprint_error_dev(sc->sc_dev, "cannot find mem\n");
+ aprint_error_dev(self, "cannot find mem\n");
goto out;
}
if (mem->ar_length != TPM_SPACE_SIZE) {
- aprint_error_dev(sc->sc_dev,
- "wrong size mem %"PRIu64" != %u\n",
+ aprint_error_dev(self, "wrong size mem %"PRIu64" != %u\n",
(uint64_t)mem->ar_length, TPM_SPACE_SIZE);
goto out;
}
- base = mem->ar_base;
- size = mem->ar_length;
- sc->sc_bt = aa->aa_memt;
+ sc->sc_dev = self;
+ sc->sc_ver = TPM_2_0;
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
+ sc->sc_busy = false;
sc->sc_init = tpm_tis12_init;
sc->sc_start = tpm_tis12_start;
sc->sc_read = tpm_tis12_read;
sc->sc_write = tpm_tis12_write;
sc->sc_end = tpm_tis12_end;
+ sc->sc_bt = aa->aa_memt;
+
+ base = mem->ar_base;
+ size = mem->ar_length;
if (bus_space_map(sc->sc_bt, base, size, 0, &sc->sc_bh)) {
aprint_error_dev(sc->sc_dev, "cannot map registers\n");
@@ -146,24 +143,11 @@ tpm_acpi_attach(device_t parent, device_t self, void *aux)
goto out1;
}
- irq = acpi_res_irq(&res, 0);
- if (irq == NULL)
- inum = -1;
- else
- inum = irq->ar_irq;
-
- if ((rv = (*sc->sc_init)(sc, inum)) != 0) {
+ if ((*sc->sc_init)(sc) != 0) {
aprint_error_dev(sc->sc_dev, "cannot init device %d\n", rv);
goto out1;
}
- if (inum != -1 &&
- (sc->sc_ih = isa_intr_establish(aa->aa_ic, irq->ar_irq,
- IST_EDGE, IPL_TTY, tpm_intr, sc)) == NULL) {
- aprint_error_dev(sc->sc_dev, "cannot establish interrupt\n");
- goto out1;
- }
-
acpi_resource_cleanup(&res);
return;