*/
bool storage_16bit;
+ /* The latest known a630_sqe.fw fails to wait for WFI before
+ * reading the indirect buffer when using CP_DRAW_INDIRECT_MULTI,
+ * so we have to fall back to CP_WAIT_FOR_ME except for a650
+ * which has a fixed firmware.
+ *
+ * TODO: There may be newer a630_sqe.fw released in the future
+ * which fixes this, if so we should detect it and avoid this
+ * workaround. Once we have uapi to query fw version, we can
+ * replace this with minimum fw version.
+ */
+ bool indirect_draw_wfm_quirk;
+
struct {
uint32_t RB_UNKNOWN_8E04_blit;
uint32_t PC_UNKNOWN_9805;
fibers_per_sp = 128 * 16,
reg_size_vec4 = 96,
ccu_cntl_gmem_unk2 = True,
+ indirect_draw_wfm_quirk = True,
)
# a640, a680:
reg_size_vec4 = 96,
supports_multiview_mask = True,
has_z24uint_s8uint = True,
+ indirect_draw_wfm_quirk = True,
)
# a650:
tu6_emit_empty_vs_params(cmd);
- /* The latest known a630_sqe.fw fails to wait for WFI before reading the
- * indirect buffer when using CP_DRAW_INDIRECT_MULTI, so we have to fall
- * back to CP_WAIT_FOR_ME except for a650 which has a fixed firmware.
- *
- * TODO: There may be newer a630_sqe.fw released in the future which fixes
- * this, if so we should detect it and avoid this workaround.
- */
- if (cmd->device->physical_device->gpu_id != 650)
+ if (cmd->device->physical_device->info->a6xx.indirect_draw_wfm_quirk)
draw_wfm(cmd);
tu6_draw_common(cmd, cs, false, 0);
tu6_emit_empty_vs_params(cmd);
- if (cmd->device->physical_device->gpu_id != 650)
+ if (cmd->device->physical_device->info->a6xx.indirect_draw_wfm_quirk)
draw_wfm(cmd);
tu6_draw_common(cmd, cs, true, 0);