Commit 46418403 authored by Luca Weiss's avatar Luca Weiss Committed by Bjorn Andersson
Browse files

remoteproc: qcom_q6v5_mss: Handle platforms with one power domain



For example MSM8974 has mx voltage rail exposed as regulator and only cx
voltage rail is exposed as power domain. This power domain (cx) is
attached internally in power domain and cannot be attached in this driver.

Fixes: 8750cf39 ("remoteproc: qcom_q6v5_mss: Allow replacing regulators with power domains")
Co-developed-by: default avatarMatti Lehtimäki <matti.lehtimaki@gmail.com>
Signed-off-by: default avatarMatti Lehtimäki <matti.lehtimaki@gmail.com>
Reviewed-by: default avatarStephan Gerhold <stephan.gerhold@linaro.org>
Signed-off-by: default avatarLuca Weiss <luca@lucaweiss.eu>
Link: https://lore.kernel.org/r/20250217-msm8226-modem-v5-4-2bc74b80e0ae@lucaweiss.eu


Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent 41bf2a13
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -1831,6 +1831,13 @@ static int q6v5_pds_attach(struct device *dev, struct device **devs,
	while (pd_names[num_pds])
		num_pds++;

	/* Handle single power domain */
	if (num_pds == 1 && dev->pm_domain) {
		devs[0] = dev;
		pm_runtime_enable(dev);
		return 1;
	}

	for (i = 0; i < num_pds; i++) {
		devs[i] = dev_pm_domain_attach_by_name(dev, pd_names[i]);
		if (IS_ERR_OR_NULL(devs[i])) {
@@ -1851,8 +1858,15 @@ static int q6v5_pds_attach(struct device *dev, struct device **devs,
static void q6v5_pds_detach(struct q6v5 *qproc, struct device **pds,
			    size_t pd_count)
{
	struct device *dev = qproc->dev;
	int i;

	/* Handle single power domain */
	if (pd_count == 1 && dev->pm_domain) {
		pm_runtime_disable(dev);
		return;
	}

	for (i = 0; i < pd_count; i++)
		dev_pm_domain_detach(pds[i], false);
}
@@ -2449,13 +2463,13 @@ static const struct rproc_hexagon_res msm8974_mss = {
			.supply = "pll",
			.uA = 100000,
		},
		{}
	},
	.fallback_proxy_supply = (struct qcom_mss_reg_res[]) {
		{
			.supply = "mx",
			.uV = 1050000,
		},
		{}
	},
	.fallback_proxy_supply = (struct qcom_mss_reg_res[]) {
		{
			.supply = "cx",
			.uA = 100000,
@@ -2481,7 +2495,6 @@ static const struct rproc_hexagon_res msm8974_mss = {
		NULL
	},
	.proxy_pd_names = (char*[]){
		"mx",
		"cx",
		NULL
	},