[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<PAXPR04MB84594531A13411940EDE6D2F88862@PAXPR04MB8459.eurprd04.prod.outlook.com>
Date: Tue, 13 Aug 2024 00:26:40 +0000
From: Peng Fan <peng.fan@....com>
To: "Peng Fan (OSS)" <peng.fan@....nxp.com>, "sudeep.holla@....com"
<sudeep.holla@....com>, "cristian.marussi@....com"
<cristian.marussi@....com>, "saravanak@...gle.com" <saravanak@...gle.com>
CC: "linux-arm-kernel@...ts.infradead.org"
<linux-arm-kernel@...ts.infradead.org>, "linux-kernel@...r.kernel.org"
<linux-kernel@...r.kernel.org>, "arm-scmi@...r.kernel.org"
<arm-scmi@...r.kernel.org>
Subject: RE: [PATCH V2] firmware: arm_scmi: bus: bypass set fwnode for scmi
cpufreq
> Subject: [PATCH V2] firmware: arm_scmi: bus: bypass set fwnode for
> scmi cpufreq
Any comments?
Thanks,
Peng.
>
> From: Peng Fan <peng.fan@....com>
>
> Two drivers scmi_cpufreq.c and scmi_perf_domain.c both use
> SCMI_PROTCOL_PERF protocol, but with different name, so two scmi
> devices will be created. But the fwnode->dev could only point to one
> device.
>
> If scmi cpufreq device created earlier, the fwnode->dev will point to the
> scmi cpufreq device. Then the fw_devlink will link performance domain
> user device(consumer) to the scmi cpufreq device(supplier).
> But actually the performance domain user device, such as GPU, should
> use the scmi perf device as supplier. Also if 'cpufreq.off=1' in bootargs,
> the GPU driver will defer probe always, because of the scmi cpufreq
> device not ready.
>
> Because for cpufreq, no need use fw_devlink. So bypass setting fwnode
> for scmi cpufreq device.
>
> Fixes: 96da4a99ce50 ("firmware: arm_scmi: Set fwnode for the
> scmi_device")
> Signed-off-by: Peng Fan <peng.fan@....com>
> ---
>
> V2:
> Use A!=B to replace !(A == B)
> Add fixes tag
> This might be a workaround, but since this is a fix, it is simple for
> backporting.
>
> V1:
> https://lore.kernel.org/all/20240717093515.327647-1-
> peng.fan@....nxp.com/
>
> drivers/firmware/arm_scmi/bus.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/firmware/arm_scmi/bus.c
> b/drivers/firmware/arm_scmi/bus.c index
> 96b2e5f9a8ef..be91a82e0cda 100644
> --- a/drivers/firmware/arm_scmi/bus.c
> +++ b/drivers/firmware/arm_scmi/bus.c
> @@ -395,7 +395,8 @@ __scmi_device_create(struct device_node *np,
> struct device *parent,
> scmi_dev->id = id;
> scmi_dev->protocol_id = protocol;
> scmi_dev->dev.parent = parent;
> - device_set_node(&scmi_dev->dev, of_fwnode_handle(np));
> + if ((protocol != SCMI_PROTOCOL_PERF) || strcmp(name,
> "cpufreq"))
> + device_set_node(&scmi_dev->dev,
> of_fwnode_handle(np));
> scmi_dev->dev.bus = &scmi_bus_type;
> scmi_dev->dev.release = scmi_device_release;
> dev_set_name(&scmi_dev->dev, "scmi_dev.%d", id);
> --
> 2.37.1
Powered by blists - more mailing lists