mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 09:42:19 +03:00
clk: tegra: support BPMP-FW ABI deny flags
Support BPMP_CLK_STATE_CHANGE_DENIED by not populating state changing operations when the flag is set. Support BPMP_CLK_RATE_PARENT_CHANGE_DENIED by not populating rate or parent changing operations when the flag is set. Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com> Change-Id: I26b6a5efdf74c5a52bce67d0afd018007a977574 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2799593 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Timo Alho <talho@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
f23cc48733
commit
b2fd0f798c
@@ -310,6 +310,23 @@ static const struct clk_ops tegra_bpmp_clk_mux_rate_ops = {
|
|||||||
.set_rate = tegra_bpmp_clk_set_rate,
|
.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)
|
static int tegra_bpmp_clk_get_max_id(struct tegra_bpmp *bpmp)
|
||||||
{
|
{
|
||||||
struct cmd_clk_get_max_clk_id_response response;
|
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));
|
memset(&init, 0, sizeof(init));
|
||||||
init.name = info->name;
|
init.name = info->name;
|
||||||
clk->hw.init = &init;
|
clk->hw.init = &init;
|
||||||
|
if (info->flags & BPMP_CLK_STATE_CHANGE_DENIED) {
|
||||||
if (info->flags & TEGRA_BPMP_CLK_HAS_MUX) {
|
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)
|
if (info->flags & TEGRA_BPMP_CLK_HAS_SET_RATE)
|
||||||
init.ops = &tegra_bpmp_clk_mux_rate_ops;
|
init.ops = &tegra_bpmp_clk_mux_rate_ops;
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user