@@ -250,7 +250,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 {
@@ -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;
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[];
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@linaro.org> --- drivers/interconnect/qcom/icc-rpm.c | 2 +- drivers/interconnect/qcom/icc-rpm.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)