diff options
author | Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com> | 2017-12-07 10:52:29 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-12-14 23:58:26 -0600 |
commit | 781b10633945df32fa2292ee8b196c74f8ef2c7c (patch) | |
tree | f712cc950095181c690dd34f0a42b5a5c11a0734 /hw/prd.c | |
parent | 49999302251b3e3e2fdca2cbcdeb6aab9add7412 (diff) | |
download | skiboot-781b10633945df32fa2292ee8b196c74f8ef2c7c.zip skiboot-781b10633945df32fa2292ee8b196c74f8ef2c7c.tar.gz skiboot-781b10633945df32fa2292ee8b196c74f8ef2c7c.tar.bz2 |
opal-prd: occ: Add support for runtime OCC load/start in ZZ
This patch adds support to handle OCC load/start event from FSP/PRD.
During IPL we send a success directly to FSP without invoking any HBRT
load routines on recieving OCC load mbox message from FSP. At runtime
we forward this event to host opal-prd.
This patch provides support for invoking OCC load/start HBRT routines
like load_pm_complex() and start_pm_complex() from opal-prd.
Signed-off-by: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/prd.c')
-rw-r--r-- | hw/prd.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -31,6 +31,7 @@ enum events { EVENT_OCC_RESET = 1 << 2, EVENT_SBE_PASSTHROUGH = 1 << 3, EVENT_FSP_OCC_RESET = 1 << 4, + EVENT_FSP_OCC_LOAD_START = 1 << 5, }; static uint8_t events[MAX_CHIPS]; @@ -120,6 +121,10 @@ static void prd_msg_consumed(void *data) proc = msg->occ_reset.chip; event = EVENT_FSP_OCC_RESET; break; + case OPAL_PRD_MSG_TYPE_FSP_OCC_LOAD_START: + proc = msg->occ_reset.chip; + event = EVENT_FSP_OCC_LOAD_START; + break; default: prlog(PR_ERR, "PRD: invalid msg consumed, type: 0x%x\n", msg->hdr.type); @@ -197,6 +202,9 @@ static void send_next_pending_event(void) } else if (event & EVENT_FSP_OCC_RESET) { prd_msg->hdr.type = OPAL_PRD_MSG_TYPE_FSP_OCC_RESET; prd_msg->occ_reset.chip = proc; + } else if (event & EVENT_FSP_OCC_LOAD_START) { + prd_msg->hdr.type = OPAL_PRD_MSG_TYPE_FSP_OCC_LOAD_START; + prd_msg->occ_reset.chip = proc; } /* @@ -293,6 +301,11 @@ void prd_sbe_passthrough(uint32_t proc) prd_event(proc, EVENT_SBE_PASSTHROUGH); } +void prd_fsp_occ_load_start(uint32_t proc) +{ + prd_event(proc, EVENT_FSP_OCC_LOAD_START); +} + /* incoming message handlers */ static int prd_msg_handle_attn_ack(struct opal_prd_msg *msg) { @@ -452,6 +465,10 @@ static int64_t opal_prd_msg(struct opal_prd_msg *msg) rc = hservice_wakeup(msg->spl_wakeup.core, msg->spl_wakeup.mode); break; + case OPAL_PRD_MSG_TYPE_FSP_OCC_LOAD_START_STATUS: + rc = fsp_occ_load_start_status(msg->fsp_occ_reset_status.chip, + msg->fsp_occ_reset_status.status); + break; default: rc = OPAL_UNSUPPORTED; } |