diff options
| author | causten <austenc@us.ibm.com> | 2017-06-22 16:26:23 -0500 |
|---|---|---|
| committer | causten <austenc@us.ibm.com> | 2017-07-11 09:14:49 -0500 |
| commit | 8f15c7f9eafc04e128164852a023c28a5db01cb4 (patch) | |
| tree | d25c69d5f12ccc0f6bca35d22fd399c776410fc0 | |
| parent | 12dc38512548a130956a30e7a9012f1ce818b976 (diff) | |
| download | openbmc-docs-8f15c7f9eafc04e128164852a023c28a5db01cb4.tar.gz openbmc-docs-8f15c7f9eafc04e128164852a023c28a5db01cb4.zip | |
How to add LED support for your system
List the steps needed to add LED management. Based off
of learnings from add Romulus
Change-Id: Ic99e9a44a60247082256b452a49a61073a53d471
Signed-off-By: Chris Austen <austenc@us.ibm.com>
| -rw-r--r-- | LED-architecture.md | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/LED-architecture.md b/LED-architecture.md new file mode 100644 index 0000000..cc9fdba --- /dev/null +++ b/LED-architecture.md @@ -0,0 +1,152 @@ +# LED Support for OpenBMC + +This document describes how to add LED support for your machine based upon the +OpenBMC +[LED Architecture](https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Led/README.md) +document. LED group management is done automatically for machines that support +the use of the MRW and is beyond the scope of this document. + +## D-Bus + +``` +Service xyx.openbmc_project.LED.GroupManager +Path /xyz/openbmc_project/led/groups/<label> +Interfaces xyz.openbmc_project.Led.Group + +Signals: none +Attribute: Asserted (boolean) +``` + +## REST + +``` +PUT /xyz/openbmc_project/led/groups/\<label\>/attr/Asserted +``` + +The LED group state can be changed by setting the Asserted value to boolean 0 or 1. +In the following example, the lamp_test group is being asserted... +``` + curl -b cjar -k -X PUT -H "Content-Type: application/json" -d '{"data": 1}' \ + https://bmc/xyz/openbmc_project/led/groups/lamp_test/attr/Asserted +``` + + +## Development Details +There are two significant layers for LED operations. The physical and the +logical. The LED Group Manager communicates with the physical LED Manager to +drive the physical LEDs. The logical groups are defined in the machine's +led.yaml file. LED Group manager consumes this and creates D-Bus/REST +interfaces for the individual LEDs that are part of the group. + +### Defining the physical LED + +Physical LED wiring is defined in the `leds` section of the machine's +[device tree](https://github.com/openbmc/linux/tree/dev-4.10/arch/arm/boot/dts). +See the +[Palmetto dts](https://github.com/openbmc/linux/blob/dev-4.10/arch/arm/boot/dts/aspeed-bmc-opp-palmetto.dts#L39) +as an example. + +_Add a fault LED to the device tree with a corresponding gpio pin..._ +``` + leds { + compatible = "gpio-leds"; + + fault { + gpios = <&gpio ASPEED_GPIO(N, 2) GPIO_ACTIVE_LOW>; + }; + } +``` + +_The kernel will then create..._ + +``` + ls -l /sys/class/leds/fault/ +total 0 +-rw-r--r-- 1 root root 4096 Jun 21 20:04 brightness +lrwxrwxrwx 1 root root 0 Jun 21 20:29 device -> ../../../leds +-r--r--r-- 1 root root 4096 Jun 21 20:29 max_brightness +drwxr-xr-x 2 root root 0 Jun 21 20:29 power +lrwxrwxrwx 1 root root 0 Jun 21 20:04 subsystem -> ../../../../../class/leds +-rw-r--r-- 1 root root 4096 Jun 21 20:04 trigger +-rw-r--r-- 1 root root 4096 Jun 21 20:04 uevent +``` + +### Defining Groups +A LED Group can contain zero or more LEDs and defined in the machines +[led.yaml](https://github.com/openbmc/phosphor-led-manager/blob/master/led.yaml). +The default one will likely need to be tailored to your machines layout. +Customized yaml files are placed into the machines specific Yocto location. As +an example.... + +``` +meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/recipes-phosphor/leds/palmetto-led-manager-config/led.yaml +``` + +The parent properties in the yaml file will be created below `/xyz/openbmc_project/led/groups/`. +The children properties need to map to an LED name in `/sys/class/leds`. + +In the example, below two URIs would be created: +`/xyz/openbmc_project/led/groups/enclosure_fault` and +`/xyz/openbmc_project/led/groups/lamp_test`. Both act on the same physical +LED `fault` but do so differently. The lamp_test would also drive a blink +signal to the physical `power` led if one was created. + + +``` +EnclosureFault: + fault: + Action: 'On' + DutyOn: 50 + Period: 0 +lamp_test: + fault: + Action: 'Blink' + DutyOn: 20 + Period: 100 + power: + Action: 'Blink' + DutyOn: 20 + Period: 100 + +``` + +### Required Groups +OpenBMC Architecture requires specific LED Groups to be created and are +documented in the +[dbus interface](https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Led/README.md) + + +## Yocto packaging +1. Create a tailored LED manager file + +`meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/leds/romulus-led-manager-config-native.bb` +``` +SUMMARY = "Phosphor LED Group Management for Romulus" +PR = "r1" + +inherit native +inherit obmc-phosphor-utils +inherit obmc-phosphor-license + +PROVIDES += "virtual/phosphor-led-manager-config-native" + +SRC_URI += "file://led.yaml" +S = "${WORKDIR}" + +# Overwrites the default led.yaml +do_install() { + SRC=${S} + DEST=${D}${datadir}/phosphor-led-manager + install -D ${SRC}/led.yaml ${DEST}/led.yaml +} +``` +2. Change your machine's peferred provider for the led-manager in the conf file + +_i.e. meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/conf/machine/romulus.conf_ + +`PREFERRED_PROVIDER_virtual/phosphor-led-manager-config-native = "romulus-led-manager-config-native"` + + + +## Additional Reading +D-Bus Interfaces [Managing LED groups](https://github.com/openbmc/phosphor-dbus-interfaces/tree/master/xyz/openbmc_project/Led/README.md) |

