1919a7b68SManikandan Elumalai# Multi-host Postcode Support 2919a7b68SManikandan Elumalai 3919a7b68SManikandan ElumalaiAuthor: Manikandan Elumalai, [manikandan.hcl.ers.epl@gmail.com] 4919a7b68SManikandan Elumalai 5919a7b68SManikandan ElumalaiOther contributors: None 6919a7b68SManikandan Elumalai 7919a7b68SManikandan ElumalaiCreated: 2020-07-02 8919a7b68SManikandan Elumalai 9919a7b68SManikandan Elumalai## Problem Description 10919a7b68SManikandan Elumalai 11919a7b68SManikandan ElumalaiThe current implementation in the phosphor-host-postd supports only single host 12919a7b68SManikandan Elumalaipostcode access through LPC interface. 13919a7b68SManikandan Elumalai 14919a7b68SManikandan ElumalaiAs the open BMC architecture is evolving, the single host support becomes 15919a7b68SManikandan Elumalaicontingent and needs multiple-host post code access to be implemented. 16919a7b68SManikandan Elumalai 17919a7b68SManikandan Elumalai## Background and References 18919a7b68SManikandan Elumalai 19*f4febd00SPatrick WilliamsThe below component diagram shows the design for single-host postcode and 20*f4febd00SPatrick Williamshistory at high-level overview. The single-host design is updated slightly from 21*f4febd00SPatrick Williamsthe original to better comply with community conventions (using suffix 0 on 22*f4febd00SPatrick WilliamsD-Bus objects). 23919a7b68SManikandan Elumalai 24*f4febd00SPatrick WilliamsDiagram Legend: |Label|Signifies| |-----|---------| |`I:` |D-Bus interface| 25*f4febd00SPatrick Williams|`S:` |D-Bus service name (well-known bus name)| |`R:` |Repository name| |`U:` 26*f4febd00SPatrick Williams|Systemd service unit name| |`A:` |Executable name| |`H:` |HW Module| 27919a7b68SManikandan Elumalai 28919a7b68SManikandan Elumalai``` 293b1b8173SJonathan Doman +-----------+ 303b1b8173SJonathan Doman +------+ | 7 segment | 313b1b8173SJonathan Doman | Host | | display | 323b1b8173SJonathan Doman +--+---+ +-----^-----+ 333b1b8173SJonathan Doman | | 343b1b8173SJonathan Doman+-------------------------+--------------------+--------+ 35919a7b68SManikandan Elumalai| BMC | | | 363b1b8173SJonathan Doman| +--v----+ +-----+-----+ | 373b1b8173SJonathan Doman| | H:LPC +---------> H:(S)GPIO | | 383b1b8173SJonathan Doman| +--+----+ +-----------+ | 393b1b8173SJonathan Doman| | | 403b1b8173SJonathan Doman| +-----------------------v--------------+ | 413b1b8173SJonathan Doman| | U:lpcsnoop | | 42919a7b68SManikandan Elumalai| | | | 433b1b8173SJonathan Doman| | Current POST code: | | 443b1b8173SJonathan Doman| | S:xyz.openbmc_project.State.Boot.Raw | | 453b1b8173SJonathan Doman| | /xyz/openbmc_project/state/boot/raw0 | | 463b1b8173SJonathan Doman| | I:xyz.openbmc_project.State.Boot.Raw >----+ | 473b1b8173SJonathan Doman| +--------------------------------------+ | | 483b1b8173SJonathan Doman| | | 493b1b8173SJonathan Doman| +-------------------------------------------v---+ | 503b1b8173SJonathan Doman| | U:xyz.openbmc_project.State.Boot.PostCode | | 513b1b8173SJonathan Doman| | POST code history: | | 523b1b8173SJonathan Doman| | +-------------------------------------------+ | | 533b1b8173SJonathan Doman| | | S:xyz.openbmc_project.State.Boot.PostCode0| | | 543b1b8173SJonathan Doman| | | /xyz/openbmc_project/State/Boot/PostCode0 | | | 553b1b8173SJonathan Doman| | | I:xyz.openbmc_project.State.Boot.PostCode >----+ | 563b1b8173SJonathan Doman| | +-------------------------------------------+ | | | 573b1b8173SJonathan Doman| +-----------------------------------------------+ | | 583b1b8173SJonathan Doman| | | 593b1b8173SJonathan Doman| +--------------------------------+ | | 603b1b8173SJonathan Doman| | Other consumers of POST codes: <------------+ | 613b1b8173SJonathan Doman| | Redfish, etc... | | 623b1b8173SJonathan Doman| +--------------------------------+ | 633b1b8173SJonathan Doman+-------------------------------------------------------+ 64919a7b68SManikandan Elumalai``` 653b1b8173SJonathan Doman 663b1b8173SJonathan DomanSince multiple hosts cannot coherently write their POST codes to the same place, 673b1b8173SJonathan Domanan additional datapath is needed to receive POST codes from each host. Since 683b1b8173SJonathan Domanthis new datapath would not have built-in support in ASPEED hardware, additional 693b1b8173SJonathan Domanlogic is also needed drive the 7-segment display. 703b1b8173SJonathan Doman 71919a7b68SManikandan Elumalai## Requirements 72919a7b68SManikandan Elumalai 73919a7b68SManikandan Elumalai- Read postcode from all servers. 74919a7b68SManikandan Elumalai- Display the host postcode to the 7 segment display based on host position 75919a7b68SManikandan Elumalai selection. 76919a7b68SManikandan Elumalai- Provide a command interface for user to see any server(multi-host) current 77919a7b68SManikandan Elumalai postcode. 78919a7b68SManikandan Elumalai- Provide a command interface for user to see any server(multi-host) postcode 79919a7b68SManikandan Elumalai history. 80919a7b68SManikandan Elumalai- Support for hot-plug-able host. 81919a7b68SManikandan Elumalai 82919a7b68SManikandan Elumalai## Proposed Design 83919a7b68SManikandan Elumalai 84919a7b68SManikandan ElumalaiThis document proposes a new design engaging the IPMB interface to read the 853b1b8173SJonathan Domanport-80 post code from multiple-host. The existing single host LPC snooping 863b1b8173SJonathan Domanmechanism remains unaffected, and is not shown in diagrams below. This design 873b1b8173SJonathan Domanalso supports host discovery including the hot-plug-able host connected in the 883b1b8173SJonathan Domanslot. 89919a7b68SManikandan Elumalai 90919a7b68SManikandan ElumalaiFollowing modules will be updated for this implementation 91919a7b68SManikandan Elumalai 92919a7b68SManikandan Elumalai- phosphor-host-postd. 93919a7b68SManikandan Elumalai- phosphor-post-code-manager. 94919a7b68SManikandan Elumalai- platform specific OEM handler (fb-ipmi-oem). 95919a7b68SManikandan Elumalai- bmcweb (redfish logging service). 96919a7b68SManikandan Elumalai 97919a7b68SManikandan Elumalai**Interface Diagram** 98919a7b68SManikandan Elumalai 99919a7b68SManikandan ElumalaiProvided below the post code interface diagram with flow sequence 100*f4febd00SPatrick Williams 101919a7b68SManikandan Elumalai``` 1023b1b8173SJonathan Doman+---------------------------------------------------+ 103919a7b68SManikandan Elumalai| BMC | 104919a7b68SManikandan Elumalai| | 1053b1b8173SJonathan Doman| +-----------------------+ +----------------+ | +----+-------------+ 1063b1b8173SJonathan Doman| | A:ipmid | | IPMB Bridge <--+--IPMB-+-|BIC | | 1073b1b8173SJonathan Doman| | | | (R:ipmbbridge) | | | | | Host1 | 1083b1b8173SJonathan Doman| | +-------------------+ | +--------+-------+ | | +------------------+ 1093b1b8173SJonathan Doman| | | OEM IPMI Handlers | | | | | . 1103b1b8173SJonathan Doman| | | (R:fb-ipmi-oem) <-+-------------+ | | . 1113b1b8173SJonathan Doman| | --------------------+ | +----------------+ | | . 1123b1b8173SJonathan Doman| +-+---------------------+ | Host selection | | | +------------------+ 1133b1b8173SJonathan Doman| | | monitoring <---+--+ +-|BIC | | 1143b1b8173SJonathan Doman| | +---------+------+ | | | | HostN | 1153b1b8173SJonathan Doman| | | | | +------------------+ 1163b1b8173SJonathan Doman| | +---------------------------------v------+ | | 1173b1b8173SJonathan Doman| | | R:phosphor-host-postd (1 process) | | | +---------------+ 1183b1b8173SJonathan Doman| | | Per-host POST code object: | | +-GPIO-| Button/switch | 1193b1b8173SJonathan Doman| | | /xyz/openbmc_project/state/boot/raw<N> | | | input device | 1203b1b8173SJonathan Doman| +-> I:xyz.openbmc_project.State.Boot.Raw >-+ | +---------------+ 1213b1b8173SJonathan Doman| +---------------------------------+------+ | | 1223b1b8173SJonathan Doman| | | | +-------------------+ 1233b1b8173SJonathan Doman| +--------+-+----GPIO-> 7-segment display | 1243b1b8173SJonathan Doman| | | +-------------------+ 1253b1b8173SJonathan Doman| | +------+ 1263b1b8173SJonathan Doman| | | 1273b1b8173SJonathan Doman| +----------------------------------------------v---+ | 1283b1b8173SJonathan Doman| | R:phosphor-post-code-manager (N processes) | | 1293b1b8173SJonathan Doman| | Per-host POST code history service: | | 1303b1b8173SJonathan Doman| | +----------------------------------------------+ | | 1313b1b8173SJonathan Doman| | | S:xyz.openbmc_project.State.Boot.PostCode<N> | | | 1323b1b8173SJonathan Doman| | | /xyz/openbmc_project/State/Boot/PostCode<N> | | | 1333b1b8173SJonathan Doman| | | I:xyz.openbmc_project.State.Boot.PostCode >-+-+ | 1343b1b8173SJonathan Doman| | +----------------------------------------------+ | | | 1353b1b8173SJonathan Doman| | ... | | | 1363b1b8173SJonathan Doman| +--------------------------------------------------+ | | 1373b1b8173SJonathan Doman| | | 1383b1b8173SJonathan Doman| +--------------------------------+ | | 1393b1b8173SJonathan Doman| | Other consumers of POST codes: <--------------+ | 1403b1b8173SJonathan Doman| | Redfish, CLI, etc... | | 1413b1b8173SJonathan Doman| +--------------------------------+ | 1423b1b8173SJonathan Doman| | 1433b1b8173SJonathan Doman+----------------------------------------------------------+ 144919a7b68SManikandan Elumalai``` 145919a7b68SManikandan Elumalai 146919a7b68SManikandan Elumalai**Postcode Flow:** 147919a7b68SManikandan Elumalai 148919a7b68SManikandan Elumalai- BMC power-on the host. 149919a7b68SManikandan Elumalai- Host starts sending the postcode IPMI message continuously to the BMC. 1503b1b8173SJonathan Doman- The ipmbbridged (phosphor-ipmi-ipmb) passes along the message to IPMI daemon. 1513b1b8173SJonathan Doman- The ipmid (phosphor-ipmi-host) appends host information with postcode and 1523b1b8173SJonathan Doman writes value to appropriate D-Bus object hosted by phosphor-host-postd. 153919a7b68SManikandan Elumalai- phosphor-host-postd displays postcode in the seven segment display based on 154919a7b68SManikandan Elumalai host position reads through D-bus interface. 155*f4febd00SPatrick Williams- phosphor-post-code-manager receives new POST codes via D-Bus signal and stores 156*f4febd00SPatrick Williams the postcode as history in the /var directory. 157919a7b68SManikandan Elumalai 158919a7b68SManikandan Elumalai## Platform Specific OEM Handler (fb-ipmi-oem) 159919a7b68SManikandan Elumalai 160*f4febd00SPatrick WilliamsThis library is part of the 161*f4febd00SPatrick Williams[phosphor-ipmi-host](https://github.com/openbmc/phosphor-host-ipmid) and gets 162*f4febd00SPatrick Williamsthe postcode from host through 163919a7b68SManikandan Elumalai[phosphor-ipmi-ipmb](https://github.com/openbmc/ipmbbridge). 164919a7b68SManikandan Elumalai 165919a7b68SManikandan Elumalai- Register IPMI OEM postcode callback handler. 166919a7b68SManikandan Elumalai- Extract postcode from IPMI message (phosphor-ipmi-host/phosphor-ipmi-ipmb). 1673b1b8173SJonathan Doman- Sets `Value` property on appropriate D-Bus `Raw` object hosted by 1683b1b8173SJonathan Doman `phosphor-host-postd`. Other programs (e.g. `phosphor-post-code-manager`) can 1693b1b8173SJonathan Doman subscribe to `PropertiesChanged` signals on this object to get the updates. 170919a7b68SManikandan Elumalai 171919a7b68SManikandan Elumalai## phosphor-host-postd 172919a7b68SManikandan Elumalai 173919a7b68SManikandan ElumalaiThis implementation involves the following changes in the phosphor-host-postd. 174919a7b68SManikandan Elumalai 1753b1b8173SJonathan Doman- `phosphor-host-postd` handles property set events for the `Value` property on 1763b1b8173SJonathan Doman each instance of the `xyz.openbmc_project.State.Boot.Raw` interface. 177919a7b68SManikandan Elumalai- phosphor-host-postd reads the host selection from the dbus property. 1783b1b8173SJonathan Doman- Display the latest postcode of the selected host read through D-Bus on a 1793b1b8173SJonathan Doman 7-segment display. 180919a7b68SManikandan Elumalai 181919a7b68SManikandan Elumalai**D-Bus interface** 182919a7b68SManikandan Elumalai 183*f4febd00SPatrick WilliamsThe following D-Bus names need to be created for the multi-host post-code. 184919a7b68SManikandan Elumalai 185919a7b68SManikandan Elumalai Service name -- xyz.openbmc_project.State.Boot.Raw 186919a7b68SManikandan Elumalai 187919a7b68SManikandan Elumalai Obj path name -- /xyz/openbmc_project/State/Boot/RawX(1,2..N) 188919a7b68SManikandan Elumalai 189919a7b68SManikandan Elumalai Interface name -- xyz.openbmc_project.State.Boot.Raw 190919a7b68SManikandan Elumalai 191919a7b68SManikandan Elumalai## phosphor-post-code-manager 192919a7b68SManikandan Elumalai 193*f4febd00SPatrick WilliamsThe phosphor-post-code-manager is a multi service design for multi-host. The 194*f4febd00SPatrick Williamssingle host postcode handling D-bus naming conventions will be updated to comply 195*f4febd00SPatrick Williamswith the community naming scheme. 196919a7b68SManikandan Elumalai 197*f4febd00SPatrick Williams- Create D-Bus service names for single-host and multi-host system accordingly. 198*f4febd00SPatrick Williams The community follows conventions Host0 for single host and Host1 to N for 199*f4febd00SPatrick Williams multi-host. 200*f4febd00SPatrick Williams- phosphor-post-code-manager subscribes to changes on the `Raw<N>` object hosted 201*f4febd00SPatrick Williams by `phosphor-host-postd`. 202919a7b68SManikandan Elumalai- Store/retrieve post-code from directory (/var/lib/phosphor-post-code-manager/ 203919a7b68SManikandan Elumalai hostX(1,2,3..N)) based on event received from phosphor-host-postd. 204919a7b68SManikandan Elumalai 205919a7b68SManikandan Elumalai**D-Bus interface** 206919a7b68SManikandan Elumalai 207919a7b68SManikandan ElumalaiThe following D-Bus names needs to be created for multi-host post-code. 208919a7b68SManikandan Elumalai 209919a7b68SManikandan Elumalai Service name -- xyz.openbmc_project.State.Boot.PostCodeX(1,2..N) 210919a7b68SManikandan Elumalai 211919a7b68SManikandan Elumalai Obj path name -- /xyz/openbmc_project/State/Boot/PostCodeX(1,2..N) 212919a7b68SManikandan Elumalai 213919a7b68SManikandan Elumalai Interface name -- xyz.openbmc_project.State.Boot.PostCode 214919a7b68SManikandan Elumalai 215919a7b68SManikandan Elumalai## bmcweb 216*f4febd00SPatrick Williams 217*f4febd00SPatrick WilliamsThe postcode history needs to be handled for the multi-host through redfish 218*f4febd00SPatrick Williamslogging service. 219919a7b68SManikandan Elumalai 220919a7b68SManikandan Elumalai## Alternate design 221919a7b68SManikandan Elumalai 222919a7b68SManikandan Elumalai**phosphor-post-code-manager single process approach** 223919a7b68SManikandan Elumalai 224*f4febd00SPatrick WilliamsThis implementation consider single service to handle multi-host postcode. In 225*f4febd00SPatrick Williamsthis approach, all D-Bus handling will taken care by the single process. 226919a7b68SManikandan Elumalai 227919a7b68SManikandan ElumalaiSingle service is different than existing x86-power-control and obmc-console 228919a7b68SManikandan Elumalaiwhere multi-service approach is used. 229919a7b68SManikandan Elumalai 230*f4febd00SPatrick WilliamsMulti-service approach is more scalable to handle multi-host than the single 231*f4febd00SPatrick Williamsservice. 232