xref: /freebsd/sys/contrib/device-tree/Bindings/access-controllers/access-controllers.yaml (revision 7d0873ebb83b19ba1e8a89e679470d885efe12e3)
1*7d0873ebSEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*7d0873ebSEmmanuel Vadot%YAML 1.2
3*7d0873ebSEmmanuel Vadot---
4*7d0873ebSEmmanuel Vadot$id: http://devicetree.org/schemas/access-controllers/access-controllers.yaml#
5*7d0873ebSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6*7d0873ebSEmmanuel Vadot
7*7d0873ebSEmmanuel Vadottitle: Generic Domain Access Controllers
8*7d0873ebSEmmanuel Vadot
9*7d0873ebSEmmanuel Vadotmaintainers:
10*7d0873ebSEmmanuel Vadot  - Oleksii Moisieiev <oleksii_moisieiev@epam.com>
11*7d0873ebSEmmanuel Vadot
12*7d0873ebSEmmanuel Vadotdescription: |+
13*7d0873ebSEmmanuel Vadot  Common access controllers properties
14*7d0873ebSEmmanuel Vadot
15*7d0873ebSEmmanuel Vadot  Access controllers are in charge of stating which of the hardware blocks under
16*7d0873ebSEmmanuel Vadot  their responsibility (their domain) can be accesssed by which compartment. A
17*7d0873ebSEmmanuel Vadot  compartment can be a cluster of CPUs (or coprocessors), a range of addresses
18*7d0873ebSEmmanuel Vadot  or a group of hardware blocks. An access controller's domain is the set of
19*7d0873ebSEmmanuel Vadot  resources covered by the access controller.
20*7d0873ebSEmmanuel Vadot
21*7d0873ebSEmmanuel Vadot  This device tree binding can be used to bind devices to their access
22*7d0873ebSEmmanuel Vadot  controller provided by access-controllers property. In this case, the device
23*7d0873ebSEmmanuel Vadot  is a consumer and the access controller is the provider.
24*7d0873ebSEmmanuel Vadot
25*7d0873ebSEmmanuel Vadot  An access controller can be represented by any node in the device tree and
26*7d0873ebSEmmanuel Vadot  can provide one or more configuration parameters, needed to control parameters
27*7d0873ebSEmmanuel Vadot  of the consumer device. A consumer node can refer to the provider by phandle
28*7d0873ebSEmmanuel Vadot  and a set of phandle arguments, specified by '#access-controller-cells'
29*7d0873ebSEmmanuel Vadot  property in the access controller node.
30*7d0873ebSEmmanuel Vadot
31*7d0873ebSEmmanuel Vadot  Access controllers are typically used to set/read the permissions of a
32*7d0873ebSEmmanuel Vadot  hardware block and grant access to it. Any of which depends on the access
33*7d0873ebSEmmanuel Vadot  controller. The capabilities of each access controller are defined by the
34*7d0873ebSEmmanuel Vadot  binding of the access controller device.
35*7d0873ebSEmmanuel Vadot
36*7d0873ebSEmmanuel Vadot  Each node can be a consumer for the several access controllers.
37*7d0873ebSEmmanuel Vadot
38*7d0873ebSEmmanuel Vadot# always select the core schema
39*7d0873ebSEmmanuel Vadotselect: true
40*7d0873ebSEmmanuel Vadot
41*7d0873ebSEmmanuel Vadotproperties:
42*7d0873ebSEmmanuel Vadot  "#access-controller-cells":
43*7d0873ebSEmmanuel Vadot    description:
44*7d0873ebSEmmanuel Vadot      Number of cells in an access-controllers specifier;
45*7d0873ebSEmmanuel Vadot      Can be any value as specified by device tree binding documentation
46*7d0873ebSEmmanuel Vadot      of a particular provider. The node is an access controller.
47*7d0873ebSEmmanuel Vadot
48*7d0873ebSEmmanuel Vadot  access-controller-names:
49*7d0873ebSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/string-array
50*7d0873ebSEmmanuel Vadot    description:
51*7d0873ebSEmmanuel Vadot      A list of access-controllers names, sorted in the same order as
52*7d0873ebSEmmanuel Vadot      access-controllers entries. Consumer drivers will use
53*7d0873ebSEmmanuel Vadot      access-controller-names to match with existing access-controllers entries.
54*7d0873ebSEmmanuel Vadot
55*7d0873ebSEmmanuel Vadot  access-controllers:
56*7d0873ebSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/phandle-array
57*7d0873ebSEmmanuel Vadot    description:
58*7d0873ebSEmmanuel Vadot      A list of access controller specifiers, as defined by the
59*7d0873ebSEmmanuel Vadot      bindings of the access-controllers provider.
60*7d0873ebSEmmanuel Vadot
61*7d0873ebSEmmanuel VadotadditionalProperties: true
62*7d0873ebSEmmanuel Vadot
63*7d0873ebSEmmanuel Vadotexamples:
64*7d0873ebSEmmanuel Vadot  - |
65*7d0873ebSEmmanuel Vadot    clock_controller: access-controllers@50000 {
66*7d0873ebSEmmanuel Vadot        reg = <0x50000 0x400>;
67*7d0873ebSEmmanuel Vadot        #access-controller-cells = <2>;
68*7d0873ebSEmmanuel Vadot    };
69*7d0873ebSEmmanuel Vadot
70*7d0873ebSEmmanuel Vadot    bus_controller: bus@60000 {
71*7d0873ebSEmmanuel Vadot        reg = <0x60000 0x10000>;
72*7d0873ebSEmmanuel Vadot        #address-cells = <1>;
73*7d0873ebSEmmanuel Vadot        #size-cells = <1>;
74*7d0873ebSEmmanuel Vadot        ranges;
75*7d0873ebSEmmanuel Vadot        #access-controller-cells = <3>;
76*7d0873ebSEmmanuel Vadot
77*7d0873ebSEmmanuel Vadot        uart4: serial@60100 {
78*7d0873ebSEmmanuel Vadot            reg = <0x60100 0x400>;
79*7d0873ebSEmmanuel Vadot            clocks = <&clk_serial>;
80*7d0873ebSEmmanuel Vadot            access-controllers = <&clock_controller 1 2>,
81*7d0873ebSEmmanuel Vadot                                 <&bus_controller 1 3 5>;
82*7d0873ebSEmmanuel Vadot            access-controller-names = "clock", "bus";
83*7d0873ebSEmmanuel Vadot        };
84*7d0873ebSEmmanuel Vadot    };
85