mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
gpu: nova-core: move Firmware to firmware module
We will extend the firmware methods, so move it to its own module instead to keep gpu.rs focused. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Link: https://lore.kernel.org/r/20250507-nova-frts-v3-7-fcb02749754d@nvidia.com [ Don't require a bound device, remove pub visibility from Firmware fields, use FIRMWARE_VERSION consistently. - Danilo ] Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
e4bc82af9e
commit
61479ae38c
|
|
@ -1,13 +1,49 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
use crate::gpu;
|
||||
//! Contains structures and functions dedicated to the parsing, building and patching of firmwares
|
||||
//! to be loaded into a given execution unit.
|
||||
|
||||
use kernel::device;
|
||||
use kernel::firmware;
|
||||
use kernel::prelude::*;
|
||||
use kernel::str::CString;
|
||||
|
||||
use crate::gpu;
|
||||
use crate::gpu::Chipset;
|
||||
|
||||
pub(crate) const FIRMWARE_VERSION: &str = "535.113.01";
|
||||
|
||||
/// Structure encapsulating the firmware blobs required for the GPU to operate.
|
||||
#[expect(dead_code)]
|
||||
pub(crate) struct Firmware {
|
||||
booter_load: firmware::Firmware,
|
||||
booter_unload: firmware::Firmware,
|
||||
bootloader: firmware::Firmware,
|
||||
gsp: firmware::Firmware,
|
||||
}
|
||||
|
||||
impl Firmware {
|
||||
pub(crate) fn new(dev: &device::Device, chipset: Chipset, ver: &str) -> Result<Firmware> {
|
||||
let mut chip_name = CString::try_from_fmt(fmt!("{}", chipset))?;
|
||||
chip_name.make_ascii_lowercase();
|
||||
|
||||
let request = |name_| {
|
||||
CString::try_from_fmt(fmt!("nvidia/{}/gsp/{}-{}.bin", &*chip_name, name_, ver))
|
||||
.and_then(|path| firmware::Firmware::request(&path, dev))
|
||||
};
|
||||
|
||||
Ok(Firmware {
|
||||
booter_load: request("booter_load")?,
|
||||
booter_unload: request("booter_unload")?,
|
||||
bootloader: request("bootloader")?,
|
||||
gsp: request("gsp")?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct ModInfoBuilder<const N: usize>(firmware::ModInfoBuilder<N>);
|
||||
|
||||
impl<const N: usize> ModInfoBuilder<N> {
|
||||
const VERSION: &'static str = "535.113.01";
|
||||
|
||||
const fn make_entry_file(self, chipset: &str, fw: &str) -> Self {
|
||||
ModInfoBuilder(
|
||||
self.0
|
||||
|
|
@ -17,7 +53,7 @@ const fn make_entry_file(self, chipset: &str, fw: &str) -> Self {
|
|||
.push("/gsp/")
|
||||
.push(fw)
|
||||
.push("-")
|
||||
.push(Self::VERSION)
|
||||
.push(FIRMWARE_VERSION)
|
||||
.push(".bin"),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
use kernel::{
|
||||
device, devres::Devres, error::code::*, firmware, fmt, pci, prelude::*, str::CString,
|
||||
};
|
||||
use kernel::{device, devres::Devres, error::code::*, pci, prelude::*};
|
||||
|
||||
use crate::driver::Bar0;
|
||||
use crate::firmware::{Firmware, FIRMWARE_VERSION};
|
||||
use crate::regs;
|
||||
use crate::util;
|
||||
use core::fmt;
|
||||
|
|
@ -157,34 +156,6 @@ fn new(bar: &Bar0) -> Result<Spec> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Structure encapsulating the firmware blobs required for the GPU to operate.
|
||||
#[expect(dead_code)]
|
||||
pub(crate) struct Firmware {
|
||||
booter_load: firmware::Firmware,
|
||||
booter_unload: firmware::Firmware,
|
||||
bootloader: firmware::Firmware,
|
||||
gsp: firmware::Firmware,
|
||||
}
|
||||
|
||||
impl Firmware {
|
||||
fn new(dev: &device::Device, spec: &Spec, ver: &str) -> Result<Firmware> {
|
||||
let mut chip_name = CString::try_from_fmt(fmt!("{}", spec.chipset))?;
|
||||
chip_name.make_ascii_lowercase();
|
||||
|
||||
let request = |name_| {
|
||||
CString::try_from_fmt(fmt!("nvidia/{}/gsp/{}-{}.bin", &*chip_name, name_, ver))
|
||||
.and_then(|path| firmware::Firmware::request(&path, dev))
|
||||
};
|
||||
|
||||
Ok(Firmware {
|
||||
booter_load: request("booter_load")?,
|
||||
booter_unload: request("booter_unload")?,
|
||||
bootloader: request("bootloader")?,
|
||||
gsp: request("gsp")?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Structure holding the resources required to operate the GPU.
|
||||
#[pin_data]
|
||||
pub(crate) struct Gpu {
|
||||
|
|
@ -201,7 +172,7 @@ pub(crate) fn new(
|
|||
) -> Result<impl PinInit<Self>> {
|
||||
let bar = devres_bar.access(pdev.as_ref())?;
|
||||
let spec = Spec::new(bar)?;
|
||||
let fw = Firmware::new(pdev.as_ref(), &spec, "535.113.01")?;
|
||||
let fw = Firmware::new(pdev.as_ref(), spec.chipset, FIRMWARE_VERSION)?;
|
||||
|
||||
dev_info!(
|
||||
pdev.as_ref(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user