aboutsummaryrefslogtreecommitdiff
path: root/hw/fsp
diff options
context:
space:
mode:
authorStewart Smith <stewart@linux.vnet.ibm.com>2015-11-12 16:07:33 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-11-12 16:07:33 +1100
commitf8e7d23dca7928af8305a43a3348796174cbfc9d (patch)
tree938567d91bd05c3fd9b1920b43778bdd5b8f3031 /hw/fsp
parent881455a1b62fd78ac1e513de1aad001827578157 (diff)
parent42d5d04758b4aa30e83e741a489f25592d4ad896 (diff)
downloadskiboot-f8e7d23dca7928af8305a43a3348796174cbfc9d.zip
skiboot-f8e7d23dca7928af8305a43a3348796174cbfc9d.tar.gz
skiboot-f8e7d23dca7928af8305a43a3348796174cbfc9d.tar.bz2
Merge branch 'stable'
Diffstat (limited to 'hw/fsp')
-rw-r--r--hw/fsp/fsp-dpo.c2
-rw-r--r--hw/fsp/fsp.c20
2 files changed, 18 insertions, 4 deletions
diff --git a/hw/fsp/fsp-dpo.c b/hw/fsp/fsp-dpo.c
index 8c7c296..f6fadc5 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 ab625a5..b53c3f0 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);
}