misc: Fixed HSAIL_X86 compilation errors
authorBobby R. Bruce <bbruce@ucdavis.edu>
Mon, 18 May 2020 20:48:08 +0000 (13:48 -0700)
committerJason Lowe-Power <power.jg@gmail.com>
Sat, 23 May 2020 01:08:55 +0000 (01:08 +0000)
HSAIL_X86 fail to compile. This patch enables compilation.

Issue-on: https://gem5.atlassian.net/browse/GEM5-556

Change-Id: I663e529622ed90254eaf8be01e23991ed8271b5b
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29293
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
src/SConscript
src/arch/hsail/gen.py
src/dev/hsa/HSADevice.py
src/dev/hsa/HSADriver.py
src/dev/hsa/hsa_device.cc
src/dev/hsa/hsa_driver.cc
src/dev/hsa/hsa_packet_processor.cc

index 134e2a59883e846082276e1291ceddf22287f665..1de8a2d75478f4624d0b021e0b0d858a5020590b 100644 (file)
@@ -624,7 +624,7 @@ def makeTheISA(source, target, env):
     isas = [ src.get_contents().decode('utf-8') for src in source ]
     target_isa = env['TARGET_ISA']
     def define(isa):
-        return isa.upper() + '_ISA'
+        return str(isa.upper()) + '_ISA'
 
     def namespace(isa):
         return isa[0].upper() + isa[1:].lower() + 'ISA'
@@ -669,7 +669,7 @@ def makeTheGPUISA(source, target, env):
     isas = [ src.get_contents() for src in source ]
     target_gpu_isa = env['TARGET_GPU_ISA']
     def define(isa):
-        return isa.upper() + '_ISA'
+        return str(isa.upper()) + '_ISA'
 
     def namespace(isa):
         return isa[0].upper() + isa[1:].lower() + 'ISA'
index 8dcc92c7bc106f4873a659ce85fa37420b53b66c..56404248bb8a1fdfa20dceb9d6cc8161a774cf30 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #  Copyright (c) 2015 Advanced Micro Devices, Inc.
 #  All rights reserved.
 #
index 125d6eef141f922fb05e31ceb4a0d5a1fad6b158..50e3c6dbf84270323bd699e9d7d444b7a4f2b401 100644 (file)
@@ -35,7 +35,7 @@
 from m5.SimObject import SimObject
 from m5.params import *
 from m5.proxy import *
-from Device import DmaDevice
+from m5.objects.Device import DmaDevice
 
 class HSADevice(DmaDevice):
     type = 'HSADevice'
index ed742fa49849452c1da4c374a1847b7f938b0376..3df22a00daeb78d1f02900ced6f788dd6fbbbcad 100644 (file)
@@ -35,7 +35,7 @@
 from m5.SimObject import SimObject
 from m5.params import *
 from m5.proxy import *
-from Process import EmulatedDriver
+from m5.objects.Process import EmulatedDriver
 
 class HSADriver(EmulatedDriver):
     type = 'HSADriver'
index 01b7a41ebbc7133e6fea9e8aae34efb6bd14831b..78ec8e8b4e14fa498218da44b2314acfa5c96410 100644 (file)
@@ -102,9 +102,8 @@ HSADevice::translateOrDie(Addr vaddr, Addr &paddr)
      * grab context zero.
      */
     auto process = sys->getThreadContext(0)->getProcessPtr();
-    auto mem_state = process->getMemState();
 
-    if (!mem_state->translate(vaddr, paddr)) {
+    if (!process->pTable->translate(vaddr, paddr)) {
         fatal("failed translation: vaddr 0x%x\n", vaddr);
     }
 }
index 5f301591708eb067a73b908740ab6ef9d57480b2..3f5c8eb0a56e1e9fd5e76f7475470b30d6199ed6 100644 (file)
@@ -74,7 +74,7 @@ HSADriver::mmap(ThreadContext *tc, Addr start, uint64_t length, int prot,
             "offset: 0x%x)\n", start, length, offset);
 
     auto process = tc->getProcessPtr();
-    auto mem_state = process->getMemState();
+    auto mem_state = process->memState;
 
     // Extend global mmap region if necessary.
     if (start == 0) {
@@ -87,32 +87,8 @@ HSADriver::mmap(ThreadContext *tc, Addr start, uint64_t length, int prot,
      * Now map this virtual address to our PIO doorbell interface
      * in the page tables (non-cacheable).
      */
-    mem_state->map(start, device->hsaPacketProc().pioAddr, length, false);
+    process->pTable->map(start, device->hsaPacketProc().pioAddr,
+                         length, false);
     DPRINTF(HSADriver, "amdkfd doorbell mapped to %xp\n", start);
     return start;
 }
-
-/**
- * Forward relevant parameters to packet processor; queueID
- * is used to link doorbell. The queueIDs are not re-used
- * in current implementation, and we allocate only one page
- * (4096 bytes) for doorbells, so check if this queue ID can
- * be mapped into that page.
- */
-void
-HSADriver::allocateQueue(const SETranslatingPortProxy &mem_proxy, Addr ioc_buf)
-{
-    TypedBufferArg<kfd_ioctl_create_queue_args> args(ioc_buf);
-    args.copyIn(mem_proxy);
-
-    if (VOID_PTR_ADD32(0, queueId) >= (void*)0x1000) {
-        fatal("%s: Exceeded maximum number of HSA queues allowed\n", name());
-    }
-
-    args->queue_id = queueId++;
-    auto &hsa_pp = device->hsaPacketProc();
-    hsa_pp.setDeviceQueueDesc(args->read_pointer_address,
-                              args->ring_base_address, args->queue_id,
-                              args->ring_size);
-    args.copyOut(mem_proxy);
-}
index 76da30e29c3f5577a66b8d7e48cff884e025e140..bd050163bba23e6f074d91c0f6b4fab12628d903 100644 (file)
@@ -127,7 +127,7 @@ HSAPacketProcessor::write(Packet *pkt)
           "%s: write of size %d to reg-offset %d (0x%x)\n",
           __FUNCTION__, pkt->getSize(), daddr, daddr);
 
-    uint32_t doorbell_reg = pkt->get<uint32_t>();
+    uint32_t doorbell_reg = pkt->getLE<uint32_t>();
 
     DPRINTF(HSAPacketProcessor,
             "%s: write data 0x%x to offset %d (0x%x)\n",
@@ -152,9 +152,8 @@ HSAPacketProcessor::translateOrDie(Addr vaddr, Addr &paddr)
     // new extensions, it will likely be wrong to just arbitrarily grab context
     // zero.
     auto process = sys->getThreadContext(0)->getProcessPtr();
-    auto mem_state = process->getMemState();
 
-    if (!mem_state->translate(vaddr, paddr))
+    if (!process->pTable->translate(vaddr, paddr))
         fatal("failed translation: vaddr 0x%x\n", vaddr);
 }
 
@@ -395,9 +394,7 @@ HSAPacketProcessor::processPkt(void* pkt, uint32_t rl_idx, Addr host_pkt_addr)
                  * not support atomic operations.
                  */
                 auto tc = sys->getThreadContext(0);
-                auto process = tc->getProcessPtr();
-                auto mem_state = process->getMemState();
-                auto &virt_proxy = mem_state->getVirtProxy();
+                auto &virt_proxy = tc->getVirtProxy();
                 TypedBufferArg<uint64_t> prev_signal(signal_addr);
                 prev_signal.copyIn(virt_proxy);