xref: /linux/drivers/gpu/nova-core/firmware.rs (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
1*54e6baf1SDanilo Krummrich // SPDX-License-Identifier: GPL-2.0
2*54e6baf1SDanilo Krummrich 
3*54e6baf1SDanilo Krummrich use crate::gpu;
4*54e6baf1SDanilo Krummrich use kernel::firmware;
5*54e6baf1SDanilo Krummrich 
6*54e6baf1SDanilo Krummrich pub(crate) struct ModInfoBuilder<const N: usize>(firmware::ModInfoBuilder<N>);
7*54e6baf1SDanilo Krummrich 
8*54e6baf1SDanilo Krummrich impl<const N: usize> ModInfoBuilder<N> {
9*54e6baf1SDanilo Krummrich     const VERSION: &'static str = "535.113.01";
10*54e6baf1SDanilo Krummrich 
11*54e6baf1SDanilo Krummrich     const fn make_entry_file(self, chipset: &str, fw: &str) -> Self {
12*54e6baf1SDanilo Krummrich         ModInfoBuilder(
13*54e6baf1SDanilo Krummrich             self.0
14*54e6baf1SDanilo Krummrich                 .new_entry()
15*54e6baf1SDanilo Krummrich                 .push("nvidia/")
16*54e6baf1SDanilo Krummrich                 .push(chipset)
17*54e6baf1SDanilo Krummrich                 .push("/gsp/")
18*54e6baf1SDanilo Krummrich                 .push(fw)
19*54e6baf1SDanilo Krummrich                 .push("-")
20*54e6baf1SDanilo Krummrich                 .push(Self::VERSION)
21*54e6baf1SDanilo Krummrich                 .push(".bin"),
22*54e6baf1SDanilo Krummrich         )
23*54e6baf1SDanilo Krummrich     }
24*54e6baf1SDanilo Krummrich 
25*54e6baf1SDanilo Krummrich     const fn make_entry_chipset(self, chipset: &str) -> Self {
26*54e6baf1SDanilo Krummrich         self.make_entry_file(chipset, "booter_load")
27*54e6baf1SDanilo Krummrich             .make_entry_file(chipset, "booter_unload")
28*54e6baf1SDanilo Krummrich             .make_entry_file(chipset, "bootloader")
29*54e6baf1SDanilo Krummrich             .make_entry_file(chipset, "gsp")
30*54e6baf1SDanilo Krummrich     }
31*54e6baf1SDanilo Krummrich 
32*54e6baf1SDanilo Krummrich     pub(crate) const fn create(
33*54e6baf1SDanilo Krummrich         module_name: &'static kernel::str::CStr,
34*54e6baf1SDanilo Krummrich     ) -> firmware::ModInfoBuilder<N> {
35*54e6baf1SDanilo Krummrich         let mut this = Self(firmware::ModInfoBuilder::new(module_name));
36*54e6baf1SDanilo Krummrich         let mut i = 0;
37*54e6baf1SDanilo Krummrich 
38*54e6baf1SDanilo Krummrich         while i < gpu::Chipset::NAMES.len() {
39*54e6baf1SDanilo Krummrich             this = this.make_entry_chipset(gpu::Chipset::NAMES[i]);
40*54e6baf1SDanilo Krummrich             i += 1;
41*54e6baf1SDanilo Krummrich         }
42*54e6baf1SDanilo Krummrich 
43*54e6baf1SDanilo Krummrich         this.0
44*54e6baf1SDanilo Krummrich     }
45*54e6baf1SDanilo Krummrich }
46