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(a)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);
--
2.20.1
An upcoming change to QEMU's ESCC device reset mechanism exposed a bug
that OpenBIOS's ESCC driver doesn't actually reset the port before
attempting to configure it. Whilst this has no effect for now, once the
QEMU ESCC changes have been merged (which implement the reset as
documented in the datasheet), this port reset must be sent so that the
registers are set to their default values after power-on.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland(a)ilande.co.uk>
Mark Cave-Ayland (2):
escc: add port index to uart_init_line()
escc: send software reset command before configuring the port
drivers/escc.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
--
2.20.1