David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ================================== |
| 4 | _DSD Device Properties Usage Rules |
| 5 | ================================== |
| 6 | |
| 7 | Properties, Property Sets and Property Subsets |
| 8 | ============================================== |
| 9 | |
| 10 | The _DSD (Device Specific Data) configuration object, introduced in ACPI 5.1, |
| 11 | allows any type of device configuration data to be provided via the ACPI |
| 12 | namespace. In principle, the format of the data may be arbitrary, but it has to |
| 13 | be identified by a UUID which must be recognized by the driver processing the |
| 14 | _DSD output. However, there are generic UUIDs defined for _DSD recognized by |
| 15 | the ACPI subsystem in the Linux kernel which automatically processes the data |
| 16 | packages associated with them and makes those data available to device drivers |
| 17 | as "device properties". |
| 18 | |
| 19 | A device property is a data item consisting of a string key and a value (of a |
| 20 | specific type) associated with it. |
| 21 | |
| 22 | In the ACPI _DSD context it is an element of the sub-package following the |
| 23 | generic Device Properties UUID in the _DSD return package as specified in the |
| 24 | Device Properties UUID definition document [1]_. |
| 25 | |
| 26 | It also may be regarded as the definition of a key and the associated data type |
| 27 | that can be returned by _DSD in the Device Properties UUID sub-package for a |
| 28 | given device. |
| 29 | |
| 30 | A property set is a collection of properties applicable to a hardware entity |
| 31 | like a device. In the ACPI _DSD context it is the set of all properties that |
| 32 | can be returned in the Device Properties UUID sub-package for the device in |
| 33 | question. |
| 34 | |
| 35 | Property subsets are nested collections of properties. Each of them is |
| 36 | associated with an additional key (name) allowing the subset to be referred |
| 37 | to as a whole (and to be treated as a separate entity). The canonical |
| 38 | representation of property subsets is via the mechanism specified in the |
| 39 | Hierarchical Properties Extension UUID definition document [2]_. |
| 40 | |
| 41 | Property sets may be hierarchical. That is, a property set may contain |
| 42 | multiple property subsets that each may contain property subsets of its |
| 43 | own and so on. |
| 44 | |
| 45 | General Validity Rule for Property Sets |
| 46 | ======================================= |
| 47 | |
| 48 | Valid property sets must follow the guidance given by the Device Properties UUID |
| 49 | definition document [1]. |
| 50 | |
| 51 | _DSD properties are intended to be used in addition to, and not instead of, the |
| 52 | existing mechanisms defined by the ACPI specification. Therefore, as a rule, |
| 53 | they should only be used if the ACPI specification does not make direct |
| 54 | provisions for handling the underlying use case. It generally is invalid to |
| 55 | return property sets which do not follow that rule from _DSD in data packages |
| 56 | associated with the Device Properties UUID. |
| 57 | |
| 58 | Additional Considerations |
| 59 | ------------------------- |
| 60 | |
| 61 | There are cases in which, even if the general rule given above is followed in |
| 62 | principle, the property set may still not be regarded as a valid one. |
| 63 | |
| 64 | For example, that applies to device properties which may cause kernel code |
| 65 | (either a device driver or a library/subsystem) to access hardware in a way |
| 66 | possibly leading to a conflict with AML methods in the ACPI namespace. In |
| 67 | particular, that may happen if the kernel code uses device properties to |
| 68 | manipulate hardware normally controlled by ACPI methods related to power |
| 69 | management, like _PSx and _DSW (for device objects) or _ON and _OFF (for power |
| 70 | resource objects), or by ACPI device disabling/enabling methods, like _DIS and |
| 71 | _SRS. |
| 72 | |
| 73 | In all cases in which kernel code may do something that will confuse AML as a |
| 74 | result of using device properties, the device properties in question are not |
| 75 | suitable for the ACPI environment and consequently they cannot belong to a valid |
| 76 | property set. |
| 77 | |
| 78 | Property Sets and Device Tree Bindings |
| 79 | ====================================== |
| 80 | |
| 81 | It often is useful to make _DSD return property sets that follow Device Tree |
| 82 | bindings. |
| 83 | |
| 84 | In those cases, however, the above validity considerations must be taken into |
| 85 | account in the first place and returning invalid property sets from _DSD must be |
| 86 | avoided. For this reason, it may not be possible to make _DSD return a property |
| 87 | set following the given DT binding literally and completely. Still, for the |
| 88 | sake of code re-use, it may make sense to provide as much of the configuration |
| 89 | data as possible in the form of device properties and complement that with an |
| 90 | ACPI-specific mechanism suitable for the use case at hand. |
| 91 | |
| 92 | In any case, property sets following DT bindings literally should not be |
| 93 | expected to automatically work in the ACPI environment regardless of their |
| 94 | contents. |
| 95 | |
| 96 | References |
| 97 | ========== |
| 98 | |
| 99 | .. [1] http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf |
| 100 | .. [2] http://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.1.pdf |