Commit 231ca2e5 authored by Timo Alho's avatar Timo Alho Committed by Thierry Reding

clk: tegra: Check BPMP response return code

Check return code in BPMP response message(s). The typical error case is
when a clock operation is attempted with an invalid clock identifier.

Also remove error print from call to clk_get_info() as the
implementation loops through the range of all possible identifiers, yet
the operation is expected to error out when the clock ID is unused.
Signed-off-by: default avatarTimo Alho <talho@nvidia.com>
Acked-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 8f43ff6b
...@@ -55,6 +55,7 @@ struct tegra_bpmp_clk_message { ...@@ -55,6 +55,7 @@ struct tegra_bpmp_clk_message {
struct { struct {
void *data; void *data;
size_t size; size_t size;
int ret;
} rx; } rx;
}; };
...@@ -64,6 +65,7 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp, ...@@ -64,6 +65,7 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp,
struct mrq_clk_request request; struct mrq_clk_request request;
struct tegra_bpmp_message msg; struct tegra_bpmp_message msg;
void *req = &request; void *req = &request;
int err;
memset(&request, 0, sizeof(request)); memset(&request, 0, sizeof(request));
request.cmd_and_id = (clk->cmd << 24) | clk->id; request.cmd_and_id = (clk->cmd << 24) | clk->id;
...@@ -84,7 +86,13 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp, ...@@ -84,7 +86,13 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp,
msg.rx.data = clk->rx.data; msg.rx.data = clk->rx.data;
msg.rx.size = clk->rx.size; msg.rx.size = clk->rx.size;
return tegra_bpmp_transfer(bpmp, &msg); err = tegra_bpmp_transfer(bpmp, &msg);
if (err < 0)
return err;
else if (msg.rx.ret < 0)
return -EINVAL;
return 0;
} }
static int tegra_bpmp_clk_prepare(struct clk_hw *hw) static int tegra_bpmp_clk_prepare(struct clk_hw *hw)
...@@ -414,11 +422,8 @@ static int tegra_bpmp_probe_clocks(struct tegra_bpmp *bpmp, ...@@ -414,11 +422,8 @@ static int tegra_bpmp_probe_clocks(struct tegra_bpmp *bpmp,
struct tegra_bpmp_clk_info *info = &clocks[count]; struct tegra_bpmp_clk_info *info = &clocks[count];
err = tegra_bpmp_clk_get_info(bpmp, id, info); err = tegra_bpmp_clk_get_info(bpmp, id, info);
if (err < 0) { if (err < 0)
dev_err(bpmp->dev, "failed to query clock %u: %d\n",
id, err);
continue; continue;
}
if (info->num_parents >= U8_MAX) { if (info->num_parents >= U8_MAX) {
dev_err(bpmp->dev, dev_err(bpmp->dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment