123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- .. 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
|