[PATCH 1/2] gpu: nova-core: declare unlimited DMA max segment size
From: Matteo Kloiber
Date: Mon Aug 31 2026 - 19:41:14 EST
The PCI default max_seg_size is 64 KiB. nova-core never raises it, so
mapping the GSP firmware image (~60 MiB) as a scatter-gather table
triggers a DMA-API debug warning when contiguous pages coalesce into
segments that exceed the default:
DMA-API: nova-core 0000:00:03.0: mapping sg segment longer than
device claims to support [len=62914560] [max=65536]
CONFIG_DMA_API_DEBUG=y is required to see this warning.
Signed-off-by: Matteo Kloiber <kernel@xxxxxxxxxxx>
Assisted-by: Claude:claude-opus-4-8
---
drivers/gpu/nova-core/gpu.rs | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index fd1414004dd0..233ef2dc9688 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -343,6 +343,13 @@ pub(crate) fn new<'a>(
// still constructing it, so no concurrent DMA allocations can exist.
unsafe { pdev.dma_set_mask_and_coherent(dma_mask)? };
+ // Nova re-decomposes SG segments into 4 KiB page-table entries, so it
+ // has no upper bound on segment length; declare that to the DMA layer.
+ //
+ // SAFETY: same invariant as above -- still constructing, no concurrent
+ // DMA mapping can exist.
+ unsafe { pdev.dma_set_max_seg_size(u32::MAX) };
+
hal.wait_gfw_boot_completion(bar)
.inspect_err(|_| dev_err!(dev, "GFW boot did not complete\n"))?;
},
--
2.51.2