> On Dec 9, 2025, at 11:05 PM, Zhi Wang <[email protected]> wrote:
> [..]
>>> +
>>> +            dev_dbg!(
>>> +                pdev.as_ref(),
>>> +                "SEC2 MBOX0: {:#x}, MBOX1{:#x}\n",
>>> +                mbox0,
>>> +                mbox1
>>> +            );
>>> +
>>> +            if
>>> !regs::NV_PGC6_BSI_SECURE_SCRATCH_15::read(bar).scrubber_completed()
>>> {
>>> +                return Err(ETIMEDOUT);  
>> 
>> So under which situation do you get to this point
>> (!scrubber_completed) ? Basically I am not sure if ETIMEDOUT is the
>> right error to return here, because boot() already returns ETIMEDOUT
>> by waiting for the halt.
>> 
>> If you still want return ETIMEDOUT here, then it sounds like you're
>> waiting for scrubbing beyond the waiting already done by boot(). If
>> so, then shouldn't you need to use read_poll_timeout() here?
>> 
>> perhaps something like:
>> 
>> read_poll_timeout(
>>     ||
>> Ok(regs::NV_PGC6_BSI_SECURE_SCRATCH_15::read(bar).scrubber_completed()),
>> |val: &bool| *val, Delta::from_millis(10),
>>     Delta::from_secs(5),
>> )?;
>> 
> 
> This is the identical implementation to OpenRM [1]. According to that
> parts of code, I think the scrubber runs in the binary booting process.
> When it signals the firmware booting successfully, the scrubbing should
> be done. Let me change to another errno.
> 
> [1]https://github.com/NVIDIA/open-gpu-kernel-modules/blob/a5bfb10e75a4046c5d991c65f49b5d29151e68cf/src/nvidia/src/kernel/gpu/gsp/arch/ada/kernel_gsp_ad102.c#L49

Sure, it was just misleading in the patch that we’re returning a timeout error, 
when the error is something else (like scrubber failed). Thanks for correcting 
it.

 - Joel

Reply via email to