From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: linux-acpi@vger.kernel.org, devicetree@vger.kernel.org,
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: Re: [PATCH v4 16/16] ACPI / DSD: Document references, ports and endpoints
Date: Tue, 14 Mar 2017 10:08:32 +0200 [thread overview]
Message-ID: <3df6ac2a-29cc-52b1-cc0c-4c1bc4198c83@linux.intel.com> (raw)
In-Reply-To: <1629581.fh46rNHz4U@aspire.rjw.lan>
Hi Rafael,
On 03/14/17 00:08, Rafael J. Wysocki wrote:
> On Monday, March 06, 2017 04:19:30 PM Sakari Ailus wrote:
>> 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
>
> s/represent represent/represents/
>
> Plus I would say "a port" and "an interface".
Fixed.
>
>> +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.
>
> So "port" should be the key, right?
How about this instead:
All port nodes are located under the device's "_DSD" node in the
hierarchical data extension tree. The property extension related to
each port node must contain the key "port" and an integer value which
is 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 } },
>
> Why indices and not the keys? Something like
>
> Package () { "remote-endpoint", Package () { \_SB.PCI0.I2C2.CAM0, "port0", "endpoint0" } },
>
> should work too and would be more flexible I suppose and less prone to errors.
I agree. I'm definitely for using human readable strings instead of
indices here. I'll change the implementation correspondingly.
>
>> + }
>> + })
>> + }
>> + }
>> +
>> +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.
>
> Thanks,
> Rafael
>
--
Kind regards,
Sakari Ailus
sakari.ailus@linux.intel.com
next prev parent reply other threads:[~2017-03-14 8:08 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-06 14:19 [PATCH v4 00/16] Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 02/16] device property: Add fwnode_get_parent() Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 03/16] ACPI / property: Add fwnode_get_next_child_node() Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 04/16] device property: Add fwnode_get_named_child_node() Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 06/16] device property: Add support for remote endpoints Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 08/16] of: Add of_fwnode_handle() to convert device nodes to fwnode_handle Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 10/16] irqchip/gic: Add missing forward declaration for struct device Sakari Ailus
2017-03-13 21:45 ` Rafael J. Wysocki
2017-03-06 14:19 ` [PATCH v4 11/16] of: No need to include linux/property.h, linux/fwnode.h is sufficient Sakari Ailus
2017-03-13 21:46 ` Rafael J. Wysocki
2017-03-15 13:58 ` Sakari Ailus
[not found] ` <1488809970-25568-1-git-send-email-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-03-06 14:19 ` [PATCH v4 01/16] ACPI / property: Add possiblity to retrieve parent firmware node Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 05/16] ACPI / property: Add support for remote endpoints Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 07/16] device property: Add fwnode_handle_get() Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 09/16] driver core: Arrange headers alphabetically Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 12/16] device property: Move dev_fwnode() to linux/property.h Sakari Ailus
2017-03-13 21:49 ` Rafael J. Wysocki
[not found] ` <5262143.K42JDpMSHF-yvgW3jdyMHm1GS7QM15AGw@public.gmane.org>
2017-03-14 7:28 ` Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 13/16] device property: Add support for fwnode endpoints Sakari Ailus
2017-03-13 21:52 ` Rafael J. Wysocki
2017-03-14 7:46 ` Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 14/16] of: Add nop implementation of of_get_next_parent() Sakari Ailus
2017-03-13 21:55 ` Rafael J. Wysocki
2017-03-17 12:10 ` Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 16/16] ACPI / DSD: Document references, ports and endpoints Sakari Ailus
2017-03-13 22:08 ` Rafael J. Wysocki
2017-03-14 8:08 ` Sakari Ailus [this message]
2017-03-14 8:09 ` Sakari Ailus
2017-03-14 17:05 ` Rafael J. Wysocki
[not found] ` <CAJZ5v0j1i-tNOdyhhknYCSPbOg7KAQpYgeReH_KwgebO3AcjRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-14 17:54 ` Sakari Ailus
[not found] ` <cf2ab8be-a351-f1ea-28a9-f5cca57061cd-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-03-14 20:43 ` Rafael J. Wysocki
[not found] ` <CAJZ5v0i4pEKkz+3Ob42x96YHpPWasH2O8VnDCz8aKw_wxywLyQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-14 21:16 ` Sakari Ailus
2017-03-14 22:11 ` Rafael J. Wysocki
[not found] ` <CAJZ5v0hCvcPgYYV0Hysfu0pEYCzzHp7KKdW3nYyjm7RGS3bHoQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-14 22:53 ` Sakari Ailus
2017-03-14 23:13 ` Rafael J. Wysocki
2017-03-15 8:23 ` Sakari Ailus
2017-03-15 9:33 ` Sakari Ailus
2017-03-15 11:28 ` Rafael J. Wysocki
[not found] ` <1595427.gxrcIpTbyD-yvgW3jdyMHm1GS7QM15AGw@public.gmane.org>
2017-03-15 11:45 ` Sakari Ailus
2017-03-15 11:53 ` Rafael J. Wysocki
2017-03-15 12:26 ` Sakari Ailus
[not found] ` <ceae0f71-dbac-36b8-f8df-fa138e6f24b2-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-03-15 14:21 ` Rafael J. Wysocki
2017-03-16 11:30 ` Sakari Ailus
2017-03-07 7:49 ` [PATCH v4 00/16] ACPI graph support Sakari Ailus
2017-03-07 13:23 ` Rafael J. Wysocki
2017-03-07 13:49 ` Sakari Ailus
2017-03-09 23:05 ` Rafael J. Wysocki
2017-03-10 8:19 ` Sakari Ailus
2017-03-06 14:19 ` [PATCH v4 15/16] device property: Add fwnode_get_next_parent() Sakari Ailus
2017-03-13 21:58 ` Rafael J. Wysocki
2017-03-14 7:51 ` Sakari Ailus
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=3df6ac2a-29cc-52b1-cc0c-4c1bc4198c83@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=rjw@rjwysocki.net \
--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).