Author: Manikandan Elumalai, [manikandan.hcl.ers.epl@gmail.com]
Other contributors: None
Created: 2020-07-02
The current implementation in the phosphor-host-postd supports only single host postcode access through LPC interface.
As the open BMC architecture is evolving, the single host support becomes contingent and needs multiple-host post code access to be implemented.
Existing postcode implementation for single host
The below component diagram shows the present implementation for postcode and history at high-level overview
+----------------------------------+ +--------------------+ |BMC | | | | +-------------------------------+ | | | |Phosphor-host-postd | | | | | +----------+ +------------+ | | | | LPC | | | | | | | +<-------------+ | | | | +----------+ | LPC | | | | | | | | | |xyz.openbmc_project.State. +<-------+ +------------+ | | |Boot.Raw.Value | | | | | +------+------------------------+ | | Host | | | | | | | | | | | | | | postcode change event | + +--------------------+ | | | xyz.openbmc_project.State.Boot.Raw | | | + | | | | +------------------+ | +------v------------------------+ +----->+ | | |Phosphor-postcode-manager | | CLI | | | +-------------+ | | | | | postcode +<------------->+ | | | | history | | | | | +-------------+ +------------------+ | +-------------------------------+ xyz.openbmc_project.State.Boot.PostCode | | | | | +-------------------------------+ +----------------------+ | | | 8GPIOs | | | | SGPIO +------------>+ | | | | | 7 segment | | +-------------------------------+ | Display | | | | | +----------------------------------+ +----------------------+
This document proposes a new design engaging the IPMB interface to read the port-80 post code from multiple-host. The existing single host LPC interface remains unaffected. This design also supports host discovery including the hot-plug-able host connected in the slot.
Following modules will be updated for this implementation
Interface Diagram
Provided below the post code interface diagram with flow sequence
+-------------------------------------------+ | BMC | | | | +--------------+ +-----------------+ | I2C/IPMI +----+-------------+ | | | | | | +---------->|BIC | | | | | | ipmbbridged <--+--+ | | Host1 | | | | | | | | +------------------+ | | oem handlers | +-------+---------+ | | I2C/IPMI +------------------+ | | | | | +---------->|BIC | | | | | | | | | | Host2 | | | | +-------v---------+ | | +------------------+ | | (fb-ipmi-oem)| | | | | I2C/IPMI +------------------+ | | +<----+ ipmid | | +---------->|BIC | | | | | | | | | | | Host3 | | +-+----+-------+ +-----------------+ | | +------------------+ | | | | | I2C/IPMI +------------------+ | | | +-----------------+ | +---------->|BIC | | | | | | Host position | | | | HostN | | event | | from D-Bus | | +----+-------------+ | | | +-------+---------+ | | | event | | +-----------------+ | | | | | | | | | +-v---------------------v---------+ | | seven segment | | | | phosphor-host-postd +--+------------>+ display | | | | (ipmisnoop) | | | | | | | xyz.openbmc_project.State. | | | | | | | Boot.RawX(1,2,..N).Value | | +-----------------+ | | +---------------------------------+ | | | | xyz.openbmc_project. | | | State.Boot. | +-v------------------------------------+ | PostcodeX(1,2..N) +-----+ | | +----------------+ +--------------+ | | | | | | | | | | +<-+------------------------>+ | | | | Process1 | | Process N | | | | CLI | | | | (host1) | | (hostN) | | | | | | | | | | | +<-+------------------------>+ | | | +----------------+ +--------------+ | | /redfish/v1/Systems/ | | | | | | system/LogServices/ +-----+ | | Phosphor-post-code-manager@@ | | PostCodesX(1,2..N) | +--------------------------------------+ | +-------------------------------------------+
Postcode Flow:
This library is part of the [phosphor-ipmi-host] (https://github.com/openbmc/phosphor-host-ipmid) and gets the postcode from host through phosphor-ipmi-ipmb.
This implementation involves the following changes in the phosphor-host-postd.
D-Bus interface
The following D-Bus names need to be created for the multi-host post-code.
Service name -- xyz.openbmc_project.State.Boot.Raw Obj path name -- /xyz/openbmc_project/State/Boot/RawX(1,2..N) Interface name -- xyz.openbmc_project.State.Boot.Raw
The phosphor-post-code-manager is a multi service design for multi-host. The single host postcode handling D-bus naming conventions will be updated to comply the community naming scheme.
D-Bus interface
The following D-Bus names needs to be created for multi-host post-code.
Service name -- xyz.openbmc_project.State.Boot.PostCodeX(1,2..N) Obj path name -- /xyz/openbmc_project/State/Boot/PostCodeX(1,2..N) Interface name -- xyz.openbmc_project.State.Boot.PostCode
The postcode history needs to be handled for the multi-host through redfish logging service.
phosphor-post-code-manager single process approach
This implementation consider single service to handle multi-host postcode. In this approach, all D-Bus handling will taken care by the single process.
Single service is different than existing x86-power-control and obmc-console where multi-service approach is used.
Multi-service approach is more scalable to handle multi-host than the single service.