On 16.01.2023 14:21, Konrad Dybcio wrote: > On newer SoCs (there's no clear boundary, but probably "new enough" > means every interconnect provider is either BIMC or QNoC and there > are no old-style NoC hosts) we're expected to set QoS registers > regardless of the ap_owned param. Add a bool in the qcom_icc_provider > and make the logic assume it's okay to set the registers when it's > set. > > Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> > --- Argh, I only noticed now that this patch is incomplete, missing setting the value in qnoc_probe() and adding a similar struct member to qcom_icc_desc.. Konrad > drivers/interconnect/qcom/icc-rpm.c | 2 +- > drivers/interconnect/qcom/icc-rpm.h | 2 ++ > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c > index 509cadf398e9..343e6021a93a 100644 > --- a/drivers/interconnect/qcom/icc-rpm.c > +++ b/drivers/interconnect/qcom/icc-rpm.c > @@ -243,7 +243,7 @@ static int __qcom_icc_set(struct icc_node *n, struct qcom_icc_node *qn, > bool vote_ap, vote_rpm; > int ret; > > - if (qp->type == QCOM_ICC_QNOC) { > + if (qp->type == QCOM_ICC_QNOC || qp->always_set_qos) { > vote_ap = true; > vote_rpm = true; > } else { > diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h > index 729573f0d9fe..3c8888482a39 100644 > --- a/drivers/interconnect/qcom/icc-rpm.h > +++ b/drivers/interconnect/qcom/icc-rpm.h > @@ -28,6 +28,7 @@ enum qcom_icc_type { > * @type: the ICC provider type > * @regmap: regmap for QoS registers read/write access > * @qos_offset: offset to QoS registers > + * @always_set_qos: whether to always set QoS registers regardless of bus type > * @bus_clk_rate: bus clock rate in Hz > * @bus_clks: the clk_bulk_data table of bus clocks > * @intf_clks: the clk_bulk_data table of interface clocks > @@ -39,6 +40,7 @@ struct qcom_icc_provider { > enum qcom_icc_type type; > struct regmap *regmap; > unsigned int qos_offset; > + bool always_set_qos; > u64 bus_clk_rate[2]; > struct clk_bulk_data bus_clks[2]; > struct clk_bulk_data intf_clks[];