clk: tegra: Check BPMP response return code
authorTimo Alho <talho@nvidia.com>
Thu, 7 Sep 2017 09:31:02 +0000 (12:31 +0300)
committerThierry Reding <treding@nvidia.com>
Thu, 19 Oct 2017 14:38:40 +0000 (16:38 +0200)
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: Timo Alho <talho@nvidia.com>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/clk/tegra/clk-bpmp.c

index 638ace6..a896692 100644 (file)
@@ -55,6 +55,7 @@ struct tegra_bpmp_clk_message {
        struct {
                void *data;
                size_t size;
+               int ret;
        } rx;
 };
 
@@ -64,6 +65,7 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp,
        struct mrq_clk_request request;
        struct tegra_bpmp_message msg;
        void *req = &request;
+       int err;
 
        memset(&request, 0, sizeof(request));
        request.cmd_and_id = (clk->cmd << 24) | clk->id;
@@ -84,7 +86,13 @@ static int tegra_bpmp_clk_transfer(struct tegra_bpmp *bpmp,
        msg.rx.data = clk->rx.data;
        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)
@@ -414,11 +422,8 @@ static int tegra_bpmp_probe_clocks(struct tegra_bpmp *bpmp,
                struct tegra_bpmp_clk_info *info = &clocks[count];
 
                err = tegra_bpmp_clk_get_info(bpmp, id, info);
-               if (err < 0) {
-                       dev_err(bpmp->dev, "failed to query clock %u: %d\n",
-                               id, err);
+               if (err < 0)
                        continue;
-               }
 
                if (info->num_parents >= U8_MAX) {
                        dev_err(bpmp->dev,