acpi/device: Add a helper function to write SoundWire _ADR
This change adds a help function to write a SoundWire ACPI address object that conforms to the SoundWire DisCo Specification Version 1.0 The SoundWire address structure is defined in include/device/soundwire.h and provides the properties that are used to form the _ADR object. BUG=b:146482091 Signed-off-by: Duncan Laurie <dlaurie@google.com> Change-Id: I6efbf52ce20b53f96d69efe2bf004b98dbe06552 Reviewed-on: https://review.coreboot.org/c/coreboot/+/40885 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
e8189b7426
commit
08a942fd32
|
@ -18,6 +18,7 @@
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
#include <device/pci_def.h>
|
#include <device/pci_def.h>
|
||||||
#include <device/pci_type.h>
|
#include <device/pci_type.h>
|
||||||
|
#include <device/soundwire.h>
|
||||||
|
|
||||||
static char *gencurrent;
|
static char *gencurrent;
|
||||||
|
|
||||||
|
@ -1885,3 +1886,30 @@ void acpigen_write_ADR_pci_device(const struct device *dev)
|
||||||
assert(dev->path.type == DEVICE_PATH_PCI);
|
assert(dev->path.type == DEVICE_PATH_PCI);
|
||||||
acpigen_write_ADR_pci_devfn(dev->path.pci.devfn);
|
acpigen_write_ADR_pci_devfn(dev->path.pci.devfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* acpigen_write_ADR_soundwire_device() - SoundWire ACPI Device Address Encoding.
|
||||||
|
* @address: SoundWire device address properties.
|
||||||
|
*
|
||||||
|
* From SoundWire Discovery and Configuration Specification Version 1.0 Table 3.
|
||||||
|
*
|
||||||
|
* 63..52 - Reserved (0)
|
||||||
|
* 51..48 - Zero-based SoundWire Link ID, relative to the immediate parent.
|
||||||
|
* Used when a Controller has multiple master devices, each producing a
|
||||||
|
* separate SoundWire Link. Set to 0 for single-link controllers.
|
||||||
|
* 47..0 - SoundWire Device ID Encoding from specification version 1.2 table 88
|
||||||
|
* 47..44 - SoundWire specification version that this device supports
|
||||||
|
* 43..40 - Unique ID for multiple devices
|
||||||
|
* 39..24 - MIPI standard manufacturer code
|
||||||
|
* 23..08 - Vendor defined part ID
|
||||||
|
* 07..00 - MIPI class encoding
|
||||||
|
*/
|
||||||
|
void acpigen_write_ADR_soundwire_device(const struct soundwire_address *address)
|
||||||
|
{
|
||||||
|
acpigen_write_ADR((((uint64_t)address->link_id & 0xf) << 48) |
|
||||||
|
(((uint64_t)address->version & 0xf) << 44) |
|
||||||
|
(((uint64_t)address->unique_id & 0xf) << 40) |
|
||||||
|
(((uint64_t)address->manufacturer_id & 0xffff) << 24) |
|
||||||
|
(((uint64_t)address->part_id & 0xffff) << 8) |
|
||||||
|
(((uint64_t)address->class & 0xff)));
|
||||||
|
}
|
||||||
|
|
|
@ -374,6 +374,8 @@ void acpigen_write_pld(const struct acpi_pld *pld);
|
||||||
void acpigen_write_ADR(uint64_t adr);
|
void acpigen_write_ADR(uint64_t adr);
|
||||||
void acpigen_write_ADR_pci_devfn(pci_devfn_t devfn);
|
void acpigen_write_ADR_pci_devfn(pci_devfn_t devfn);
|
||||||
void acpigen_write_ADR_pci_device(const struct device *dev);
|
void acpigen_write_ADR_pci_device(const struct device *dev);
|
||||||
|
struct soundwire_address;
|
||||||
|
void acpigen_write_ADR_soundwire_device(const struct soundwire_address *address);
|
||||||
/*
|
/*
|
||||||
* Generate ACPI AML code for _DSM method.
|
* Generate ACPI AML code for _DSM method.
|
||||||
* This function takes as input uuid for the device, set of callbacks and
|
* This function takes as input uuid for the device, set of callbacks and
|
||||||
|
|
Loading…
Reference in New Issue