clk: tegra: Changes for v6.2-rc1

Implements new ABI flags for certain clocks for which the parent rate
 or clock state cannot be changed.
 -----BEGIN PGP SIGNATURE-----
 
 iQJHBAABCAAxFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAmN7rmATHHRyZWRpbmdA
 bnZpZGlhLmNvbQAKCRDdI6zXfz6zoaKpD/4xuSXf6Q8oqeGNvayhv7T0xMV+EYT2
 Y1ZGSPLBgst/vOr7H+6zlaZbBFQmvdg7fsngusfsdH5v8jFuf2WBHn6LahTz3nb7
 nolGFoInhRBhK8svM61MWdTMIi7iv6Jkh+Ql5w21QTNO0pVrN4hW2vmq5QfHVFVW
 jdHJwHuylv3/9G4fBaKK8OYXjeGtGadsBkrZH4e+rBhF2UTudTmOBerwjVUd3K8O
 r2nUGv7wgyIn2S7ekii/QUblh6hMeOkknj054IzMZp3XjnzzjFBdP7JvzFOWl8Bk
 sephIuM09Umob77nAC2y3ORXAzXmEifuTlD1RAHE5mcXg4EjGjGIP3CMRtaNG6ef
 RRHA3KGeG4+hdBg9NR7HJoUq1veGwLVXg/dIKQVvhh0i59HDh38B/DNSYIllUaox
 yZRcwIQRH9tN9pLgHkPr3ryUqpNGKpcrK+T6Jbdtls78vYeZjMjeLGWHxU8v6+Fd
 yh+HFbJ076Cc/PL1taN2N/u5QRsV0JpgwDhN3Y5grHEOoLSL8f5F/cT213PmIuIs
 UBeJ/9fnuXf5ncWjGjmbKjiJg105IclwitIpGFSfiAs+fNcDnCRHxukFU7uJ8ib0
 eLdGzyyV3Iov5cqCsjg3ePDhB5xPm8qi6qtyHmWXJV5gpkSgF9tOEF79D8cUl/E2
 SLV9makKRYCpSQ==
 =8chU
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmN9QMUACgkQmmx57+YA
 GNl+vw/8DbdHVkv7ZMrSKvJCffjpPb7DoO4/tfspD0fD6AOy1PgN+zSKL+bf3XLe
 Rn/csrMmaDT5EXshucUYsRFhW/TXn4K1qZ5kiENtadEfo5zqee0/yRSHg4NyDUD6
 3gFr5kIl75bVbIkyMVMs30yGzS0t8WnksPe8b3j6+Ij4SxuX6q3diBACldXSPRy3
 qAFQO3sZH9AhGGzA24ShKa5niGJRPGyaL6vBPdkeoVaVGf8kI0BKnfIKD6hEdvbp
 8NSUodxi2aFxt7AijhxmiwWNGaRREv6/4YpXg6rVEOC9fBdPlBFN+yjwHeVV8CsX
 vvFuIRZkxYItSRsNRwogfJsADPEYeBGePnjSKR5NoIfKQ9aV4gnN40+RDAXFm2s1
 6WW+/geEKMEHt38jeZdkE4f36R5GM6x4snedF0N5id4yg+1y3H+6oG/FRhn/oZ7m
 fpmBkHR/84H2kif29roaxV5cZjQev6+l384ixe4ba5cee0rORkGl77S/k2dllXHZ
 bihbws2USeYEzvr8fcDUVATrKpOsSntmxPMQ81loL24+VD5v6Ri1wh8onFCPI0V5
 sHExJKDR6suLyXdkscJtZ0lhv/laPbexzvT8iKN6aU1yIXXsr0q7hWQOid4mYfi/
 J49awSK3oGlEkVshApG5UXKlU13IsEvZ8FWDlSA095DBBdIaFCM=
 =5hng
 -----END PGP SIGNATURE-----

Merge tag 'tegra-for-6.2-clk-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into soc/drivers

clk: tegra: Changes for v6.2-rc1

Implements new ABI flags for certain clocks for which the parent rate
or clock state cannot be changed.

* tag 'tegra-for-6.2-clk-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux:
  clk: tegra: Support BPMP-FW ABI deny flags

Link: https://lore.kernel.org/r/20221121171239.2041835-3-thierry.reding@gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2022-11-22 22:36:04 +01:00
commit 381abc230b

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2016-2020 NVIDIA Corporation
* Copyright (C) 2016-2022 NVIDIA Corporation
*/
#include <linux/clk-provider.h>
@ -310,6 +310,23 @@ static const struct clk_ops tegra_bpmp_clk_mux_rate_ops = {
.set_rate = tegra_bpmp_clk_set_rate,
};
static const struct clk_ops tegra_bpmp_clk_mux_read_only_ops = {
.get_parent = tegra_bpmp_clk_get_parent,
.recalc_rate = tegra_bpmp_clk_recalc_rate,
};
static const struct clk_ops tegra_bpmp_clk_read_only_ops = {
.recalc_rate = tegra_bpmp_clk_recalc_rate,
};
static const struct clk_ops tegra_bpmp_clk_gate_mux_read_only_ops = {
.prepare = tegra_bpmp_clk_prepare,
.unprepare = tegra_bpmp_clk_unprepare,
.is_prepared = tegra_bpmp_clk_is_prepared,
.recalc_rate = tegra_bpmp_clk_recalc_rate,
.get_parent = tegra_bpmp_clk_get_parent,
};
static int tegra_bpmp_clk_get_max_id(struct tegra_bpmp *bpmp)
{
struct cmd_clk_get_max_clk_id_response response;
@ -510,8 +527,22 @@ tegra_bpmp_clk_register(struct tegra_bpmp *bpmp,
memset(&init, 0, sizeof(init));
init.name = info->name;
clk->hw.init = &init;
if (info->flags & TEGRA_BPMP_CLK_HAS_MUX) {
if (info->flags & BPMP_CLK_STATE_CHANGE_DENIED) {
if ((info->flags & BPMP_CLK_RATE_PARENT_CHANGE_DENIED) == 0) {
dev_WARN(bpmp->dev,
"Firmware bug! Inconsistent permission bits for clock %s. State and parent/rate changes disabled.",
init.name);
}
if (info->flags & TEGRA_BPMP_CLK_HAS_MUX)
init.ops = &tegra_bpmp_clk_mux_read_only_ops;
else
init.ops = &tegra_bpmp_clk_read_only_ops;
} else if (info->flags & BPMP_CLK_RATE_PARENT_CHANGE_DENIED) {
if (info->flags & TEGRA_BPMP_CLK_HAS_MUX)
init.ops = &tegra_bpmp_clk_gate_mux_read_only_ops;
else
init.ops = &tegra_bpmp_clk_gate_ops;
} else if (info->flags & TEGRA_BPMP_CLK_HAS_MUX) {
if (info->flags & TEGRA_BPMP_CLK_HAS_SET_RATE)
init.ops = &tegra_bpmp_clk_mux_rate_ops;
else