diff options
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ic/ccp.c | 19 | ||||
-rw-r--r-- | sys/dev/ic/ccpvar.h | 3 | ||||
-rw-r--r-- | sys/dev/pci/ccp_pci.c | 15 |
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 |