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:
Stefan Wahren 2018-10-06 13:31:56 +02:00
parent 651022382c
commit 0829187b17
1 changed files with 6 additions and 2 deletions

View File

@ -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);
} }