[OpenBIOS] [commit] r1351 - trunk/openbios-devel/drivers
repository service
svn at openbios.org
Fri Oct 23 14:58:18 CEST 2015
Author: mcayland
Date: Fri Oct 23 14:58:18 2015
New Revision: 1351
URL: http://tracker.coreboot.org/trac/openbios/changeset/1351
Log:
ppc: fix CUDA ADB error packet detection
CUDA ADB error packets contain a 3-byte payload rather than a standard 2-byte
header plus payload (as seen in QEMU <= 2.4). Allow cuda_adb_req() to differentiate
between the two formats and act accordingly.
Signed-off-by: Cormac O'Brien <cormac at c-obrien.org>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
Modified:
trunk/openbios-devel/drivers/cuda.c
Modified: trunk/openbios-devel/drivers/cuda.c
==============================================================================
--- trunk/openbios-devel/drivers/cuda.c Fri Oct 23 14:58:16 2015 (r1350)
+++ trunk/openbios-devel/drivers/cuda.c Fri Oct 23 14:58:18 2015 (r1351)
@@ -144,8 +144,22 @@
// CUDA_DPRINTF("len: %d %02x\n", len, snd_buf[0]);
len = cuda_request(host, ADB_PACKET, snd_buf, len, buffer);
if (len > 1 && buffer[0] == ADB_PACKET) {
- pos = buffer + 2;
- len -= 2;
+ /* We handle 2 types of ADB packet here:
+ Normal: <type> <status> <data> ...
+ Error : <type> <status> <cmd> (<data> ...)
+ Ideally we should use buffer[1] (status) to determine whether this
+ is a normal or error packet but this requires a corresponding fix
+ in QEMU <= 2.4. Hence we temporarily handle it this way to ease
+ the transition. */
+ if (len > 2 && buffer[2] == snd_buf[0]) {
+ /* Error */
+ pos = buffer + 3;
+ len -= 3;
+ } else {
+ /* Normal */
+ pos = buffer + 2;
+ len -= 2;
+ }
} else {
pos = buffer + 1;
len = -1;
More information about the OpenBIOS
mailing list