gpu-compute: Use timing DMAs for GPUFS HSA signals

The functional HSA signal read was a hack left in the gpu-compute code.
In full system, this functional read is causing problems occasionally
with the translation not yet being in the page table. The error message
output by gem5 was a fatal message on the readBlob method in port proxy.
Changing this to a timing DMA fixes this problem.

This commit adds the various timing DMA functions to send and receive
response and clean up. A helper method "sendCompletionSignal" is added
to the GPUCommandProcessor because the indentation level was getting too
deep. This change applies only to FS mode. Code for SE mode is
equivalent to what it was before this commit.

Change-Id: I1bfcaa0a52731cdf9532a7fd0eb06ab2f0e09d48
This commit is contained in:
Matthew Poremba
2023-08-25 09:35:55 -05:00
parent 5cb604559a
commit 57b3d2897c
4 changed files with 118 additions and 21 deletions

View File

@@ -106,9 +106,16 @@ class GPUCommandProcessor : public DmaVirtDevice
AddrRangeList getAddrRanges() const override;
System *system();
void sendCompletionSignal(Addr signal_handle);
void updateHsaSignal(Addr signal_handle, uint64_t signal_value,
HsaSignalCallbackFunction function =
[] (const uint64_t &) { });
void updateHsaSignalAsync(Addr signal_handle, int64_t diff);
void updateHsaSignalData(Addr value_addr, int64_t diff,
uint64_t *prev_value);
void updateHsaSignalDone(uint64_t *signal_value);
void updateHsaMailboxData(Addr signal_handle, uint64_t *mailbox_value);
void updateHsaEventData(Addr signal_handle, uint64_t *event_value);
uint64_t functionalReadHsaSignal(Addr signal_handle);