There is a long-standing bug in the CUDA implementation of the reset-all and power-off words whereby an extra byte is written after the CUDA_RESET_SYSTEM and CUDA_POWERDOWN commands.
This extra byte used to be ignored in QEMU until commits 017da0b568 ("cuda: port POWERDOWN command to new framework") and 54e894442e ("cuda: port RESET_SYSTEM command to new framework") added a check which rejects the command if the command length is incorrect.
Fix the outgoing command length to remove the extra byte which allows the reset-all and power-off words to work in QEMU once again.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk Fixes: https://gitlab.com/qemu-project/qemu/-/issues/624 --- drivers/cuda.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/cuda.c b/drivers/cuda.c index 56d73e1..c89b174 100644 --- a/drivers/cuda.c +++ b/drivers/cuda.c @@ -177,7 +177,7 @@ static cuda_t *main_cuda; static void ppc32_reset_all(void) { - uint8_t cmdbuf[2], obuf[64]; + uint8_t cmdbuf[1], obuf[64];
cmdbuf[0] = CUDA_RESET_SYSTEM; cuda_request(main_cuda, CUDA_PACKET, cmdbuf, sizeof(cmdbuf), obuf); @@ -186,7 +186,7 @@ ppc32_reset_all(void) static void ppc32_poweroff(void) { - uint8_t cmdbuf[2], obuf[64]; + uint8_t cmdbuf[1], obuf[64];
cmdbuf[0] = CUDA_POWERDOWN; cuda_request(main_cuda, CUDA_PACKET, cmdbuf, sizeof(cmdbuf), obuf);