On Turing and Ampere, resetting the GSP involves running two firmware images: FWSEC-SB and Booter Unloader. They are independent from one another, and we should do whatever is possible to restore the GSP's unloaded state even if a failure occurs along the way.
Thus, keep going and run Booter Unloader even if the execution of FWSEC-SB failed. Reported-by: Sashiko <[email protected]> Closes: https://sashiko.dev/#/patchset/20260529-nova-unload-v7-0-678f39209e00%40nvidia.com?part=3 Fixes: adb99ce3cc78 ("gpu: nova-core: run Booter Unloader and FWSEC-SB upon unbinding") Signed-off-by: Alexandre Courbot <[email protected]> --- This was caught by Sashiko; I unfortunately noticed it after pushing the series, but having it as a follow-up is beneficial regardless as it allows more time for review. --- drivers/gpu/nova-core/gsp/hal/tu102.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/hal/tu102.rs b/drivers/gpu/nova-core/gsp/hal/tu102.rs index a033bc892066..b10215190257 100644 --- a/drivers/gpu/nova-core/gsp/hal/tu102.rs +++ b/drivers/gpu/nova-core/gsp/hal/tu102.rs @@ -134,11 +134,19 @@ fn run( sec2_falcon: &Falcon<Sec2>, ) -> Result { // Run FWSEC-SB to reset the GSP falcon to its pre-libos state. - self.fwsec_sb.run(dev, bar, gsp_falcon)?; + // Log errors but keep going if it fails. + let fwsec_sb_res = self + .fwsec_sb + .run(dev, bar, gsp_falcon) + .inspect_err(|e| dev_err!(dev, "FWSEC-SB failed to run: {:?}\n", e)); // Remove WPR2 region if set. let wpr2_hi = bar.read(regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI); - if wpr2_hi.is_wpr2_set() { + let booter_unloader_res = (|| { + if !wpr2_hi.is_wpr2_set() { + return Ok(()); + } + sec2_falcon.reset(bar)?; sec2_falcon.load(dev, bar, &self.booter_unloader)?; @@ -160,9 +168,11 @@ fn run( ); return Err(EBUSY); } - } - Ok(()) + Ok(()) + })(); + + fwsec_sb_res.and(booter_unloader_res) } } --- base-commit: 75d59327367dc6e2141cf4e11cdf57c55851b5c2 change-id: 20260531-nova-unload-fix-9c6e479a5374 Best regards, -- Alexandre Courbot <[email protected]>
