firmware: raspberrypi: Define timeout for transactions
We should never assume to get a reply from the firmware otherwise the call could block forever and the user don't get informed. So define a timeout of 1 sec and print a stacktrace once in the unlikely case the timeout expired. Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
651022382c
commit
0829187b17
|
@ -56,8 +56,12 @@ rpi_firmware_transaction(struct rpi_firmware *fw, u32 chan, u32 data)
|
||||||
reinit_completion(&fw->c);
|
reinit_completion(&fw->c);
|
||||||
ret = mbox_send_message(fw->chan, &message);
|
ret = mbox_send_message(fw->chan, &message);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
wait_for_completion(&fw->c);
|
if (wait_for_completion_timeout(&fw->c, HZ)) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
} else {
|
||||||
|
ret = -ETIMEDOUT;
|
||||||
|
WARN_ONCE(1, "Firmware transaction timeout");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dev_err(fw->cl.dev, "mbox_send_message returned %d\n", ret);
|
dev_err(fw->cl.dev, "mbox_send_message returned %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue