|  | .. SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | ===================================== | 
|  | Generic System Interconnect Subsystem | 
|  | ===================================== | 
|  |  | 
|  | Introduction | 
|  | ------------ | 
|  |  | 
|  | This framework is designed to provide a standard kernel interface to control | 
|  | the settings of the interconnects on an SoC. These settings can be throughput, | 
|  | latency and priority between multiple interconnected devices or functional | 
|  | blocks. This can be controlled dynamically in order to save power or provide | 
|  | maximum performance. | 
|  |  | 
|  | The interconnect bus is hardware with configurable parameters, which can be | 
|  | set on a data path according to the requests received from various drivers. | 
|  | An example of interconnect buses are the interconnects between various | 
|  | components or functional blocks in chipsets. There can be multiple interconnects | 
|  | on an SoC that can be multi-tiered. | 
|  |  | 
|  | Below is a simplified diagram of a real-world SoC interconnect bus topology. | 
|  |  | 
|  | :: | 
|  |  | 
|  | +----------------+    +----------------+ | 
|  | | HW Accelerator |--->|      M NoC     |<---------------+ | 
|  | +----------------+    +----------------+                | | 
|  | |      |                    +------------+ | 
|  | +-----+  +-------------+      V       +------+     |            | | 
|  | | DDR |  |                +--------+  | PCIe |     |            | | 
|  | +-----+  |                | Slaves |  +------+     |            | | 
|  | ^ ^    |                +--------+     |         |   C NoC    | | 
|  | | |    V                               V         |            | | 
|  | +------------------+   +------------------------+   |            |   +-----+ | 
|  | |                  |-->|                        |-->|            |-->| CPU | | 
|  | |                  |-->|                        |<--|            |   +-----+ | 
|  | |     Mem NoC      |   |         S NoC          |   +------------+ | 
|  | |                  |<--|                        |---------+    | | 
|  | |                  |<--|                        |<------+ |    |   +--------+ | 
|  | +------------------+   +------------------------+       | |    +-->| Slaves | | 
|  | ^  ^    ^    ^          ^                             | |        +--------+ | 
|  | |  |    |    |          |                             | V | 
|  | +------+  |  +-----+   +-----+  +---------+   +----------------+   +--------+ | 
|  | | CPUs |  |  | GPU |   | DSP |  | Masters |-->|       P NoC    |-->| Slaves | | 
|  | +------+  |  +-----+   +-----+  +---------+   +----------------+   +--------+ | 
|  | | | 
|  | +-------+ | 
|  | | Modem | | 
|  | +-------+ | 
|  |  | 
|  | Terminology | 
|  | ----------- | 
|  |  | 
|  | Interconnect provider is the software definition of the interconnect hardware. | 
|  | The interconnect providers on the above diagram are M NoC, S NoC, C NoC, P NoC | 
|  | and Mem NoC. | 
|  |  | 
|  | Interconnect node is the software definition of the interconnect hardware | 
|  | port. Each interconnect provider consists of multiple interconnect nodes, | 
|  | which are connected to other SoC components including other interconnect | 
|  | providers. The point on the diagram where the CPUs connect to the memory is | 
|  | called an interconnect node, which belongs to the Mem NoC interconnect provider. | 
|  |  | 
|  | Interconnect endpoints are the first or the last element of the path. Every | 
|  | endpoint is a node, but not every node is an endpoint. | 
|  |  | 
|  | Interconnect path is everything between two endpoints including all the nodes | 
|  | that have to be traversed to reach from a source to destination node. It may | 
|  | include multiple master-slave pairs across several interconnect providers. | 
|  |  | 
|  | Interconnect consumers are the entities which make use of the data paths exposed | 
|  | by the providers. The consumers send requests to providers requesting various | 
|  | throughput, latency and priority. Usually the consumers are device drivers, that | 
|  | send request based on their needs. An example for a consumer is a video decoder | 
|  | that supports various formats and image sizes. | 
|  |  | 
|  | Interconnect providers | 
|  | ---------------------- | 
|  |  | 
|  | Interconnect provider is an entity that implements methods to initialize and | 
|  | configure interconnect bus hardware. The interconnect provider drivers should | 
|  | be registered with the interconnect provider core. | 
|  |  | 
|  | .. kernel-doc:: include/linux/interconnect-provider.h | 
|  |  | 
|  | Interconnect consumers | 
|  | ---------------------- | 
|  |  | 
|  | Interconnect consumers are the clients which use the interconnect APIs to | 
|  | get paths between endpoints and set their bandwidth/latency/QoS requirements | 
|  | for these interconnect paths.  These interfaces are not currently | 
|  | documented. | 
|  |  | 
|  | Interconnect debugfs interfaces | 
|  | ------------------------------- | 
|  |  | 
|  | Like several other subsystems interconnect will create some files for debugging | 
|  | and introspection. Files in debugfs are not considered ABI so application | 
|  | software shouldn't rely on format details change between kernel versions. | 
|  |  | 
|  | ``/sys/kernel/debug/interconnect/interconnect_summary``: | 
|  |  | 
|  | Show all interconnect nodes in the system with their aggregated bandwidth | 
|  | request. Indented under each node show bandwidth requests from each device. | 
|  |  | 
|  | ``/sys/kernel/debug/interconnect/interconnect_graph``: | 
|  |  | 
|  | Show the interconnect graph in the graphviz dot format. It shows all | 
|  | interconnect nodes and links in the system and groups together nodes from the | 
|  | same provider as subgraphs. The format is human-readable and can also be piped | 
|  | through dot to generate diagrams in many graphical formats:: | 
|  |  | 
|  | $ cat /sys/kernel/debug/interconnect/interconnect_graph | \ | 
|  | dot -Tsvg > interconnect_graph.svg |