[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