mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
5.2 KiB
115 lines
5.2 KiB
.. 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
|
|
|