32#ifndef __DEV_AMDGPU_AMDGPU_VM_HH__
33#define __DEV_AMDGPU_AMDGPU_VM_HH__
54#define mmVM_INVALIDATE_ENG17_ACK 0x08c6
55#define mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32 0x08eb
56#define mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32 0x08ec
57#define mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32 0x090b
58#define mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32 0x090c
59#define mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32 0x092b
60#define mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32 0x092c
62#define MI300X_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32 0x08cb
63#define MI300X_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32 0x08cc
64#define MI300X_CONTEXT0_PAGE_TABLE_START_ADDR_LO32 0x08eb
65#define MI300X_CONTEXT0_PAGE_TABLE_START_ADDR_HI32 0x08ec
66#define MI300X_CONTEXT0_PAGE_TABLE_END_ADDR_LO32 0x090b
67#define MI300X_CONTEXT0_PAGE_TABLE_END_ADDR_HI32 0x090c
69#define mmMC_VM_FB_OFFSET 0x096b
70#define mmMC_VM_FB_LOCATION_BASE 0x0980
71#define mmMC_VM_FB_LOCATION_TOP 0x0981
72#define mmMC_VM_AGP_TOP 0x0982
73#define mmMC_VM_AGP_BOT 0x0983
74#define mmMC_VM_AGP_BASE 0x0984
75#define mmMC_VM_SYSTEM_APERTURE_LOW_ADDR 0x0985
76#define mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x0986
78#define MI300X_VM_FB_OFFSET 0x0947
79#define MI300X_VM_FB_LOCATION_BASE 0x095c
80#define MI300X_VM_FB_LOCATION_TOP 0x095d
81#define MI300X_VM_AGP_TOP 0x095e
82#define MI300X_VM_AGP_BOT 0x095f
83#define MI300X_VM_AGP_BASE 0x0960
84#define MI300X_VM_SYSTEM_APERTURE_LOW_ADDR 0x0961
85#define MI300X_VM_SYSTEM_APERTURE_HIGH_ADDR 0x0962
87#define mmMMHUB_VM_INVALIDATE_ENG17_SEM 0x06e2
88#define mmMMHUB_VM_INVALIDATE_ENG17_REQ 0x06f4
89#define mmMMHUB_VM_INVALIDATE_ENG17_ACK 0x0706
90#define mmMMHUB_VM_FB_LOCATION_BASE 0x082c
91#define mmMMHUB_VM_FB_LOCATION_TOP 0x082d
93#define VEGA10_FB_LOCATION_BASE 0x6a0b0
94#define VEGA10_FB_LOCATION_TOP 0x6a0b4
96#define MI100_MEM_SIZE_REG 0x0378c
97#define MI100_FB_LOCATION_BASE 0x6ac00
98#define MI100_FB_LOCATION_TOP 0x6ac04
100#define MI200_MEM_SIZE_REG 0x0378c
101#define MI200_FB_LOCATION_BASE 0x6b300
102#define MI200_FB_LOCATION_TOP 0x6b304
104#define MI300X_MEM_SIZE_REG 0x0378c
105#define MI300X_FB_LOCATION_BASE 0x63270
106#define MI300X_FB_LOCATION_TOP 0x63274
107#define MI300X_VM_INVALIDATE_ENG17_ACK 0x08a6
290 warn_once(
"Accessing unsupported frame apperture!\n");
295 warn_once(
"Accessing unsupported frame apperture!\n");
static constexpr int AMDGPU_VM_COUNT
static constexpr int AMDGPU_MMHUB_PAGE_SIZE
static constexpr int AMDGPU_GART_PAGE_SIZE
static constexpr int AMDGPU_USER_PAGE_SIZE
static constexpr int AMDGPU_AGP_PAGE_SIZE
Device model for an AMD GPU.
AGPTranslationGen(AMDGPUVM *_vm, Addr vaddr, Addr size)
void translate(Range &range) const override
Subclasses implement this function to complete TranslationGen.
void translate(Range &range) const override
Subclasses implement this function to complete TranslationGen.
GARTTranslationGen(AMDGPUVM *_vm, Addr vaddr, Addr size)
void translate(Range &range) const override
Subclasses implement this function to complete TranslationGen.
MMHUBTranslationGen(AMDGPUVM *_vm, Addr vaddr, Addr size)
UserTranslationGen(AMDGPUVM *_vm, VegaISA::Walker *_walker, int _vmid, Addr vaddr, Addr size)
void translate(Range &range) const override
Subclasses implement this function to complete TranslationGen.
void writeMMIOGfx900(PacketPtr pkt, Addr offset)
Different MMIO implements for different GFX versions with overlapping MMIO addresses.
Addr getSysAddrRangeHigh()
void setMMIOAperture(mmio_range_t mmio_aperture, AddrRange range)
std::vector< AMDGPUVMContext > vmContexts
std::array< AddrRange, NUM_MMIO_RANGES > mmioRanges
void setMMHUBBase(Addr base)
AddrRange getMMIORange(mmio_range_t mmio_aperture)
struct gem5::AMDGPUVM::GEM5_PACKED AMDGPUVMContext
Addr getSysAddrRangeLow()
std::unordered_map< uint64_t, uint64_t > gartTable
Copy of GART table.
bool inAGP(Addr vaddr)
Methods for resolving apertures.
std::vector< VegaISA::GpuTLB * > gpu_tlbs
List of TLBs associated with the GPU device.
void readMMIO(PacketPtr pkt, Addr offset)
const AddrRange & getMMIOAperture(Addr addr)
gem5::AMDGPUVM::AMDGPUSysVMContext AMDGPUSysVMContext
void setGPUDevice(AMDGPUDevice *gpu_device)
void writeMMIO(PacketPtr pkt, Addr offset)
Addr getFrameAperture(Addr addr)
AMDGPUSysVMContext vmContext0
void setPageTableBase(uint16_t vmid, Addr ptBase)
Page table base/start accessors for user VMIDs.
Addr getPageTableBase(uint16_t vmid)
Addr gartBase()
Return base address of GART table in framebuffer.
Addr getPageTableStart(uint16_t vmid)
void writeMMIOGfx940(PacketPtr pkt, Addr offset)
bool inGARTRange(Addr paddr)
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Addr gartSize()
Return size of GART in number of PTEs.
void serialize(CheckpointOut &cp) const override
Serialize an object.
void registerTLB(VegaISA::GpuTLB *tlb)
Control methods for TLBs associated with the GPU device.
void setMMHUBTop(Addr top)
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
TranslationGen(Addr new_start, Addr new_size)
The starting virtual address and the size of the entire region being translated.
Copyright (c) 2024 Arm Limited All rights reserved.
std::ostream CheckpointOut
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Declaration of the Packet class.
This structure represents a single, contiguous translation, or carries information about whatever fau...