Re: [PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2018-01-02 Thread Kai Heng Feng


> On 21 Dec 2017, at 7:43 PM, Daniel Drake  wrote:
> 
> On Wed, Dec 20, 2017 at 6:53 PM, Brian Norris  
> wrote:
>> 
>> On Wed, Dec 20, 2017 at 07:00:07PM +0800, Kai-Heng Feng wrote:
>>> This commit causes a regression on some QCA ROME chips. The USB device
>>> reset happens in btusb_open(), hence firmware loading gets interrupted.
>> 
>> Oh, did you really confirm that's the root of the problem? I was only
>> hypothesizing, with some informed observation and code review; but I
>> didn't fully convince myself. If so, that's interesting.
> 
> I have the same doubt. Can you explain how/why firmware uploading and
> btusb_open() overlap, and how this is avoided with your patch?

QCA ROME chip uploads its firmware inside btusb_open().

The behavior is like below:
- btusb_probe()
- btusb_open()
- btusb_suspend(), reset_resume gets set.
- btusb_open() again, hub resets the device, then the issue happens.

I didn’t dig really deep for the issue, I simply tried usb core quirks, it reset
the USB device before btusb_probe().

It might be that using the USB quirk only papers over the real issue.

> If they do overlap, is that not a bug in the stack that should be fixed 
> instead?
> If the fix belongs in btusb and this BTUSB_RESET_RESUME thing really
> is problematic, should it be totally removed instead?

I think so. That’s why I need some insight from the original patch author.

Kai-Heng

> 
> Daniel

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2017-12-26 Thread Marcel Holtmann
Hi Kai-Heng,

> This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.
> 
> This commit causes a regression on some QCA ROME chips. The USB device
> reset happens in btusb_open(), hence firmware loading gets interrupted.
> 
> Furthermore, this commit stops working after commit
> ("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
> enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
> btusb_suspend() when it's not a wakeup source.
> 
> If we really want to reset the USB device, we need to do it before
> btusb_open(). Let's handle it in drivers/usb/core/quirks.c.
> 
> Cc: sta...@vger.kernel.org
> Cc: Leif Liddy 
> Cc: Matthias Kaehlcke 
> Cc: Brian Norris 
> Cc: Daniel Drake 
> Signed-off-by: Kai-Heng Feng 
> 
> ---
> 
> Daniel, Cc you because this also affects your original quirk patch for
> Realtek btusb.
> 
> drivers/bluetooth/btusb.c | 6 --
> 1 file changed, 6 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2017-12-21 Thread Brian Norris
On Thu, Dec 21, 2017 at 3:43 AM, Daniel Drake  wrote:
> On Wed, Dec 20, 2017 at 6:53 PM, Brian Norris  
> wrote:
>>
>> On Wed, Dec 20, 2017 at 07:00:07PM +0800, Kai-Heng Feng wrote:
>> > This commit causes a regression on some QCA ROME chips. The USB device
>> > reset happens in btusb_open(), hence firmware loading gets interrupted.
>>
>> Oh, did you really confirm that's the root of the problem? I was only
>> hypothesizing, with some informed observation and code review; but I
>> didn't fully convince myself. If so, that's interesting.
>
> I have the same doubt. Can you explain how/why firmware uploading and
> btusb_open() overlap, and how this is avoided with your patch?
> If they do overlap, is that not a bug in the stack that should be fixed 
> instead?
> If the fix belongs in btusb and this BTUSB_RESET_RESUME thing really
> is problematic, should it be totally removed instead?

To be clear: this is a regression in mainline and should definitely be
fixed by reverting it. The path forward for patch 2/2 should be
determined by a better understanding of where the real problem is.

Brian
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2017-12-21 Thread Daniel Drake
On Wed, Dec 20, 2017 at 6:53 PM, Brian Norris  wrote:
>
> On Wed, Dec 20, 2017 at 07:00:07PM +0800, Kai-Heng Feng wrote:
> > This commit causes a regression on some QCA ROME chips. The USB device
> > reset happens in btusb_open(), hence firmware loading gets interrupted.
>
> Oh, did you really confirm that's the root of the problem? I was only
> hypothesizing, with some informed observation and code review; but I
> didn't fully convince myself. If so, that's interesting.

I have the same doubt. Can you explain how/why firmware uploading and
btusb_open() overlap, and how this is avoided with your patch?
If they do overlap, is that not a bug in the stack that should be fixed instead?
If the fix belongs in btusb and this BTUSB_RESET_RESUME thing really
is problematic, should it be totally removed instead?

Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2017-12-20 Thread Brian Norris
On Wed, Dec 20, 2017 at 07:00:07PM +0800, Kai-Heng Feng wrote:
> This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.
> 
> This commit causes a regression on some QCA ROME chips. The USB device
> reset happens in btusb_open(), hence firmware loading gets interrupted.

Oh, did you really confirm that's the root of the problem? I was only
hypothesizing, with some informed observation and code review; but I
didn't fully convince myself. If so, that's interesting.

> Furthermore, this commit stops working after commit
> ("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
> enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
> btusb_suspend() when it's not a wakeup source.
> 
> If we really want to reset the USB device, we need to do it before
> btusb_open(). Let's handle it in drivers/usb/core/quirks.c.
> 
> Cc: sta...@vger.kernel.org
> Cc: Leif Liddy 
> Cc: Matthias Kaehlcke 
> Cc: Brian Norris 
> Cc: Daniel Drake 
> Signed-off-by: Kai-Heng Feng 

Looks good to me. Definitely a regression and we need to clear that up
in mainline and stable before reintroducing the intended fix:

Reviewed-by: Brian Norris 
Tested-by: Brian Norris 

Thanks!

> ---
> 
> Daniel, Cc you because this also affects your original quirk patch for
> Realtek btusb.
> 
>  drivers/bluetooth/btusb.c | 6 --
>  1 file changed, 6 deletions(-)
> 
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index f7120c9eb9bd..da353c4acdc7 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -3117,12 +3117,6 @@ static int btusb_probe(struct usb_interface *intf,
>   if (id->driver_info & BTUSB_QCA_ROME) {
>   data->setup_on_usb = btusb_setup_qca;
>   hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
> -
> - /* QCA Rome devices lose their updated firmware over suspend,
> -  * but the USB hub doesn't notice any status change.
> -  * Explicitly request a device reset on resume.
> -  */
> - set_bit(BTUSB_RESET_RESUME, >flags);
>   }
>  
>  #ifdef CONFIG_BT_HCIBTUSB_RTL
> -- 
> 2.14.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] Revert "Bluetooth: btusb: fix QCA Rome suspend/resume"

2017-12-20 Thread Kai-Heng Feng
This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.

This commit causes a regression on some QCA ROME chips. The USB device
reset happens in btusb_open(), hence firmware loading gets interrupted.

Furthermore, this commit stops working after commit
("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
btusb_suspend() when it's not a wakeup source.

If we really want to reset the USB device, we need to do it before
btusb_open(). Let's handle it in drivers/usb/core/quirks.c.

Cc: sta...@vger.kernel.org
Cc: Leif Liddy 
Cc: Matthias Kaehlcke 
Cc: Brian Norris 
Cc: Daniel Drake 
Signed-off-by: Kai-Heng Feng 

---

Daniel, Cc you because this also affects your original quirk patch for
Realtek btusb.

 drivers/bluetooth/btusb.c | 6 --
 1 file changed, 6 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index f7120c9eb9bd..da353c4acdc7 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3117,12 +3117,6 @@ static int btusb_probe(struct usb_interface *intf,
if (id->driver_info & BTUSB_QCA_ROME) {
data->setup_on_usb = btusb_setup_qca;
hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
-
-   /* QCA Rome devices lose their updated firmware over suspend,
-* but the USB hub doesn't notice any status change.
-* Explicitly request a device reset on resume.
-*/
-   set_bit(BTUSB_RESET_RESUME, >flags);
}
 
 #ifdef CONFIG_BT_HCIBTUSB_RTL
-- 
2.14.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html