mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
gpu: nova-core: add FbHal::frts_size() for GA100 support
Introduce FbHal method frts_size() to return the size of the FRTS window. GA100 is a special case in that although there is an FRTS, its size must arbitrarily be set to 0. Note that we cannot use supports_display() to determine the FRTS size because there are other GPUs (e.g. GA102GL) that have display disabled (and so supports_display() returns False), but the FRTS window size still needs to be 1MB. Signed-off-by: Timur Tabi <ttabi@nvidia.com> Reviewed-by: Eliot Courtney <ecourtney@nvidia.com> Acked-by: Gary Guo <gary@garyguo.net> Link: https://patch.msgid.link/20260417191359.1307434-5-ttabi@nvidia.com [acourbot: apply requested fix to commit message.] [acourbot: fix minor conflict.] Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
This commit is contained in:
parent
cedbbc383a
commit
21decd6324
|
|
@ -213,10 +213,10 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw: &GspFirmware) -> Result<
|
|||
|
||||
let frts = {
|
||||
const FRTS_DOWN_ALIGN: Alignment = Alignment::new::<SZ_128K>();
|
||||
const FRTS_SIZE: u64 = u64::SZ_1M;
|
||||
let frts_base = vga_workspace.start.align_down(FRTS_DOWN_ALIGN) - FRTS_SIZE;
|
||||
let frts_size: u64 = hal.frts_size();
|
||||
let frts_base = vga_workspace.start.align_down(FRTS_DOWN_ALIGN) - frts_size;
|
||||
|
||||
FbRange(frts_base..frts_base + FRTS_SIZE)
|
||||
FbRange(frts_base..frts_base + frts_size)
|
||||
};
|
||||
|
||||
let boot = {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ pub(crate) trait FbHal {
|
|||
|
||||
/// Returns the VRAM size, in bytes.
|
||||
fn vidmem_size(&self, bar: &Bar0) -> u64;
|
||||
|
||||
/// Returns the FRTS size, in bytes.
|
||||
fn frts_size(&self) -> u64;
|
||||
}
|
||||
|
||||
/// Returns the HAL corresponding to `chipset`.
|
||||
|
|
|
|||
|
|
@ -66,6 +66,12 @@ fn supports_display(&self, bar: &Bar0) -> bool {
|
|||
fn vidmem_size(&self, bar: &Bar0) -> u64 {
|
||||
super::tu102::vidmem_size_gp102(bar)
|
||||
}
|
||||
|
||||
// GA100 is a special case where its FRTS region exists, but is empty. We
|
||||
// return a size of 0 because we still need to record where the region starts.
|
||||
fn frts_size(&self) -> u64 {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
const GA100: Ga100 = Ga100;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,10 @@ fn supports_display(&self, bar: &Bar0) -> bool {
|
|||
fn vidmem_size(&self, bar: &Bar0) -> u64 {
|
||||
vidmem_size_ga102(bar)
|
||||
}
|
||||
|
||||
fn frts_size(&self) -> u64 {
|
||||
super::tu102::frts_size_tu102()
|
||||
}
|
||||
}
|
||||
|
||||
const GA102: Ga102 = Ga102;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
use kernel::{
|
||||
io::Io,
|
||||
prelude::*, //
|
||||
prelude::*,
|
||||
sizes::*, //
|
||||
};
|
||||
|
||||
use crate::{
|
||||
|
|
@ -38,6 +39,10 @@ pub(super) fn vidmem_size_gp102(bar: &Bar0) -> u64 {
|
|||
.usable_fb_size()
|
||||
}
|
||||
|
||||
pub(super) const fn frts_size_tu102() -> u64 {
|
||||
u64::SZ_1M
|
||||
}
|
||||
|
||||
struct Tu102;
|
||||
|
||||
impl FbHal for Tu102 {
|
||||
|
|
@ -56,6 +61,10 @@ fn supports_display(&self, bar: &Bar0) -> bool {
|
|||
fn vidmem_size(&self, bar: &Bar0) -> u64 {
|
||||
vidmem_size_gp102(bar)
|
||||
}
|
||||
|
||||
fn frts_size(&self) -> u64 {
|
||||
frts_size_tu102()
|
||||
}
|
||||
}
|
||||
|
||||
const TU102: Tu102 = Tu102;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user