2023-08-30 17:31:07 +02:00
|
|
|
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
|
|
|
|
%YAML 1.2
|
|
|
|
---
|
|
|
|
$id: http://devicetree.org/schemas/net/qcom,ipa.yaml#
|
|
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
|
|
|
|
title: Qualcomm IP Accelerator (IPA)
|
|
|
|
|
|
|
|
maintainers:
|
|
|
|
- Alex Elder <elder@kernel.org>
|
|
|
|
|
|
|
|
description:
|
|
|
|
This binding describes the Qualcomm IPA. The IPA is capable of offloading
|
|
|
|
certain network processing tasks (e.g. filtering, routing, and NAT) from
|
|
|
|
the main processor.
|
|
|
|
|
|
|
|
The IPA sits between multiple independent "execution environments,"
|
|
|
|
including the Application Processor (AP) and the modem. The IPA presents
|
|
|
|
a Generic Software Interface (GSI) to each execution environment.
|
|
|
|
The GSI is an integral part of the IPA, but it is logically isolated
|
|
|
|
and has a distinct interrupt and a separately-defined address space.
|
|
|
|
|
|
|
|
See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt. See
|
|
|
|
iommu/iommu.txt and iommu/arm,smmu.yaml for more information about SMMU
|
|
|
|
bindings.
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
-------- ---------
|
|
|
|
| | | |
|
|
|
|
| AP +<---. .----+ Modem |
|
|
|
|
| +--. | | .->+ |
|
|
|
|
| | | | | | | |
|
|
|
|
-------- | | | | ---------
|
|
|
|
v | v |
|
|
|
|
--+-+---+-+--
|
|
|
|
| GSI |
|
|
|
|
|-----------|
|
|
|
|
| |
|
|
|
|
| IPA |
|
|
|
|
| |
|
|
|
|
-------------
|
|
|
|
|
|
|
|
properties:
|
|
|
|
compatible:
|
|
|
|
enum:
|
|
|
|
- qcom,msm8998-ipa
|
|
|
|
- qcom,sc7180-ipa
|
|
|
|
- qcom,sc7280-ipa
|
|
|
|
- qcom,sdm845-ipa
|
|
|
|
- qcom,sdx55-ipa
|
2023-10-24 12:59:35 +02:00
|
|
|
- qcom,sdx65-ipa
|
2023-08-30 17:31:07 +02:00
|
|
|
- qcom,sm6350-ipa
|
|
|
|
- qcom,sm8350-ipa
|
|
|
|
|
|
|
|
reg:
|
|
|
|
items:
|
|
|
|
- description: IPA registers
|
|
|
|
- description: IPA shared memory
|
|
|
|
- description: GSI registers
|
|
|
|
|
|
|
|
reg-names:
|
|
|
|
items:
|
|
|
|
- const: ipa-reg
|
|
|
|
- const: ipa-shared
|
|
|
|
- const: gsi
|
|
|
|
|
|
|
|
iommus:
|
|
|
|
minItems: 1
|
|
|
|
maxItems: 2
|
|
|
|
|
|
|
|
clocks:
|
|
|
|
maxItems: 1
|
|
|
|
|
|
|
|
clock-names:
|
|
|
|
const: core
|
|
|
|
|
|
|
|
interrupts:
|
|
|
|
items:
|
|
|
|
- description: IPA interrupt (hardware IRQ)
|
|
|
|
- description: GSI interrupt (hardware IRQ)
|
|
|
|
- description: Modem clock query interrupt (smp2p interrupt)
|
|
|
|
- description: Modem setup ready interrupt (smp2p interrupt)
|
|
|
|
|
|
|
|
interrupt-names:
|
|
|
|
items:
|
|
|
|
- const: ipa
|
|
|
|
- const: gsi
|
|
|
|
- const: ipa-clock-query
|
|
|
|
- const: ipa-setup-ready
|
|
|
|
|
|
|
|
interconnects:
|
|
|
|
oneOf:
|
|
|
|
- items:
|
|
|
|
- description: Path leading to system memory
|
|
|
|
- description: Path between the AP and IPA config space
|
|
|
|
- items:
|
|
|
|
- description: Path leading to system memory
|
|
|
|
- description: Path leading to internal memory
|
|
|
|
- description: Path between the AP and IPA config space
|
|
|
|
|
|
|
|
interconnect-names:
|
|
|
|
oneOf:
|
|
|
|
- items:
|
|
|
|
- const: memory
|
|
|
|
- const: config
|
|
|
|
- items:
|
|
|
|
- const: memory
|
|
|
|
- const: imem
|
|
|
|
- const: config
|
|
|
|
|
|
|
|
qcom,qmp:
|
|
|
|
$ref: /schemas/types.yaml#/definitions/phandle
|
|
|
|
description: phandle to the AOSS side-channel message RAM
|
|
|
|
|
|
|
|
qcom,smem-states:
|
|
|
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
|
|
|
description: State bits used in by the AP to signal the modem.
|
|
|
|
items:
|
|
|
|
- description: Whether the "ipa-clock-enabled" state bit is valid
|
|
|
|
- description: Whether the IPA clock is enabled (if valid)
|
|
|
|
|
|
|
|
qcom,smem-state-names:
|
|
|
|
description: The names of the state bits used for SMP2P output
|
|
|
|
items:
|
|
|
|
- const: ipa-clock-enabled-valid
|
|
|
|
- const: ipa-clock-enabled
|
|
|
|
|
|
|
|
qcom,gsi-loader:
|
|
|
|
enum:
|
|
|
|
- self
|
|
|
|
- modem
|
|
|
|
- skip
|
|
|
|
description:
|
|
|
|
Indicates how GSI firmware should be loaded. If the AP loads
|
|
|
|
and validates GSI firmware, this property has value "self".
|
|
|
|
If the modem does this, this property has value "modem".
|
|
|
|
Otherwise, "skip" means GSI firmware loading is not required.
|
|
|
|
|
|
|
|
modem-init:
|
|
|
|
deprecated: true
|
|
|
|
type: boolean
|
|
|
|
description:
|
|
|
|
This is the older (deprecated) way of indicating how GSI firmware
|
|
|
|
should be loaded. If present, the modem loads GSI firmware; if
|
|
|
|
absent, the AP loads GSI firmware.
|
|
|
|
|
|
|
|
memory-region:
|
|
|
|
maxItems: 1
|
|
|
|
description:
|
|
|
|
If present, a phandle for a reserved memory area that holds
|
|
|
|
the firmware passed to Trust Zone for authentication. Required
|
|
|
|
when the AP (not the modem) performs early initialization.
|
|
|
|
|
|
|
|
firmware-name:
|
|
|
|
$ref: /schemas/types.yaml#/definitions/string
|
|
|
|
description:
|
|
|
|
If present, name (or relative path) of the file within the
|
|
|
|
firmware search path containing the firmware image used when
|
|
|
|
initializing IPA hardware. Optional, and only used when
|
|
|
|
Trust Zone performs early initialization.
|
|
|
|
|
|
|
|
required:
|
|
|
|
- compatible
|
|
|
|
- iommus
|
|
|
|
- reg
|
|
|
|
- clocks
|
|
|
|
- interrupts
|
|
|
|
- interconnects
|
|
|
|
- qcom,smem-states
|
|
|
|
|
|
|
|
allOf:
|
|
|
|
# If qcom,gsi-loader is present, modem-init must not be present
|
|
|
|
- if:
|
|
|
|
required:
|
|
|
|
- qcom,gsi-loader
|
|
|
|
then:
|
|
|
|
properties:
|
|
|
|
modem-init: false
|
|
|
|
|
|
|
|
# If qcom,gsi-loader is "self", the AP loads GSI firmware, and
|
|
|
|
# memory-region must be specified
|
|
|
|
if:
|
|
|
|
properties:
|
|
|
|
qcom,gsi-loader:
|
|
|
|
contains:
|
|
|
|
const: self
|
|
|
|
then:
|
|
|
|
required:
|
|
|
|
- memory-region
|
|
|
|
else:
|
|
|
|
# If qcom,gsi-loader is not present, we use deprecated behavior.
|
|
|
|
# If modem-init is not present, the AP loads GSI firmware, and
|
|
|
|
# memory-region must be specified.
|
|
|
|
if:
|
|
|
|
not:
|
|
|
|
required:
|
|
|
|
- modem-init
|
|
|
|
then:
|
|
|
|
required:
|
|
|
|
- memory-region
|
|
|
|
|
|
|
|
additionalProperties: false
|
|
|
|
|
|
|
|
examples:
|
|
|
|
- |
|
|
|
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
|
|
|
#include <dt-bindings/clock/qcom,rpmh.h>
|
|
|
|
#include <dt-bindings/interconnect/qcom,sdm845.h>
|
|
|
|
|
|
|
|
smp2p-mpss {
|
|
|
|
compatible = "qcom,smp2p";
|
|
|
|
interrupts = <GIC_SPI 576 IRQ_TYPE_EDGE_RISING>;
|
|
|
|
mboxes = <&apss_shared 6>;
|
|
|
|
qcom,smem = <94>, <432>;
|
|
|
|
qcom,local-pid = <0>;
|
|
|
|
qcom,remote-pid = <5>;
|
|
|
|
|
|
|
|
ipa_smp2p_out: ipa-ap-to-modem {
|
|
|
|
qcom,entry-name = "ipa";
|
|
|
|
#qcom,smem-state-cells = <1>;
|
|
|
|
};
|
|
|
|
|
|
|
|
ipa_smp2p_in: ipa-modem-to-ap {
|
|
|
|
qcom,entry-name = "ipa";
|
|
|
|
interrupt-controller;
|
|
|
|
#interrupt-cells = <2>;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
ipa@1e40000 {
|
|
|
|
compatible = "qcom,sc7180-ipa";
|
|
|
|
|
|
|
|
qcom,gsi-loader = "self";
|
|
|
|
memory-region = <&ipa_fw_mem>;
|
|
|
|
firmware-name = "qcom/sc7180-trogdor/modem/modem.mdt";
|
|
|
|
|
|
|
|
iommus = <&apps_smmu 0x440 0x0>,
|
|
|
|
<&apps_smmu 0x442 0x0>;
|
|
|
|
reg = <0x1e40000 0x7000>,
|
|
|
|
<0x1e47000 0x2000>,
|
|
|
|
<0x1e04000 0x2c000>;
|
|
|
|
reg-names = "ipa-reg",
|
|
|
|
"ipa-shared",
|
|
|
|
"gsi";
|
|
|
|
|
|
|
|
interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
|
|
|
|
<&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
|
|
|
|
<&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
|
|
|
|
<&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
|
|
|
|
interrupt-names = "ipa",
|
|
|
|
"gsi",
|
|
|
|
"ipa-clock-query",
|
|
|
|
"ipa-setup-ready";
|
|
|
|
|
|
|
|
clocks = <&rpmhcc RPMH_IPA_CLK>;
|
|
|
|
clock-names = "core";
|
|
|
|
|
|
|
|
interconnects =
|
|
|
|
<&aggre2_noc MASTER_IPA 0 &mc_virt SLAVE_EBI1 0>,
|
|
|
|
<&aggre2_noc MASTER_IPA 0 &system_noc SLAVE_IMEM 0>,
|
|
|
|
<&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_IPA_CFG 0>;
|
|
|
|
interconnect-names = "memory",
|
|
|
|
"imem",
|
|
|
|
"config";
|
|
|
|
|
|
|
|
qcom,qmp = <&aoss_qmp>;
|
|
|
|
|
|
|
|
qcom,smem-states = <&ipa_smp2p_out 0>,
|
|
|
|
<&ipa_smp2p_out 1>;
|
|
|
|
qcom,smem-state-names = "ipa-clock-enabled-valid",
|
|
|
|
"ipa-clock-enabled";
|
|
|
|
};
|