broadcom/genxml: Support address fields with <32 bits
authorEric Anholt <eric@anholt.net>
Thu, 13 Jul 2017 19:40:58 +0000 (12:40 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 25 Jul 2017 21:55:12 +0000 (14:55 -0700)
I was writing the XML such that the address field overlapped various flags
in the alignment bits, which caused pain when trying to unpack for decode.
Instead, keep the XML matching the docs (address fields don't overlap),
and just infer the appropriate shift value during decode.

During pack, the address is just applied to the appropriate bits
already, ignoring the sub-byte start/end fields.

src/broadcom/cle/v3d_decoder.c

index 66f74af306fb5bd43420ab9b2cacd30dec693865..ac33d87191c7b99f4fb43e5872bd86e664578129 100644 (file)
@@ -792,7 +792,7 @@ v3d_field_iterator_next(struct v3d_field_iterator *iter)
         case V3D_TYPE_ADDRESS:
         case V3D_TYPE_OFFSET:
                 snprintf(iter->value, sizeof(iter->value), "0x%08"PRIx64,
-                         __gen_unpack_uint(iter->p, s, e));
+                         __gen_unpack_uint(iter->p, s, e) << (31 - (e - s)));
                 break;
         case V3D_TYPE_STRUCT:
                 snprintf(iter->value, sizeof(iter->value), "<struct %s>",