diff options
| author | Jani Nikula <jani.nikula@intel.com> | 2025-06-09 12:40:46 +0300 | 
|---|---|---|
| committer | Jani Nikula <jani.nikula@intel.com> | 2025-06-09 12:40:46 +0300 | 
| commit | 34c55367af96f62e89221444f04487440ebc6487 (patch) | |
| tree | fdb36ba67d7dea09455b55037e26043b7e051ef9 /drivers/gpu/nova-core/firmware.rs | |
| parent | 7247efca0dcbc8ac6147db9200ed1549c0662465 (diff) | |
| parent | 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 (diff) | |
| download | linux-34c55367af96f62e89221444f04487440ebc6487.tar.xz | |
Merge drm/drm-next into drm-intel-next
Sync to v6.16-rc1, among other things to get the fixed size GENMASK_U*()
and BIT_U*() macros.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'drivers/gpu/nova-core/firmware.rs')
| -rw-r--r-- | drivers/gpu/nova-core/firmware.rs | 44 | 
1 files changed, 40 insertions, 4 deletions
diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firmware.rs index 6e6361c59ca1..4b8a38358a4f 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -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 @@ impl<const N: usize> ModInfoBuilder<N> {                  .push("/gsp/")                  .push(fw)                  .push("-") -                .push(Self::VERSION) +                .push(FIRMWARE_VERSION)                  .push(".bin"),          )      }  | 
