diff --git a/sys/powerpc/include/pcpu.h b/sys/powerpc/include/pcpu.h index 9ac32380110..1df3961e739 100644 --- a/sys/powerpc/include/pcpu.h +++ b/sys/powerpc/include/pcpu.h @@ -68,7 +68,8 @@ struct pvo_entry; uint8_t slbstack[1024]; \ struct pvo_entry *qmap_pvo; \ struct mtx qmap_lock; \ - char __pad[1345]; + uint64_t pc_opal_hmi_flags; \ + char __pad[1337]; #ifdef __powerpc64__ #define PCPU_MD_AIM_FIELDS PCPU_MD_AIM64_FIELDS diff --git a/sys/powerpc/powernv/opal_hmi.c b/sys/powerpc/powernv/opal_hmi.c index 998d64f99a0..c6a265f4ae5 100644 --- a/sys/powerpc/powernv/opal_hmi.c +++ b/sys/powerpc/powernv/opal_hmi.c @@ -84,13 +84,17 @@ opal_hmi_event_handler(void *unused, struct opal_msg *msg) static int opal_hmi_handler2(struct trapframe *frame) { - uint64_t flags; + /* + * Use DMAP preallocated pcpu memory to handle + * the phys flags pointer. + */ + uint64_t *flags = PCPU_PTR(opal_hmi_flags); int err; flags = 0; - err = opal_call(OPAL_HANDLE_HMI2, vtophys(&flags)); + err = opal_call(OPAL_HANDLE_HMI2, flags); - if (flags & OPAL_HMI_FLAGS_TOD_TB_FAIL) + if (*flags & OPAL_HMI_FLAGS_TOD_TB_FAIL) panic("TOD/TB recovery failure"); if (err == OPAL_SUCCESS)