#define MIDGARD_SFBD (1 << 1)
+/* Whether fp16 is broken in the compiler. Hopefully this quirk will go away
+ * over time */
+
+#define MIDGARD_BROKEN_FP16 (1 << 2)
+
+/* What it says on the tin */
+#define IS_BIFROST (1 << 3)
+
+/* What it says on the tin */
+#define HAS_SWIZZLES (1 << 4)
+
+/* bit 5 unused */
+
+/* Whether this GPU lacks support for any typed stores in blend shader,
+ * requiring packing instead */
+#define MIDGARD_NO_TYPED_BLEND_STORES (1 << 6)
+
+/* Whether this GPU lacks support for any typed loads, requiring packing */
+#define MIDGARD_NO_TYPED_BLEND_LOADS (1 << 7)
+
+/* Lack support for colour pack/unpack opcodes */
+#define NO_BLEND_PACKS (1 << 8)
+
+/* Has some missing formats for typed loads */
+#define MIDGARD_MISSING_LOADS (1 << 9)
+
+/* Lack support for AFBC */
+#define MIDGARD_NO_AFBC (1 << 10)
+
+/* Quirk collections common to particular uarchs */
+
+#define MIDGARD_QUIRKS (MIDGARD_BROKEN_FP16 | HAS_SWIZZLES \
+ | MIDGARD_NO_TYPED_BLEND_STORES \
+ | MIDGARD_MISSING_LOADS)
+
+/* TODO: AFBC on Bifrost */
+#define BIFROST_QUIRKS (IS_BIFROST | NO_BLEND_PACKS | MIDGARD_NO_AFBC)
+
static inline unsigned
panfrost_get_quirks(unsigned gpu_id)
{
switch (gpu_id) {
case 0x600:
case 0x620:
- return MIDGARD_SFBD;
+ return MIDGARD_QUIRKS | MIDGARD_SFBD
+ | MIDGARD_NO_TYPED_BLEND_LOADS
+ | NO_BLEND_PACKS | MIDGARD_NO_AFBC;
case 0x720:
- return MIDGARD_SFBD | MIDGARD_NO_HIER_TILING;
+ return MIDGARD_QUIRKS | MIDGARD_SFBD | MIDGARD_NO_HIER_TILING
+ | MIDGARD_NO_AFBC;
case 0x820:
case 0x830:
- return MIDGARD_NO_HIER_TILING;
+ return MIDGARD_QUIRKS | MIDGARD_NO_HIER_TILING;
case 0x750:
+ /* Someone should investigate the broken loads? */
+ return MIDGARD_QUIRKS | MIDGARD_NO_TYPED_BLEND_LOADS
+ | NO_BLEND_PACKS;
+
case 0x860:
case 0x880:
- return 0;
+ return MIDGARD_QUIRKS;
+
+ case 0x6000: /* G71 */
+ return BIFROST_QUIRKS | HAS_SWIZZLES;
+
+ case 0x7093: /* G31 */
+ case 0x7212: /* G52 */
+ return BIFROST_QUIRKS;
default:
- unreachable("Invalid Midgard GPU ID");
+ unreachable("Unknown Panfrost GPU ID");
}
}