From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Sudeep Holla <sudeep.holla@arm.com>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Mark Rutland <mark.rutland@arm.com>,
Mark Brown <broonie@kernel.org>, Rob Herring <robh@kernel.org>,
Al Stone <ahs3@redhat.com>
Subject: Re: [PATCH v4 16/16] ACPI / DSD: Document references, ports and endpoints
Date: Wed, 15 Mar 2017 14:26:28 +0200 [thread overview]
Message-ID: <ceae0f71-dbac-36b8-f8df-fa138e6f24b2@linux.intel.com> (raw)
In-Reply-To: <2016139.6kLz0hZfFG@aspire.rjw.lan>
On 03/15/17 13:53, Rafael J. Wysocki wrote:
> On Wednesday, March 15, 2017 01:45:48 PM Sakari Ailus wrote:
>> On 03/15/17 13:28, Rafael J. Wysocki wrote:
>>> On Wednesday, March 15, 2017 11:33:35 AM Sakari Ailus wrote:
>>>> On 03/15/17 10:23, Sakari Ailus wrote:
>>>>> On Wed, Mar 15, 2017 at 12:13:45AM +0100, Rafael J. Wysocki wrote:
>>>>>> On Tue, Mar 14, 2017 at 11:53 PM, Sakari Ailus
>>>>>> <sakari.ailus@linux.intel.com> wrote:
>>>>>>> Rafael J. Wysocki wrote:
>>>>>>>>
>>>>>>>> On Tue, Mar 14, 2017 at 10:16 PM, Sakari Ailus
>>>>>>>> <sakari.ailus@linux.intel.com> wrote:
>>>>>>>>>
>>>>>>>>> Rafael J. Wysocki wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Tue, Mar 14, 2017 at 6:54 PM, Sakari Ailus
>>>>>>>>>> <sakari.ailus@linux.intel.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi Rafael,
>>>>>>>>>>>
>>>>>>>>>>> Rafael J. Wysocki wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Mar 14, 2017 at 9:09 AM, Sakari Ailus
>>>>>>>>>>>> <sakari.ailus@linux.intel.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 03/14/17 10:08, Sakari Ailus wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 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.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> So with matching strings instead of indices, this will change, too...
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> It doesn't have to AFAICS, but the number is just redundant IMO. You
>>>>>>>>>>>> only need a boolean property saying "this is a port", so you know that
>>>>>>>>>>>> you should expect a list of endpoints in that object.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> No, it's not redundant. It's the number of the physical port in the
>>>>>>>>>>> device
>>>>>>>>>>> --- this is how the driver gets to know where the connection has been
>>>>>>>>>>> made.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> OK, but what exactly do you mean by "physical port"?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The device (or an IP block) has physical interfaces to the world outside.
>>>>>>>>> There could be just one, but there may be more. For an ISP, there could
>>>>>>>>> be
>>>>>>>>> e.g. four CSI-2 receivers to each of which you could connect a camera
>>>>>>>>> sensor. So for an ISP device, that number tells which of the receivers a
>>>>>>>>> given sensor is connected to.
>>>>>>>>>
>>>>>>>>> The mapping between this number and what the hardware datasheet refers to
>>>>>>>>> needs to be documented per device.
>>>>>>>>
>>>>>>>>
>>>>>>>> OK, so the number actually is an arbitrary piece of data associated
>>>>>>>> with the key "port" and the interpretation of that piece of data
>>>>>>>> depends on whoever asks for that value.
>>>>>>>>
>>>>>>>> IOW, the core doesn't care.
>>>>>>>>
>>>>>>>> With all due respect to whoever invented this on the DT side, this is
>>>>>>>> just bad design to me, because it causes the "port" property to serve
>>>>>>>> two different purposes at the same time. First, it tells the core
>>>>>>>> that this object is a port. Second, it is expected to provide a piece
>>>>>>>> of data of unspecified interpretation to somebody. Which means that
>>>>>>>> the "port" property is both general and device-specific at the same
>>>>>>>> time and the sanity of that is quite questionable IMO.
>>>>>>>
>>>>>>>
>>>>>>> DT uses a node called either "port" or "ports" to store the port nodes. The
>>>>>>> reg property tells the number of the port (see
>>>>>>> Documentation/devicetree/bindings/graph.txt). I'm no DT expert, but my
>>>>>>> understanding is that the node namespace is different from the property
>>>>>>> namespace.
>>>>>>
>>>>>> So on the DT side it actually looks OK to me.
>>>>>>
>>>>>> And the <reg> value is referred to as the port-endpoint identifier, so
>>>>>> I guess this is used for referring to the port/endpoint instead of an
>>>>>> index or the key value somewhere?
>>>>>
>>>>> The remote-endpoint uses phandles; they're a mechanism in DT to refer to
>>>>> different nodes in the tree (DT does not differentiate between devices and
>>>>> non-device nodes). There's a relatively good example here:
>>>>>
>>>>> arch/arm/boot/dts/omap3-n9.dts
>>>
>>> Yes, I figured that out. :-)
>>>
>>> Still, the <rev> property value is used for something somewhere in the code I gather.
>>>
>>>>>>
>>>>>>> If you're concerned of possible double meanings, it's entirely possible to
>>>>>>> put the port nodes under hierarchical data extension named e.g. "ports", and
>>>>>>> document that this is what the node must be called (single port node could
>>>>>>> be just called "port"). This way, it should be much more difficult to
>>>>>>> interpret a non-port node as a port node --- roughly equivalent of the DT
>>>>>>> ports node.
>>>>>>>
>>>>>>> The drawback with this change is that the size of the data structure in ASL
>>>>>>> (and AML) will grow.
>>>>>>
>>>>>> The "ports" thing would only be useful if we had the other properties
>>>>>> to put in there.
>>>>>>
>>>>>> So I guess we can specify that the "port" property value is the
>>>>>> identifier of the port and then we will use this in the
>>>>>> "remote-endpoint" property on the other end instead of an index.
>>>>>
>>>>> Makes sense.
>>>>>
>>>>>>
>>>>>> And analogously for the "enpoint" property value.
>>>>>
>>>>> The endpoint hierarchical data extension node name? There is no endpoint
>>>>> property being used by this version of the set anymore; I removed it as it
>>>>> was redundant. However a human readable endpoint node name can be chosen
>>>>> which that'd be quite practical to identify the endpoint.
>>>>>
>>>>> Then the remote-endpoint properties would be:
>>>>>
>>>>> Package () { device, port (integer), endpoint-node-name (string) }
>>>>>
>>>>
>>>> Oh, well... the device is present there already, so the endpoint
>>>> reference would well use an index pretty much equally well. Most of the
>>>> time it'll be zero anyway. I.e.
>>>>
>>>> Package() { device, port number (integer), endpoint id (integer }
>>>
>>> Yes, I would do that, and actually not using the index for the endpoint too.
>>>
>>> Let ports and endpoints be symmetrical in that respect, that is a port is
>>> required to have a { "port", id } property and an endpoind is required to
>>> have a { "endpoint", id } property and let the ids be used in
>>> "remote-endpoint" properties as per the above.
>>>
>>> Then, in each case, the id would be whatever the value of the <rev> property
>>> on the DT side would be.
>>
>> DT graphs only have port numbers, the endpoints are not referred to by
>> IDs --- just phandles. The closest equivalent we have in ACPI is a
>> device reference as far as I can tell, and this is why the port number
>> and some identifier for the endpoint is required.
>>
>> Adding a numeric ID for the endpoint is somewhat artificial. Most would
>> just have zero there as there are commonly only a single endpoint in a
>> port. And if there were more than one, one of the most sensible
>> approaches to number them would be a monotonically incrementing number
>> from zero --- which is the same than the index.
>>
>> So my view is that adding an endpoint property simply adds no value.
>
> But endpoints can have a <rev> property in DT. What is it used for then?
Ah, right. Indeed there's a reg property for endpoints as well --- I
forgot that because you can omit the property if its value is zero,
which is mostly the case for endpoints. The number after @ is used at
least to give a node a unique name. The custom is that the number is the
same than the value of the reg property.
The reg property of an endpoint node is stored in struct of_endpoint.id
when the endpoint is parsed for the port number and the endpoint ID but
I've never seen the endpoint ID being used. It's an identifier for
software to refer to in the remote-endpoint reference elsewhere, and
thus the array index could be used equally well IMHO.
--
Sakari Ailus
sakari.ailus@linux.intel.com
next prev parent reply other threads:[~2017-03-15 12:26 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
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 [this message]
[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=ceae0f71-dbac-36b8-f8df-fa138e6f24b2@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).