On 06/27/2016 11:55 PM, Stephen Warren wrote:
On 06/27/2016 03:02 AM, Joseph Lo wrote:
Add DT binding for the Hardware Synchronization Primitives (HSP). The
HSP is designed for the processors to share resources and communicate
together. It provides a set of hardware synchronization primitives for
interprocessor communication. So the interprocessor communication (IPC)
protocols can use hardware synchronization primitive, when operating
between two processors not in an SMP relationship.
This binding is quite different to the binding you sent to internal IP
review. I wonder why it changed? Specific comments below:
Due to some enhancements for supporting multiple functions of HSP
sub-modules in the same driver, I re-wrote some parts of the bindings
and driver.
diff --git
a/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt
b/Documentation/devicetree/bindings/mailbox/nvidia,tegra186-hsp.txt
>+- reg : Offset and length of the register set for the device
+- interrupts : Should contain the HSP interrupts
+- interrupt-names: Should contain the names of the HSP interrupts
that the
+ client are using.
+ "doorbell"
The binding should describe the HW, and not be affected by anything
"that the client(s) are using". If there are multiple interrupts, we
should list them all here, from the start.
When revising this, I would consider the following wording canonical:
- interrupt-names
Array of strings.
Contains a list of names for the interrupts described by the
interrupts property. May contain the following entries, in any
order:
- "doorbell"
- "..." (no doubt many more items will be listed here, e.g.
for semaphores, etc.).
I think I will just list "doorbell" for now. And adding more later once
we add other HSP sub-module support.
+- nvidia,hsp-function : Specifies one of the HSP functions that the HSP unit
+ will be supported. The function ID can be found in the
+ header file <dt-bindings/mailbox/tegra-hsp.h>.
This property wasn't in the internal patch.
This doesn't make sense. The HW feature-set is fixed. This sounds like
some kind of software configuration option, or a way to allow different
drivers to handle different aspects of the HW? In general, the binding
shouldn't be influenced by software structure. Please delete this
property.
Now, if you're attempting to set up a binding where each function
(semaphores, shared mailboxes, doorbells, etc.) has a different DT node,
then (a) splitting up HW modules into sub-blocks has usually turned out
to be a mistake in the past, and (b) the differences should likely be
represented by using a different compatible property for each
sub-component, rather than via a custom property.
Currently the usage of HSP HW in the downstream kernel is something like
the model below.
remote_processor_A-\
remote_processor_B--->hsp@1000 (doorbell func) <-> host CPU
remote_processor_C-/
remote_processor_D -> hsp@2000 (shared mailbox) <-> CPU
remote_processor_E -> hsp@3000 (shared mailbox) <-> CPU
I am thinking if we can just add the appropriate compatible strings for
it to replace "nvidia,tegra186-hsp". e.g. "nvidia,tegra186-hsp-doorbell"
and "nvidia,tegra186-hsp-sharedmailbox". So the driver can probe and
initialize correctly depend on the compatible property. How do you think
about it? Is this the same as the (b) you mentioned above?