From 32861fa28b56f7a3906e1bb267f3264ebc85bc92 Mon Sep 17 00:00:00 2001 From: Pratham Patel Date: Thu, 4 Jun 2026 10:26:03 +0530 Subject: [PATCH] linux/common-config: enable ARM_SMMU_V3_SVA on aarch64 This makes CUDA compute work with the GB10 platform on my ASUS Ascent GX10. This wasn't enabled by `autoModules` because it is a boolean. Before: ``` $ llama-cli --list-devices 0.00.468.603 E ggml_cuda_init: failed to initialize CUDA: initialization error Available devices: $ zcat /proc/config.gz | grep CONFIG_ARM_SMMU_V3_SVA= $ echo $? 1 ``` After: ``` $ llama-cli --list-devices Available devices: CUDA0: NVIDIA GB10 (124534 MiB, 44410 MiB free) $ zcat /proc/config.gz | grep CONFIG_ARM_SMMU_V3_SVA= CONFIG_ARM_SMMU_V3_SVA=y ``` Here is the information about the GPU on the GB10 platform: ``` $ sudo lspci -vvv -s 000f:01:00.0 000f:01:00.0 VGA compatible controller: NVIDIA Corporation GB20B [GB10] (rev a1) (prog-if 00 [VGA controller]) Subsystem: NVIDIA Corporation Device 0000 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- Capabilities: [b0] MSI-X: Enable+ Count=9 Masked- Vector table: BAR=0 offset=00b90000 PBA: BAR=0 offset=00ba0000 Capabilities: [100 v1] Secondary PCI Express LnkCtl3: LnkEquIntrruptEn- PerformEqu- LaneErrStat: 0 Capabilities: [12c v1] Latency Tolerance Reporting Max snoop latency: 0ns Max no snoop latency: 0ns Capabilities: [14c v1] Data Link Feature Capabilities: [158 v1] Physical Layer 16.0 GT/s Phy16Sta: EquComplete- EquPhase1- EquPhase2- EquPhase3- LinkEquRequest- Capabilities: [188 v1] Physical Layer 32.0 GT/s Phy32Cap: EqualizationBypass+ NoEqualizationNeeded- ModTsMode0+ ModTsMode1- ModTsMode2- Phy32Ctl: EqualizationBypassDis- NoEqualizationNeededDis- Modified TS Usage Mode: PCI Express Phy32Sta: EquComplete- EquPhase1- EquPhase2- EquPhase3- LinkEquRequest- Received Enhanced Link Behavior Control: Full Equalization required ModTsRecv- TxPrecodeOn- TxPrecodeReq- NoEqualizationNeededRecv- Capabilities: [1b8 v2] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr- PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked- UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr- PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked- UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr- PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr- CorrIntErr- HeaderOF- CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ CorrIntErr+ HeaderOF+ AERCap: First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn- MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap- HeaderLog: 00000000 00000000 00000000 00000000 Capabilities: [200 v1] Lane Margining at the Receiver PortCap: Uses Driver+ PortSta: MargReady- MargSoftReady- Capabilities: [248 v1] Alternative Routing-ID Interpretation (ARI) ARICap: MFVC- ACS-, Next Function: 0 ARICtl: MFVC- ACS-, Function Group: 0 Capabilities: [290 v2] L1 PM Substates L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+ PortCommonModeRestoreTime=0us PortTPowerOnTime=10us L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1- T_CommonMode=0us LTR1.2_Threshold=0ns L1SubCtl2: T_PwrOn=10us Capabilities: [2a4 v1] Vendor Specific Information: ID=0001 Rev=1 Len=014 Capabilities: [2c8 v1] Data Object Exchange DOECap: IntSup+ IntMsgNum 8 DOECtl: IntEn- DOESta: Busy+ IntSta+ Error+ ObjectReady- Capabilities: [2e0 v1] Address Translation Service (ATS) ATSCap: Invalidate Queue Depth: 00 ATSCtl: Enable+, Smallest Translation Unit: 00 Capabilities: [2e8 v1] Process Address Space ID (PASID) PASIDCap: Exec- Priv-, Max PASID Width: 14 PASIDCtl: Enable+ Exec- Priv- Capabilities: [2f0 v1] Device Serial Number 00-00-00-00-00-2d-b0-48 Kernel driver in use: nvidia Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia ``` --- pkgs/os-specific/linux/kernel/common-config.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index e5f06e7d481d..aada43eb08f3 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -248,6 +248,10 @@ let BOUNCE = option yes; }; + iommu = lib.optionalAttrs stdenv.hostPlatform.isAarch64 { + ARM_SMMU_V3_SVA = whenAtLeast "5.9" yes; + }; + memtest = { MEMTEST = yes; };