Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.19-rc2 59 lines 1.7 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2 3use kernel::prelude::*; 4 5use crate::{ 6 driver::Bar0, 7 fb::hal::FbHal, 8 regs, // 9}; 10 11/// Shift applied to the sysmem address before it is written into `NV_PFB_NISO_FLUSH_SYSMEM_ADDR`, 12/// to be used by HALs. 13pub(super) const FLUSH_SYSMEM_ADDR_SHIFT: u32 = 8; 14 15pub(super) fn read_sysmem_flush_page_gm107(bar: &Bar0) -> u64 { 16 u64::from(regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::read(bar).adr_39_08()) << FLUSH_SYSMEM_ADDR_SHIFT 17} 18 19pub(super) fn write_sysmem_flush_page_gm107(bar: &Bar0, addr: u64) -> Result { 20 // Check that the address doesn't overflow the receiving 32-bit register. 21 u32::try_from(addr >> FLUSH_SYSMEM_ADDR_SHIFT) 22 .map_err(|_| EINVAL) 23 .map(|addr| { 24 regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::default() 25 .set_adr_39_08(addr) 26 .write(bar) 27 }) 28} 29 30pub(super) fn display_enabled_gm107(bar: &Bar0) -> bool { 31 !regs::gm107::NV_FUSE_STATUS_OPT_DISPLAY::read(bar).display_disabled() 32} 33 34pub(super) fn vidmem_size_gp102(bar: &Bar0) -> u64 { 35 regs::NV_PFB_PRI_MMU_LOCAL_MEMORY_RANGE::read(bar).usable_fb_size() 36} 37 38struct Tu102; 39 40impl FbHal for Tu102 { 41 fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 { 42 read_sysmem_flush_page_gm107(bar) 43 } 44 45 fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result { 46 write_sysmem_flush_page_gm107(bar, addr) 47 } 48 49 fn supports_display(&self, bar: &Bar0) -> bool { 50 display_enabled_gm107(bar) 51 } 52 53 fn vidmem_size(&self, bar: &Bar0) -> u64 { 54 vidmem_size_gp102(bar) 55 } 56} 57 58const TU102: Tu102 = Tu102; 59pub(super) const TU102_HAL: &dyn FbHal = &TU102;