Commit 8e3c98d9 authored by Sudeep Holla's avatar Sudeep Holla
Browse files

firmware: arm_scmi: Fix frequency truncation by promoting multiplier type



Fix the possible frequency truncation for all values equal to or greater
4GHz on 64bit machines by updating the multiplier 'mult_factor' to
'unsigned long' type. It is also possible that the multiplier itself can
be greater than or equal to 2^32. So we need to also fix the equation
computing the value of the multiplier.

Fixes: a9e3fbfa ("firmware: arm_scmi: add initial support for performance protocol")
Reported-by: default avatarSibi Sankar <quic_sibis@quicinc.com>
Closes: https://lore.kernel.org/all/20231129065748.19871-3-quic_sibis@quicinc.com/
Cc: Cristian Marussi <cristian.marussi@arm.com>
Link: https://lore.kernel.org/r/20231130204343.503076-1-sudeep.holla@arm.com


Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent b85ea95d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ struct perf_dom_info {
	u32 opp_count;
	u32 sustained_freq_khz;
	u32 sustained_perf_level;
	u32 mult_factor;
	unsigned long mult_factor;
	struct scmi_perf_domain_info info;
	struct scmi_opp opp[MAX_OPPS];
	struct scmi_fc_info *fc_info;
@@ -273,8 +273,8 @@ scmi_perf_domain_attributes_get(const struct scmi_protocol_handle *ph,
			dom_info->mult_factor =	1000;
		else
			dom_info->mult_factor =
					(dom_info->sustained_freq_khz * 1000) /
					dom_info->sustained_perf_level;
					(dom_info->sustained_freq_khz * 1000UL)
					/ dom_info->sustained_perf_level;
		strscpy(dom_info->info.name, attr->name,
			SCMI_SHORT_NAME_MAX_SIZE);
	}