Re: Disconnect interrupt generation for QC targets when role switch is enabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 9/6/2023 9:22 PM, Pavan Kondeti wrote:

As mentioned, this need has been identified a few times by now, so
nothing strange in your request/proposal.

But so far no one has come up with a good way to register glue code
callbacks with the core; we can't pass arbitrary data (such as a
function pointer to such callback), and we don't know when the core is
registered, so we can't call a register operation when that happens.

Regards,
Bjorn

[1]: https://patchwork.kernel.org/project/linux-usb/patch/20201009082843.28503-4-wcheng@xxxxxxxxxxxxxx/
[2]: https://patchwork.kernel.org/project/linux-usb/cover/20230325165217.31069-1-manivannan.sadhasivam@xxxxxxxxxx/


Hi Bjorn,

  How about we use Component framework to let the glue layer know that the
child probe is complete. That way we don't need to defer QCOM probe and in
the bind call back coming to master (in this case, the glue layer), we can
register the vendor hook or role switch we need and we can pass the role
notifications from core to glue as needed.


Would device_driver::sync_state() help here? The qcom glue driver
creates a DL_FLAG_SYNC_STATE_ONLY device link with dwc3 core. If it
works, we can avoid component framework related changes in dwc3 core.



Hi Pavan,

Thanks for the suggestion. We can use sync state but we might need to suppress unbind path for dwc3 core to prevent remove from being called (not sure if that is fine on upstream). Reason being if remove is called, we won't get any sync state callback for us to un-register glue hook. Other ideas that came from team internally were to add a list and iterate through in core probe to find out required glue ops and invoke them when required.

Regards,
Krishna,



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux