diff options
author | Stewart Smith <stewart@linux.vnet.ibm.com> | 2015-11-12 16:07:33 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2015-11-12 16:07:33 +1100 |
commit | f8e7d23dca7928af8305a43a3348796174cbfc9d (patch) | |
tree | 938567d91bd05c3fd9b1920b43778bdd5b8f3031 | |
parent | 881455a1b62fd78ac1e513de1aad001827578157 (diff) | |
parent | 42d5d04758b4aa30e83e741a489f25592d4ad896 (diff) | |
download | talos-skiboot-f8e7d23dca7928af8305a43a3348796174cbfc9d.tar.gz talos-skiboot-f8e7d23dca7928af8305a43a3348796174cbfc9d.zip |
Merge branch 'stable'
-rw-r--r-- | hw/fsp/fsp-dpo.c | 2 | ||||
-rw-r--r-- | hw/fsp/fsp.c | 20 | ||||
-rw-r--r-- | include/fsp.h | 1 |
3 files changed, 19 insertions, 4 deletions
diff --git a/hw/fsp/fsp-dpo.c b/hw/fsp/fsp-dpo.c index 8c7c296c..f6fadc5d 100644 --- a/hw/fsp/fsp-dpo.c +++ b/hw/fsp/fsp-dpo.c @@ -29,7 +29,7 @@ #define DPO_CMD_SGN_BYTE1 0x20 /* Byte[1] signature */ #define DPO_TIMEOUT 2700 /* 45 minutes in seconds */ -static bool fsp_dpo_pending; +bool fsp_dpo_pending; static unsigned long fsp_dpo_init_tb; /* diff --git a/hw/fsp/fsp.c b/hw/fsp/fsp.c index ab625a55..b53c3f00 100644 --- a/hw/fsp/fsp.c +++ b/hw/fsp/fsp.c @@ -666,9 +666,23 @@ static void fsp_handle_errors(struct fsp *fsp) if (fsp->state == fsp_mbx_rr) return; - prlog(PR_NOTICE, "FSP #%d: FSP in Reset." - " Waiting for PSI interrupt\n", - fsp->index); + if (fsp_dpo_pending) { + /* + * If we are about to process a reset when DPO + * is pending, its possible that the host has + * gone down, and OPAL is on its way down and + * hence will not see the subsequent PSI interrupt. + * So, just give up the link here. + */ + prlog(PR_NOTICE, "FSP #%d: FSP reset with DPO pending." + " Giving up PSI link\n", + fsp->index); + psi_disable_link(psi); + } else { + prlog(PR_NOTICE, "FSP #%d: FSP in Reset." + " Waiting for PSI interrupt\n", + fsp->index); + } fsp_start_rr(fsp); } diff --git a/include/fsp.h b/include/fsp.h index 4e247cc6..a61bd58e 100644 --- a/include/fsp.h +++ b/include/fsp.h @@ -823,6 +823,7 @@ extern void fsp_epow_init(void); /* DPO */ extern void fsp_dpo_init(void); +extern bool fsp_dpo_pending; /* Chiptod */ extern void fsp_chiptod_init(void); |