fix(agc): a pipelined release with INT_SEL 3 raises no interrupt

The pipelined label path treated every nonzero RELEASE_MEM INT_SEL as an end-of-pipe interrupt;
main's PacketMemory excludes 3 (send data after write confirm). agc_driver failed on it with
APS5_PIPELINED_DRAWS=1 ("release with INT_SEL send data after write confirm raised an interrupt").

Co-Authored-By: TheAggie <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
authored and Adrià Franch committed 2026-10-15 11:34:28 +02:00
1 parent a18ab8c009
commit 2cd5c75dc8
1 file changed
+2 -1
@@ -334,7 +334,8 @@ void Driver::commitDmaStore(std::uint32_t queue, std::uint64_t address, std::spa
bool Driver::enqueueLabelPacket(std::span<const std::uint32_t> packet, std::uint32_t opcode, std::uint32_t queue) {
static const bool ordered = std::getenv("APS5_PIPELINE_DRAIN_LABELS") == nullptr;
if (!ordered || !DeferLabels() || (opcode != 0x49 && opcode != 0x37)) return false;
const bool endOfPipeInterrupt = opcode == 0x49 && ((packet[2] >> 24u) & 7u) != 0;
const auto interruptSelect = opcode == 0x49 ? (packet[2] >> 24u) & 7u : 0u;
const bool endOfPipeInterrupt = interruptSelect != 0 && interruptSelect != 3;
const auto label = Pm4::DecodeLabelWrite(packet);
if (!label.has_value()) {
if (opcode != 0x49) return false;