|  | .. SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | ================================== | 
|  | _DSD Device Properties Usage Rules | 
|  | ================================== | 
|  |  | 
|  | Properties, Property Sets and Property Subsets | 
|  | ============================================== | 
|  |  | 
|  | The _DSD (Device Specific Data) configuration object, introduced in ACPI 5.1, | 
|  | allows any type of device configuration data to be provided via the ACPI | 
|  | namespace.  In principle, the format of the data may be arbitrary, but it has to | 
|  | be identified by a UUID which must be recognized by the driver processing the | 
|  | _DSD output.  However, there are generic UUIDs defined for _DSD recognized by | 
|  | the ACPI subsystem in the Linux kernel which automatically processes the data | 
|  | packages associated with them and makes those data available to device drivers | 
|  | as "device properties". | 
|  |  | 
|  | A device property is a data item consisting of a string key and a value (of a | 
|  | specific type) associated with it. | 
|  |  | 
|  | In the ACPI _DSD context it is an element of the sub-package following the | 
|  | generic Device Properties UUID in the _DSD return package as specified in the | 
|  | Device Properties UUID definition document [1]_. | 
|  |  | 
|  | It also may be regarded as the definition of a key and the associated data type | 
|  | that can be returned by _DSD in the Device Properties UUID sub-package for a | 
|  | given device. | 
|  |  | 
|  | A property set is a collection of properties applicable to a hardware entity | 
|  | like a device.  In the ACPI _DSD context it is the set of all properties that | 
|  | can be returned in the Device Properties UUID sub-package for the device in | 
|  | question. | 
|  |  | 
|  | Property subsets are nested collections of properties.  Each of them is | 
|  | associated with an additional key (name) allowing the subset to be referred | 
|  | to as a whole (and to be treated as a separate entity).  The canonical | 
|  | representation of property subsets is via the mechanism specified in the | 
|  | Hierarchical Properties Extension UUID definition document [2]_. | 
|  |  | 
|  | Property sets may be hierarchical.  That is, a property set may contain | 
|  | multiple property subsets that each may contain property subsets of its | 
|  | own and so on. | 
|  |  | 
|  | General Validity Rule for Property Sets | 
|  | ======================================= | 
|  |  | 
|  | Valid property sets must follow the guidance given by the Device Properties UUID | 
|  | definition document [1]. | 
|  |  | 
|  | _DSD properties are intended to be used in addition to, and not instead of, the | 
|  | existing mechanisms defined by the ACPI specification.  Therefore, as a rule, | 
|  | they should only be used if the ACPI specification does not make direct | 
|  | provisions for handling the underlying use case.  It generally is invalid to | 
|  | return property sets which do not follow that rule from _DSD in data packages | 
|  | associated with the Device Properties UUID. | 
|  |  | 
|  | Additional Considerations | 
|  | ------------------------- | 
|  |  | 
|  | There are cases in which, even if the general rule given above is followed in | 
|  | principle, the property set may still not be regarded as a valid one. | 
|  |  | 
|  | For example, that applies to device properties which may cause kernel code | 
|  | (either a device driver or a library/subsystem) to access hardware in a way | 
|  | possibly leading to a conflict with AML methods in the ACPI namespace.  In | 
|  | particular, that may happen if the kernel code uses device properties to | 
|  | manipulate hardware normally controlled by ACPI methods related to power | 
|  | management, like _PSx and _DSW (for device objects) or _ON and _OFF (for power | 
|  | resource objects), or by ACPI device disabling/enabling methods, like _DIS and | 
|  | _SRS. | 
|  |  | 
|  | In all cases in which kernel code may do something that will confuse AML as a | 
|  | result of using device properties, the device properties in question are not | 
|  | suitable for the ACPI environment and consequently they cannot belong to a valid | 
|  | property set. | 
|  |  | 
|  | Property Sets and Device Tree Bindings | 
|  | ====================================== | 
|  |  | 
|  | It often is useful to make _DSD return property sets that follow Device Tree | 
|  | bindings. | 
|  |  | 
|  | In those cases, however, the above validity considerations must be taken into | 
|  | account in the first place and returning invalid property sets from _DSD must be | 
|  | avoided.  For this reason, it may not be possible to make _DSD return a property | 
|  | set following the given DT binding literally and completely.  Still, for the | 
|  | sake of code re-use, it may make sense to provide as much of the configuration | 
|  | data as possible in the form of device properties and complement that with an | 
|  | ACPI-specific mechanism suitable for the use case at hand. | 
|  |  | 
|  | In any case, property sets following DT bindings literally should not be | 
|  | expected to automatically work in the ACPI environment regardless of their | 
|  | contents. | 
|  |  | 
|  | References | 
|  | ========== | 
|  |  | 
|  | .. [1] https://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf | 
|  | .. [2] https://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.1.pdf |