Refactor the GSP boot function to return GetGspStaticInfoReply. This enables access required for memory management initialization to: - bar1_pde_base: BAR1 page directory base. - bar2_pde_base: BAR2 page directory base. - usable memory regions in video memory.
Reviewed-by: Eliot Courtney <[email protected]> Reviewed-by: John Hubbard <[email protected]> Signed-off-by: Joel Fernandes <[email protected]> --- drivers/gpu/nova-core/gpu.rs | 8 ++++++-- drivers/gpu/nova-core/gsp/boot.rs | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 659f6a24ee13..775cdb653830 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -20,7 +20,10 @@ Falcon, // }, fb::SysmemFlush, - gsp::Gsp, + gsp::{ + commands::GetGspStaticInfoReply, + Gsp, // + }, regs, }; @@ -260,6 +263,7 @@ pub(crate) struct Gpu { /// GSP runtime data. Temporarily an empty placeholder. #[pin] gsp: Gsp, + gsp_static_info: GetGspStaticInfoReply, } impl Gpu { @@ -291,7 +295,7 @@ pub(crate) fn new<'a>( gsp <- Gsp::new(pdev), - _: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon)? }, + gsp_static_info: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon)? }, bar: devres_bar, }) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs index df105ef4b371..842aef403f07 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -36,7 +36,10 @@ Chipset, // }, gsp::{ - commands, + commands::{ + self, + GetGspStaticInfoReply, // + }, sequencer::{ GspSequencer, GspSequencerParams, // @@ -148,7 +151,7 @@ pub(crate) fn boot( chipset: Chipset, gsp_falcon: &Falcon<Gsp>, sec2_falcon: &Falcon<Sec2>, - ) -> Result { + ) -> Result<GetGspStaticInfoReply> { // The FSP boot process of Hopper+ is not supported for now. if matches!( chipset.arch(), @@ -243,12 +246,13 @@ pub(crate) fn boot( commands::wait_gsp_init_done(&self.cmdq)?; // Obtain and display basic GPU information. - let info = commands::get_gsp_info(&self.cmdq, bar)?; + let info = commands::get_gsp_info(&self.cmdq, bar) + .inspect_err(|e| dev_err!(pdev, "Failed to obtain GSP static info ({:?})\n", e))?; match info.gpu_name() { Ok(name) => dev_info!(pdev, "GPU name: {}\n", name), Err(e) => dev_warn!(pdev, "GPU name unavailable: {:?}\n", e), } - Ok(()) + Ok(info) } } -- 2.34.1
