mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-28 05:34:13 -05:00
Merge tag 'icc-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc into char-misc-next
Georgi writes: interconnect changes for 6.2 These are the interconnect changes for the 6.2-rc1 merge window consisting of new drivers to enable both L3 and DDR scaling on sc8280xp platforms. There are also a few miscellaneous fixes. New osm-l3 driver: - interconnect: qcom: osm-l3: Use platform-independent node ids - interconnect: qcom: osm-l3: Squash common descriptors - interconnect: qcom: osm-l3: Add per-core EPSS L3 support - interconnect: qcom: osm-l3: Simplify osm_l3_set() - dt-bindings: interconnect: Add sm8350, sc8280xp and generic OSM L3 compatibles - dt-bindings: interconnect: qcom,msm8998-bwmon: Add sc8280xp bwmon instances Fixes: - interconnect: qcom: icc-rpm: Remove redundant dev_err call - interconnect: qcom: sc7180: fix dropped const of qcom_icc_bcm - interconnect: qcom: sc7180: drop double space - interconnect: qcom: sc8180x: constify pointer to qcom_icc_node Signed-off-by: Georgi Djakov <djakov@kernel.org> * tag 'icc-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc: interconnect: qcom: sc8180x: constify pointer to qcom_icc_node interconnect: qcom: sc7180: drop double space interconnect: qcom: sc7180: fix dropped const of qcom_icc_bcm interconnect: qcom: icc-rpm: Remove redundant dev_err call dt-bindings: interconnect: qcom,msm8998-bwmon: Add sc8280xp bwmon instances dt-bindings: interconnect: Add sm8350, sc8280xp and generic OSM L3 compatibles interconnect: qcom: osm-l3: Simplify osm_l3_set() interconnect: qcom: osm-l3: Add per-core EPSS L3 support interconnect: qcom: osm-l3: Squash common descriptors interconnect: qcom: osm-l3: Use platform-independent node ids dt-bindings: interconnect: qcom,msm8998-bwmon: Correct SC7280 CPU compatible
This commit is contained in:
@@ -24,10 +24,15 @@ properties:
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sc7280-bwmon
|
||||
- qcom,sc7280-cpu-bwmon
|
||||
- qcom,sc8280xp-cpu-bwmon
|
||||
- qcom,sdm845-bwmon
|
||||
- const: qcom,msm8998-bwmon
|
||||
- const: qcom,msm8998-bwmon # BWMON v4
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sc8280xp-llcc-bwmon
|
||||
- const: qcom,sc7280-llcc-bwmon
|
||||
- const: qcom,sc7280-llcc-bwmon # BWMON v5
|
||||
- const: qcom,sdm845-llcc-bwmon # BWMON v5
|
||||
|
||||
|
||||
@@ -16,13 +16,21 @@ description:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,sc7180-osm-l3
|
||||
- qcom,sc7280-epss-l3
|
||||
- qcom,sc8180x-osm-l3
|
||||
- qcom,sdm845-osm-l3
|
||||
- qcom,sm8150-osm-l3
|
||||
- qcom,sm8250-epss-l3
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sc7180-osm-l3
|
||||
- qcom,sc8180x-osm-l3
|
||||
- qcom,sdm845-osm-l3
|
||||
- qcom,sm8150-osm-l3
|
||||
- const: qcom,osm-l3
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sc7280-epss-l3
|
||||
- qcom,sc8280xp-epss-l3
|
||||
- qcom,sm8250-epss-l3
|
||||
- qcom,sm8350-epss-l3
|
||||
- const: qcom,epss-l3
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -56,7 +64,7 @@ examples:
|
||||
#define RPMH_CXO_CLK 0
|
||||
|
||||
osm_l3: interconnect@17d41000 {
|
||||
compatible = "qcom,sdm845-osm-l3";
|
||||
compatible = "qcom,sdm845-osm-l3", "qcom,osm-l3";
|
||||
reg = <0x17d41000 0x1400>;
|
||||
|
||||
clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>;
|
||||
|
||||
@@ -477,11 +477,8 @@ int qnoc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
mmio = devm_ioremap_resource(dev, res);
|
||||
|
||||
if (IS_ERR(mmio)) {
|
||||
dev_err(dev, "Cannot ioremap interconnect bus resource\n");
|
||||
if (IS_ERR(mmio))
|
||||
return PTR_ERR(mmio);
|
||||
}
|
||||
|
||||
qp->regmap = devm_regmap_init_mmio(dev, mmio, desc->regmap_cfg);
|
||||
if (IS_ERR(qp->regmap)) {
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
/* EPSS Register offsets */
|
||||
#define EPSS_LUT_ROW_SIZE 4
|
||||
#define EPSS_REG_L3_VOTE 0x90
|
||||
#define EPSS_REG_FREQ_LUT 0x100
|
||||
#define EPSS_REG_PERF_STATE 0x320
|
||||
|
||||
@@ -74,6 +75,11 @@ 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, ...) \
|
||||
static const struct qcom_osm_l3_node _name = { \
|
||||
.name = #_name, \
|
||||
@@ -83,100 +89,44 @@ struct qcom_osm_l3_desc {
|
||||
.links = { __VA_ARGS__ }, \
|
||||
}
|
||||
|
||||
DEFINE_QNODE(sdm845_osm_apps_l3, SDM845_MASTER_OSM_L3_APPS, 16, SDM845_SLAVE_OSM_L3);
|
||||
DEFINE_QNODE(sdm845_osm_l3, SDM845_SLAVE_OSM_L3, 16);
|
||||
DEFINE_QNODE(osm_l3_master, OSM_L3_MASTER_NODE, 16, OSM_L3_SLAVE_NODE);
|
||||
DEFINE_QNODE(osm_l3_slave, OSM_L3_SLAVE_NODE, 16);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sdm845_osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &sdm845_osm_apps_l3,
|
||||
[SLAVE_OSM_L3] = &sdm845_osm_l3,
|
||||
static const struct qcom_osm_l3_node * const osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &osm_l3_master,
|
||||
[SLAVE_OSM_L3] = &osm_l3_slave,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sdm845_icc_osm_l3 = {
|
||||
.nodes = sdm845_osm_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sdm845_osm_l3_nodes),
|
||||
DEFINE_QNODE(epss_l3_master, OSM_L3_MASTER_NODE, 32, OSM_L3_SLAVE_NODE);
|
||||
DEFINE_QNODE(epss_l3_slave, OSM_L3_SLAVE_NODE, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const epss_l3_nodes[] = {
|
||||
[MASTER_EPSS_L3_APPS] = &epss_l3_master,
|
||||
[SLAVE_EPSS_L3_SHARED] = &epss_l3_slave,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc osm_l3 = {
|
||||
.nodes = osm_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(osm_l3_nodes),
|
||||
.lut_row_size = OSM_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = OSM_REG_FREQ_LUT,
|
||||
.reg_perf_state = OSM_REG_PERF_STATE,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(sc7180_osm_apps_l3, SC7180_MASTER_OSM_L3_APPS, 16, SC7180_SLAVE_OSM_L3);
|
||||
DEFINE_QNODE(sc7180_osm_l3, SC7180_SLAVE_OSM_L3, 16);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sc7180_osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &sc7180_osm_apps_l3,
|
||||
[SLAVE_OSM_L3] = &sc7180_osm_l3,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sc7180_icc_osm_l3 = {
|
||||
.nodes = sc7180_osm_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sc7180_osm_l3_nodes),
|
||||
.lut_row_size = OSM_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = OSM_REG_FREQ_LUT,
|
||||
.reg_perf_state = OSM_REG_PERF_STATE,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(sc7280_epss_apps_l3, SC7280_MASTER_EPSS_L3_APPS, 32, SC7280_SLAVE_EPSS_L3);
|
||||
DEFINE_QNODE(sc7280_epss_l3, SC7280_SLAVE_EPSS_L3, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sc7280_epss_l3_nodes[] = {
|
||||
[MASTER_EPSS_L3_APPS] = &sc7280_epss_apps_l3,
|
||||
[SLAVE_EPSS_L3_SHARED] = &sc7280_epss_l3,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sc7280_icc_epss_l3 = {
|
||||
.nodes = sc7280_epss_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sc7280_epss_l3_nodes),
|
||||
static const struct qcom_osm_l3_desc epss_l3_perf_state = {
|
||||
.nodes = epss_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(epss_l3_nodes),
|
||||
.lut_row_size = EPSS_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = EPSS_REG_FREQ_LUT,
|
||||
.reg_perf_state = EPSS_REG_PERF_STATE,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(sc8180x_osm_apps_l3, SC8180X_MASTER_OSM_L3_APPS, 32, SC8180X_SLAVE_OSM_L3);
|
||||
DEFINE_QNODE(sc8180x_osm_l3, SC8180X_SLAVE_OSM_L3, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sc8180x_osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &sc8180x_osm_apps_l3,
|
||||
[SLAVE_OSM_L3] = &sc8180x_osm_l3,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sc8180x_icc_osm_l3 = {
|
||||
.nodes = sc8180x_osm_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sc8180x_osm_l3_nodes),
|
||||
.lut_row_size = OSM_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = OSM_REG_FREQ_LUT,
|
||||
.reg_perf_state = OSM_REG_PERF_STATE,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(sm8150_osm_apps_l3, SM8150_MASTER_OSM_L3_APPS, 32, SM8150_SLAVE_OSM_L3);
|
||||
DEFINE_QNODE(sm8150_osm_l3, SM8150_SLAVE_OSM_L3, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sm8150_osm_l3_nodes[] = {
|
||||
[MASTER_OSM_L3_APPS] = &sm8150_osm_apps_l3,
|
||||
[SLAVE_OSM_L3] = &sm8150_osm_l3,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sm8150_icc_osm_l3 = {
|
||||
.nodes = sm8150_osm_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sm8150_osm_l3_nodes),
|
||||
.lut_row_size = OSM_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = OSM_REG_FREQ_LUT,
|
||||
.reg_perf_state = OSM_REG_PERF_STATE,
|
||||
};
|
||||
|
||||
DEFINE_QNODE(sm8250_epss_apps_l3, SM8250_MASTER_EPSS_L3_APPS, 32, SM8250_SLAVE_EPSS_L3);
|
||||
DEFINE_QNODE(sm8250_epss_l3, SM8250_SLAVE_EPSS_L3, 32);
|
||||
|
||||
static const struct qcom_osm_l3_node * const sm8250_epss_l3_nodes[] = {
|
||||
[MASTER_EPSS_L3_APPS] = &sm8250_epss_apps_l3,
|
||||
[SLAVE_EPSS_L3_SHARED] = &sm8250_epss_l3,
|
||||
};
|
||||
|
||||
static const struct qcom_osm_l3_desc sm8250_icc_epss_l3 = {
|
||||
.nodes = sm8250_epss_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(sm8250_epss_l3_nodes),
|
||||
static const struct qcom_osm_l3_desc epss_l3_l3_vote = {
|
||||
.nodes = epss_l3_nodes,
|
||||
.num_nodes = ARRAY_SIZE(epss_l3_nodes),
|
||||
.lut_row_size = EPSS_LUT_ROW_SIZE,
|
||||
.reg_freq_lut = EPSS_REG_FREQ_LUT,
|
||||
.reg_perf_state = EPSS_REG_PERF_STATE,
|
||||
.reg_perf_state = EPSS_REG_L3_VOTE,
|
||||
};
|
||||
|
||||
static int qcom_osm_l3_set(struct icc_node *src, struct icc_node *dst)
|
||||
@@ -184,22 +134,14 @@ static int qcom_osm_l3_set(struct icc_node *src, struct icc_node *dst)
|
||||
struct qcom_osm_l3_icc_provider *qp;
|
||||
struct icc_provider *provider;
|
||||
const struct qcom_osm_l3_node *qn;
|
||||
struct icc_node *n;
|
||||
unsigned int index;
|
||||
u32 agg_peak = 0;
|
||||
u32 agg_avg = 0;
|
||||
u64 rate;
|
||||
|
||||
qn = src->data;
|
||||
provider = src->provider;
|
||||
qp = to_osm_l3_provider(provider);
|
||||
|
||||
list_for_each_entry(n, &provider->nodes, node_list)
|
||||
provider->aggregate(n, 0, n->avg_bw, n->peak_bw,
|
||||
&agg_avg, &agg_peak);
|
||||
|
||||
rate = max(agg_avg, agg_peak);
|
||||
rate = icc_units_to_bps(rate);
|
||||
rate = icc_units_to_bps(dst->peak_bw);
|
||||
do_div(rate, qn->buswidth);
|
||||
|
||||
for (index = 0; index < qp->max_state - 1; index++) {
|
||||
@@ -344,12 +286,14 @@ static int qcom_osm_l3_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
static const struct of_device_id osm_l3_of_match[] = {
|
||||
{ .compatible = "qcom,sc7180-osm-l3", .data = &sc7180_icc_osm_l3 },
|
||||
{ .compatible = "qcom,sc7280-epss-l3", .data = &sc7280_icc_epss_l3 },
|
||||
{ .compatible = "qcom,sdm845-osm-l3", .data = &sdm845_icc_osm_l3 },
|
||||
{ .compatible = "qcom,sm8150-osm-l3", .data = &sm8150_icc_osm_l3 },
|
||||
{ .compatible = "qcom,sc8180x-osm-l3", .data = &sc8180x_icc_osm_l3 },
|
||||
{ .compatible = "qcom,sm8250-epss-l3", .data = &sm8250_icc_epss_l3 },
|
||||
{ .compatible = "qcom,epss-l3", .data = &epss_l3_l3_vote },
|
||||
{ .compatible = "qcom,osm-l3", .data = &osm_l3 },
|
||||
{ .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 },
|
||||
{ .compatible = "qcom,sm8150-osm-l3", .data = &osm_l3 },
|
||||
{ .compatible = "qcom,sc8180x-osm-l3", .data = &osm_l3 },
|
||||
{ .compatible = "qcom,sm8250-epss-l3", .data = &epss_l3_perf_state },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, osm_l3_of_match);
|
||||
|
||||
@@ -369,7 +369,7 @@ static const struct qcom_icc_desc sc7180_gem_noc = {
|
||||
.num_bcms = ARRAY_SIZE(gem_noc_bcms),
|
||||
};
|
||||
|
||||
static struct qcom_icc_bcm *mc_virt_bcms[] = {
|
||||
static struct qcom_icc_bcm * const mc_virt_bcms[] = {
|
||||
&bcm_acv,
|
||||
&bcm_mc0,
|
||||
};
|
||||
@@ -443,7 +443,7 @@ static struct qcom_icc_node * const qup_virt_nodes[] = {
|
||||
[SLAVE_QUP_CORE_1] = &qup_core_slave_2,
|
||||
};
|
||||
|
||||
static const struct qcom_icc_desc sc7180_qup_virt = {
|
||||
static const struct qcom_icc_desc sc7180_qup_virt = {
|
||||
.nodes = qup_virt_nodes,
|
||||
.num_nodes = ARRAY_SIZE(qup_virt_nodes),
|
||||
.bcms = qup_virt_bcms,
|
||||
|
||||
@@ -1889,7 +1889,7 @@ static struct qcom_icc_bcm * const qup_virt_bcms[] = {
|
||||
&bcm_qup0,
|
||||
};
|
||||
|
||||
static struct qcom_icc_node *qup_virt_nodes[] = {
|
||||
static struct qcom_icc_node * const qup_virt_nodes[] = {
|
||||
[MASTER_QUP_CORE_0] = &mas_qup_core_0,
|
||||
[MASTER_QUP_CORE_1] = &mas_qup_core_1,
|
||||
[MASTER_QUP_CORE_2] = &mas_qup_core_2,
|
||||
|
||||
Reference in New Issue
Block a user