57 printf(
"[ERROR] %s passed NULL context ptr\n", __func__);
61 if (_xaie->agents.size() == 0) {
62 printf(
"[ERROR] %s passed context has no agents\n", __func__);
66 if (_xaie->cmd_queue == NULL) {
67 printf(
"[ERROR] %s passed context has no queue\n", __func__);
72 hsa_queue_t *queue = _xaie->cmd_queue;
73 hsa_agent_t agent = _xaie->agents[0];
75 uint64_t wr_idx = hsa_queue_add_write_index_relaxed(queue, 1);
76 uint64_t packet_id = wr_idx % queue->size;
77 hsa_agent_dispatch_packet_t pkt;
78 mlir_aie_packet_req_translation(&pkt, (uint64_t)VA);
79 hsa_amd_signal_create_on_agent(1, 0,
nullptr, &agent, 0,
80 &(pkt.completion_signal));
81 reinterpret_cast<hsa_agent_dispatch_packet_t *
>(
82 queue->base_address)[packet_id] = pkt;
85 hsa_signal_store_screlease(queue->doorbell_signal, wr_idx);
88 while (hsa_signal_wait_scacquire(pkt.completion_signal,
89 HSA_SIGNAL_CONDITION_EQ, 0, 0x80000,
90 HSA_WAIT_STATE_ACTIVE) != 0)
94 hsa_agent_dispatch_packet_t *pkt_peek =
95 &
reinterpret_cast<hsa_agent_dispatch_packet_t *
>(
96 queue->base_address)[packet_id];
100 PA = (uint64_t)pkt_peek->return_address;
103 hsa_signal_destroy(pkt.completion_signal);