From f310b3fa6f8e557981e2a42165404f8a6562b2ad Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 10 Jun 2025 10:10:13 +1000 Subject: [PATCH] nvk/qmd: fix shared memory size calcs for blackwell. I'm still not 100% happy with these, nvidia does appear to use 26 as the max/target values, which corresponds to + 7 not +1 but let's dig a bit more. Fixes: 6c052d87b778 ("nak/qmd: Add QMD version 5.0 for Blackwell+") Part-of: --- src/nouveau/compiler/nak/qmd.rs | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/nouveau/compiler/nak/qmd.rs b/src/nouveau/compiler/nak/qmd.rs index 424c47090c6..d437c34da93 100644 --- a/src/nouveau/compiler/nak/qmd.rs +++ b/src/nouveau/compiler/nak/qmd.rs @@ -369,22 +369,6 @@ macro_rules! qmd_impl_set_smem_size_bounded { }; } -fn gb100_sm_config_smem_size(size: u32) -> u32 { - let size = if size > 64 * 1024 { - 96 * 1024 - } else if size > 32 * 1024 { - 64 * 1024 - } else if size > 16 * 1024 { - 32 * 1024 - } else if size > 8 * 1024 { - 16 * 1024 - } else { - 8 * 1024 - }; - - size / 4096 + 7 -} - macro_rules! qmd_impl_set_smem_size_bounded_gb { ($c:ident, $s:ident) => { fn set_smem_size(&mut self, smem_size: u32, smem_max: u32) { @@ -394,11 +378,17 @@ macro_rules! qmd_impl_set_smem_size_bounded_gb { let size_shift = 7; let smem_size_shifted = smem_size >> size_shift; assert!((smem_size_shifted << size_shift) == smem_size); - set_field!(bv, $c, $s, SHARED_MEMORY_SIZE_SHIFTED7, smem_size); + set_field!( + bv, + $c, + $s, + SHARED_MEMORY_SIZE_SHIFTED7, + smem_size_shifted + ); - let max = gb100_sm_config_smem_size(smem_max); - let min = gb100_sm_config_smem_size(smem_size.into()); - let target = gb100_sm_config_smem_size(smem_size.into()); + let max = gv100_sm_config_smem_size(smem_max); + let min = gv100_sm_config_smem_size(smem_size.into()); + let target = gv100_sm_config_smem_size(smem_size.into()); set_field!(bv, $c, $s, MIN_SM_CONFIG_SHARED_MEM_SIZE, min); set_field!(bv, $c, $s, MAX_SM_CONFIG_SHARED_MEM_SIZE, max); set_field!(bv, $c, $s, TARGET_SM_CONFIG_SHARED_MEM_SIZE, target);