[Skiboot] [PATCH v7 00/22] MPIPL support
Michael Neuling
mikey at neuling.org
Thu May 9 10:38:52 AEST 2019
On Sat, 2019-04-13 at 14:45 +0530, Vasant Hegde wrote:
> Memory Preserving Initial Program Load (MPIPL) is a Power feature where
> the contents of memory are preserved while the system reboots after a
> failure. This is accomplished by the firmware/OS publishing ranges of
> memory to be preserved across boots.
>
> In the OPAL context, OPAL and host Linux communicate the memory ranges
> to be preserved via source descriptor tables in the HDAT. This data is
> updated at runtime via the SBE. When OPAL or Linux crashes, SBE gets to
> know of the event via a special interrupt which causes it to trigger
> the MPIPL.
>
> Hostboot then re-IPLs the machine taking care to copy over contents of
> the source descriptor tables to a alternate memory locations and
> publishes this information in the destination descriptor tables. The
> success/failure of the copy is indicated by a results table.
How much coping are we talking about here? Most of RAM? Where to?
> Hostboot also does the requisite procedures to gather hardware register
> states for all active threads at the time of the crash.
>
> On an MPIPL boot, OPAL exports the results information to the host Linux
> kernel, which then uses its existing logic (kdump/fadump) to write out a
> core dump of OPAL and Linux kernel in a format that GDB and crash can
> understand.
>
> design:
> - OPAL hardcodes few entries in MDST, MDDT table so that we can
> capture early opal crash
> - OPAL passes relocated base address to SBE via 'MPIPL stash chip-op'
> so that hostboot can use relocated address to get MDST, MDDT table.
> - OPAL passes dump details to host via device tree (/ibm,dump node)
> - OPAL provides new API to MPIPL registration/unregistration
> - Enhance reboot2 API to support MPIPL
> - Add SBE s0/s1 interrupt support to initiate MPIPL on BMC based
> system.
>
> Dependency:
> - This patchset has dependency on SBE and Hostboot changes. There are
> few Hostboot/SBE patches still in review state.
How do we determine if the hostboot we are running with supports this?
> - We need Linux kernel changes to generate opal core.
> Hari will post Linux side patches.
Similarly here. How does Linux know skiboot/hostboot supports this? If
skiboot/hostboot doesn't support this, it'll need to go for a kdump alternative?
> Testing:
> We can use below op-build tree to build PNOR with MPIPL support
> until we get all HB and SBE patches in upstream.
> https://github.com/hegdevasant/op-build/tree/mpipl
>
> TODO:
> - Export raw opal core under sysfs
>
> Testing:
> - I've tested this patchset with custom hostboot and SBE changes. Its
> workign fine. We are able to get vmcore and opalcore.
>
> Changes in v7:
> - Rebased on top of current master
> - Fixed hiomap test cases
> - Few minor fixes/logging improvements
>
> Changes in v6:
> - Added support to get architected register data
> - Added support for HIOMAP reset
> - Added new patch to export OPAL boot entry address in device tree
> (Needed for OPAL core)
> - Added support to save/export crashing CPU details
> - Few other minor fixes
>
> Changes in v5:
> - As Stewart suggested moved "dump" device tree node under /ibm,opal
> - Updated OPAL API number to 170
> - Added check before triggering MPIPL.
> If MPIPL supported then it will trigger MPIPL, else it will call
> normal reboot.
>
> Changes in v4:
> - Make sure crashing CPU will not go to stop state
> - Send stash MPIPL chip op to all SBEs
> - Minor prlog improvements
>
> Changes in v3:
> - Added documenation for new OPAL API and device tree binding
> - Fixed MPIPL trigger path
> I have hooked MPIPL trigger path to assert path. Now it will be
> trigged on witherspoon only. We haven't tested on other BMC
> platform. Once we test we will enable on other BMC system.
> - Added MBOX reset support before triggering MPIPL
> - Added support to detect `MPIPL support` system params
>
> Changes in v2:
> - Added support to get architected registers
> - SBE guys changed MPIPL trigger interrupt bit. Now its S0 on both
> master and slave chip SBE
> - Fixed few other minor issues
>
>
> Vasant Hegde (22):
> OPAL: Add OPAL boot entry address to device tree
> FSP/MDST: Rename fsp-mdst-table.c -> fsp-sysdump.c
> hdata: Fix MDST structure
> hdata: Define various DUMP related tables
> hdata: Setup memory for MDDT table
> hdata: Setup memory for MDRT table
> fadump: Define destination memory for OPAL boot crash
> hdata: Add support for early OPAL crash
> hdata: Adjust various structure offset after relocation
> dump: Define fadump structure
> hdata: Create /ibm,opal/dump device tree node
> hdata: Add result table property to "dump" node
> fadump: Add fw-source-table to ibm,opal/dump node
> fadump: Add OPAL API to register for fadump
> fadump: Introduce new reboot type
> fadump: Send OPAL relocated base address to SBE
> fadump: Add support to trigger memory preserving IPL on BMC system
> fadump: Add documentation
> mbox: Reset bmc mbox in MPIPL path
> fadump: Hardcode architected register destination memory
> hdata: Add architected register details to device tree
> fadump: Save crashing cpu data
>
> core/Makefile.inc | 2 +-
> core/flash.c | 13 +-
> core/init.c | 6 +-
> core/opal-dump.c | 385 +++++++++++++++++++++++++++++
> core/opal.c | 4 +-
> core/platform.c | 7 +-
> doc/device-tree/ibm,opal/dump.rst | 33 +++
> doc/fadump.rst | 51 ++++
> doc/index.rst | 1 +
> doc/opal-api/opal-cec-reboot-6-116.rst | 9 +
> doc/opal-api/opal-fadump-manage-173.rst | 73 ++++++
> hdata/spira.c | 274 +++++++++++++++++++-
> hdata/spira.h | 10 +-
> hdata/test/hdata_to_dt.c | 1 +
> hw/fsp/Makefile.inc | 2 +-
> hw/fsp/{fsp-mdst-table.c => fsp-sysdump.c} | 18 +-
> hw/ipmi/ipmi-attn.c | 9 +-
> hw/sbe-p9.c | 121 +++++++++
> include/fsp-mdst-table.h | 48 ----
> include/mem-map.h | 67 ++++-
> include/opal-api.h | 45 +++-
> include/opal-dump.h | 138 +++++++++++
> include/sbe-p9.h | 18 +-
> include/skiboot.h | 3 +-
> libflash/ipmi-hiomap.c | 31 ++-
> libflash/ipmi-hiomap.h | 2 +-
> libflash/mbox-flash.c | 28 ++-
> libflash/mbox-flash.h | 2 +-
> libflash/test/mbox-server.c | 1 +
> libflash/test/test-ipmi-hiomap.c | 169 +++++++++++++
> skiboot.lds.S | 12 +-
> 31 files changed, 1497 insertions(+), 86 deletions(-)
> create mode 100644 core/opal-dump.c
> create mode 100644 doc/device-tree/ibm,opal/dump.rst
> create mode 100644 doc/fadump.rst
> create mode 100644 doc/opal-api/opal-fadump-manage-173.rst
> rename hw/fsp/{fsp-mdst-table.c => fsp-sysdump.c} (95%)
> delete mode 100644 include/fsp-mdst-table.h
> create mode 100644 include/opal-dump.h
>
More information about the Skiboot
mailing list