xref: /openbmc/docs/designs/power-recovery.md (revision 649268a5)
1de77feb6SAndrew Geissler# OpenBMC Server Power Recovery
2de77feb6SAndrew Geissler
3de77feb6SAndrew GeisslerAuthor: Andrew Geissler (geissonator)
4de77feb6SAndrew Geissler
5de77feb6SAndrew GeisslerOther contributors:
6de77feb6SAndrew Geissler
7de77feb6SAndrew GeisslerCreated: October 11th, 2021
8de77feb6SAndrew Geissler
9de77feb6SAndrew Geissler## Problem Description
10de77feb6SAndrew Geissler
11f4febd00SPatrick WilliamsModern computer systems have a feature, automated power-on recovery, which in
12f4febd00SPatrick Williamsessence is the ability to tell your system what to do when it hits issues with
13f4febd00SPatrick Williamspower to the system. If the system had a black out (i.e. power was completely
14f4febd00SPatrick Williamscut to the system), should it automatically power the system on? Should it leave
15f4febd00SPatrick Williamsit off? Or maybe the user would like the system to go to whichever state it was
16f4febd00SPatrick Williamsat before the power loss.
17f4febd00SPatrick Williams
18f4febd00SPatrick WilliamsThere are also instances where the user may not want automatic power recovery to
19f4febd00SPatrick Williamsoccur. For example, some systems have op-panels, and on these op-panels there
20f4febd00SPatrick Williamscan be a pin hole reset. This is a manual mechanism for the user to force a hard
21f4febd00SPatrick Williamsreset to the BMC in situations where it is hung or not responding. In these
22f4febd00SPatrick Williamssituations, the user may wish for the system to not automatically power on the
23f4febd00SPatrick Williamssystem, because they want to debug the reason for the BMC error.
24f3d60e3dSAndrew Geissler
25cdf04a3eSNodeMan97During blackout scenarios, system owners may have a set of services they need
26cdf04a3eSNodeMan97run once the power is restored. For example, IBM requires all LED's be toggled
27f4febd00SPatrick Williamsto off in a blackout. OpenBMC needs to provide a mechanism for system owners to
28f4febd00SPatrick Williamsrun services in this scenario.
29cdf04a3eSNodeMan97
30e67c779eSAndrew GeisslerA brownout is another scenario that commonly utilizes automated power-on
31e67c779eSAndrew Geisslerrecovery features. A brownout is a scenario where BMC firmware detects (or is
32f4febd00SPatrick Williamstold) that chassis power can no longer be supported, but power to the BMC will
33f4febd00SPatrick Williamsbe retained. On some systems, it's desired to utilize the automated power-on
34f4febd00SPatrick Williamsfeature to turn chassis power back on as soon as the brownout condition ends.
35e67c779eSAndrew Geissler
368ec6cb41SAndrew GeisslerSome system owners may chose to attach an Uninterrupted Power Supply (UPS) to
37f4febd00SPatrick Williamstheir system. A UPS continues to provide power to a system through a blackout or
38f4febd00SPatrick Williamsbrownout scenario. A UPS has a limited amount of power so it's main purpose is
39f4febd00SPatrick Williamsto handle brief power interruptions or to allow for an orderly shutdown of the
40f4febd00SPatrick Williamshost firmware.
418ec6cb41SAndrew Geissler
42f4febd00SPatrick WilliamsThe goal of this design document is to describe how OpenBMC firmware will deal
43f4febd00SPatrick Williamswith these questions.
44de77feb6SAndrew Geissler
45de77feb6SAndrew Geissler## Background and References
46f4febd00SPatrick Williams
47f4febd00SPatrick WilliamsThe BMC already implements a limited subset of function in this area. The
48f4febd00SPatrick Williams[PowerRestorePolicy][pdi-restore] property out in phosphor-dbus-interface
49de77feb6SAndrew Geisslerdefines the function capability.
50de77feb6SAndrew Geissler
51de77feb6SAndrew GeisslerIn smaller servers, this feature is commonly found within the Advanced
52de77feb6SAndrew GeisslerConfiguration and Power Interface (ACPI).
53de77feb6SAndrew Geissler
54f4febd00SPatrick Williams[openbmc/phosphor-state-manager][state-mgr] supports this property as defined in
55f4febd00SPatrick Williamsthe phosphor-dbus-interface.
56de77feb6SAndrew Geissler
57de77feb6SAndrew Geissler## Requirements
58f3d60e3dSAndrew Geissler
59f3d60e3dSAndrew Geissler### Automated Power-On Recovery
60f4febd00SPatrick Williams
61f4febd00SPatrick WilliamsOpenBMC software must ensure it persists the state of power to the chassis so it
62f4febd00SPatrick Williamscan know what to restore it to if necessary
63de77feb6SAndrew Geissler
64de77feb6SAndrew GeisslerOpenBMC software must provide support for the following options:
65f4febd00SPatrick Williams
66f4febd00SPatrick Williams- Do nothing when power is lost to the system (this will be the default)
67de77feb6SAndrew Geissler- Always power the system on and boot the host
68f4febd00SPatrick Williams- Always power the system off (previous power was on, power is now off, run all
69f4febd00SPatrick Williams  chassis power off services to ensure a clean state of software and hardware)
70de77feb6SAndrew Geissler- Restore the previous state of the chassis power and host
71de77feb6SAndrew Geissler
72f4febd00SPatrick WilliamsThese options are only checked and enforced in situations where the BMC does not
73f4febd00SPatrick Williamsdetect that chassis power is already on to the system when it comes out of
74f4febd00SPatrick Williamsreboot.
75de77feb6SAndrew Geissler
76de77feb6SAndrew GeisslerOpenBMC software must also support the concept of a one_time power restore
77f4febd00SPatrick Williamspolicy. This is a separate instance of the `PowerRestorePolicy` which will be
78f4febd00SPatrick Williamshosted under a D-Bus object path which ends with "one_time". If this one_time
79f4febd00SPatrick Williamssetting is not the default, `None`, then software will execute the policy
80f4febd00SPatrick Williamsdefined under it, and then reset the one_time property to `None`. This one_time
81f4febd00SPatrick Williamsfeature is a way for software to utilize automated power-on recovery function
82f4febd00SPatrick Williamsfor other areas like firmware update scenarios where a certain power on behavior
83f4febd00SPatrick Williamsis desired once an update has completed.
84de77feb6SAndrew Geissler
85f3d60e3dSAndrew Geissler### BMC and System Recovery Paths
86f4febd00SPatrick Williams
87f4febd00SPatrick WilliamsIn situations where the BMC or the system have gotten into a bad state, and the
88f4febd00SPatrick Williamsuser has initiated some form of manual reset which is detectable by the BMC as
89f4febd00SPatrick Williamsbeing user initiated, the BMC software must:
90f4febd00SPatrick Williams
91f3d60e3dSAndrew Geissler- Fill in appropriate `RebootCause` within the [BMC state interface][bmc-state]
92f3d60e3dSAndrew Geissler  - At a minimum, `PinholeReset` will be added. Others can be added as needed
93f3d60e3dSAndrew Geissler- Log an error indicating a user initiated forced reset has occurred
94f3d60e3dSAndrew Geissler- Not log an error indicating a blackout has occurred if chassis power was on
95f3d60e3dSAndrew Geissler  prior to the pin hole reset
96f3d60e3dSAndrew Geissler- Not implement any power recovery policy on the system
97f3d60e3dSAndrew Geissler- Turn power recovery back on once BMC has a normal reboot
98f3d60e3dSAndrew Geissler
99cdf04a3eSNodeMan97### Blackout
100f4febd00SPatrick Williams
101cdf04a3eSNodeMan97A blackout occurs when AC power is cut from the system, resulting in a total
102cdf04a3eSNodeMan97loss of power if there is no UPS installed to keep the system on. To identify
103cdf04a3eSNodeMan97this scenario after a BMC reboot, chassis-state-manager will check to see what
104f4febd00SPatrick Williamsthe last power state was before the loss of power and compares it against the
105f4febd00SPatrick Williamspgood pin. Blackouts can be intentionally triggered by a user (i.e a pinhole
106f4febd00SPatrick Williamsreset) or in severe cases occur when there is some sort of an external outage.
107f4febd00SPatrick WilliamsIn either case the BMC must take into account this detrimental state. When this
108f4febd00SPatrick Williamscondition occurs, the BMC may(depending on configuration):
109f4febd00SPatrick Williams
110f4febd00SPatrick Williams- Provide a generic target, `obmc-chassis-blackout@.target` to be called when a
111f4febd00SPatrick Williams  blackout is detected
112cdf04a3eSNodeMan97- Adhere to the current power restore policy
113cdf04a3eSNodeMan97
114cdf04a3eSNodeMan97BMC firmware must also be able to:
115f4febd00SPatrick Williams
116f4febd00SPatrick Williams- Discover why the system is in a blackout situation. From either loss of power
117f4febd00SPatrick Williams  or user actions.
118cdf04a3eSNodeMan97
119e67c779eSAndrew Geissler### Brownout
120f4febd00SPatrick Williams
121e67c779eSAndrew GeisslerAs noted above, a brownout condition is when AC power can not continue to be
122e67c779eSAndrew Geisslersupplied to the chassis, but the BMC can continue to have power and run.
123e67c779eSAndrew Geissler
124e67c779eSAndrew GeisslerWhen this condition occurs, the BMC must:
125f4febd00SPatrick Williams
126f4febd00SPatrick Williams- Power system off as quickly as situations requires (or gracefully handle the
127f4febd00SPatrick Williams  loss of power if it occurred without warning)
128e67c779eSAndrew Geissler- Log an error indicating the brownout event has occurred
129e67c779eSAndrew Geissler- Support the ability for host firmware to indicate a one-time power restore
130e67c779eSAndrew Geissler  policy if they wish for when the brownout completes
131e67c779eSAndrew Geissler- Identify when a brownout condition has completed
132e67c779eSAndrew Geissler- Wait for the brownout to complete and implement the one-time power restore
133e67c779eSAndrew Geissler  policy. If no one-time policy is defined then run the standard power restore
134e67c779eSAndrew Geissler  policy defined for the system
135e67c779eSAndrew Geissler
136e67c779eSAndrew GeisslerBMC firmware must also be able to:
137f4febd00SPatrick Williams
138e67c779eSAndrew Geissler- Discover if system is in a brownout situation
139e67c779eSAndrew Geissler  - Run when the BMC first comes up to know if it should implement any automated
140e67c779eSAndrew Geissler    power-on recovery
141e67c779eSAndrew Geissler- Not run any power-on recovery logic when a brownout is occurring
142f4febd00SPatrick Williams- Tell the host firmware that it is a automated power-on recovery initiated boot
143f4febd00SPatrick Williams  when that firmware is what boots the system
144e67c779eSAndrew Geissler
1458ec6cb41SAndrew Geissler### Uninterruptible Power Supply (UPS)
146f4febd00SPatrick Williams
1478ec6cb41SAndrew GeisslerWhen a UPS is present and a blackout or brownout condition occurs, the BMC must:
148f4febd00SPatrick Williams
1498ec6cb41SAndrew Geissler- Log an error to indicate the condition has occurred
1508ec6cb41SAndrew Geissler- If host firmware is running, notify the host firmware of this utility failure
1518ec6cb41SAndrew Geissler  condition (this behavior is build-time configurable)
1528ec6cb41SAndrew Geissler- If the UPS battery power becomes low and if host firmware is running, notify
1538ec6cb41SAndrew Geissler  the host firmware of the condition, indicating a quick power off is required
1548ec6cb41SAndrew Geissler  (this behavior is build-time configurable)
1558ec6cb41SAndrew Geissler- Log an error if the UPS battery power becomes low and a power loss to the
1568ec6cb41SAndrew Geissler  entire system is imminent(i.e. a blackout scenario where BMC will also lose
1578ec6cb41SAndrew Geissler  power and UPS is about to run out of power)
1588ec6cb41SAndrew Geissler- Not execute any automated power-on recovery logic to prevent power on/off
1598ec6cb41SAndrew Geissler  thrasing (this behavior is build-time configurable)
1608ec6cb41SAndrew Geissler
161de77feb6SAndrew Geissler## Proposed Design
162f3d60e3dSAndrew Geissler
163f3d60e3dSAndrew Geissler### Automated Power-On Recovery
164f4febd00SPatrick Williams
165de77feb6SAndrew GeisslerAn application will be run after the chassis and host states have been
166de77feb6SAndrew Geisslerdetermined which will only run if the chassis power is not on.
167de77feb6SAndrew Geissler
168f4febd00SPatrick WilliamsThis application will look for the one_time setting and use it if its value is
169f4febd00SPatrick Williamsnot `None`. If it does use the one_time setting then it will reset it to `None`
170f4febd00SPatrick Williamsonce it has read it. Otherwise the application will read the persistent value of
171f4febd00SPatrick Williamsthe `PowerRestorePolicy`. The application will then run the logic as defined in
172f4febd00SPatrick Williamsthe Requirements above.
173de77feb6SAndrew Geissler
174de77feb6SAndrew GeisslerThis function will be hosted in phosphor-state-manger and potentially
175de77feb6SAndrew Geisslerx86-power-control.
176de77feb6SAndrew Geissler
177f3d60e3dSAndrew Geissler### BMC and System Recovery Paths
178f3d60e3dSAndrew Geissler
179f4febd00SPatrick WilliamsThe BMC state manager application currently looks at a file in the sysfs to try
180f4febd00SPatrick Williamsand determine the cause of a BMC reboot. It then puts this reason in the
181f4febd00SPatrick Williams`RebootCause` property.
182f4febd00SPatrick Williams
183f4febd00SPatrick WilliamsOne possible cause of a BMC reset is an external reset (EXTRST). There are a
184f4febd00SPatrick Williamsvariety of reasons an external reset can occur. Some systems are adding GPIOs to
185f4febd00SPatrick Williamsprovide additional detail on these types of resets.
186f3d60e3dSAndrew Geissler
187f3d60e3dSAndrew GeisslerA new GPIO name will be added to the [device-tree-gpio-naming.md][dev-tree]
188f3d60e3dSAndrew Geisslerwhich reports whether a pin hole reset has occurred on the previous reboot of
189f3d60e3dSAndrew Geisslerthe BMC. The BMC state manager application will enhance its support of the
190f3d60e3dSAndrew Geissler`RebootCause` to look for this GPIO and if present, read it and set
191f4febd00SPatrick Williams`RebootCause` accordingly when it can either not determine the reason for the
192f4febd00SPatrick Williamsreboot via the sysfs or sysfs reports a EXTRST reason (in which case the GPIO
193f4febd00SPatrick Williamswill be utilized to enhance the reboot reason).
194f3d60e3dSAndrew Geissler
195f3d60e3dSAndrew GeisslerIf the power recovery software sees the `PinholeReset` reason within the
196f4febd00SPatrick Williams`RebootCause` then it will not implement any of its policy. Future BMC reboots
197f4febd00SPatrick Williamswhich are not pin hole reset caused, will cause `RebootCause` to go back to a
198f4febd00SPatrick Williamsdefault and therefore power recovery policy will be re-enabled on that BMC boot.
199f3d60e3dSAndrew Geissler
200f4febd00SPatrick WilliamsThe phosphor-state-manager chassis software will not log a blackout error if it
201f4febd00SPatrick Williamssees the `PinholeReset` reason (or any other reason that indicates a user
202f3d60e3dSAndrew Geisslerinitiated a reset of the system).
203f3d60e3dSAndrew Geissler
204cdf04a3eSNodeMan97### Blackout
205f4febd00SPatrick Williams
206f4febd00SPatrick WilliamsA new systemd target `obmc-chassis-blackout.target` should be added to allow
207f4febd00SPatrick Williamssystem maintainers to call services in this condition. This new target will be
208f4febd00SPatrick Williamscalled when the BMC detects a blackout. The target will allow for system owners
209f4febd00SPatrick Williamsto add their own specific services to this new target.
210cdf04a3eSNodeMan97Phosphor-chassis-state-manager will ensure `obmc-chassis-blackout.target` will
211cdf04a3eSNodeMan97be called after a blackout.
212cdf04a3eSNodeMan97
213e67c779eSAndrew Geissler### Brownout
214f4febd00SPatrick Williams
215e67c779eSAndrew GeisslerThe existing `xyz.openbmc_project.State.Chassis` interface will be enhanced to
216e67c779eSAndrew Geisslersupport a `CurrentPowerStatus` property. The existing
217e67c779eSAndrew Geisslerphosphor-chassis-state-manager, which is instantiated per instance of chassis in
218e67c779eSAndrew Geisslerthe system, will support a read of this property. The following will be the
219e67c779eSAndrew Geisslerpossible returned values for the power status of the target chassis:
220f4febd00SPatrick Williams
221e67c779eSAndrew Geissler- `Undefined`
222e67c779eSAndrew Geissler- `BrownOut`
2238ec6cb41SAndrew Geissler- `UninterruptiblePowerSupply`
224e67c779eSAndrew Geissler- `Good`
225e67c779eSAndrew Geissler
226e67c779eSAndrew GeisslerThe phosphor-psu-monitor application within the phosphor-power repository will
227e67c779eSAndrew Geisslerbe responsible for monitoring for brownout conditions. It will support a
228f4febd00SPatrick Williamsper-chassis interface which represents the status of the power going into the
229f4febd00SPatrick Williamstarget chassis. This interface will be generic in that other applications could
230f4febd00SPatrick Williamshost it to report the status of the power. The state-manager software will
231f4febd00SPatrick Williamsutilize mapper to look for all implementations of the interface for its chassis
232f4febd00SPatrick Williamsand aggregate the status (i.e. if any reports a brownout, then `BrownOut` will
233f4febd00SPatrick Williamsbe returned). This interface will be defined in a later update to this document.
234e67c779eSAndrew Geissler
235e67c779eSAndrew GeisslerThe application(s) responsible for detecting and reporting chassis power will
236e67c779eSAndrew Geisslerrun on startup and discover the correct state for their property. These
237e67c779eSAndrew Geisslerapplications will log an error when a brownout occurs and initiate the fast
238e67c779eSAndrew Geisslerpower off.
239e67c779eSAndrew Geissler
240e67c779eSAndrew GeisslerIf the system design needs it, the existing one-time function provided by
241f4febd00SPatrick Williamsphosphor-state-manager for auto power on policy will be utilized for when the
242f4febd00SPatrick Williamsbrownout completes.
243e67c779eSAndrew Geissler
244e67c779eSAndrew GeisslerWhen the phosphor-power application detects that a brownout condition has
245e67c779eSAndrew Geisslercompleted it will reset its interface representing power status to good and
246e67c779eSAndrew Geisslerstart the state-manager service which executes the automated power-on logic.
247e67c779eSAndrew Geissler
248e67c779eSAndrew Geisslerphosphor-state-manager will ensure automated power-on recovery logic is only run
249e67c779eSAndrew Geisslerwhen the power supply interface reports the power status is good. If there are
250e67c779eSAndrew Geisslermultiple chassis and/or host instances in the system then the host instances
251e67c779eSAndrew Geisslerassociated with the chassis(s) with a bad power status will be the only ones
252e67c779eSAndrew Geisslerprevented from booting.
253e67c779eSAndrew Geissler
2548ec6cb41SAndrew Geissler### Uninterruptible Power Supply (UPS)
255f4febd00SPatrick Williams
2568ec6cb41SAndrew GeisslerA new phosphor-dbus-interface will be defined to represent a UPS. A BMC
257f4febd00SPatrick Williamsapplication will implement one of these per UPS attached to the system. This
258f4febd00SPatrick Williamsapplication will monitor UPS status and monitor for the following:
259f4febd00SPatrick Williams
2608ec6cb41SAndrew Geissler- UPS utility fail (system power has failed and UPS is providing system power)
2618ec6cb41SAndrew Geissler- UPS battery low (UPS is about to run out of power)
2628ec6cb41SAndrew Geissler
263f4febd00SPatrick WilliamsIf the application sees power has been lost and the system is running on UPS
264f4febd00SPatrick Williamsbattery power then it will monitor for the power remaining in the UPS and notify
265f4febd00SPatrick Williamsthe host that a shutdown is required if needed. This application will also be
266f4febd00SPatrick Williamsresponsible for logging an error indicating the UPS backup power has been
267f4febd00SPatrick Williamsswitched to and set the appropriate property in their interface to indicate the
268f4febd00SPatrick Williamsscenario is present when the system can no longer remain on.
2698ec6cb41SAndrew Geisslerphosphor-state-manager will query mapper for implementation of this new UPS
270f4febd00SPatrick Williamsinterface and utilize them in combination with power supply brownout status when
271f4febd00SPatrick Williamsdetermining the value to return for its `CurrentPowerStatus`.
2728ec6cb41SAndrew Geissler
2738ec6cb41SAndrew GeisslerSimilar to the above brownout scenario, phosphor-state-manager will ensure
2748ec6cb41SAndrew Geisslerautomated power-on recovery logic is not run if `PowerStatus` is not set to
2758ec6cb41SAndrew Geissler`Good`. This behavior will be build-time configurable within
2768ec6cb41SAndrew Geisslerphosphor-state-manager.
2778ec6cb41SAndrew Geissler
278de77feb6SAndrew Geissler## Alternatives Considered
279f4febd00SPatrick Williams
280de77feb6SAndrew GeisslerNone, this is a pretty basic feature that does not have a lot of alternatives
281de77feb6SAndrew Geissler(other then just not doing it).
282de77feb6SAndrew Geissler
283de77feb6SAndrew Geissler## Impacts
284f4febd00SPatrick Williams
285de77feb6SAndrew GeisslerNone
286de77feb6SAndrew Geissler
287de77feb6SAndrew Geissler## Testing
288f4febd00SPatrick Williams
289de77feb6SAndrew GeisslerThe control of this policy can already bet set via the Redfish API.
290f4febd00SPatrick Williams
291de77feb6SAndrew Geissler```
292de77feb6SAndrew Geissler#  Power Restore Policy
293*649268a5SGunnar Millscurl -k -H "Content-Type: application/json" -X PATCH -d '{"PowerRestorePolicy":"AlwaysOn"}' https://${bmc}/redfish/v1/Systems/system
294*649268a5SGunnar Millscurl -k -H "Content-Type: application/json" -X PATCH -d '{"PowerRestorePolicy":"AlwaysOff"}' https://${bmc}/redfish/v1/Systems/system
295*649268a5SGunnar Millscurl -k -H "Content-Type: application/json" -X PATCH -d '{"PowerRestorePolicy":"LastState"}' https://${bmc}/redfish/v1/Systems/system
296de77feb6SAndrew Geissler```
297f4febd00SPatrick Williams
298de77feb6SAndrew GeisslerFor testing, each policy should be set and verified. The one_time aspect should
299de77feb6SAndrew Geissleralso be checked for each possible value and verified to only be used once.
300de77feb6SAndrew Geissler
301f4febd00SPatrick WilliamsValidate that when multiple black outs occur, the firmware continues to try and
302f4febd00SPatrick Williamspower on the system when policy is `AlwaysOn` or `Restore`.
303de77feb6SAndrew Geissler
304f4febd00SPatrick WilliamsOn supported systems, a pin hole reset should be done with a system that has a
305f4febd00SPatrick Williamspolicy set to always power on. Tester should verify system does not
306f3d60e3dSAndrew Geisslerautomatically power on after a pin hole reset. Verify it does automatically
307f3d60e3dSAndrew Geisslerpower on when a normal reboot of the BMC is done.
308f3d60e3dSAndrew Geissler
309e67c779eSAndrew GeisslerA brownout condition should be injected into a system and appropriate paths
310e67c779eSAndrew Geisslershould be verified:
311f4febd00SPatrick Williams
312e67c779eSAndrew Geissler- Error log generated
313e67c779eSAndrew Geissler- Host notified (if running and notification possible)
314e67c779eSAndrew Geissler- System quickly powered off
315e67c779eSAndrew Geissler- Power recovery function is not run while a brownout is present
316e67c779eSAndrew Geissler- System automatically powers back on when brownout condition ends (assuming a
317e67c779eSAndrew Geissler  one-time or system auto power-on recovery policy of `AlwaysOn` or `Restore`)
318e67c779eSAndrew Geissler
3198ec6cb41SAndrew GeisslerPlug a UPS into a system and ensure when power is cut to the system that an
3208ec6cb41SAndrew Geisslererror is logged and the host is notified and allowed to power off.
3218ec6cb41SAndrew Geissler
322f4febd00SPatrick Williams[pdi-restore]:
323f4febd00SPatrick Williams  https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Control/Power/RestorePolicy.interface.yaml
324de77feb6SAndrew Geissler[state-mgr]: https://github.com/openbmc/phosphor-state-manager
325f4febd00SPatrick Williams[bmc-state]:
326f4febd00SPatrick Williams  https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/State/BMC.interface.yaml
327f4febd00SPatrick Williams[dev-tree]:
328f4febd00SPatrick Williams  https://github.com/openbmc/docs/blob/master/designs/device-tree-gpio-naming.md
329