aboutsummaryrefslogtreecommitdiff
path: root/hw/prd.c
diff options
context:
space:
mode:
authorShilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>2017-12-07 10:52:29 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-12-14 23:58:26 -0600
commit781b10633945df32fa2292ee8b196c74f8ef2c7c (patch)
treef712cc950095181c690dd34f0a42b5a5c11a0734 /hw/prd.c
parent49999302251b3e3e2fdca2cbcdeb6aab9add7412 (diff)
downloadskiboot-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.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/hw/prd.c b/hw/prd.c
index 5f9758d..ad84dbd 100644
--- a/hw/prd.c
+++ b/hw/prd.c
@@ -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;
}