mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Introducing of the generic access controllers bindings for the access controller provider and consumer devices. Those bindings are intended to allow a better handling of accesses to resources in a hardware architecture supporting several compartments. This patch is based on [1]. It is integrated in this patchset as it provides a use-case for it. Diffs with [1]: - Rename feature-domain* properties to access-control* to narrow down the scope of the binding - YAML errors and typos corrected. - Example updated - Some rephrasing in the binding description [1]: https://lore.kernel.org/lkml/0c0a82bb-18ae-d057-562b Signed-off-by: Oleksii Moisieiev <Oleksii_Moisieiev@epam.com> Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com> Reviewed-by: Rob Herring <robh@kernel.org> Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
84 lines
3 KiB
YAML
84 lines
3 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/access-controllers/access-controllers.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Generic Domain Access Controllers
|
|
|
|
maintainers:
|
|
- Oleksii Moisieiev <oleksii_moisieiev@epam.com>
|
|
|
|
description: |+
|
|
Common access controllers properties
|
|
|
|
Access controllers are in charge of stating which of the hardware blocks under
|
|
their responsibility (their domain) can be accesssed by which compartment. A
|
|
compartment can be a cluster of CPUs (or coprocessors), a range of addresses
|
|
or a group of hardware blocks. An access controller's domain is the set of
|
|
resources covered by the access controller.
|
|
|
|
This device tree binding can be used to bind devices to their access
|
|
controller provided by access-controllers property. In this case, the device
|
|
is a consumer and the access controller is the provider.
|
|
|
|
An access controller can be represented by any node in the device tree and
|
|
can provide one or more configuration parameters, needed to control parameters
|
|
of the consumer device. A consumer node can refer to the provider by phandle
|
|
and a set of phandle arguments, specified by '#access-controller-cells'
|
|
property in the access controller node.
|
|
|
|
Access controllers are typically used to set/read the permissions of a
|
|
hardware block and grant access to it. Any of which depends on the access
|
|
controller. The capabilities of each access controller are defined by the
|
|
binding of the access controller device.
|
|
|
|
Each node can be a consumer for the several access controllers.
|
|
|
|
# always select the core schema
|
|
select: true
|
|
|
|
properties:
|
|
"#access-controller-cells":
|
|
description:
|
|
Number of cells in an access-controllers specifier;
|
|
Can be any value as specified by device tree binding documentation
|
|
of a particular provider. The node is an access controller.
|
|
|
|
access-controller-names:
|
|
$ref: /schemas/types.yaml#/definitions/string-array
|
|
description:
|
|
A list of access-controllers names, sorted in the same order as
|
|
access-controllers entries. Consumer drivers will use
|
|
access-controller-names to match with existing access-controllers entries.
|
|
|
|
access-controllers:
|
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
|
description:
|
|
A list of access controller specifiers, as defined by the
|
|
bindings of the access-controllers provider.
|
|
|
|
additionalProperties: true
|
|
|
|
examples:
|
|
- |
|
|
clock_controller: access-controllers@50000 {
|
|
reg = <0x50000 0x400>;
|
|
#access-controller-cells = <2>;
|
|
};
|
|
|
|
bus_controller: bus@60000 {
|
|
reg = <0x60000 0x10000>;
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
ranges;
|
|
#access-controller-cells = <3>;
|
|
|
|
uart4: serial@60100 {
|
|
reg = <0x60100 0x400>;
|
|
clocks = <&clk_serial>;
|
|
access-controllers = <&clock_controller 1 2>,
|
|
<&bus_controller 1 3 5>;
|
|
access-controller-names = "clock", "bus";
|
|
};
|
|
};
|