summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/ccp.c19
-rw-r--r--sys/dev/ic/ccpvar.h3
-rw-r--r--sys/dev/pci/ccp_pci.c15
3 files changed, 18 insertions, 19 deletions
diff --git a/sys/dev/ic/ccp.c b/sys/dev/ic/ccp.c
index 5e8a9392c7f..79650a6c63a 100644
--- a/sys/dev/ic/ccp.c
+++ b/sys/dev/ic/ccp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ccp.c,v 1.4 2024/06/12 12:54:54 bluhm Exp $ */
+/* $OpenBSD: ccp.c,v 1.5 2024/06/13 17:59:08 bluhm Exp $ */
/*
* Copyright (c) 2018 David Gwynne <dlg@openbsd.org>
@@ -58,7 +58,7 @@ ccp_attach(struct ccp_softc *sc)
timeout_set(&sc->sc_tick, ccp_rng, sc);
ccp_rng(sc);
- if (sc->sc_psp_attached)
+ if (sc->sc_psp_attached != 0)
printf(", RNG\n");
else
printf(": RNG\n");
@@ -127,8 +127,6 @@ psp_attach(struct ccp_softc *sc)
if (psp_get_pstatus(&pst) || pst.state != 0)
goto fail_3;
- printf(", SEV");
-
/*
* create and map Trusted Memory Region (TMR); size 1 Mbyte,
* needs to be aligend to 1 Mbyte.
@@ -158,6 +156,8 @@ psp_attach(struct ccp_softc *sc)
if (psp_init(&init))
goto fail_7;
+ printf(", SEV");
+
psp_get_pstatus(&pst);
if ((pst.state == 1) && (pst.cfges_build & 0x1))
printf(", SEV-ES");
@@ -184,6 +184,7 @@ fail_0:
bus_dmamap_destroy(sc->sc_dmat, sc->sc_cmd_map);
ccp_softc = NULL;
+ sc->sc_psp_attached = -1;
return (0);
}
@@ -240,11 +241,8 @@ ccp_docmd(struct ccp_softc *sc, int cmd, uint64_t paddr)
/* Did PSP sent a response code? */
if (status & PSP_CMDRESP_RESPONSE) {
- if ((status & PSP_STATUS_MASK) != PSP_STATUS_SUCCESS) {
- printf("%s: command failed: 0x%x\n", __func__,
- (status & PSP_STATUS_MASK));
+ if ((status & PSP_STATUS_MASK) != PSP_STATUS_SUCCESS)
return (1);
- }
}
return (0);
@@ -265,12 +263,11 @@ psp_init(struct psp_init *uinit)
init->tmr_length = uinit->tmr_length;
ret = ccp_docmd(sc, PSP_CMD_INIT, sc->sc_cmd_map->dm_segs[0].ds_addr);
-
- wbinvd_on_all_cpus();
-
if (ret != 0)
return (EIO);
+ wbinvd_on_all_cpus();
+
return (0);
}
diff --git a/sys/dev/ic/ccpvar.h b/sys/dev/ic/ccpvar.h
index 6b4675ff605..65efe847912 100644
--- a/sys/dev/ic/ccpvar.h
+++ b/sys/dev/ic/ccpvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ccpvar.h,v 1.2 2024/06/12 12:54:54 bluhm Exp $ */
+/* $OpenBSD: ccpvar.h,v 1.3 2024/06/13 17:59:08 bluhm Exp $ */
/*
* Copyright (c) 2018 David Gwynne <dlg@openbsd.org>
@@ -26,7 +26,6 @@ struct ccp_softc {
struct timeout sc_tick;
- bus_size_t sc_size;
int sc_psp_attached;
#ifdef __amd64__
diff --git a/sys/dev/pci/ccp_pci.c b/sys/dev/pci/ccp_pci.c
index 3f6df5384ee..1edd1a1981f 100644
--- a/sys/dev/pci/ccp_pci.c
+++ b/sys/dev/pci/ccp_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ccp_pci.c,v 1.10 2024/06/12 12:54:54 bluhm Exp $ */
+/* $OpenBSD: ccp_pci.c,v 1.11 2024/06/13 17:59:08 bluhm Exp $ */
/*
* Copyright (c) 2018 David Gwynne <dlg@openbsd.org>
@@ -74,7 +74,7 @@ ccp_pci_attach(struct device *parent, struct device *self, void *aux)
}
if (pci_mapreg_map(pa, CCP_PCI_BAR, memtype, 0,
- &sc->sc_iot, &sc->sc_ioh, NULL, &sc->sc_size, 0) != 0) {
+ &sc->sc_iot, &sc->sc_ioh, NULL, NULL, 0) != 0) {
printf(": cannot map registers\n");
return;
}
@@ -107,7 +107,6 @@ psp_pci_attach(struct device *parent, struct device *self, void *aux)
if (pci_intr_map_msix(pa, 0, &ih) != 0 &&
pci_intr_map_msi(pa, &ih) != 0 && pci_intr_map(pa, &ih) != 0) {
printf(": couldn't map interrupt\n");
- bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_size);
return;
}
@@ -117,10 +116,14 @@ psp_pci_attach(struct device *parent, struct device *self, void *aux)
if (sc->sc_ih != NULL)
printf(": %s", intrstr);
- if (psp_attach(sc)) {
- /* enable interrupts */
- bus_space_write_4(sc->sc_iot, sc->sc_ioh, PSP_REG_INTEN, -1);
+ if (!psp_attach(sc)) {
+ pci_intr_disestablish(pa->pa_pc, sc->sc_ih);
+ sc->sc_ih = NULL;
+ return;
}
+
+ /* enable interrupts */
+ bus_space_write_4(sc->sc_iot, sc->sc_ioh, PSP_REG_INTEN, -1);
}
int