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