Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Timo Alho and committed by
Thierry Reding
775dba87 d5d91f30

+13 -2
+13 -2
drivers/soc/tegra/powergate-bpmp.c
··· 42 42 { 43 43 struct mrq_pg_request request; 44 44 struct tegra_bpmp_message msg; 45 + int err; 45 46 46 47 memset(&request, 0, sizeof(request)); 47 48 request.cmd = CMD_PG_SET_STATE; ··· 54 53 msg.tx.data = &request; 55 54 msg.tx.size = sizeof(request); 56 55 57 - return tegra_bpmp_transfer(bpmp, &msg); 56 + err = tegra_bpmp_transfer(bpmp, &msg); 57 + if (err < 0) 58 + return err; 59 + else if (msg.rx.ret < 0) 60 + return -EINVAL; 61 + 62 + return 0; 58 63 } 59 64 60 65 static int tegra_bpmp_powergate_get_state(struct tegra_bpmp *bpmp, ··· 87 80 err = tegra_bpmp_transfer(bpmp, &msg); 88 81 if (err < 0) 89 82 return PG_STATE_OFF; 83 + else if (msg.rx.ret < 0) 84 + return -EINVAL; 90 85 91 86 return response.get_state.state; 92 87 } ··· 115 106 err = tegra_bpmp_transfer(bpmp, &msg); 116 107 if (err < 0) 117 108 return err; 109 + else if (msg.rx.ret < 0) 110 + return -EINVAL; 118 111 119 112 return response.get_max_id.max_id; 120 113 } ··· 143 132 msg.rx.size = sizeof(response); 144 133 145 134 err = tegra_bpmp_transfer(bpmp, &msg); 146 - if (err < 0) 135 + if (err < 0 || msg.rx.ret < 0) 147 136 return NULL; 148 137 149 138 return kstrdup(response.get_name.name, GFP_KERNEL);