On Tue, 2018-07-31 at 12:32 +0200, Marcel Holtmann wrote:
> Hi Sean,
> 
> >>> All suggestions seem reasonable for me in order to make code style 
> >>> aligned with the other drivers and code better to read,
> >>> and it looks like no any big problem, so I'll start to work on the next 
> >>> version immediately.
> >> 
> >> no rush, but if you can get this back to me quickly, we might be still 
> >> able to get this driver included.
> >> 
> >>> And I also add a few explanations inline about questions about the 
> >>> diagnostic packet and how hci->shutdown is being made.
> >>> 
> >>> On Mon, 2018-07-30 at 15:40 +0200, Marcel Holtmann wrote:
> > 
> > 
> > [ ... ]
> > 
> >>>> Do we want these as HCI vendor events. Or actually as vendor / 
> >>>> diagnostic packets. There is a hci_recv_diag.
> >>>> 
> >>> 
> >>> These are actually Hci vendor events. not for diagnostic purpose. They 
> >>> hdr->evt == 0xe4 are all the part of chip initialization.
> >> 
> >> Ok, then leave it as is.
> >> 
> >>> 
> >>>> So let me ask this a different way, do you have support for LMP / LL 
> >>>> tracing in your chips? If yes, then how is that enabled and how does it 
> >>>> work? Or any general debug data that can be switched on. That is what we 
> >>>> have a diagnostic channel for that is also fed into btmon.
> >>>> 
> >>> 
> >>> I'm not really sure about them because I didn't see any diagnostic 
> >>> packets handling in vendor driver.
> >> 
> >> You can see examples for this in btusb.c, hci_bcm.c and bpa10x.c where the 
> >> hardware has a side channel. In case of Broadcom, they are LL or LMP trace 
> >> packets, but it could be also debug messages or something else. Other 
> >> vendors use HCI vendor events for that which is also fine. Just wanted to 
> >> know what it is.
> >> 
> >> And if your hardware supports LL or LMP traces to be enabled, then 
> >> implement hdev->set_diag() callback. You can then enable it via 
> >> /sys/kernel/debug/bluetooth/hci0/vendor_diag
> >> 
> > 
> > Thanks for sharing the information to me.
> > 
> > If I get the permission and details about adding support for these debug 
> > trace packets, I am willing to add them.
> > 
> >>> 
> >>>>> +
> >>>>> +       /* Each HCI event would go through the core. */
> >>>>> +       return hci_recv_frame(hdev, skb);
> >>>>> +}
> >>>>> +
> > 
> > [ ... ]
> > 
> >>>>> +
> >>>>> +static int mtk_btuart_shutdown(struct hci_dev *hdev)
> >>>>> +{
> >>>>> +       struct mtk_btuart_dev *bdev = hci_get_drvdata(hdev);
> >>>>> +       struct device *dev = &bdev->serdev->dev;
> >>>>> +       u8 param = 0x0;
> >>>>> +
> >>>>> +       /* Disable the device. */
> >>>>> +       mtk_hci_wmt_sync(hdev, MTK_WMT_FUNC_CTRL, 0x0, sizeof(param), 
> >>>>> &param);
> >>>>> +
> >>>>> +       /* Shutdown the clock and power domain the device requires. */
> >>>>> +       clk_disable_unprepare(bdev->clk);
> >>>>> +       pm_runtime_put_sync(dev);
> >>>>> +       pm_runtime_disable(dev);
> >>>> 
> >>>> Don’t these belong into ->close method? And the enable ones into ->open? 
> >>>> I really think that ->setup and ->shutdown should just do HCI commands 
> >>>> and leave the others to ->open and ->close. Since ->open and ->close are 
> >>>> suppose to set up and terminate the transport.
> >>>> 
> >>> 
> >>> Yes, ->open and ->close are already done just for setup and terminate the 
> >>> transport. I've noted the part during earlier version discussion. 
> >>> 
> >>> Because mt7622 is a SoC integrating Bluetooth hardware inside, these 
> >>> operations for clk* and pm clk_* and pm_*  you saw here are all for 
> >>> controlling clocks and powers Bluetooth circuits requires on the SoC, not 
> >>> for the transports.
> >>> 
> >>> As for clocks for the transport, they're already being taken care of by 
> >>> the serial driver.
> >> 
> >> With transport, I meant the Bluetooth transport. So I really thing they 
> >> belong into ->open and ->close. Within ->setup and ->shutdown, I would 
> >> just expect HCI commands.
> >> 
> > 
> > At the moment, it's not easy that clk_* and pm_*  are moved to ->open and 
> > ->close
> > 
> > because firmware download would depend on the full cycle of hardware power 
> > down and then up.
> > 
> > And another advantage is that when users call hdev down and the up, the 
> > device can do the real hardware reset, not just the software reset via hci 
> > command.
> 
> But when you call down/up cycle, then you will go through ->close and ->open. 
> So I don’t see the problem here.
> 
> With the quirk for always calling ->setup, you get the ->open + ->setup on 
> hdev up and ->shutdown + ->close on hdev down.
> 

Yes, it seems no any problem. really thanks point out me with patience

So I've moved these clk_* and pm_* operations into ->open and ->close in newer 
v7.

> Regards
> 
> Marcel
> 


Reply via email to