Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

interconnect: qcom: icc-rpmh: Get parent's regmap for nested NoCs

Since commit 57eb14779dfd ("interconnect: qcom: icc-rpmh: Support child
NoC device probe") the icc-rpmh driver supports initializing child NoCs,
but those child NoCs also need to be able to get the parent's regmap in
order to enable QoS.

Change the driver to support that and support programming QoS register.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20251114-sm6350-icc-qos-v2-2-6af348cb9c69@fairphone.com
Signed-off-by: Georgi Djakov <djakov@kernel.org>

authored by

Luca Weiss and committed by
Georgi Djakov
b56fb8aa dfb17173

+12 -7
+12 -7
drivers/interconnect/qcom/icc-rpmh.c
··· 308 308 struct resource *res; 309 309 void __iomem *base; 310 310 311 - base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 312 - if (IS_ERR(base)) 313 - goto skip_qos_config; 311 + /* Try parent's regmap first */ 312 + qp->regmap = dev_get_regmap(dev->parent, NULL); 313 + if (!qp->regmap) { 314 + base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 315 + if (IS_ERR(base)) 316 + goto skip_qos_config; 314 317 315 - qp->regmap = devm_regmap_init_mmio(dev, base, desc->config); 316 - if (IS_ERR(qp->regmap)) { 317 - dev_info(dev, "Skipping QoS, regmap failed; %ld\n", PTR_ERR(qp->regmap)); 318 - goto skip_qos_config; 318 + qp->regmap = devm_regmap_init_mmio(dev, base, desc->config); 319 + if (IS_ERR(qp->regmap)) { 320 + dev_info(dev, "Skipping QoS, regmap failed; %ld\n", 321 + PTR_ERR(qp->regmap)); 322 + goto skip_qos_config; 323 + } 319 324 } 320 325 321 326 qp->num_clks = devm_clk_bulk_get_all(qp->dev, &qp->clks);