xref: /openbmc/phosphor-dbus-interfaces/yaml/xyz/openbmc_project/Led/README.md (revision 921791c73008a3edfc6507afb5bc15e48963d295)
1b1b4d261SWilliam A. Kennington III# Managing LED groups and physical LEDs through BMC
2b1b4d261SWilliam A. Kennington III
3b1b4d261SWilliam A. Kennington III## Overview
4b1b4d261SWilliam A. Kennington III
5b1b4d261SWilliam A. Kennington IIILEDs that are present in the system can be managed by:
6a1347418SPatrick Williams`BMC / Hardware controller / Operating system`. This document describes how to
7a1347418SPatrick Williamscontrol the LEDs that are managed by BMC.
8b1b4d261SWilliam A. Kennington III
9b1b4d261SWilliam A. Kennington III## Understanding LED groups
10b1b4d261SWilliam A. Kennington III
11a1347418SPatrick WilliamsWhile it is entirely possible to act directly on a physical LED, it makes hard
12a1347418SPatrick Williamswhen more than one LED is to be acted on for a particular usecase.
13b1b4d261SWilliam A. Kennington III
14b1b4d261SWilliam A. Kennington IIIFor example: Certain systems may have a requirement to **Blink** one particular
15b1b4d261SWilliam A. Kennington IIILED upon reaching some state. However, some other systems may have a requirement
16b1b4d261SWilliam A. Kennington IIIto **Blink** set of LEDs in different frequencies. Few more systems may have a
17a1347418SPatrick Williamsrequirement to act on set of LEDs with different actions. Meaning, some LEDs to
18a1347418SPatrick Williamsbe solid [ON] while some LEDs to be Blinking etc.
19b1b4d261SWilliam A. Kennington III
20a1347418SPatrick WilliamsAs described above, it is more of a system specific policy on what set of LEDs
21a1347418SPatrick Williamsto be acted on in different usecases. Taking all that complexity into the code
22a1347418SPatrick Williamsmakes it impossible to extend across implementations and hence the need of a
23a1347418SPatrick Williamsmanager that works on the set of LEDs and policies and that is the Group.
24b1b4d261SWilliam A. Kennington III
25a1347418SPatrick WilliamsTo make concept of Group more evident, here is another example: Consider a
26a1347418SPatrick Williamsrequirement of blinking system Enclosure LED indicating an internal problem:
27b1b4d261SWilliam A. Kennington III
28b1b4d261SWilliam A. Kennington IIIIf the DIMM has some issues then the system admin needs a way of identifying
29a1347418SPatrick Williamsthat system before acting on it. In one case, the LED group may consist of DIMM
30a1347418SPatrick WilliamsLED + Enclosure Fault LED. However, if the DIMM is attached to a Raiser card,
31a1347418SPatrick Williamsthen the LED group may consist of DIMM LED + Raise card LED + Enclosure Fault
32a1347418SPatrick WilliamsLED. Defining this path will make it easier to locate the box and the exact part
33a1347418SPatrick Williamsthat needs servicing.
34b1b4d261SWilliam A. Kennington III
35b1b4d261SWilliam A. Kennington IIIDefinition of LED groups could be static or generated from MRW and must be in
36b1b4d261SWilliam A. Kennington IIIYAML format. A group definition looks like this:
37388b58f9SPatrick Williams
38388b58f9SPatrick Williams```yaml
39b1b4d261SWilliam A. Kennington IIIbmc_booted:
40b1b4d261SWilliam A. Kennington III  led_1:
41b1b4d261SWilliam A. Kennington III    Action: On
42b1b4d261SWilliam A. Kennington III    Frequency: 1000
43b1b4d261SWilliam A. Kennington III  led_2:
44b1b4d261SWilliam A. Kennington III    Action: Blink
45b1b4d261SWilliam A. Kennington III    Frequency: 1000
46b1b4d261SWilliam A. Kennington III    DutyOn: 50
47b1b4d261SWilliam A. Kennington III
48b1b4d261SWilliam A. Kennington IIIenclosure_identify:
49b1b4d261SWilliam A. Kennington III  id_front:
50b1b4d261SWilliam A. Kennington III    Action: Blink
51b1b4d261SWilliam A. Kennington III    Frequency: 1000
52b1b4d261SWilliam A. Kennington III    DutyOn: 50
53b1b4d261SWilliam A. Kennington III  id_rear:
54b1b4d261SWilliam A. Kennington III    Action: Blink
55b1b4d261SWilliam A. Kennington III    Frequency: 1000
56b1b4d261SWilliam A. Kennington III    DutyOn: 50
57b1b4d261SWilliam A. Kennington III```
58388b58f9SPatrick Williams
59a1347418SPatrick WilliamsThis says that the group `bmc_booted` consists of 2 physical LEDs in it. When
60a1347418SPatrick Williamsthis group is acted on, led_1 will turn solid [ON], while led_2 would be
61a1347418SPatrick Williamsblinking at 50% duty cycle.
62b1b4d261SWilliam A. Kennington III
63388b58f9SPatrick Williams## Dbus interfaces for LED groups
64b1b4d261SWilliam A. Kennington III
65a12b0b3bSVladimir KuznetsovRefer to the [specification][group_specification].
66388b58f9SPatrick Williams
67a1347418SPatrick Williams[group_specification]:
68a1347418SPatrick Williams  https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Led/Group.interface.yaml
69b1b4d261SWilliam A. Kennington III
70b1b4d261SWilliam A. Kennington IIIThere is only one property called **asserted** defined on groups and when set to
71b1b4d261SWilliam A. Kennington IIIboolean **true**, the actions listed for the LEDs in that group will get into
72a1347418SPatrick Williamseffect as described above. When the property is set to **false**, the actions
73a1347418SPatrick Williamsare un-done.
74b1b4d261SWilliam A. Kennington III
75a1347418SPatrick Williams- Henceforth, the term **asserted** would mean writing boolean **true** onto
76a1347418SPatrick Williams  `assert` property of the group. Term **de-assert** would mean writing
77a1347418SPatrick Williams  **false** to `assert` property.
78b1b4d261SWilliam A. Kennington III
79b1b4d261SWilliam A. Kennington III## Group Dbus information
80b1b4d261SWilliam A. Kennington III
81a1347418SPatrick Williams**Path: `/xyz/openbmc_project/led/groups/<name>`** **Interface:
82a1347418SPatrick Williams`xyz.openbmc_Project.Led.Group`**
83b1b4d261SWilliam A. Kennington III
84b1b4d261SWilliam A. Kennington IIIUsing the yaml definition above, a user can just set the `asserted` property to
85388b58f9SPatrick Williamsboolean `true` on `/xyz/openbmc_project/led/groups/enclosure_identify` and that
86b1b4d261SWilliam A. Kennington IIIwould result in blinking the front and rear Identify LEDs of the enclosure.
87b1b4d261SWilliam A. Kennington III
88b1b4d261SWilliam A. Kennington III## Mandatory groups
89b1b4d261SWilliam A. Kennington III
90*921791c7SManojkiran EdaIt is mandatory that all implementations provide definitions of at least 2
91*921791c7SManojkiran Edagroups namely; **bmc_booted** and **power_on**. Those would be asserted post
92*921791c7SManojkiran Edareaching BMCReady and PowerOn respectively. It is fine to have no LEDs in those
93*921791c7SManojkiran Edagroups but the group as such is deemed required.
94b1b4d261SWilliam A. Kennington III
95b1b4d261SWilliam A. Kennington IIIExample: The Group yaml may just be;
96388b58f9SPatrick Williams
97388b58f9SPatrick Williams```yaml
98b1b4d261SWilliam A. Kennington IIIbmc_booted:
99b1b4d261SWilliam A. Kennington IIIpower_on:
100b1b4d261SWilliam A. Kennington III```
101b1b4d261SWilliam A. Kennington III
102b1b4d261SWilliam A. Kennington IIIFor the IPMI command "chassis identify" to function, **enclosure_identify** must
103b1b4d261SWilliam A. Kennington IIIalso be implemented.
104b1b4d261SWilliam A. Kennington III
105b1b4d261SWilliam A. Kennington III## Understanding Physical LEDs
106b1b4d261SWilliam A. Kennington III
107b1b4d261SWilliam A. Kennington IIIIt is always **recommended** that external users use **only** the LED groups.
108a1347418SPatrick WilliamsDescribing the Physical LED here just for documenting it and strictly NOT to be
109a1347418SPatrick Williamsused outside of the firmware code.
110b1b4d261SWilliam A. Kennington III
111388b58f9SPatrick Williams## Dbus interfaces for physical LEDs
112b1b4d261SWilliam A. Kennington III
113a12b0b3bSVladimir KuznetsovRefer to the [specification][phys_specification].
114388b58f9SPatrick Williams
115a1347418SPatrick Williams[phys_specification]:
116a1347418SPatrick Williams  https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Led/Physical.interface.yaml
117b1b4d261SWilliam A. Kennington III
118b1b4d261SWilliam A. Kennington III## Dbus information
119b1b4d261SWilliam A. Kennington III
120a1347418SPatrick Williams**Path: `/xyz/openbmc_project/led/physical/<name>`** **Interface:
121a1347418SPatrick Williams`xyz.openbmc_Project.Led.Physical`**
122b1b4d261SWilliam A. Kennington III
123a1347418SPatrick WilliamsUsing **/xyz/openbmc_project/led/groups/enclosure_identify** as example; setting
124a1347418SPatrick Williamsthe `asserted` property to `true` would result in these actions in `id_front`
125a1347418SPatrick Williamsand `id_rear` physical LEDs.
126b1b4d261SWilliam A. Kennington III
127388b58f9SPatrick Williams1. Property `DutyOn` is set to `50` in;
128b1b4d261SWilliam A. Kennington III   `/xyz/openbmc/project/led/physical/id_front` and
129b1b4d261SWilliam A. Kennington III   `/xyz/openbmc/project/led/physical/id_rear`
130b1b4d261SWilliam A. Kennington III
131388b58f9SPatrick Williams2. Property `State` is set to `xyz.openbmc_project.Led.Physical.Action.On` in
132b1b4d261SWilliam A. Kennington III   `/xyz/openbmc/project/led/physical/id_front` and
133b1b4d261SWilliam A. Kennington III   `/xyz/openbmc/project/led/physical/id_rear`
134b1b4d261SWilliam A. Kennington III
135b1b4d261SWilliam A. Kennington IIIWhich means, if some test wants to verify if the action on Group really resulted
136b1b4d261SWilliam A. Kennington IIIin acting on physical LED, those are the properties to be read from physical
137b1b4d261SWilliam A. Kennington IIIservice.
138