diff --git a/extra/amdpci/am_smi.py b/extra/amdpci/am_smi.py index 7e5f03fa58..901ef6f06a 100755 --- a/extra/amdpci/am_smi.py +++ b/extra/amdpci/am_smi.py @@ -8,7 +8,7 @@ from tinygrad.runtime.support.hcq import MMIOInterface from tinygrad.runtime.support.am.amdev import AMDev, AMMemoryManager from tinygrad.runtime.support.am.ip import AM_SOC, AM_GMC, AM_IH, AM_PSP, AM_SMU, AM_GFX, AM_SDMA -AM_VERSION = 0xA0000002 +AM_VERSION = 0xA0000003 def bold(s): return f"\033[1m{s}\033[0m" diff --git a/tinygrad/runtime/support/am/amdev.py b/tinygrad/runtime/support/am/amdev.py index 1e4fd0cfb7..f6c0834576 100644 --- a/tinygrad/runtime/support/am/amdev.py +++ b/tinygrad/runtime/support/am/amdev.py @@ -161,8 +161,8 @@ class AMMemoryManager: def __init__(self, adev:AMDev, vram_size:int): self.adev, self.vram_size = adev, vram_size - self.boot_allocator = TLSFAllocator(32 << 20, base=vram_size - (64 << 20)) # per device - self.pa_allocator = TLSFAllocator(vram_size - (64 << 20)) # per device + self.boot_allocator = TLSFAllocator(32 << 20, base=0) # per device + self.pa_allocator = TLSFAllocator(vram_size - (64 << 20), base=self.boot_allocator.size) # per device self.root_page_table = AMPageTableEntry(self.adev, self.palloc(0x1000, zero=not self.adev.smi_dev, boot=True), lv=am.AMDGPU_VM_PDB1) def _frag_size(self, va, sz, must_cover=True): @@ -219,7 +219,7 @@ class AMMemoryManager: # Try to allocate as long segment (power of 2) as possible cont_seg_sz, paddr = 1 << (self._frag_size(ctx.vaddr+off, rem_len) + 12), None while cont_seg_sz >= 0x1000: - try: paddr = self.palloc(cont_seg_sz, zero=True) + try: paddr = self.palloc(cont_seg_sz, zero=False) except MemoryError: cont_seg_sz //= 2 else: break @@ -271,7 +271,7 @@ class AMDev: # all blocks that are initialized only during the initial AM boot. # To determine if the GPU is in the third state, AM uses regSCRATCH_REG7 as a flag. self.is_booting, self.smi_dev = True, False # During boot only boot memory can be allocated. This flag is to validate this. - self.partial_boot = (self.reg("regSCRATCH_REG7").read() == (am_version:=0xA0000002)) and (getenv("AM_RESET", 0) != 1) + self.partial_boot = (self.reg("regSCRATCH_REG7").read() == (am_version:=0xA0000003)) and (getenv("AM_RESET", 0) != 1) # Memory manager & firmware self.mm = AMMemoryManager(self, self.vram_size) diff --git a/tinygrad/runtime/support/am/ip.py b/tinygrad/runtime/support/am/ip.py index 970b1e7836..a7c53d19cc 100644 --- a/tinygrad/runtime/support/am/ip.py +++ b/tinygrad/runtime/support/am/ip.py @@ -369,7 +369,7 @@ class AM_PSP(AM_IP): self.fence_paddr = self.adev.mm.palloc(am.PSP_FENCE_BUFFER_SIZE, zero=not self.adev.partial_boot, boot=True) self.ring_size = 0x10000 - self.ring_paddr = self.adev.mm.palloc(self.ring_size, zero=not self.adev.partial_boot, boot=True) + self.ring_paddr = self.adev.mm.palloc(self.ring_size, zero=False, boot=True) self.max_tmr_size = 0x1300000 self.boot_time_tmr = self.adev.ip_ver[am.GC_HWIP] >= (12,0,0)