Hi Bryan,
On 9/30/2024 7:57 AM, Bryan O'Donoghue wrote:
On 29/09/2024 02:28, Depeng Shao wrote:
Thanks for catching this, I forget to add the rup irq, so this logic
is also missed. I have tried it just now, the logic works good, will
add it in next version patch.
I go through the code again, and find we don't do the wait for
completion in VFE 480 driver, this is just used in VFE gen1 driver and
just during disabling port.
Right but, we _should_ wait for completion there, the fact we don't is a
bug.
One context issues a command to take an action and another context in
this case an ISR has to fire for that action to be complete.
Therefore we _should_ wait_for_completion() in the initiating context
and timeout if it exceeds a reasonable timeout.
Granted, we've "dropped the ball" in 480 you're right, it needs to be
fixed and will be but, please in your submission do the right thing.
Qualcomm downstream camera driver use the rup to move the req to a list
to maintenance a state machine. If we don't get rup then we will enter
bubble state.
But we are downplaying this process now due to AUP, and the bubble
processing has been disabled in latest code base, since we think the
buffer must be filled to the given address if we have configured the AUP
and got buf done irq.
And this per frame wait_for_completion flow isn't exist in whole camss
code, and current camss driver just use buf done irq to trigger the per
frame flow.
E.g.,
irqreturn_t vfe_irq()
{
if (rup_irq)
reg_update_clear();
if (buf_done_irq) {
vfe_wm_update();
reg_update(); --> We can't do wait_for_completion at here in irq
context
vb2_buffer_done();
}
}
Just VFE gen1 driver use this wait_for_complete in vfe_disable_output,
and this flow has been removed in vfe gen2(camss-vfe.c), so looks like
we don't need to add this wait_for_completion support and also can
remove below code in camss-vfe-480.c
vfe_isr_reg_update()
{
if (output->wait_reg_update) {
output->wait_reg_update = 0;
complete(&output->reg_update);
}
}
Thanks,
Depeng