diff --git a/src/asahi/lib/agx_device.c b/src/asahi/lib/agx_device.c index 6d409b78ca5..213d32affde 100644 --- a/src/asahi/lib/agx_device.c +++ b/src/asahi/lib/agx_device.c @@ -67,6 +67,7 @@ static const struct debug_named_value agx_debug_options[] = { {"noborder", AGX_DBG_NOBORDER, "Disable custom border colour emulation"}, {"scratch", AGX_DBG_SCRATCH, "Debug scratch memory usage"}, {"1queue", AGX_DBG_1QUEUE, "Force usage of a single queue for multiple contexts"}, + {"nosoft", AGX_DBG_NOSOFT, "Disable soft fault optimizations"}, DEBUG_NAMED_VALUE_END }; /* clang-format on */ diff --git a/src/asahi/lib/agx_device.h b/src/asahi/lib/agx_device.h index a78fbe17b00..6b770e78d3e 100644 --- a/src/asahi/lib/agx_device.h +++ b/src/asahi/lib/agx_device.h @@ -46,7 +46,7 @@ enum agx_dbg { AGX_DBG_NOSHADOW = BITFIELD_BIT(16), AGX_DBG_NOBORDER = BITFIELD_BIT(17), AGX_DBG_SCRATCH = BITFIELD_BIT(18), - /* bit 19 unused */ + AGX_DBG_NOSOFT = BITFIELD_BIT(19), AGX_DBG_FEEDBACK = BITFIELD_BIT(20), AGX_DBG_1QUEUE = BITFIELD_BIT(21), }; @@ -150,7 +150,8 @@ struct agx_device { static inline bool agx_has_soft_fault(struct agx_device *dev) { - return dev->params.feat_compat & DRM_ASAHI_FEAT_SOFT_FAULTS; + return (dev->params.feat_compat & DRM_ASAHI_FEAT_SOFT_FAULTS) && + !(dev->debug & AGX_DBG_NOSOFT); } static uint32_t