aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimo Alho <talho@nvidia.com>2017-09-07 05:31:04 -0400
committerThierry Reding <treding@nvidia.com>2017-10-19 10:33:57 -0400
commit775dba87f891e99c2f46df17edd5f5359d0883ad (patch)
tree839d0976e12482c0ec2278437a58006ddde86267
parentd5d91f30860f9c1139c41a652461e9d54614670d (diff)
soc/tegra: bpmp: Check BPMP response return code
Add checks for the return code in BPMP response messages. Signed-off-by: Timo Alho <talho@nvidia.com> Acked-by: Jon Hunter <jonathanh@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/soc/tegra/powergate-bpmp.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/soc/tegra/powergate-bpmp.c b/drivers/soc/tegra/powergate-bpmp.c
index 8fc356039401..82c7e27cd8bb 100644
--- a/drivers/soc/tegra/powergate-bpmp.c
+++ b/drivers/soc/tegra/powergate-bpmp.c
@@ -42,6 +42,7 @@ static int tegra_bpmp_powergate_set_state(struct tegra_bpmp *bpmp,
42{ 42{
43 struct mrq_pg_request request; 43 struct mrq_pg_request request;
44 struct tegra_bpmp_message msg; 44 struct tegra_bpmp_message msg;
45 int err;
45 46
46 memset(&request, 0, sizeof(request)); 47 memset(&request, 0, sizeof(request));
47 request.cmd = CMD_PG_SET_STATE; 48 request.cmd = CMD_PG_SET_STATE;
@@ -53,7 +54,13 @@ static int tegra_bpmp_powergate_set_state(struct tegra_bpmp *bpmp,
53 msg.tx.data = &request; 54 msg.tx.data = &request;
54 msg.tx.size = sizeof(request); 55 msg.tx.size = sizeof(request);
55 56
56 return tegra_bpmp_transfer(bpmp, &msg); 57 err = tegra_bpmp_transfer(bpmp, &msg);
58 if (err < 0)
59 return err;
60 else if (msg.rx.ret < 0)
61 return -EINVAL;
62
63 return 0;
57} 64}
58 65
59static int tegra_bpmp_powergate_get_state(struct tegra_bpmp *bpmp, 66static int tegra_bpmp_powergate_get_state(struct tegra_bpmp *bpmp,
@@ -80,6 +87,8 @@ static int tegra_bpmp_powergate_get_state(struct tegra_bpmp *bpmp,
80 err = tegra_bpmp_transfer(bpmp, &msg); 87 err = tegra_bpmp_transfer(bpmp, &msg);
81 if (err < 0) 88 if (err < 0)
82 return PG_STATE_OFF; 89 return PG_STATE_OFF;
90 else if (msg.rx.ret < 0)
91 return -EINVAL;
83 92
84 return response.get_state.state; 93 return response.get_state.state;
85} 94}
@@ -106,6 +115,8 @@ static int tegra_bpmp_powergate_get_max_id(struct tegra_bpmp *bpmp)
106 err = tegra_bpmp_transfer(bpmp, &msg); 115 err = tegra_bpmp_transfer(bpmp, &msg);
107 if (err < 0) 116 if (err < 0)
108 return err; 117 return err;
118 else if (msg.rx.ret < 0)
119 return -EINVAL;
109 120
110 return response.get_max_id.max_id; 121 return response.get_max_id.max_id;
111} 122}
@@ -132,7 +143,7 @@ static char *tegra_bpmp_powergate_get_name(struct tegra_bpmp *bpmp,
132 msg.rx.size = sizeof(response); 143 msg.rx.size = sizeof(response);
133 144
134 err = tegra_bpmp_transfer(bpmp, &msg); 145 err = tegra_bpmp_transfer(bpmp, &msg);
135 if (err < 0) 146 if (err < 0 || msg.rx.ret < 0)
136 return NULL; 147 return NULL;
137 148
138 return kstrdup(response.get_name.name, GFP_KERNEL); 149 return kstrdup(response.get_name.name, GFP_KERNEL);