dev-amdgpu: Rework handling of unknown registers
The top level AMDGPUDevice currently reads/writes all unknown registers to/from a map containing the previously written value. This is intended as a way to handle registers that are not part of the model but the driver requires for functionality. Since this is at the top level, it can mask changes to register values which do not go through the same interface. For example, reading an MMIO, changing via PM4 queue, and reading again returns the stale cached value. This commit removes the usage of the regs map in AMDGPUDevice, implements some important MMIOs that were previously handled by it, and moves the unknown register handling to the NBIO aperture only. To reduce the number of additional MMIOs to implement, the display manager in vega10 is now disabled. Change-Id: Iff0a599dd82d663c7e710b79c6ef6d0ad1fc44a2
This commit is contained in:
@@ -37,6 +37,13 @@
|
||||
namespace gem5
|
||||
{
|
||||
|
||||
AMDGPUGfx::AMDGPUGfx()
|
||||
{
|
||||
for (int i = 0; i < SCRATCH_REGS; ++i) {
|
||||
scratchRegs[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AMDGPUGfx::readMMIO(PacketPtr pkt, Addr offset)
|
||||
{
|
||||
@@ -47,6 +54,9 @@ AMDGPUGfx::readMMIO(PacketPtr pkt, Addr offset)
|
||||
case AMDGPU_MM_RLC_GPU_CLOCK_COUNT_MSB:
|
||||
pkt->setLE<uint32_t>(captured_clock_count >> 32);
|
||||
break;
|
||||
case AMDGPU_MM_SCRATCH_REG0:
|
||||
pkt->setLE<uint32_t>(scratchRegs[0]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -65,6 +75,9 @@ AMDGPUGfx::writeMMIO(PacketPtr pkt, Addr offset)
|
||||
captured_clock_count = curTick() / sim_clock::as_int::ns;
|
||||
}
|
||||
break;
|
||||
case AMDGPU_MM_SCRATCH_REG0:
|
||||
scratchRegs[0] = pkt->getLE<uint32_t>();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user