From 8a1c3dc1bf21a9fa81bb253dc4399f6d1d2cff97 Mon Sep 17 00:00:00 2001 From: nimlgen <138685161+nimlgen@users.noreply.github.com> Date: Thu, 9 Oct 2025 19:10:46 +0800 Subject: [PATCH] amd: use soc headers from rocm (#12566) --- tinygrad/runtime/support/amd.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tinygrad/runtime/support/amd.py b/tinygrad/runtime/support/amd.py index bc87ddae81..7ecf634e4e 100644 --- a/tinygrad/runtime/support/amd.py +++ b/tinygrad/runtime/support/amd.py @@ -43,12 +43,12 @@ def fixup_ip_version(ip:str, version:tuple[int, ...]) -> list[tuple[int, ...]]: return [version, version[:2], version[:2]+(0,), version[:1]+(0, 0)] -def header_download(file, name=None, subdir="defines") -> str: - url = "https://gitlab.com/linux-kernel/linux-next/-/raw/cf6d949a409e09539477d32dbe7c954e4852e744/drivers/gpu/drm/amd" +def header_download(file, name=None, subdir="defines", url=None) -> str: + url = url or "https://gitlab.com/linux-kernel/linux-next/-/raw/cf6d949a409e09539477d32dbe7c954e4852e744/drivers/gpu/drm/amd" return fetch(f"{url}/{file}", name=name, subdir=subdir).read_text() -def import_header(path:str): - t = re.sub(r'//.*|/\*.*?\*/','', header_download(path, subdir="defines"), flags=re.S) +def import_header(path:str, url=None): + t = re.sub(r'//.*|/\*.*?\*/','', header_download(path, subdir="defines", url=url), flags=re.S) return {k:int(v,0) for k,v in re.findall(r'\b([A-Za-z_]\w*)\s*=\s*(0x[0-9A-Fa-f]+|\d+)', t)} def import_module(name:str, version:tuple[int, ...], version_prefix:str=""): @@ -57,7 +57,10 @@ def import_module(name:str, version:tuple[int, ...], version_prefix:str=""): except ImportError: pass raise ImportError(f"Failed to load autogen module for {name.upper()} {'.'.join(map(str, version))}") -def import_soc(ip): return type("SOC", (object,), import_header(f"include/{({9: 'vega10', 10: 'navi10', 11: 'soc21', 12: 'soc24'}[ip[0]])}_enum.h")) +def import_soc(ip): + # rocm soc headers have more profiling enums than upstream linux + url = "https://raw.githubusercontent.com/ROCm/rocm-systems/cccc350dc620e61ae2554978b62ab3532dc10bd9/projects" + return type("SOC", (object,), import_header(f"aqlprofile/linux/{({9: 'vega10', 10: 'navi10', 11: 'soc21', 12: 'soc24'}[ip[0]])}_enum.h", url=url)) def import_asic_regs(prefix:str, version:tuple[int, ...], cls=AMDReg) -> dict[str, AMDReg]: def _split_name(name): return name[:(pos:=next((i for i,c in enumerate(name) if c.isupper()), len(name)))], name[pos:]