18 Oct, 2018

1 commit

  • [ Upstream commit e6a57d22f787e73635ce0d29eef0abb77928b3e9 ]

    The percpu_rw_semaphore is not currently freed, and this leads to
    a crash when the stale rcu callback is invoked. DEBUG_OBJECTS
    detects this.

    ODEBUG: free active (active state 1) object type: rcu_head hint: (null)
    ------------[ cut here ]------------
    WARNING: CPU: 1 PID: 2024 at debug_print_object+0xac/0xc8
    PC is at debug_print_object+0xac/0xc8
    LR is at debug_print_object+0xac/0xc8
    Call trace:
    [] debug_print_object+0xac/0xc8
    [] debug_check_no_obj_freed+0x1e8/0x228
    [] kfree+0x1cc/0x250
    [] hci_uart_tty_close+0x54/0x108
    [] tty_ldisc_close.isra.1+0x40/0x58
    [] tty_ldisc_kill+0x1c/0x40
    [] tty_ldisc_release+0x94/0x170
    [] tty_release_struct+0x1c/0x58
    [] tty_release+0x3b0/0x490
    [] __fput+0x88/0x1d0
    [] ____fput+0xc/0x18
    [] task_work_run+0x9c/0xc0
    [] do_exit+0x24c/0x8a0
    [] do_group_exit+0x38/0xa0
    [] __wake_up_parent+0x0/0x28
    [] el0_svc_naked+0x34/0x38
    ---[ end trace bfe08cbd89098cdf ]---

    Signed-off-by: Hermes Zhang
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Hermes Zhang
     

04 Oct, 2018

1 commit

  • [ Upstream commit 45ae68b8cfc25bdbffc11248001c47ab1b76ff6e ]

    Without this patch we cannot turn on the Bluethooth adapter on HP
    14-bs007la.

    T: Bus=01 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0bda ProdID=b009 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=802.11n WLAN Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Jian-Hong Pan
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jian-Hong Pan
     

20 Sep, 2018

