xref: /linux/drivers/gpu/nova-core/fb/hal/gb100.rs (revision fcdd74aa8ca6ca7f4922d92da932891996734d15)
1 // SPDX-License-Identifier: GPL-2.0
2 // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3 
4 //! Blackwell GB10x framebuffer HAL.
5 
6 use kernel::{
7     prelude::*,
8     ptr::{
9         const_align_up,
10         Alignment, //
11     },
12     sizes::*, //
13 };
14 
15 use crate::{
16     driver::Bar0,
17     fb::hal::FbHal,
18     num::usize_into_u32, //
19 };
20 
21 struct Gb100;
22 
23 pub(super) const fn pmu_reserved_size_gb100() -> u32 {
24     usize_into_u32::<{ const_align_up(SZ_8M + SZ_16M + SZ_4K, Alignment::new::<SZ_128K>()).unwrap() }>(
25     )
26 }
27 
28 impl FbHal for Gb100 {
29     fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 {
30         super::ga100::read_sysmem_flush_page_ga100(bar)
31     }
32 
33     fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result {
34         super::ga100::write_sysmem_flush_page_ga100(bar, addr);
35 
36         Ok(())
37     }
38 
39     fn supports_display(&self, bar: &Bar0) -> bool {
40         super::ga100::display_enabled_ga100(bar)
41     }
42 
43     fn vidmem_size(&self, bar: &Bar0) -> u64 {
44         super::ga102::vidmem_size_ga102(bar)
45     }
46 
47     fn pmu_reserved_size(&self) -> u32 {
48         pmu_reserved_size_gb100()
49     }
50 
51     fn non_wpr_heap_size(&self) -> u32 {
52         // Non-WPR heap for GB10x (see Open RM: kgspGetNonWprHeapSize, GB100/GB102).
53         u32::SZ_2M
54     }
55 
56     fn frts_size(&self) -> u64 {
57         super::tu102::frts_size_tu102()
58     }
59 }
60 
61 const GB100: Gb100 = Gb100;
62 pub(super) const GB100_HAL: &dyn FbHal = &GB100;
63