From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-acpi@vger.kernel.org, devicetree@vger.kernel.org
Cc: sudeep.holla@arm.com, lorenzo.pieralisi@arm.com,
mika.westerberg@linux.intel.com, rafael@kernel.org,
mark.rutland@arm.com, broonie@kernel.org, robh@kernel.org,
ahs3@redhat.com
Subject: [PATCH v2 16/16] ACPI / DSD: Document references, ports and endpoints
Date: Thu, 2 Feb 2017 18:22:26 +0200 [thread overview]
Message-ID: <1486052546-19257-17-git-send-email-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <1486052546-19257-1-git-send-email-sakari.ailus@linux.intel.com>
Document the use of references into the hierarchical data extension
structure, as well as the use of port and endpoint concepts that are very
similar to those in Devicetree.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
Documentation/acpi/dsd/graph.txt | 164 +++++++++++++++++++++++++++++++++++++++
1 file changed, 164 insertions(+)
create mode 100644 Documentation/acpi/dsd/graph.txt
diff --git a/Documentation/acpi/dsd/graph.txt b/Documentation/acpi/dsd/graph.txt
new file mode 100644
index 0000000..6195936
--- /dev/null
+++ b/Documentation/acpi/dsd/graph.txt
@@ -0,0 +1,164 @@
+Graphs
+
+
+_DSD
+----
+
+_DSD (Device Specific Data) [7] is a predefined ACPI device
+configuration object that can be used to convey information on
+hardware features which are not specifically covered by the ACPI
+specification [1][6]. There are two _DSD extensions that are relevant
+for graphs: property [4] and hierarchical data extensions [5]. The
+property extension provides generic key-value pairs whereas the
+hierarchical data extension supports nodes with references to other
+nodes, forming a tree. The nodes in the tree may contain properties as
+defined by the property extension. The two extensions together provide
+a tree-like structure with zero or more properties (key-value pairs)
+in each node of the tree.
+
+The data structure may be accessed at runtime by using the device_*
+and fwnode_* functions defined in include/linux/fwnode.h .
+
+Fwnode represents a generic firmware node object. It is independent on
+the firmware type. In ACPI, fwnodes are _DSD hierarchical data
+extensions objects. A device's _DSD object is represented by an
+fwnode.
+
+The data structure may be referenced to elsewhere in the ACPI tables
+by using a hard reference to the device itself and an index to the
+hierarchical data extension array on each depth.
+
+
+Ports and endpoints
+-------------------
+
+The port and endpoint concepts are very similar to those in Devicetree
+[3]. The port represent represent interface in a device, and an
+endpoint represents a connection to that interface.
+
+All port nodes are located under the device's "_DSD" node in
+hierarchical data extension tree. The first package list entry of the
+hierarchical data extension related to each port node must begin with
+"port" string and must be followed by the number of the port.
+
+Further on, endpoints are located under the individual port nodes. The
+first hierarchical data extension package list entry of the endpoint
+nodes must begin with "endpoint" and must be followed by the number
+of the endpoint.
+
+Each port node contains a property extension key "port", the value of
+which is the number of the port node. The number of the endpoint node is
+the index of the endpoint node in the endpoint node array under the port
+node, starting from 0.
+
+The endpoint reference uses property extension with "remote-endpoint"
+property name followed by a reference in the same package. Such references
+consist of the name of the device, index of the port node and finally the
+index of the endpoint node. The port index is indeed index to the referred
+port array, not the number of the port that is related to numbering of
+actual hardware interfaces in the respective hardware. The endpoint nodes
+are always referred to using an index to the endpoint node array.
+Individual references thus appear as:
+
+ Package() { device, port_node_index, endpoint_node_index }
+
+The references to endpoints must be always done both ways, to the
+remote endpoint and back from the referred remote endpoint node.
+
+A simple example of this is show below:
+
+ Scope (\_SB.PCI0.I2C2)
+ {
+ Device (CAM0)
+ {
+ Name (_DSD, Package () {
+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package () {
+ Package () { "compatible", Package () { "nokia,smia" } },
+ },
+ ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
+ Package () {
+ Package () { "port0", "PRT0" },
+ }
+ })
+ Name (PRT0, Package() {
+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package () {
+ Package () { "port", 0 },
+ },
+ ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
+ Package () {
+ Package () { "endpoint0", "EP0" },
+ }
+ })
+ Name (EP0, Package() {
+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package () {
+ Package () { "remote-endpoint", Package() { \_SB.PCI0.ISP, 0, 0 } },
+ }
+ })
+ }
+ }
+
+ Scope (\_SB.PCI0)
+ {
+ Device (ISP)
+ {
+ Name (_DSD, Package () {
+ ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
+ Package () {
+ Package () { "port4", "PRT4" },
+ }
+ })
+
+ Name (PRT4, Package() {
+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package () {
+ Package () { "port", 4 }, /* CSI-2 port number */
+ },
+ ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
+ Package () {
+ Package () { "endpoint0", "EP0" },
+ }
+ })
+
+ Name (EP0, Package() {
+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package () {
+ Package () { "remote-endpoint", Package () { \_SB.PCI0.I2C2.CAM0, 0, 0 } },
+ }
+ })
+ }
+ }
+
+Here, the port 0 of the "CAM0" device is connected to the port 4 of
+the "ISP" device. Note that the port index in the reference is still
+0, as it refers to an entry in the table and not the port node number
+itself.
+
+
+References
+----------
+
+[1] _DSD (Device Specific Data) Implementation Guide.
+ <URL:http://www.uefi.org/sites/default/files/resources/_DSD-implementation-guide-toplevel-1_1.htm>,
+ referenced 2016-10-03.
+
+[2] Devicetree. <URL:http://www.devicetree.org>, referenced 2016-10-03.
+
+[3] Documentation/devicetree/bindings/graph.txt
+
+[4] Device Properties UUID For _DSD.
+ <URL:http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf>,
+ referenced 2016-10-04.
+
+[5] Hierarchical Data Extension UUID For _DSD.
+ <URL:http://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.pdf>,
+ referenced 2016-10-04.
+
+[6] Advanced Configuration and Power Interface Specification.
+ <URL:http://www.uefi.org/sites/default/files/resources/ACPI_6_1.pdf>,
+ referenced 2016-10-04.
+
+[7] _DSD Device Properties Usage Rules.
+ Documentation/acpi/DSD-properties-rules.txt
--
2.7.4
prev parent reply other threads:[~2017-02-02 16:23 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-02 16:22 [PATCH v2 00/16] ACPI graph support Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 01/16] ACPI / property: Add possiblity to retrieve parent firmware node Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 02/16] device property: Add fwnode_get_parent() Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 03/16] ACPI / property: Add fwnode_get_next_child_node() Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 04/16] device property: Add fwnode_get_named_child_node() Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 05/16] ACPI / property: Add support for remote endpoints Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 06/16] device " Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 08/16] of: Add of_fwnode_handle() to convert device nodes to fwnode_handle Sakari Ailus
[not found] ` <1486052546-19257-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-02-02 16:22 ` [PATCH v2 07/16] device property: Add fwnode_handle_get() Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 09/16] driver core: Arrange headers alphabetically Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 11/16] of: No need to include linux/property.h, linux/fwnode.h is sufficient Sakari Ailus
2017-02-20 10:37 ` [PATCH v2.1 " Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 10/16] irqchip/gic: Add missing forward declaration for struct device Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 12/16] device property: Obtain device's fwnode independently of FW type Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 13/16] device property: Get endpoint index from the ACPI tables Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 14/16] of: Add nop implementation of of_get_next_parent() Sakari Ailus
2017-02-02 16:22 ` [PATCH v2 15/16] device property: Add fwnode_get_next_parent() Sakari Ailus
2017-02-07 18:57 ` Al Stone
[not found] ` <9a481aec-92e6-ac01-b825-167bf73dfb11-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-02-08 11:50 ` Rafael J. Wysocki
[not found] ` <6293579.fEEljmGD4Z-yvgW3jdyMHm1GS7QM15AGw@public.gmane.org>
2017-02-08 12:19 ` Rafael J. Wysocki
[not found] ` <7605668.5ZxNsBFnEG-yvgW3jdyMHm1GS7QM15AGw@public.gmane.org>
2017-02-08 16:49 ` Al Stone
2017-02-14 8:01 ` Sakari Ailus
2017-02-14 17:09 ` Al Stone
2017-02-21 8:17 ` Sakari Ailus
[not found] ` <20170221081749.GC16975-S+BSfZ9RZZmRSg0ZkenSGLdO1Tsj/99ntUK59QYPAWc@public.gmane.org>
2017-02-21 23:00 ` Rafael J. Wysocki
2017-02-22 13:12 ` Sakari Ailus
2017-02-23 17:01 ` Sakari Ailus
2017-02-02 16:22 ` Sakari Ailus [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1486052546-19257-17-git-send-email-sakari.ailus@linux.intel.com \
--to=sakari.ailus@linux.intel.com \
--cc=ahs3@redhat.com \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=mika.westerberg@linux.intel.com \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=sudeep.holla@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).