[coreboot-gerrit] Patch merged into coreboot/master: acpi_device: Add support for writing ACPI Device Properties

gerrit at coreboot.org gerrit at coreboot.org
Sat May 28 03:49:14 CEST 2016


the following patch was just integrated into master:
commit 559e947306d9a8684f7c0879c122a9b3b3f87c16
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Tue May 10 13:18:17 2016 -0700

    acpi_device: Add support for writing ACPI Device Properties
    
    The recent ACPI specification extensions have formally defined a
    method for describing device information with a key=value format that
    is modeled after the Devicetree/DTS format using a special crafted
    object named _DSD with a specific UUID for this format.
    
    There are three defined Device Property types: Integers, Strings, and
    References.  It is also possible to have arrays of these properties
    under one key=value pair.  Strings and References are both represented
    as character arrays but result in different generated ACPI OpCodes.
    
    Various helpers are provided for writing the Device Property header
    (to fill in the object name and UUID) and footer (to fill in the
    property count and device length values) as well as for writing the
    different Device Property types.  A specific helper is provided for
    writing the defined GPIO binding Device Property that is used to allow
    GPIOs to be referred to by name rather than resource index.
    
    This is all documented in the _DSD Device Properties UUID document:
    http://uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf
    
    This will be used by device drivers to provide device properties that
    are consumed by the operating system.  Devicetree bindings are often
    described in the linux kernel at Documentation/devicetree/bindings/
    
    A sample driver here has an input GPIO that it needs to describe to
    the kernel driver:
    
    chip.h:
      struct drivers_generic_sample_config {
        struct acpi_gpio mode_gpio;
      };
    
    sample.c:
      static void acpi_fill_ssdt_generator(struct device *dev) {
        struct drivers_generic_sample_config *config = dev->chip_info;
        const char *path = acpi_device_path(dev);
        ...
        acpi_device_write_gpio(&config->mode_gpio);
        ...
        acpi_dp_write_header();
        acpi_dp_write_gpio("mode-gpio", path, 0, 0, 0);
        acpi_dp_write_footer();
        ...
      }
    
    devicetree.cb:
      device pci 1f.0 on
        chip drivers/generic/sample
          register "mode_gpio" = "ACPI_GPIO_INPUT(GPP_B1)"
          device generic 0 on end
        end
      end
    
    SSDT.dsl:
      Name (_CRS, ResourceTemplate () {
        GpioIo (Exclusive, PullDefault, 0, 0, IoRestrictionInputOnly,
                "\\_SB.PCI0.GPIO", 0, ResourceConsumer) { 25 }
      })
      Name (_DSD, Package () {
        ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
        Package () {
          Package () {"mode-gpio", Package () { \_SB.PCI0.LPCB, 0, 0, 1 }}
        }
      })
    
    Change-Id: I93ffd09e59d05c09e38693e221a87085469be3ad
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
    Reviewed-on: https://review.coreboot.org/14937
    Tested-by: build bot (Jenkins)
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>


See https://review.coreboot.org/14937 for details.

-gerrit



More information about the coreboot-gerrit mailing list