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