Add IPL observer support for RaptorCS Blackbird

Signed-off-by: Stewart Smith <stewart@flamingspork.com>
diff --git a/openpower/patches/blackbird-patches/hostboot/0001-Add-detailed-ISTEP-output-option-to-hostboot.patch b/openpower/patches/blackbird-patches/hostboot/0001-Add-detailed-ISTEP-output-option-to-hostboot.patch
new file mode 100644
index 0000000..67baa48
--- /dev/null
+++ b/openpower/patches/blackbird-patches/hostboot/0001-Add-detailed-ISTEP-output-option-to-hostboot.patch
@@ -0,0 +1,71 @@
+From d90e6c513094231f622a427030f3dbca1eeb5ed5 Mon Sep 17 00:00:00 2001
+From: Timothy Pearson <tpearson@raptorengineering.com>
+Date: Thu, 18 Apr 2019 06:28:50 +0000
+Subject: [PATCH] Add detailed ISTEP output option to hostboot
+
+Output detailed ISTEP data over LPC port 81h/82h in support of RCS
+Talos II systems.  These systems will deadlock due to FSI silicon bugs
+in the CPUs unless the BMC is aware of the current ISTEP data in order
+to properly sequence BMC-side FSI service startup.
+---
+ src/usr/initservice/istepdispatcher/HBconfig  |  5 ++++
+ .../istepdispatcher/istepdispatcher.C         | 27 +++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+
+diff --git a/src/usr/initservice/istepdispatcher/HBconfig b/src/usr/initservice/istepdispatcher/HBconfig
+index 7987f8ef3..ccbd43854 100644
+--- a/src/usr/initservice/istepdispatcher/HBconfig
++++ b/src/usr/initservice/istepdispatcher/HBconfig
+@@ -21,6 +21,11 @@ config ISTEP_LPC_PORT80_DEBUG
+     help
+         Writes ISTEP progress to LPC port 80h.
+ 
++config ISTEP_LPC_PORT8X_DEBUG
++    default n
++    help
++        Writes detailed ISTEP progress to LPC port 81h / 82h.
++
+ config HANG_ON_MFG_SRC_TERM
+     default y
+     help
+diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
+index e8db88f33..8f2d57298 100644
+--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
++++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
+@@ -2521,6 +2521,33 @@ errlHndl_t IStepDispatcher::sendProgressCode(bool i_needsLock)
+     port80_val++;
+ #endif
+ 
++#ifdef CONFIG_ISTEP_LPC_PORT8X_DEBUG
++    // Detailed istep output for consumption by BMC on e.g. RCS Talos II systems.
++    //
++    // Due to FSI silicon issues, those platforms may fail to start correctly
++    // if the BMC is not aware of the exact ISTEP being run to control BMC
++    // service sequencing.
++    //
++    // NEVER output fake values here, only real ISTEP data.
++    // Data is latched in on write to port 82h
++    uint8_t port81_val = iv_curIStep & 0xff;
++    uint8_t port82_val = iv_curSubStep & 0xff;
++    size_t port81_len = sizeof(port81_val);
++    size_t port82_len = sizeof(port82_val);
++    // Write port 81h first
++    err = deviceWrite(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
++                      &port81_val, port81_len,
++                      DEVICE_LPC_ADDRESS(LPC::TRANS_IO, 0x81));
++    delete err; // this is debug only, ignore any errors
++    err = NULL;
++    // Then write port 82h, latching in the full 16-bit value for read
++    err = deviceWrite(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
++                      &port82_val, port82_len,
++                      DEVICE_LPC_ADDRESS(LPC::TRANS_IO, 0x82));
++    delete err; // this is debug only, ignore any errors
++    err = NULL;
++#endif
++
+ #ifdef CONFIG_CONSOLE_OUTPUT_PROGRESS
+     //--- Display step on serial console
+     if ((iv_curIStep != lastIstep) || (iv_curSubStep != lastSubstep))
+-- 
+2.23.0
+