mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-01 14:52:13 -05:00
Merge tag 'icc-6.16-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/djakov/icc into char-misc-next
Georgi writes: interconnect changes for 6.16 This pull request contains the interconnect changes for the 6.16-rc1 merge window. The core and driver changes are listed below. Core changes: - Add support for dynamic id allocation, that allows creating multiple instances of the same provider Driver changes: - Add driver for the EPSS L3 instances on SA8775P SoC - Add QoS support for SM8650 SoC - Add some missing nodes for SM8650 - Misc dt-binding style and indentation fixes Signed-off-by: Georgi Djakov <djakov@kernel.org> * tag 'icc-6.16-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/djakov/icc: interconnect: qcom: sm8650: remove regmap config for mc_virt & clk_virt interconnect: qcom: sm8650: add the MASTER_APSS_NOC dt-bindings: interconnect: sm8650: document the MASTER_APSS_NOC interconnect: qcom: sm8650: enable QoS configuration dt-bindings: interconnect: Correct indentation and style in DTS example interconnect: qcom: sa8775p: Add dynamic icc node id support interconnect: qcom: icc-rpmh: Add dynamic icc node id support interconnect: qcom: Add multidev EPSS L3 support interconnect: core: Add dynamic id allocation support dt-bindings: interconnect: Add EPSS L3 compatible for SA8775P
This commit is contained in:
@@ -70,8 +70,8 @@ examples:
|
||||
reg = <0x00580000 0x14000>;
|
||||
#interconnect-cells = <1>;
|
||||
|
||||
snoc_mm: interconnect-snoc {
|
||||
compatible = "qcom,msm8939-snoc-mm";
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
snoc_mm: interconnect-snoc {
|
||||
compatible = "qcom,msm8939-snoc-mm";
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -84,17 +84,17 @@ additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,gcc-msm8953.h>
|
||||
#include <dt-bindings/clock/qcom,gcc-msm8953.h>
|
||||
|
||||
snoc: interconnect@580000 {
|
||||
compatible = "qcom,msm8953-snoc";
|
||||
reg = <0x580000 0x16080>;
|
||||
interconnect@580000 {
|
||||
compatible = "qcom,msm8953-snoc";
|
||||
reg = <0x580000 0x16080>;
|
||||
|
||||
#interconnect-cells = <2>;
|
||||
#interconnect-cells = <2>;
|
||||
|
||||
snoc_mm: interconnect-snoc {
|
||||
compatible = "qcom,msm8953-snoc-mm";
|
||||
interconnect-snoc {
|
||||
compatible = "qcom,msm8953-snoc-mm";
|
||||
|
||||
#interconnect-cells = <2>;
|
||||
};
|
||||
};
|
||||
#interconnect-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -50,13 +50,13 @@ additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,rpmcc.h>
|
||||
#include <dt-bindings/clock/qcom,rpmcc.h>
|
||||
|
||||
bimc: interconnect@fc380000 {
|
||||
reg = <0xfc380000 0x6a000>;
|
||||
compatible = "qcom,msm8974-bimc";
|
||||
#interconnect-cells = <1>;
|
||||
clock-names = "bus", "bus_a";
|
||||
clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
|
||||
<&rpmcc RPM_SMD_BIMC_A_CLK>;
|
||||
};
|
||||
interconnect@fc380000 {
|
||||
reg = <0xfc380000 0x6a000>;
|
||||
compatible = "qcom,msm8974-bimc";
|
||||
#interconnect-cells = <1>;
|
||||
clock-names = "bus", "bus_a";
|
||||
clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
|
||||
<&rpmcc RPM_SMD_BIMC_A_CLK>;
|
||||
};
|
||||
|
||||
@@ -28,6 +28,7 @@ properties:
|
||||
- const: qcom,osm-l3
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sa8775p-epss-l3
|
||||
- qcom,sc7280-epss-l3
|
||||
- qcom,sc8280xp-epss-l3
|
||||
- qcom,sm6375-cpucp-l3
|
||||
|
||||
@@ -41,10 +41,10 @@ unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,rpmcc.h>
|
||||
#include <dt-bindings/clock/qcom,rpmcc.h>
|
||||
|
||||
bimc: interconnect@400000 {
|
||||
compatible = "qcom,msm8916-bimc";
|
||||
reg = <0x00400000 0x62000>;
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
interconnect@400000 {
|
||||
compatible = "qcom,msm8916-bimc";
|
||||
reg = <0x00400000 0x62000>;
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
|
||||
@@ -127,19 +127,19 @@ unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interconnect/qcom,sdm845.h>
|
||||
#include <dt-bindings/interconnect/qcom,sdm845.h>
|
||||
|
||||
mem_noc: interconnect@1380000 {
|
||||
compatible = "qcom,sdm845-mem-noc";
|
||||
reg = <0x01380000 0x27200>;
|
||||
#interconnect-cells = <1>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
};
|
||||
interconnect@1380000 {
|
||||
compatible = "qcom,sdm845-mem-noc";
|
||||
reg = <0x01380000 0x27200>;
|
||||
#interconnect-cells = <1>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
};
|
||||
|
||||
mmss_noc: interconnect@1740000 {
|
||||
compatible = "qcom,sdm845-mmss-noc";
|
||||
reg = <0x01740000 0x1c1000>;
|
||||
#interconnect-cells = <1>;
|
||||
qcom,bcm-voter-names = "apps", "disp";
|
||||
qcom,bcm-voters = <&apps_bcm_voter>, <&disp_bcm_voter>;
|
||||
};
|
||||
interconnect@1740000 {
|
||||
compatible = "qcom,sdm845-mmss-noc";
|
||||
reg = <0x01740000 0x1c1000>;
|
||||
#interconnect-cells = <1>;
|
||||
qcom,bcm-voter-names = "apps", "disp";
|
||||
qcom,bcm-voters = <&apps_bcm_voter>, <&disp_bcm_voter>;
|
||||
};
|
||||
|
||||
@@ -78,15 +78,15 @@ examples:
|
||||
#include <dt-bindings/clock/qcom,rpmh.h>
|
||||
|
||||
clk_virt: interconnect-0 {
|
||||
compatible = "qcom,sdx75-clk-virt";
|
||||
#interconnect-cells = <2>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
clocks = <&rpmhcc RPMH_QPIC_CLK>;
|
||||
compatible = "qcom,sdx75-clk-virt";
|
||||
#interconnect-cells = <2>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
clocks = <&rpmhcc RPMH_QPIC_CLK>;
|
||||
};
|
||||
|
||||
system_noc: interconnect@1640000 {
|
||||
compatible = "qcom,sdx75-system-noc";
|
||||
reg = <0x1640000 0x4b400>;
|
||||
#interconnect-cells = <2>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
compatible = "qcom,sdx75-system-noc";
|
||||
reg = <0x1640000 0x4b400>;
|
||||
#interconnect-cells = <2>;
|
||||
qcom,bcm-voters = <&apps_bcm_voter>;
|
||||
};
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#define ICC_DYN_ID_START 10000
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include "trace.h"
|
||||
|
||||
@@ -826,7 +828,12 @@ static struct icc_node *icc_node_create_nolock(int id)
|
||||
if (!node)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL);
|
||||
/* dynamic id allocation */
|
||||
if (id == ICC_ALLOC_DYN_ID)
|
||||
id = idr_alloc(&icc_idr, node, ICC_DYN_ID_START, 0, GFP_KERNEL);
|
||||
else
|
||||
id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL);
|
||||
|
||||
if (id < 0) {
|
||||
WARN(1, "%s: couldn't get idr\n", __func__);
|
||||
kfree(node);
|
||||
@@ -838,6 +845,25 @@ static struct icc_node *icc_node_create_nolock(int id)
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* icc_node_create_dyn() - create a node with dynamic id
|
||||
*
|
||||
* Return: icc_node pointer on success, or ERR_PTR() on error
|
||||
*/
|
||||
struct icc_node *icc_node_create_dyn(void)
|
||||
{
|
||||
struct icc_node *node;
|
||||
|
||||
mutex_lock(&icc_lock);
|
||||
|
||||
node = icc_node_create_nolock(ICC_ALLOC_DYN_ID);
|
||||
|
||||
mutex_unlock(&icc_lock);
|
||||
|
||||
return node;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(icc_node_create_dyn);
|
||||
|
||||
/**
|
||||
* icc_node_create() - create a node
|
||||
* @id: node id
|
||||
@@ -884,6 +910,56 @@ void icc_node_destroy(int id)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(icc_node_destroy);
|
||||
|
||||
/**
|
||||
* icc_link_nodes() - create link between two nodes
|
||||
* @src_node: source node
|
||||
* @dst_node: destination node
|
||||
*
|
||||
* Create a link between two nodes. The nodes might belong to different
|
||||
* interconnect providers and the @dst_node might not exist (if the
|
||||
* provider driver has not probed yet). So just create the @dst_node
|
||||
* and when the actual provider driver is probed, the rest of the node
|
||||
* data is filled.
|
||||
*
|
||||
* Return: 0 on success, or an error code otherwise
|
||||
*/
|
||||
int icc_link_nodes(struct icc_node *src_node, struct icc_node **dst_node)
|
||||
{
|
||||
struct icc_node **new;
|
||||
int ret = 0;
|
||||
|
||||
if (!src_node->provider)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&icc_lock);
|
||||
|
||||
if (!*dst_node) {
|
||||
*dst_node = icc_node_create_nolock(ICC_ALLOC_DYN_ID);
|
||||
|
||||
if (IS_ERR(*dst_node)) {
|
||||
ret = PTR_ERR(*dst_node);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
new = krealloc(src_node->links,
|
||||
(src_node->num_links + 1) * sizeof(*src_node->links),
|
||||
GFP_KERNEL);
|
||||
if (!new) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
src_node->links = new;
|
||||
src_node->links[src_node->num_links++] = *dst_node;
|
||||
|
||||
out:
|
||||
mutex_unlock(&icc_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(icc_link_nodes);
|
||||
|
||||
/**
|
||||
* icc_link_create() - create a link between two nodes
|
||||
* @node: source node id
|
||||
@@ -962,6 +1038,10 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
|
||||
node->avg_bw = node->init_avg;
|
||||
node->peak_bw = node->init_peak;
|
||||
|
||||
if (node->id >= ICC_DYN_ID_START)
|
||||
node->name = devm_kasprintf(provider->dev, GFP_KERNEL, "%s@%s",
|
||||
node->name, dev_name(provider->dev));
|
||||
|
||||
if (node->avg_bw || node->peak_bw) {
|
||||
if (provider->pre_aggregate)
|
||||
provider->pre_aggregate(node);
|
||||
|
||||
@@ -280,7 +280,14 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
if (!qn)
|
||||
continue;
|
||||
|
||||
node = icc_node_create(qn->id);
|
||||
if (desc->alloc_dyn_id) {
|
||||
if (!qn->node)
|
||||
qn->node = icc_node_create_dyn();
|
||||
node = qn->node;
|
||||
} else {
|
||||
node = icc_node_create(qn->id);
|
||||
}
|
||||
|
||||
if (IS_ERR(node)) {
|
||||
ret = PTR_ERR(node);
|
||||
goto err_remove_nodes;
|
||||
@@ -290,8 +297,12 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
node->data = qn;
|
||||
icc_node_add(node, provider);
|
||||
|
||||
for (j = 0; j < qn->num_links; j++)
|
||||
icc_link_create(node, qn->links[j]);
|
||||
for (j = 0; j < qn->num_links; j++) {
|
||||
if (desc->alloc_dyn_id)
|
||||
icc_link_nodes(node, &qn->link_nodes[j]->node);
|
||||
else
|
||||
icc_link_create(node, qn->links[j]);
|
||||
}
|
||||
|
||||
data->nodes[i] = node;
|
||||
}
|
||||
|
||||
@@ -83,6 +83,8 @@ struct qcom_icc_qosbox {
|
||||
* @name: the node name used in debugfs
|
||||
* @links: an array of nodes where we can go next while traversing
|
||||
* @id: a unique node identifier
|
||||
* @link_nodes: links associated with this node
|
||||
* @node: icc_node associated with this node
|
||||
* @num_links: the total number of @links
|
||||
* @channels: num of channels at this node
|
||||
* @buswidth: width of the interconnect between a node and the bus
|
||||
@@ -96,6 +98,8 @@ struct qcom_icc_node {
|
||||
const char *name;
|
||||
u16 links[MAX_LINKS];
|
||||
u16 id;
|
||||
struct qcom_icc_node **link_nodes;
|
||||
struct icc_node *node;
|
||||
u16 num_links;
|
||||
u16 channels;
|
||||
u16 buswidth;
|
||||
@@ -154,6 +158,7 @@ struct qcom_icc_desc {
|
||||
struct qcom_icc_bcm * const *bcms;
|
||||
size_t num_bcms;
|
||||
bool qos_requires_clocks;
|
||||
bool alloc_dyn_id;
|
||||
};
|
||||
|
||||
int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/args.h>
|
||||
@@ -32,8 +33,6 @@
|
||||
#define EPSS_REG_FREQ_LUT 0x100
|
||||
#define EPSS_REG_PERF_STATE 0x320
|
||||
|
||||
#define OSM_L3_MAX_LINKS 1
|
||||
|
||||
#define to_osm_l3_provider(_provider) \
|
||||
container_of(_provider, struct qcom_osm_l3_icc_provider, provider)
|
||||
|
||||
@@ -48,16 +47,10 @@ struct qcom_osm_l3_icc_provider {
|
||||
/**
|
||||
* struct qcom_osm_l3_node - Qualcomm specific interconnect nodes
|
||||
* @name: the node name used in debugfs
|
||||
* @links: an array of nodes where we can go next while traversing
|
||||
* @id: a unique node identifier
|
||||
* @num_links: the total number of @links
|
||||
* @buswidth: width of the interconnect between a node and the bus
|
||||
*/
|
||||
struct qcom_osm_l3_node {
|
||||
const char *name;
|
||||
u16 links[OSM_L3_MAX_LINKS];
|
||||
u16 id;
|
||||
u16 num_links;
|
||||
u16 buswidth;
|
||||
};
|
||||
|
||||
@@ -69,30 +62,22 @@ struct qcom_osm_l3_desc {
|
||||
unsigned int reg_perf_state;
|
||||
};
|
||||
|
||||
enum {
|
||||
OSM_L3_MASTER_NODE = 10000,
|
||||
OSM_L3_SLAVE_NODE,
|
||||
};
|
||||
|
||||
#define DEFINE_QNODE(_name, _id, _buswidth, ...) \
|
||||
#define DEFINE_QNODE(_name, _buswidth) \
|
||||
static const struct qcom_osm_l3_node _name = { \
|
||||
.name = #_name, \
|
||||
.id = _id, \
|
||||
.buswidth = _buswidth, \
|
||||
.num_links = COUNT_ARGS(__VA_ARGS__), \
|
||||
.links = { __VA_ARGS__ }, \
|
||||
}
|
||||
|
||||
DEFINE_QNODE(osm_l3_master, OSM_L3_MASTER_NODE, 16, OSM_L3_SLAVE_NODE);
|
||||
DEFINE_QNODE(osm_l3_slave, OSM_L3_SLAVE_NODE, 16);
|
||||
DEFINE_QNODE(osm_l3_slave, 16);
|
||||
DEFINE_QNODE(osm_l3_master, 16);
|
||||
|
||||
static const struct qcom_osm_l3_node * const osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &osm_l3_master,
|
||||
[SLAVE_OSM_L3] = &osm_l3_slave,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(epss_l3_master, OSM_L3_MASTER_NODE, 32, OSM_L3_SLAVE_NODE);
|
||||
DEFINE_QNODE(epss_l3_slave, OSM_L3_SLAVE_NODE, 32);
|
||||
DEFINE_QNODE(epss_l3_slave, 32);
|
||||
DEFINE_QNODE(epss_l3_master, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const epss_l3_nodes[] = {
|
||||
[MASTER_EPSS_L3_APPS] = &epss_l3_master,
|
||||
@@ -242,10 +227,10 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
|
||||
|
||||
icc_provider_init(provider);
|
||||
|
||||
/* Create nodes */
|
||||
for (i = 0; i < num_nodes; i++) {
|
||||
size_t j;
|
||||
node = icc_node_create_dyn();
|
||||
|
||||
node = icc_node_create(qnodes[i]->id);
|
||||
if (IS_ERR(node)) {
|
||||
ret = PTR_ERR(node);
|
||||
goto err;
|
||||
@@ -256,12 +241,12 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
|
||||
node->data = (void *)qnodes[i];
|
||||
icc_node_add(node, provider);
|
||||
|
||||
for (j = 0; j < qnodes[i]->num_links; j++)
|
||||
icc_link_create(node, qnodes[i]->links[j]);
|
||||
|
||||
data->nodes[i] = node;
|
||||
}
|
||||
|
||||
/* Create link */
|
||||
icc_link_nodes(data->nodes[MASTER_OSM_L3_APPS], &data->nodes[SLAVE_OSM_L3]);
|
||||
|
||||
ret = icc_provider_register(provider);
|
||||
if (ret)
|
||||
goto err;
|
||||
@@ -278,6 +263,7 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
|
||||
static const struct of_device_id osm_l3_of_match[] = {
|
||||
{ .compatible = "qcom,epss-l3", .data = &epss_l3_l3_vote },
|
||||
{ .compatible = "qcom,osm-l3", .data = &osm_l3 },
|
||||
{ .compatible = "qcom,sa8775p-epss-l3", .data = &epss_l3_perf_state },
|
||||
{ .compatible = "qcom,sc7180-osm-l3", .data = &osm_l3 },
|
||||
{ .compatible = "qcom,sc7280-epss-l3", .data = &epss_l3_perf_state },
|
||||
{ .compatible = "qcom,sdm845-osm-l3", .data = &osm_l3 },
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -17,20 +17,45 @@
|
||||
#include "icc-rpmh.h"
|
||||
#include "sm8650.h"
|
||||
|
||||
static const struct regmap_config icc_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qhm_qspi_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xc000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qhm_qspi = {
|
||||
.name = "qhm_qspi",
|
||||
.id = SM8650_MASTER_QSPI_0,
|
||||
.channels = 1,
|
||||
.buswidth = 4,
|
||||
.qosbox = &qhm_qspi_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qhm_qup1_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xd000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qhm_qup1 = {
|
||||
.name = "qhm_qup1",
|
||||
.id = SM8650_MASTER_QUP_1,
|
||||
.channels = 1,
|
||||
.buswidth = 4,
|
||||
.qosbox = &qhm_qup1_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
@@ -44,65 +69,128 @@ static struct qcom_icc_node qxm_qup02 = {
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_sdc4_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xe000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_sdc4 = {
|
||||
.name = "xm_sdc4",
|
||||
.id = SM8650_MASTER_SDCC_4,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_sdc4_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_ufs_mem_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xf000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_ufs_mem = {
|
||||
.name = "xm_ufs_mem",
|
||||
.id = SM8650_MASTER_UFS_MEM,
|
||||
.channels = 1,
|
||||
.buswidth = 16,
|
||||
.qosbox = &xm_ufs_mem_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_usb3_0_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x10000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_usb3_0 = {
|
||||
.name = "xm_usb3_0",
|
||||
.id = SM8650_MASTER_USB3_0,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_usb3_0_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A1NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qhm_qdss_bam_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x12000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qhm_qdss_bam = {
|
||||
.name = "qhm_qdss_bam",
|
||||
.id = SM8650_MASTER_QDSS_BAM,
|
||||
.channels = 1,
|
||||
.buswidth = 4,
|
||||
.qosbox = &qhm_qdss_bam_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qhm_qup2_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x13000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qhm_qup2 = {
|
||||
.name = "qhm_qup2",
|
||||
.id = SM8650_MASTER_QUP_2,
|
||||
.channels = 1,
|
||||
.buswidth = 4,
|
||||
.qosbox = &qhm_qup2_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qxm_crypto_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x15000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qxm_crypto = {
|
||||
.name = "qxm_crypto",
|
||||
.id = SM8650_MASTER_CRYPTO,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &qxm_crypto_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qxm_ipa_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x16000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qxm_ipa = {
|
||||
.name = "qxm_ipa",
|
||||
.id = SM8650_MASTER_IPA,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &qxm_ipa_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
@@ -116,29 +204,56 @@ static struct qcom_icc_node qxm_sp = {
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_qdss_etr_0_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x17000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_qdss_etr_0 = {
|
||||
.name = "xm_qdss_etr_0",
|
||||
.id = SM8650_MASTER_QDSS_ETR,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_qdss_etr_0_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_qdss_etr_1_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x18000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_qdss_etr_1 = {
|
||||
.name = "xm_qdss_etr_1",
|
||||
.id = SM8650_MASTER_QDSS_ETR_1,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_qdss_etr_1_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_sdc2_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x19000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_sdc2 = {
|
||||
.name = "xm_sdc2",
|
||||
.id = SM8650_MASTER_SDCC_2,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_sdc2_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_A2NOC_SNOC },
|
||||
};
|
||||
@@ -223,29 +338,56 @@ static struct qcom_icc_node qnm_gemnoc_pcie = {
|
||||
.links = { SM8650_SLAVE_PCIE_0, SM8650_SLAVE_PCIE_1 },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox alm_gpu_tcu_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xbf000 },
|
||||
.prio = 1,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node alm_gpu_tcu = {
|
||||
.name = "alm_gpu_tcu",
|
||||
.id = SM8650_MASTER_GPU_TCU,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &alm_gpu_tcu_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox alm_sys_tcu_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xc1000 },
|
||||
.prio = 6,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node alm_sys_tcu = {
|
||||
.name = "alm_sys_tcu",
|
||||
.id = SM8650_MASTER_SYS_TCU,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &alm_sys_tcu_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox alm_ubwc_p_tcu_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xc5000 },
|
||||
.prio = 1,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node alm_ubwc_p_tcu = {
|
||||
.name = "alm_ubwc_p_tcu",
|
||||
.id = SM8650_MASTER_UBWC_P_TCU,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &alm_ubwc_p_tcu_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
@@ -260,20 +402,38 @@ static struct qcom_icc_node chm_apps = {
|
||||
SM8650_SLAVE_MEM_NOC_PCIE_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_gpu_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x31000, 0x71000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_gpu = {
|
||||
.name = "qnm_gpu",
|
||||
.id = SM8650_MASTER_GFX3D,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_gpu_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_lpass_gemnoc_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xb5000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_lpass_gemnoc = {
|
||||
.name = "qnm_lpass_gemnoc",
|
||||
.id = SM8650_MASTER_LPASS_GEM_NOC,
|
||||
.channels = 1,
|
||||
.buswidth = 16,
|
||||
.qosbox = &qnm_lpass_gemnoc_qos,
|
||||
.num_links = 3,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC,
|
||||
SM8650_SLAVE_MEM_NOC_PCIE_SNOC },
|
||||
@@ -289,67 +449,130 @@ static struct qcom_icc_node qnm_mdsp = {
|
||||
SM8650_SLAVE_MEM_NOC_PCIE_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_mnoc_hf_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x33000, 0x73000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_mnoc_hf = {
|
||||
.name = "qnm_mnoc_hf",
|
||||
.id = SM8650_MASTER_MNOC_HF_MEM_NOC,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_mnoc_hf_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_mnoc_sf_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x35000, 0x75000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_mnoc_sf = {
|
||||
.name = "qnm_mnoc_sf",
|
||||
.id = SM8650_MASTER_MNOC_SF_MEM_NOC,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_mnoc_sf_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_nsp_gemnoc_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x37000, 0x77000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_nsp_gemnoc = {
|
||||
.name = "qnm_nsp_gemnoc",
|
||||
.id = SM8650_MASTER_COMPUTE_NOC,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_nsp_gemnoc_qos,
|
||||
.num_links = 3,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC,
|
||||
SM8650_SLAVE_MEM_NOC_PCIE_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_pcie_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xb7000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_pcie = {
|
||||
.name = "qnm_pcie",
|
||||
.id = SM8650_MASTER_ANOC_PCIE_GEM_NOC,
|
||||
.channels = 1,
|
||||
.buswidth = 16,
|
||||
.qosbox = &qnm_pcie_qos,
|
||||
.num_links = 2,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_snoc_sf_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xbb000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_snoc_sf = {
|
||||
.name = "qnm_snoc_sf",
|
||||
.id = SM8650_MASTER_SNOC_SF_MEM_NOC,
|
||||
.channels = 1,
|
||||
.buswidth = 16,
|
||||
.qosbox = &qnm_snoc_sf_qos,
|
||||
.num_links = 3,
|
||||
.links = { SM8650_SLAVE_GEM_NOC_CNOC, SM8650_SLAVE_LLCC,
|
||||
SM8650_SLAVE_MEM_NOC_PCIE_SNOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_ubwc_p_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xc3000 },
|
||||
.prio = 1,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_ubwc_p = {
|
||||
.name = "qnm_ubwc_p",
|
||||
.id = SM8650_MASTER_UBWC_P,
|
||||
.channels = 1,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_ubwc_p_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_LLCC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_gic_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xb9000 },
|
||||
.prio = 4,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_gic = {
|
||||
.name = "xm_gic",
|
||||
.id = SM8650_MASTER_GIC,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_gic_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_LLCC },
|
||||
};
|
||||
@@ -390,38 +613,74 @@ static struct qcom_icc_node llcc_mc = {
|
||||
.links = { SM8650_SLAVE_EBI1 },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_camnoc_hf_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x28000, 0x29000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_camnoc_hf = {
|
||||
.name = "qnm_camnoc_hf",
|
||||
.id = SM8650_MASTER_CAMNOC_HF,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_camnoc_hf_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_HF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_camnoc_icp_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x2a000 },
|
||||
.prio = 4,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_camnoc_icp = {
|
||||
.name = "qnm_camnoc_icp",
|
||||
.id = SM8650_MASTER_CAMNOC_ICP,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &qnm_camnoc_icp_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_camnoc_sf_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x2b000, 0x2c000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_camnoc_sf = {
|
||||
.name = "qnm_camnoc_sf",
|
||||
.id = SM8650_MASTER_CAMNOC_SF,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_camnoc_sf_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_mdp_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x2d000, 0x2e000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_mdp = {
|
||||
.name = "qnm_mdp",
|
||||
.id = SM8650_MASTER_MDP,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_mdp_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_HF_MEM_NOC },
|
||||
};
|
||||
@@ -435,38 +694,74 @@ static struct qcom_icc_node qnm_vapss_hcp = {
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_video_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x30000, 0x31000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_video = {
|
||||
.name = "qnm_video",
|
||||
.id = SM8650_MASTER_VIDEO,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_video_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_video_cv_cpu_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x32000 },
|
||||
.prio = 4,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_video_cv_cpu = {
|
||||
.name = "qnm_video_cv_cpu",
|
||||
.id = SM8650_MASTER_VIDEO_CV_PROC,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &qnm_video_cv_cpu_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_video_cvp_qos = {
|
||||
.num_ports = 2,
|
||||
.port_offsets = { 0x33000, 0x34000 },
|
||||
.prio = 0,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_video_cvp = {
|
||||
.name = "qnm_video_cvp",
|
||||
.id = SM8650_MASTER_VIDEO_PROC,
|
||||
.channels = 2,
|
||||
.buswidth = 32,
|
||||
.qosbox = &qnm_video_cvp_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_video_v_cpu_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x35000 },
|
||||
.prio = 4,
|
||||
.urg_fwd = 1,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_video_v_cpu = {
|
||||
.name = "qnm_video_v_cpu",
|
||||
.id = SM8650_MASTER_VIDEO_V_PROC,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &qnm_video_v_cpu_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_MNOC_SF_MEM_NOC },
|
||||
};
|
||||
@@ -498,20 +793,38 @@ static struct qcom_icc_node qsm_pcie_anoc_cfg = {
|
||||
.links = { SM8650_SLAVE_SERVICE_PCIE_ANOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_pcie3_0_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xb000 },
|
||||
.prio = 3,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_pcie3_0 = {
|
||||
.name = "xm_pcie3_0",
|
||||
.id = SM8650_MASTER_PCIE_0,
|
||||
.channels = 1,
|
||||
.buswidth = 8,
|
||||
.qosbox = &xm_pcie3_0_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_ANOC_PCIE_GEM_NOC },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox xm_pcie3_1_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0xc000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node xm_pcie3_1 = {
|
||||
.name = "xm_pcie3_1",
|
||||
.id = SM8650_MASTER_PCIE_1,
|
||||
.channels = 1,
|
||||
.buswidth = 16,
|
||||
.qosbox = &xm_pcie3_1_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_ANOC_PCIE_GEM_NOC },
|
||||
};
|
||||
@@ -534,6 +847,24 @@ static struct qcom_icc_node qnm_aggre2_noc = {
|
||||
.links = { SM8650_SLAVE_SNOC_GEM_NOC_SF },
|
||||
};
|
||||
|
||||
static struct qcom_icc_qosbox qnm_apss_noc_qos = {
|
||||
.num_ports = 1,
|
||||
.port_offsets = { 0x1c000 },
|
||||
.prio = 2,
|
||||
.urg_fwd = 0,
|
||||
.prio_fwd_disable = 1,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qnm_apss_noc = {
|
||||
.name = "qnm_apss_noc",
|
||||
.id = SM8650_MASTER_APSS_NOC,
|
||||
.channels = 1,
|
||||
.buswidth = 4,
|
||||
.qosbox = &qnm_apss_noc_qos,
|
||||
.num_links = 1,
|
||||
.links = { SM8650_SLAVE_SNOC_GEM_NOC_SF },
|
||||
};
|
||||
|
||||
static struct qcom_icc_node qns_a1noc_snoc = {
|
||||
.name = "qns_a1noc_snoc",
|
||||
.id = SM8650_SLAVE_A1NOC_SNOC,
|
||||
@@ -1325,6 +1656,7 @@ static struct qcom_icc_node * const aggre1_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_aggre1_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = aggre1_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
|
||||
};
|
||||
@@ -1346,6 +1678,7 @@ static struct qcom_icc_node * const aggre2_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_aggre2_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = aggre2_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
|
||||
.bcms = aggre2_noc_bcms,
|
||||
@@ -1429,6 +1762,7 @@ static struct qcom_icc_node * const config_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_config_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = config_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(config_noc_nodes),
|
||||
.bcms = config_noc_bcms,
|
||||
@@ -1456,6 +1790,7 @@ static struct qcom_icc_node * const cnoc_main_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_cnoc_main = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = cnoc_main_nodes,
|
||||
.num_nodes = ARRAY_SIZE(cnoc_main_nodes),
|
||||
.bcms = cnoc_main_bcms,
|
||||
@@ -1488,6 +1823,7 @@ static struct qcom_icc_node * const gem_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_gem_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = gem_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(gem_noc_nodes),
|
||||
.bcms = gem_noc_bcms,
|
||||
@@ -1500,6 +1836,7 @@ static struct qcom_icc_node * const lpass_ag_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_lpass_ag_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = lpass_ag_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(lpass_ag_noc_nodes),
|
||||
};
|
||||
@@ -1514,6 +1851,7 @@ static struct qcom_icc_node * const lpass_lpiaon_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_lpass_lpiaon_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = lpass_lpiaon_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(lpass_lpiaon_noc_nodes),
|
||||
.bcms = lpass_lpiaon_noc_bcms,
|
||||
@@ -1526,6 +1864,7 @@ static struct qcom_icc_node * const lpass_lpicx_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_lpass_lpicx_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = lpass_lpicx_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(lpass_lpicx_noc_nodes),
|
||||
};
|
||||
@@ -1569,6 +1908,7 @@ static struct qcom_icc_node * const mmss_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_mmss_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = mmss_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(mmss_noc_nodes),
|
||||
.bcms = mmss_noc_bcms,
|
||||
@@ -1585,6 +1925,7 @@ static struct qcom_icc_node * const nsp_noc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_nsp_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = nsp_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(nsp_noc_nodes),
|
||||
.bcms = nsp_noc_bcms,
|
||||
@@ -1604,6 +1945,7 @@ static struct qcom_icc_node * const pcie_anoc_nodes[] = {
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_pcie_anoc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = pcie_anoc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(pcie_anoc_nodes),
|
||||
.bcms = pcie_anoc_bcms,
|
||||
@@ -1620,9 +1962,11 @@ static struct qcom_icc_node * const system_noc_nodes[] = {
|
||||
[MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
|
||||
[MASTER_A2NOC_SNOC] = &qnm_aggre2_noc,
|
||||
[SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
|
||||
[MASTER_APSS_NOC] = &qnm_apss_noc,
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sm8650_system_noc = {
|
||||
.config = &icc_regmap_config,
|
||||
.nodes = system_noc_nodes,
|
||||
.num_nodes = ARRAY_SIZE(system_noc_nodes),
|
||||
.bcms = system_noc_bcms,
|
||||
|
||||
@@ -139,5 +139,6 @@
|
||||
#define SM8650_SLAVE_USB3_0 127
|
||||
#define SM8650_SLAVE_VENUS_CFG 128
|
||||
#define SM8650_SLAVE_VSENSE_CTRL_CFG 129
|
||||
#define SM8650_MASTER_APSS_NOC 130
|
||||
|
||||
#endif
|
||||
|
||||
@@ -150,5 +150,6 @@
|
||||
#define MASTER_A1NOC_SNOC 0
|
||||
#define MASTER_A2NOC_SNOC 1
|
||||
#define SLAVE_SNOC_GEM_NOC_SF 2
|
||||
#define MASTER_APSS_NOC 3
|
||||
|
||||
#endif
|
||||
|
||||
@@ -116,8 +116,10 @@ struct icc_node {
|
||||
|
||||
int icc_std_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
|
||||
u32 peak_bw, u32 *agg_avg, u32 *agg_peak);
|
||||
struct icc_node *icc_node_create_dyn(void);
|
||||
struct icc_node *icc_node_create(int id);
|
||||
void icc_node_destroy(int id);
|
||||
int icc_link_nodes(struct icc_node *src_node, struct icc_node **dst_node);
|
||||
int icc_link_create(struct icc_node *node, const int dst_id);
|
||||
void icc_node_add(struct icc_node *node, struct icc_provider *provider);
|
||||
void icc_node_del(struct icc_node *node);
|
||||
@@ -136,6 +138,11 @@ static inline int icc_std_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
static inline struct icc_node *icc_node_create_dyn(void)
|
||||
{
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
static inline struct icc_node *icc_node_create(int id)
|
||||
{
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
@@ -145,6 +152,11 @@ static inline void icc_node_destroy(int id)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int icc_link_nodes(struct icc_node *src_node, struct icc_node **dst_node)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int icc_link_create(struct icc_node *node, const int dst_id)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
#define Mbps_to_icc(x) ((x) * 1000 / 8)
|
||||
#define Gbps_to_icc(x) ((x) * 1000 * 1000 / 8)
|
||||
|
||||
/* macro to indicate dynamic id allocation */
|
||||
#define ICC_ALLOC_DYN_ID -1
|
||||
|
||||
struct icc_path;
|
||||
struct device;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user