mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-02 07:00:42 -04:00
gpu: nova-core: support header parsing on Turing/GA100
The Turing/GA100 version of Booter is slightly different from the GA102+ version. The headers are the same, but different fields of the headers are used to identify the IMEM section. In addition, there is an NMEM section on Turing/GA100. Signed-off-by: Timur Tabi <ttabi@nvidia.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Gary Guo <gary@garyguo.net> Acked-by: Danilo Krummrich <dakr@kernel.org> Link: https://patch.msgid.link/20260122222848.2555890-4-ttabi@nvidia.com Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
This commit is contained in:
committed by
Alexandre Courbot
parent
b72cb7bcc2
commit
a65fc53d47
@@ -356,14 +356,30 @@ pub(crate) fn new(
|
||||
}
|
||||
};
|
||||
|
||||
// There are two versions of Booter, one for Turing/GA100, and another for
|
||||
// GA102+. The extraction of the IMEM sections differs between the two
|
||||
// versions. Unfortunately, the file names are the same, and the headers
|
||||
// don't indicate the versions. The only way to differentiate is by the Chipset.
|
||||
let (imem_sec_dst_start, imem_ns_load_target) = if chipset <= Chipset::GA100 {
|
||||
(
|
||||
app0.offset,
|
||||
Some(FalconLoadTarget {
|
||||
src_start: 0,
|
||||
dst_start: load_hdr.os_code_offset,
|
||||
len: load_hdr.os_code_size,
|
||||
}),
|
||||
)
|
||||
} else {
|
||||
(0, None)
|
||||
};
|
||||
|
||||
Ok(Self {
|
||||
imem_sec_load_target: FalconLoadTarget {
|
||||
src_start: app0.offset,
|
||||
dst_start: 0,
|
||||
dst_start: imem_sec_dst_start,
|
||||
len: app0.len,
|
||||
},
|
||||
// Exists only in the booter image for Turing and GA100
|
||||
imem_ns_load_target: None,
|
||||
imem_ns_load_target,
|
||||
dmem_load_target: FalconLoadTarget {
|
||||
src_start: load_hdr.os_data_offset,
|
||||
dst_start: 0,
|
||||
@@ -393,7 +409,11 @@ fn brom_params(&self) -> FalconBromParams {
|
||||
}
|
||||
|
||||
fn boot_addr(&self) -> u32 {
|
||||
self.imem_sec_load_target.src_start
|
||||
if let Some(ns_target) = &self.imem_ns_load_target {
|
||||
ns_target.dst_start
|
||||
} else {
|
||||
self.imem_sec_load_target.src_start
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user