mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
fed8b7e366
Shared mailboxes are a mechanism to transport data from one processor in the system to another. They are bidirectional links with both a producer and a consumer. Interrupts are used to let the consumer know when data was written to the mailbox by the producer, and to let the producer know when the consumer has read the data from the mailbox. These interrupts are mapped to one or more "shared interrupts". Typically each processor in the system owns one of these shared interrupts. Add documentation to the device tree bindings about how clients can use mailbox specifiers to request a specific shared mailbox and select which direction they drive. Also document how to specify the shared interrupts in addition to the existing doorbell interrupt. Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com> Acked-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-by: Rob Herring <robh@kernel.org> Acked-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
73 lines
2.6 KiB
Plaintext
73 lines
2.6 KiB
Plaintext
NVIDIA Tegra Hardware Synchronization Primitives (HSP)
|
|
|
|
The HSP modules are used 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 primitives, when operating between
|
|
two processors not in an SMP relationship.
|
|
|
|
The features that HSP supported are shared mailboxes, shared semaphores,
|
|
arbitrated semaphores and doorbells.
|
|
|
|
Required properties:
|
|
- name : Should be hsp
|
|
- compatible
|
|
Array of strings.
|
|
one of:
|
|
- "nvidia,tegra186-hsp"
|
|
- "nvidia,tegra194-hsp", "nvidia,tegra186-hsp"
|
|
- reg : Offset and length of the register set for the device.
|
|
- interrupt-names
|
|
Array of strings.
|
|
Contains a list of names for the interrupts described by the interrupt
|
|
property. May contain the following entries, in any order:
|
|
- "doorbell"
|
|
- "sharedN", where 'N' is a number from zero up to the number of
|
|
external interrupts supported by the HSP instance minus one.
|
|
Users of this binding MUST look up entries in the interrupt property
|
|
by name, using this interrupt-names property to do so.
|
|
- interrupts
|
|
Array of interrupt specifiers.
|
|
Must contain one entry per entry in the interrupt-names property,
|
|
in a matching order.
|
|
- #mbox-cells : Should be 2.
|
|
|
|
The mbox specifier of the "mboxes" property in the client node should contain
|
|
two cells. The first cell determines the HSP type and the second cell is used
|
|
to identify the mailbox that the client is going to use.
|
|
|
|
For doorbells, the second cell specifies the index of the doorbell to use.
|
|
|
|
For shared mailboxes, the second cell is composed of two fields:
|
|
- bits 31..24:
|
|
A bit mask of flags that further specify how the shared mailbox will be
|
|
used. Valid flags are:
|
|
- bit 31:
|
|
Defines the direction of the mailbox. If set, the mailbox will be used
|
|
as a producer (i.e. used to send data). If cleared, the mailbox is the
|
|
consumer of data sent by a producer.
|
|
|
|
- bits 23.. 0:
|
|
The index of the shared mailbox to use. The number of available mailboxes
|
|
may vary by instance of the HSP block and SoC generation.
|
|
|
|
The following file contains definitions that can be used to construct mailbox
|
|
specifiers:
|
|
|
|
<dt-bindings/mailbox/tegra186-hsp.h>
|
|
|
|
Example:
|
|
|
|
hsp_top0: hsp@3c00000 {
|
|
compatible = "nvidia,tegra186-hsp";
|
|
reg = <0x0 0x03c00000 0x0 0xa0000>;
|
|
interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
|
|
interrupt-names = "doorbell";
|
|
#mbox-cells = <2>;
|
|
};
|
|
|
|
client {
|
|
...
|
|
mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_XXX>;
|
|
};
|