1 commit

  • [ Upstream commit 6c3711ec64fd23a9abc8aaf59a9429569a6282df ]

    This driver was recently updated to use serdev, so add the appropriate
    dependency. Without this one can get compiler warnings like this if
    CONFIG_SERIAL_DEV_BUS is not enabled:

    CC [M] drivers/bluetooth/hci_h5.o
    drivers/bluetooth/hci_h5.c:934:36: warning: ‘h5_serdev_driver’ defined but not used [-Wunused-variable]
    static struct serdev_device_driver h5_serdev_driver = {
    ^~~~~~~~~~~~~~~~

    Signed-off-by: Johan Hedberg
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Johan Hedberg
     

16 Aug, 2018

2 commits

  • commit d73e172816652772114827abaa2dbc053eecbbd7 upstream.

    John Stultz reports a boot time crash with the HiKey board (which uses
    hci_serdev) occurring in hci_uart_tx_wakeup(). That function is
    contained in hci_ldisc.c, but also called from the newer hci_serdev.c.
    It acquires the proto_lock in struct hci_uart and it turns out that we
    forgot to init the lock in the serdev code path, thus causing the crash.

    John bisected the crash to commit 67d2f8781b9f ("Bluetooth: hci_ldisc:
    Allow sleeping while proto locks are held"), but the issue was present
    before and the commit merely exposed it. (Perhaps by luck, the crash
    did not occur with rwlocks.)

    Init the proto_lock in the serdev code path to avoid the oops.

    Stack trace for posterity:

    Unable to handle kernel read from unreadable memory at 406f127000
    [000000406f127000] user address but active_mm is swapper
    Internal error: Oops: 96000005 [#1] PREEMPT SMP
    Hardware name: HiKey Development Board (DT)
    Call trace:
    hci_uart_tx_wakeup+0x38/0x148
    hci_uart_send_frame+0x28/0x38
    hci_send_frame+0x64/0xc0
    hci_cmd_work+0x98/0x110
    process_one_work+0x134/0x330
    worker_thread+0x130/0x468
    kthread+0xf8/0x128
    ret_from_fork+0x10/0x18

    Link: https://lkml.org/lkml/2017/11/15/908
    Reported-and-tested-by: John Stultz
    Cc: Ronald Tschalär
    Cc: Rob Herring
    Cc: Sumit Semwal
    Signed-off-by: Lukas Wunner
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Amit Pundir
    Signed-off-by: Greg Kroah-Hartman

    Lukas Wunner
     
  • commit 67d2f8781b9f00d1089aafcfa3dc09fcd0f343e2 upstream.

    Commit dec2c92880cc5435381d50e3045ef018a762a917 ("Bluetooth: hci_ldisc:
    Use rwlocking to avoid closing proto races") introduced locks in
    hci_ldisc that are held while calling the proto functions. These locks
    are rwlock's, and hence do not allow sleeping while they are held.
    However, the proto functions that hci_bcm registers use mutexes and
    hence need to be able to sleep.

    In more detail: hci_uart_tty_receive() and hci_uart_dequeue() both
    acquire the rwlock, after which they call proto->recv() and
    proto->dequeue(), respectively. In the case of hci_bcm these point to
    bcm_recv() and bcm_dequeue(). The latter both acquire the
    bcm_device_lock, which is a mutex, so doing so results in a call to
    might_sleep(). But since we're holding a rwlock in hci_ldisc, that
    results in the following BUG (this for the dequeue case - a similar
    one for the receive case is omitted for brevity):

    BUG: sleeping function called from invalid context at kernel/locking/mutex.c
    in_atomic(): 1, irqs_disabled(): 0, pid: 7303, name: kworker/7:3
    INFO: lockdep is turned off.
    CPU: 7 PID: 7303 Comm: kworker/7:3 Tainted: G W OE 4.13.2+ #17
    Hardware name: Apple Inc. MacBookPro13,3/Mac-A5C67F76ED83108C, BIOS MBP133.8
    Workqueue: events hci_uart_write_work [hci_uart]
    Call Trace:
    dump_stack+0x8e/0xd6
    ___might_sleep+0x164/0x250
    __might_sleep+0x4a/0x80
    __mutex_lock+0x59/0xa00
    ? lock_acquire+0xa3/0x1f0
    ? lock_acquire+0xa3/0x1f0
    ? hci_uart_write_work+0xd3/0x160 [hci_uart]
    mutex_lock_nested+0x1b/0x20
    ? mutex_lock_nested+0x1b/0x20
    bcm_dequeue+0x21/0xc0 [hci_uart]
    hci_uart_write_work+0xe6/0x160 [hci_uart]
    process_one_work+0x253/0x6a0
    worker_thread+0x4d/0x3b0
    kthread+0x133/0x150

    We can't replace the mutex in hci_bcm, because there are other calls
    there that might sleep. Therefore this replaces the rwlock's in
    hci_ldisc with rw_semaphore's (which allow sleeping). This is a safer
    approach anyway as it reduces the restrictions on the proto callbacks.
    Also, because acquiring write-lock is very rare compared to acquiring
    the read-lock, the percpu variant of rw_semaphore is used.

    Lastly, because hci_uart_tx_wakeup() may be called from an IRQ context,
    we can't block (sleep) while trying acquire the read lock there, so we
    use the trylock variant.

    Signed-off-by: Ronald Tschalär
    Reviewed-by: Lukas Wunner
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Amit Pundir
    Signed-off-by: Greg Kroah-Hartman

    Ronald Tschalär
     

03 Aug, 2018

3 commits

  • [ Upstream commit d666fc5479ad76a1bcbe6476d4997cea714bab2d ]

    Contains a QCA6174A chipset, with USB BT. Let's support loading
    firmware on it.

    >From usb-devices:
    T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=301a Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Signed-off-by: Vic Wei
    Signed-off-by: Matthias Kaehlcke
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vic Wei
     
  • [ Upstream commit 66d9975c5a7c40aa7e4bb0ec0b0c37ba1f190923 ]

    Without this patch we cannot turn on the Bluethooth adapter on ASUS
    E406MA.

    T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=2ff8 ProdID=b011 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=802.11n WLAN Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Jian-Hong Pan
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jian-Hong Pan
     
  • [ Upstream commit 9960521c44a5d828f29636ceac0600603ecbddbf ]

    This patch fixes the following warning during boot:

    do not call blocking ops when !TASK_RUNNING; state=1 set at
    [] qca_setup+0x194/0x750 [hci_uart]
    WARNING: CPU: 2 PID: 1878 at kernel/sched/core.c:6135
    __might_sleep+0x7c/0x88

    In qca_set_baudrate(), the current task state is set to
    TASK_UNINTERRUPTIBLE before going to sleep for 300ms. It was then
    restored to TASK_INTERRUPTIBLE. This patch sets the current task state
    back to TASK_RUNNING instead.

    Signed-off-by: Thierry Escande
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Thierry Escande
     

03 Jul, 2018

1 commit

  • commit 7dc5fe0814c35ec4e7d2e8fa30abab72e0e6a172 upstream.

    AOSP use userspace firmware loader to load firmwares, which will
    return -EAGAIN in case qca/rampatch_00440302.bin is not found.
    Since there is no rampatch for dragonboard820c QCA controller
    revision, just make it work as is.

    CC: Loic Poulain
    CC: Nicolas Dechesne
    CC: Marcel Holtmann
    CC: Johan Hedberg
    CC: Stable
    Signed-off-by: Amit Pundir
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Amit Pundir
     

25 May, 2018

2 commits

  • [ Upstream commit fed03fe7e55b7dc16077f672bd9d7bbe92b3a691 ]

    The Asus Z370-I contains a Realtek RTL8822BE device with an associated
    BT chip using a USB ID of 0b05:185c. This device is added to the driver.

    Signed-off-by: Hon Weng Chong
    Signed-off-by: Larry Finger
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • [ Upstream commit a41e0796396eeceff673af4a38feaee149c6ff86 ]

    This WiFi/Bluetooth USB dongle uses a Realtek chipset, so, use btrtl for it.

    Product information:
    https://wikidevi.com/wiki/Edimax_EW-7611ULB

    >From /sys/kernel/debug/usb/devices
    T: Bus=02 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
    D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=7392 ProdID=a611 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=Edimax Wi-Fi N150 Bluetooth4.0 USB Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=500mA
    A: FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=01
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 6 Cls=ff(vend.) Sub=ff Prot=ff Driver=rtl8723bu
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=500us
    E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

    Tested-by: Vicente Bergas
    Signed-off-by: Vicente Bergas
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vicente Bergas
     

16 May, 2018

3 commits

  • commit fc54910280eb38bde923cdf0898e74687d8e6989 upstream.

    Jeremy Cline correctly points out in rhbz#1514836 that a device where the
    QCA rome chipset needs the USB_QUIRK_RESET_RESUME quirk, may also ship
    with a different wifi/bt chipset in some configurations.

    If that is the case then we are needlessly penalizing those other chipsets
    with a reset-resume quirk, typically causing 0.4W extra power use because
    this disables runtime-pm.

    This commit moves the DMI table check to a btusb_check_needs_reset_resume()
    helper (so that we can easily also call it for other chipsets) and calls
    this new helper only for QCA_ROME chipsets for now.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Cc: stable@vger.kernel.org
    Cc: Jeremy Cline
    Suggested-by: Jeremy Cline
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 596b07a9a22656493726edf1739569102bd3e136 upstream.

    The Dell XPS 13 9360 uses a QCA Rome chip which needs to be reset
    (and have its firmware reloaded) for bluetooth to work after
    suspend/resume.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Cc: stable@vger.kernel.org
    Cc: Garrett LeSage
    Reported-and-tested-by: Garrett LeSage
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 544a591668813583021474fa5c7ff4942244d654 upstream.

    Commit f44cb4b19ed4 ("Bluetooth: btusb: Fix quirk for Atheros
    1525/QCA6174") is causing bluetooth to no longer work for several
    people, see: https://bugzilla.redhat.com/show_bug.cgi?id=1568911

    So lets revert it for now and try to find another solution for
    devices which need the modified quirk.

    Cc: stable@vger.kernel.org
    Cc: Takashi Iwai
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

19 Apr, 2018

1 commit

  • commit bb5208b314c5127b716b2ee4f55803a8bb73b750 upstream.

    Older devices with a serdev attached bcm bt hci, use an Interrupt ACPI
    resource to describe the IRQ (rather then a GpioInt resource).

    These device seem to all claim the IRQ is active-high and seem to all need
    a DMI quirk to treat it as active-low. Instead simply always assume that
    Interrupt resource specified IRQs are always active-low.

    This fixes the bt device not being able to wake the host from runtime-
    suspend on the: Asus T100TAM, Asus T200TA, Lenovo Yoga2 and the Toshiba
    Encore, without the need to add 4 new DMI quirks for these models.

    This also allows us to remove 2 DMI quirks for the Asus T100TA and Asus
    T100CHI series. Likely the 2 remaining quirks can also be removed but I
    could not find a DSDT of these devices to verify this.

    Cc: stable@vger.kernel.org
    Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=198953
    Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1554835
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

12 Apr, 2018

1 commit

  • [ Upstream commit 0a03f98b98c201191e3ba15a0e33f46d8660e1fd ]

    This patch adds the 04ca:3015 (from a QCA9377 board) Bluetooth device
    to the btusb blacklist and makes the kernel use the btqca module
    instead of btusb. The patch is necessary because, without it the
    04ca:3015 device defaults to using the btusb driver, which makes the
    WIFI side of the QCA9377 board unusable (obtains 0 MBps in speedtest,
    when the 04ca:3015 bluetooth is used with an audio headset).

    /sys/kernel/debug/usb/devices:

    T: Bus=01 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=3015 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Ioan Moldovan
    Signed-off-by: Johan Hedberg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ioan Moldovan
     

29 Mar, 2018

3 commits

  • commit f44cb4b19ed40b655c2d422c9021ab2c2625adb6 upstream.

    The Atheros 1525/QCA6174 BT doesn't seem working properly on the
    recent kernels, as it tries to load a wrong firmware
    ar3k/AthrBT_0x00000200.dfu and it fails.

    This seems to have been a problem for some time, and the known
    workaround is to apply BTUSB_QCA_ROM quirk instead of BTUSB_ATH3012.

    The device in question is:

    T: Bus=01 Lev=01 Prnt=01 Port=09 Cnt=03 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=3004 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Bugzilla: http://bugzilla.opensuse.org/show_bug.cgi?id=1082504
    Reported-by: Ivan Levshin
    Tested-by: Ivan Levshin
    Cc:
    Signed-off-by: Takashi Iwai
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit 0c6e526646c04ce31d4aaa280ed2237dd1cd774c upstream.

    The issue can be reproduced before commit fd865802c66b ("Bluetooth:
    btusb: fix QCA Rome suspend/resume") gets introduced, so the reset
    resume quirk is still needed for this system.

    T: Bus=01 Lev=01 Prnt=01 Port=13 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=e007 Rev=00.01
    C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Hans de Goede
    Signed-off-by: Kai-Heng Feng
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit f0e8c61110c2c85903b136ba070daf643a8b6842 upstream.

    Commit 1fdb92697469 ("Bluetooth: btusb: Use DMI matching for QCA
    reset_resume quirking"), added the Lenovo Yoga 920 to the
    btusb_needs_reset_resume_table.

    Testing has shown that this is a false positive and the problems where
    caused by issues with the initial fix: commit fd865802c66b ("Bluetooth:
    btusb: fix QCA Rome suspend/resume"), which has already been reverted.

    So the QCA Rome BT in the Yoga 920 does not need a reset-resume quirk at
    all and this commit removes it from the btusb_needs_reset_resume_table.

    Note that after this commit the btusb_needs_reset_resume_table is now
    empty. It is kept around on purpose, since this whole series of commits
    started for a reason and there are actually broken platforms around,
    which need to be added to it.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 1fdb92697469 ("Bluetooth: btusb: Use DMI matching for QCA ...")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Kai-Heng Feng
    Tested-by: Kevin Fenzi
    Suggested-by: Brian Norris
    Signed-off-by: Hans de Goede
    Reviewed-by: Brian Norris
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

24 Mar, 2018

2 commits

  • [ Upstream commit 67b8fbead4685b36d290a0ef91c6ddffc4920ec9 ]

    In case of hci send frame failure, skb is still owned
    by the caller (hci_core) and then should not be freed.

    This fixes crash on dragonboard-410c when sending SCO
    packet. skb is freed by both btqcomsmd and hci_core.

    Fixes: 1511cc750c3d ("Bluetooth: Introduce Qualcomm WCNSS SMD based HCI driver")
    Signed-off-by: Loic Poulain
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Loic Poulain
     
  • [ Upstream commit ba8f3597900291a93604643017fff66a14546015 ]

    Assuming that the original code idea was to enable in-band sleeping
    only if the setup_rome method returns succes and run in 'standard'
    mode otherwise, we should not return setup_rome return value which
    makes qca_setup fail if no rampatch/nvm file found.

    This fixes BT issue on the dragonboard-820C p4 which includes the
    following QCA controller:
    hci0: Product:0x00000008
    hci0: Patch :0x00000111
    hci0: ROM :0x00000302
    hci0: SOC :0x00000044

    Since there is no rampatch for this controller revision, just make
    it work as is.

    Signed-off-by: Loic Poulain
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Loic Poulain
     

09 Mar, 2018

1 commit

  • commit 1fdb926974695d3dbc05a429bafa266fdd16510e upstream.

    Commit 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume fix
    with a "rewritten" version") applied the USB_QUIRK_RESET_RESUME to all QCA
    USB Bluetooth modules. But it turns out that the resume problems are not
    caused by the QCA Rome chipset, on most platforms it resumes fine. The
    resume problems are actually a platform problem (likely the platform
    cutting all power when suspended).

    The USB_QUIRK_RESET_RESUME quirk also disables runtime suspend, so by
    matching on usb-ids, we're causing all boards with these chips to use extra
    power, to fix resume problems which only happen on some boards.

    This commit fixes this by applying the quirk based on DMI matching instead
    of on usb-ids, so that we match the platform and not the chipset.

    Here is the /sys/kernel/debug/usb/devices for the Bluetooth module:

    T: Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#= 5 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=e300 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume..")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Kai-Heng Feng
    Reported-and-tested-by: Kevin Fenzi
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

22 Feb, 2018

1 commit

  • commit 05e89fb576f580ac95e7a5d00bdb34830b09671a upstream.

    It is no longer possible to build BT_HCIUART into the kernel
    when SERIAL_DEV_BUS is a loadable module, even if none of the
    SERIAL_DEV_BUS based implementations are selected:

    drivers/bluetooth/hci_ldisc.o: In function `hci_uart_set_flow_control':
    hci_ldisc.c:(.text+0xb40): undefined reference to `serdev_device_set_flow_control'
    hci_ldisc.c:(.text+0xb5c): undefined reference to `serdev_device_set_tiocm'

    This adds a dependency to avoid the broken configuration.

    Fixes: 7841d554809b ("Bluetooth: hci_uart_set_flow_control: Fix NULL deref when using serdev")
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     

17 Feb, 2018

3 commits

  • commit 61f5acea8737d9b717fcc22bb6679924f3c82b98 upstream.

    Commit 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    removed the setting of the BTUSB_RESET_RESUME quirk for QCA Rome devices,
    instead favoring adding USB_QUIRK_RESET_RESUME quirks in usb/core/quirks.c.

    This was done because the DIY BTUSB_RESET_RESUME reset-resume handling
    has several issues (see the original commit message). An added advantage
    of moving over to the USB-core reset-resume handling is that it also
    disables autosuspend for these devices, which is similarly broken on these.

    But there are 2 issues with this approach:
    1) It leaves the broken DIY BTUSB_RESET_RESUME code in place for Realtek
    devices.
    2) Sofar only 2 of the 10 QCA devices known to the btusb code have been
    added to usb/core/quirks.c and if we fix the Realtek case the same way
    we need to add an additional 14 entries. So in essence we need to
    duplicate a large part of the usb_device_id table in btusb.c in
    usb/core/quirks.c and manually keep them in sync.

    This commit instead restores setting a reset-resume quirk for QCA devices
    in the btusb.c code, avoiding the duplicate usb_device_id table problem.

    This commit avoids the problems with the original DIY BTUSB_RESET_RESUME
    code by simply setting the USB_QUIRK_RESET_RESUME quirk directly on the
    usb_device.

    This commit also moves the BTUSB_REALTEK case over to directly setting the
    USB_QUIRK_RESET_RESUME on the usb_device and removes the now unused
    BTUSB_RESET_RESUME code.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    Cc: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Cc: Kai-Heng Feng
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 7d06d5895c159f64c46560dc258e553ad8670fe0 upstream.

    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: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Signed-off-by: Kai-Heng Feng
    Reviewed-by: Brian Norris
    Tested-by: Brian Norris
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit b4cdaba274247c9c841c6a682c08fa91fb3aa549 upstream.

    BCM43341 devices soldered onto the PCB (non-removable) always (AFAICT)
    use an UART connection for bluetooth. But they also advertise btsdio
    support on their 3th sdio function, this causes 2 problems:

    1) A non functioning BT HCI getting registered

    2) Since the btsdio driver does not have suspend/resume callbacks,
    mmc_sdio_pre_suspend will return -ENOSYS, causing mmc_pm_notify()
    to react as if the SDIO-card is removed and since the slot is
    marked as non-removable it will never get detected as inserted again.
    Which results in wifi no longer working after a suspend/resume.

    This commit fixes both by making btsdio ignore BCM43341 devices
    when connected to a slot which is marked non-removable.

    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

25 Dec, 2017

2 commits

  • [ Upstream commit 227630cccdbb8f8a1b24ac26517b75079c9a69c9 ]

    This commit fixes 2 issues with host-wake irq trigger type handling
    in hci_bcm:

    1) bcm_setup_sleep sets sleep_params.host_wake_active based on
    bcm_device.irq_polarity, but bcm_request_irq was always requesting
    IRQF_TRIGGER_RISING as trigger type independent of irq_polarity.

    This was a problem when the irq is described as a GpioInt rather then
    an Interrupt in the DSDT as for GpioInt-s the value passed to request_irq
    is honored. This commit fixes this by requesting the correct trigger
    type depending on bcm_device.irq_polarity.

    2) bcm_device.irq_polarity was used to directly store an ACPI polarity
    value (ACPI_ACTIVE_*). This is undesirable because hci_bcm is also
    used with device-tree and checking for something like ACPI_ACTIVE_LOW
    in a non ACPI specific function like bcm_request_irq feels wrong.

    This commit fixes this by renaming irq_polarity to irq_active_low
    and changing its type to a bool.

    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • [ Upstream commit 7841d554809b518a22349e7e39b6b63f8a48d0fb ]

    Fix a NULL pointer deref (hu->tty) when calling hci_uart_set_flow_control
    on hci_uart-s using serdev.

    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

20 Dec, 2017

2 commits

  • [ Upstream commit 858ff38af77fc660092e82474ecc6ac135ed29fe ]

    This change allows proper low power mode entry in suspend.

    /sys/kernel/debug/usb/devices entry:
    T: Bus=01 Lev=01 Prnt=01 Port=05 Cnt=03 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0489 ProdID=e09f Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Bartosz Chronowski
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Bartosz Chronowski
     
  • [ Upstream commit 0338b1b393ec7910898e8f7b25b3bf31a7282e16 ]

    The following race condition still existed:

    P1 P2
    cancel_work_sync()
    hci_uart_tx_wakeup()
    hci_uart_write_work()
    hci_uart_dequeue()
    clear_bit(HCI_UART_PROTO_READY)
    hci_unregister_dev(hdev)
    hci_free_dev(hdev)
    hu->proto->close(hu)
    kfree(hu)
    access to hdev and hu

    Cancelling the work after clearing the HCI_UART_PROTO_READY bit avoids
    this as any hci_uart_tx_wakeup() issued after the flag is cleared will
    detect that and not schedule further work.

    Signed-off-by: Ronald Tschalär
    Reviewed-by: Lukas Wunner
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ronald Tschalär
     

30 Nov, 2017

1 commit

  • commit 6e518111060c2290427d79c43d4add9600ad852b upstream.

    This patch implements the hdev setup function since wcnss-bt does not have
    persistent memory to store an allocated BD address. The device is therefore
    marked as unconfigured if no BD address has been previously retrieved.

    Signed-off-by: Loic Poulain
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Loic Poulain
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

18 Aug, 2017

2 commits

  • The Broadcom controller on the Raspberry Pi3 sends an empty packet with
    packet type 0x00 after launching the firmware. This will cause logging
    of errors.

    Bluetooth: hci0: Frame reassembly failed (-84)

    Since this seems to be an intented behaviour of the controller, handle
    it gracefully by parsing that empty packet with packet type 0x00 and
    then just simply report it as diagnostic packet.

    With that change no errors are logging and the packet itself is actually
    recorded in the Bluetooth monitor traces.

    < HCI Command: Broadcom Launch RAM (0x3f|0x004e) plen 4
    Address: 0xffffffff
    > HCI Event: Command Complete (0x0e) plen 4
    Broadcom Launch RAM (0x3f|0x004e) ncmd 1
    Status: Success (0x00)
    = Vendor Diagnostic (len 0)
    < HCI Command: Broadcom Update UART Baud Rate (0x3f|0x0018) plen 6
    00 00 00 10 0e 00 ......
    > HCI Event: Command Complete (0x0e) plen 4
    Broadcom Update UART Baud Rate (0x3f|0x0018) ncmd 1
    Status: Success (0x00)
    < HCI Command: Reset (0x03|0x0003) plen 0
    > HCI Event: Command Complete (0x0e) plen 4
    Reset (0x03|0x0003) ncmd 1
    Status: Success (0x00)

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     
  • Add basic support for Broadcom serial slave devices.
    Probe the serial device, retrieve its maximum speed and
    register a new hci uart device.

    Tested/compatible with bcm43438 (RPi3).

    Signed-off-by: Loic Poulain
    Signed-off-by: Marcel Holtmann

    Loic Poulain
     

17 Aug, 2017

1 commit


16 Aug, 2017

2 commits

  • Not all Broadcom controller support the 4Mbps operational speed on UART
    devices. This is because the UART clock setting changes might not be
    supported.

    < HCI Command: Broadcom Write UART Clock Setting (0x3f|0x0045) plen 1
    01 .
    > HCI Event: Command Complete (0x0e) plen 4
    Broadcom Write UART Clock Setting (0x3f|0x0045) ncmd 1
    Status: Unknown HCI Command (0x01)

    To support any operational speed higher than 3Mbps, support for this
    command is required. With that respect it is better to not enforce any
    operational speed by default. Only when its support is known, then allow
    for higher operational speed.

    This patch assigns the 4Mbps opertional speed only for devices
    discovered through ACPI and leave all others at the default 115200.

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     
  • BT-Controller connected as platform non-root-hub device and
    usb-driver initialize such device with wakeup disabled,
    Ref. usb_new_device().

    At present wakeup-capability get enabled by hid-input device from usb
    function driver(e.g. BT HID device) at runtime. Again some functional
    driver does not set usb-wakeup capability(e.g LE HID device implement
    as HID-over-GATT), and can't wakeup the host on USB.

    Most of the device operation (such as mass storage) initiated from host
    (except HID) and USB wakeup aligned with host resume procedure. For BT
    device, usb-wakeup capability need to enable form btusc driver as a
    generic solution for multiple profile use case and required for USB remote
    wakeup (in-bus wakeup) while host is suspended. Also usb-wakeup feature
    need to enable/disable with HCI interface up and down.

    Signed-off-by: Sukumar Ghorai
    Signed-off-by: Amit K Bag
    Acked-by: Oliver Neukum
    Signed-off-by: Marcel Holtmann

    Sukumar Ghorai
     

15 Aug, 2017

1 commit

  • The GPD Pocket is shipping with a BCM2045 USB HCI with its vendor and
    product information set to 0000:0000 and also has its interface class
    set to 255 (Vendor Specific Class). Luckily it does advertise usable
    manufacturer and product strings.

    T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0000 ProdID=0000 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM2045A0
    S: SerialNumber=AC83F30677CB
    C:* #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    Reported-by: Christopher Williamson
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     

08 Aug, 2017

2 commits

  • T: Bus=02 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 2.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=13d3 ProdID=3494 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=Bluetooth Radio
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Dmitry Tunin
    Signed-off-by: Marcel Holtmann
    Cc: stable@vger.kernel.org

    Dmitry Tunin
     
  • Currently the activity LED is solid on during continuous activity.
    Blink the LED during continuous activity to match Windows driver
    behavior.

    Cards with activity LED:
    power LED = solid on when up, off when down
    activity LED = blinking during activity, off when idle

    Cards without activity LED:
    power LED = solid on when up, off when down, blinking during activity
    (don't have such a card so I don't know if Windows driver does the same
    thing)

    Signed-off-by: Ondrej Zary
    Signed-off-by: Marcel Holtmann

    Ondrej Zary