From 1b38f6952cc8d01e8f5bbedd75a3cff2c0fef0c9 Mon Sep 17 00:00:00 2001 From: patrykorwat Date: Wed, 2 Sep 2026 17:28:57 +0000 Subject: [PATCH] detectors: detect_axelera probe (/dev/metis*) + device node init --- .../rootfs/etc/s6-overlay/s6-rc.d/init-devices/run | 1 + frigate/detectors/hardware.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/docker/main/rootfs/etc/s6-overlay/s6-rc.d/init-devices/run b/docker/main/rootfs/etc/s6-overlay/s6-rc.d/init-devices/run index 72bbc0434c..c3d94c4eb2 100755 --- a/docker/main/rootfs/etc/s6-overlay/s6-rc.d/init-devices/run +++ b/docker/main/rootfs/etc/s6-overlay/s6-rc.d/init-devices/run @@ -37,6 +37,7 @@ device_globs=( "/dev/nvmap" "/dev/nvidia*" "/dev/memx*" + "/dev/metis*" ) IFS=',' read -ra extra_globs <<< "${DEVICE_ACL_PATHS:-}" diff --git a/frigate/detectors/hardware.py b/frigate/detectors/hardware.py index 756fbd430e..1604dfcbf1 100644 --- a/frigate/detectors/hardware.py +++ b/frigate/detectors/hardware.py @@ -273,6 +273,19 @@ def detect_memryx() -> DetectionHardware | None: return _hardware("memryx", "memryx", "MemryX MX3", units) +def detect_axelera() -> DetectionHardware | None: + """Find Axelera Metis accelerators by their device nodes.""" + nodes = sorted(glob(f"{DEV_ROOT}/metis*")) + + if not nodes: + return None + + # the runtime addresses the card through the driver, not per node, so one + # unit covers the accelerator + units = [HardwareUnit(device="axelera:PCIe", label=os.path.basename(nodes[0]))] + return _hardware("axelera", "axelera", "Axelera Metis", units) + + def detect_rockchip() -> DetectionHardware | None: """Find a Rockchip NPU by reading the SoC from the device tree.""" compatible = _read(f"{PROC_ROOT}/device-tree/compatible") @@ -319,6 +332,7 @@ PROBES = ( detect_coral_usb, detect_hailo, detect_memryx, + detect_axelera, detect_intel_npu, detect_intel_gpu, detect_nvidia_gpu,