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

clk: tegra: bpmp: Clamp clock rates on requests

BPMP firmware ABI expects the rate inputs in int64_t. However,
tegra_bpmp_clk_round_rate() and tegra_bpmp_clk_set_rate() functions
directly assign 'unsigned long' inputs to a int64_t value causing
unexpected rounding errors.

Fix this by clipping the input rate to S64_MAX.

Signed-off-by: Sivaram Nair <sivaramn@nvidia.com>
[mperttunen: slight cleanup]
Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Reviewed-by: Sivaram Nair <sivaramn@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>

authored by

Sivaram Nair and committed by
Thierry Reding
a886c310 6160aca4

+3 -3
+3 -3
drivers/clk/tegra/clk-bpmp.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-only 2 2 /* 3 - * Copyright (C) 2016 NVIDIA Corporation 3 + * Copyright (C) 2016-2020 NVIDIA Corporation 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> ··· 174 174 int err; 175 175 176 176 memset(&request, 0, sizeof(request)); 177 - request.rate = rate; 177 + request.rate = min_t(u64, rate, S64_MAX); 178 178 179 179 memset(&msg, 0, sizeof(msg)); 180 180 msg.cmd = CMD_CLK_ROUND_RATE; ··· 256 256 struct tegra_bpmp_clk_message msg; 257 257 258 258 memset(&request, 0, sizeof(request)); 259 - request.rate = rate; 259 + request.rate = min_t(u64, rate, S64_MAX); 260 260 261 261 memset(&msg, 0, sizeof(msg)); 262 262 msg.cmd = CMD_CLK_SET_RATE;