xref: /openbmc/docs/designs/multi-host-postcode.md (revision f4febd002df578bad816239b70950f84ea4567e8)
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