On Fri, Feb 02, 2024 at 06:49:19PM +0800, Baochen Qiang wrote: > > > On 2/2/2024 3:10 PM, Manivannan Sadhasivam wrote: > > On Fri, Feb 02, 2024 at 02:42:58PM +0800, Baochen Qiang wrote: > > > > > > > > > On 2/1/2024 6:00 PM, Manivannan Sadhasivam wrote: > > > > On Wed, Jan 31, 2024 at 03:39:26PM +0800, Baochen Qiang wrote: > > > > > > > > > > > > > > > On 1/31/2024 2:19 AM, Manivannan Sadhasivam wrote: > > > > > > On Mon, Nov 27, 2023 at 06:20:16PM +0200, Kalle Valo wrote: > > > > > > > From: Baochen Qiang <quic_bqiang@xxxxxxxxxxx> > > > > > > > > > > > > > > When using mhi_power_down_no_destroy() MHI hosts need to unprepare MHI channels > > > > > > > by themselves. Similarly, MHI stack will also not create new MHI device since > > > > > > > old devices were not destroyed, so MHI hosts need to prepare channels as well. > > > > > > > Hence add these two interfaces to make that possible. > > > > > > > > > > > > > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30 > > > > > > > > > > > > > > Signed-off-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx> > > > > > > > Signed-off-by: Kalle Valo <quic_kvalo@xxxxxxxxxxx> > > > > > > > --- > > > > > > > drivers/bus/mhi/host/main.c | 107 ++++++++++++++++++++++++++++++++++++ > > > > > > > include/linux/mhi.h | 20 ++++++- > > > > > > > 2 files changed, 126 insertions(+), 1 deletion(-) > > > > > > > > > > > > > > diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c > > > > > > > index d80975f4bba8..3f677fc628ad 100644 > > > > > > > --- a/drivers/bus/mhi/host/main.c > > > > > > > +++ b/drivers/bus/mhi/host/main.c > > > > > > > @@ -1669,6 +1669,58 @@ int mhi_prepare_for_transfer_autoqueue(struct mhi_device *mhi_dev) > > > > > > > } > > > > > > > EXPORT_SYMBOL_GPL(mhi_prepare_for_transfer_autoqueue); > > > > > > > +static int ____mhi_prepare_for_transfer(struct device *dev, void *data) > > > > > > > > > > > > "__mhi_prepare_all_for_transfer" > > > > > > > > > > This is to prepare one single child device, I don't think a name like > > > > > __mhi_prepare_all_for_transfer (with 'all' inside) make sense, right? > > > > > How about changing to "mhi_prepare_dev_for_transfer" or > > > > > "mhi_prepare_single_for_transfer"? > > > > > > > > > > > > > I think most of the checks in this function can be moved inside > > > > mhi_prepare_for_transfer() API. With that you can just reuse the API without > > > > adding a new helper. > > > > > > > > For autoqueue channels, you can add another API > > > > mhi_prepare_all_for_transfer_autoqueue() just like > > > > mhi_prepare_for_transfer_autoqueue() to maintain uniformity. > > > > > > > > - Mani > > > If we do that, we need to call two APIs together, does it make sense? From > > > the view of an MHI user, what we want is an API to prepare all channels, no > > > matter whether a channel is configured as autoqueue or non-autoqueue, we > > > don't care about it. > > > > > > > You are calling this API from a wrong place first up. > > mhi_{prepare/unprepare}_transfer* APIs are meant to be used by the client > > drivers like QRTR. Controller drivers should not call them. > > > > What you need here is the hibernation support for QRTR itself and call these > > APIs from there. > > OK, I got your point. QRTR is the right place to manage MHI channels, not > ath11k it self. > And we even don't need these two APIs if change to do it in QRTR. > > > > > > And besides, I don't think there is a scenario where we need to use them > > > separately. So if we always need to use them together, why not merge them in > > > a single API? > > > > > > > A single controller driver may expose multiple channels and those will bind to > > multiple client drivers. So only the client drivers should manage the channels, > > not the controller drivers themselves. > Exactly. > > Great thanks for the proposal, Mani. Will change accordingly in next > version. > And you can drop the RFC tag in the version. - Mani -- மணிவண்ணன் சதாசிவம்