06 Jan, 2016

2 commits

  • Usually when driver sends data to firmware it receives TX_DONE
    (DN_LD_HOST_INT_STATUS) interrupt from firmware right away.
    It's also observed that some times the fireware could delay
    sending DN_LD_HOST_INT_STATUS interrupt. If driver sends data to
    firmware during suspend processing and the TX_DONE interrupt is
    delayed, it may come back at wrong time when SDIO host driver is
    in the middle of suspending.

    Block any data from stack while suspending. Also skip sending
    data that are already in driver tx_queue.

    Don't purge the skb queue on suspend to avoid intermittent music
    after system resumes from S3.

    Signed-off-by: Chin-Ran Lo
    Signed-off-by: Amitkumar Karwar
    Signed-off-by: Marcel Holtmann

    Chin-Ran Lo
     
  • For gpio=0xff (wake up host through SDIO interface) case,
    gap=0xff means no delay (same as gap=0) for incoming data packet
    to be sent to host after host sleep is activated.
    Change it to the maximum delay to reduce the chance that RX
    interrupt could be delivered while host controller suspends.

    Signed-off-by: Chin-Ran Lo
    Signed-off-by: Amitkumar Karwar
    Signed-off-by: Marcel Holtmann

    Chin-Ran Lo
     

05 Jan, 2016

3 commits

  • It's been observed that when bluetooth driver fails to
    activate the firmware, below hung task warning dump is
    displayed after 120 seconds.

    [ 36.461022] Bluetooth: vendor=0x2df, device=0x912e, class=255, fn=2
    [ 56.512128] Bluetooth: FW failed to be active in time!
    [ 56.517264] Bluetooth: Downloading firmware failed!
    [ 240.252176] INFO: task kworker/3:2:129 blocked for more than 120 seconds.
    [ 240.258931] Not tainted 3.18.0 #254
    [ 240.262972] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    [ 240.270751] kworker/3:2 D ffffffc000205760 0 129 2 0x00000000
    [ 240.277825] Workqueue: events request_firmware_work_func
    [ 240.283134] Call trace:
    [ 240.285581] [] __switch_to+0x80/0x8c
    [ 240.290693] [] __schedule+0x540/0x7b8
    [ 240.295921] [] schedule+0x78/0x84
    [ 240.300764] [] __mmc_claim_host+0xe8/0x1c8
    [ 240.306395] [] sdio_claim_host+0x74/0x84
    [ 240.311840] [] 0xffffffbffc163d08
    [ 240.316685] [] 0xffffffbffc165104
    [ 240.321524] [] mwifiex_dnld_fw+0x98/0x110 [mwifiex]
    [ 240.327918] [] mwifiex_remove_card+0x2c4/0x5fc [mwifiex]
    [ 240.334741] [] request_firmware_work_func+0x44/0x80
    [ 240.341127] [] process_one_work+0x2ec/0x50c
    [ 240.346831] [] worker_thread+0x350/0x470
    [ 240.352272] [] kthread+0xf0/0xfc
    [ 240.357019] 2 locks held by kworker/3:2/129:
    [ 240.361248] #0: ("events"){.+.+.+}, at: [] process_one_work+0x1f8/0x50c
    [ 240.369562] #1: ((&fw_work->work)){+.+.+.}, at: [] process_one_work+0x1f8/0x50c
    [ 240.378589] task PC stack pid father
    [ 240.384501] kworker/1:1 D ffffffc000205760 0 40 2 0x00000000
    [ 240.391524] Workqueue: events mtk_atomic_work
    [ 240.395884] Call trace:
    [ 240.398317] [] __switch_to+0x80/0x8c
    [ 240.403448] [] lock_acquire+0x128/0x164
    [ 240.408821] kworker/3:2 D ffffffc000205760 0 129 2 0x00000000
    [ 240.415867] Workqueue: events request_firmware_work_func
    [ 240.421138] Call trace:
    [ 240.423589] [] __switch_to+0x80/0x8c
    [ 240.428688] [] __schedule+0x540/0x7b8
    [ 240.433886] [] schedule+0x78/0x84
    [ 240.438732] [] __mmc_claim_host+0xe8/0x1c8
    [ 240.444361] [] sdio_claim_host+0x74/0x84
    [ 240.449801] [] 0xffffffbffc163d08
    [ 240.454649] [] 0xffffffbffc165104
    [ 240.459486] [] mwifiex_dnld_fw+0x98/0x110 [mwifiex]
    [ 240.465882] [] mwifiex_remove_card+0x2c4/0x5fc [mwifiex]
    [ 240.472705] [] request_firmware_work_func+0x44/0x80
    [ 240.479090] [] process_one_work+0x2ec/0x50c
    [ 240.484794] [] worker_thread+0x350/0x470
    [ 240.490231] [] kthread+0xf0/0xfc

    This patch adds missing sdio_release_host() call so that wlan driver
    thread can claim sdio host.

    Fixes: 4863e4cc31d647e1 ("Bluetooth: btmrvl: release sdio bus after firmware is up")
    Signed-off-by: Chin-Ran Lo
    Signed-off-by: Amitkumar Karwar
    Signed-off-by: Marcel Holtmann

    Chin-Ran Lo
     
  • These are used at least by Acer with BCM43241.

    Signed-off-by: Heikki Krogerus
    Signed-off-by: Marcel Holtmann

    Heikki Krogerus
     
  • The IDs should all be for Broadcom BCM43241 module, and
    hci_bcm is now the proper driver for them. This removes one
    of two different ways of handling PM with the module.

    Cc: Johannes Berg
    Signed-off-by: Heikki Krogerus
    Signed-off-by: Marcel Holtmann

    Heikki Krogerus
     

22 Dec, 2015

3 commits


20 Dec, 2015

1 commit


11 Dec, 2015

1 commit


10 Dec, 2015

7 commits


20 Nov, 2015

3 commits


11 Nov, 2015

1 commit

  • Pull networking fixes from David Miller:

    1) Fix null deref in xt_TEE netfilter module, from Eric Dumazet.

    2) Several spots need to get to the original listner for SYN-ACK
    packets, most spots got this ok but some were not. Whilst covering
    the remaining cases, create a helper to do this. From Eric Dumazet.

    3) Missiing check of return value from alloc_netdev() in CAIF SPI code,
    from Rasmus Villemoes.

    4) Don't sleep while != TASK_RUNNING in macvtap, from Vlad Yasevich.

    5) Use after free in mvneta driver, from Justin Maggard.

    6) Fix race on dst->flags access in dst_release(), from Eric Dumazet.

    7) Add missing ZLIB_INFLATE dependency for new qed driver. From Arnd
    Bergmann.

    8) Fix multicast getsockopt deadlock, from WANG Cong.

    9) Fix deadlock in btusb, from Kuba Pawlak.

    10) Some ipv6_add_dev() failure paths were not cleaning up the SNMP6
    counter state. From Sabrina Dubroca.

    11) Fix packet_bind() race, which can cause lost notifications, from
    Francesco Ruggeri.

    12) Fix MAC restoration in qlcnic driver during bonding mode changes,
    from Jarod Wilson.

    13) Revert bridging forward delay change which broke libvirt and other
    userspace things, from Vlad Yasevich.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (65 commits)
    Revert "bridge: Allow forward delay to be cfgd when STP enabled"
    bpf_trace: Make dependent on PERF_EVENTS
    qed: select ZLIB_INFLATE
    net: fix a race in dst_release()
    net: mvneta: Fix memory use after free.
    net: Documentation: Fix default value tcp_limit_output_bytes
    macvtap: Resolve possible __might_sleep warning in macvtap_do_read()
    mvneta: add FIXED_PHY dependency
    net: caif: check return value of alloc_netdev
    net: hisilicon: NET_VENDOR_HISILICON should depend on HAS_DMA
    drivers: net: xgene: fix RGMII 10/100Mb mode
    netfilter: nft_meta: use skb_to_full_sk() helper
    net_sched: em_meta: use skb_to_full_sk() helper
    sched: cls_flow: use skb_to_full_sk() helper
    netfilter: xt_owner: use skb_to_full_sk() helper
    smack: use skb_to_full_sk() helper
    net: add skb_to_full_sk() helper and use it in selinux_netlbl_skbuff_setsid()
    bpf: doc: correct arch list for supported eBPF JIT
    dwc_eth_qos: Delete an unnecessary check before the function call "of_node_put"
    bonding: fix panic on non-ARPHRD_ETHER enslave failure
    ...

    Linus Torvalds
     

05 Nov, 2015

2 commits

  • Pull driver core updates from Greg KH:
    "Here's the "big" driver core updates for 4.4-rc1. Primarily a bunch
    of debugfs updates, with a smattering of minor driver core fixes and
    updates as well.

    All have been in linux-next for a long time"

    * tag 'driver-core-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
    debugfs: Add debugfs_create_ulong()
    of: to support binding numa node to specified device in devicetree
    debugfs: Add read-only/write-only bool file ops
    debugfs: Add read-only/write-only size_t file ops
    debugfs: Add read-only/write-only x64 file ops
    debugfs: Consolidate file mode checks in debugfs_create_*()
    Revert "mm: Check if section present during memory block (un)registering"
    driver-core: platform: Provide helpers for multi-driver modules
    mm: Check if section present during memory block (un)registering
    devres: fix a for loop bounds check
    CMA: fix CONFIG_CMA_SIZE_MBYTES overflow in 64bit
    base/platform: assert that dev_pm_domain callbacks are called unconditionally
    sysfs: correctly handle short reads on PREALLOC attrs.
    base: soc: siplify ida usage
    kobject: move EXPORT_SYMBOL() macros next to corresponding definitions
    kobject: explain what kobject's sd field is
    debugfs: document that debugfs_remove*() accepts NULL and error values
    debugfs: Pass bool pointer to debugfs_create_bool()
    ACPI / EC: Fix broken 64bit big-endian users of 'global_lock'

    Linus Torvalds
     
  • commit 8f9d02f470f48416444ac3a1eacecdd0f743f1a7 introduced spinlocks
    in btusb_work. This is run in a context of a worqueue and can be interrupted
    by hardware irq. If it happens while spinlock is held, we have a deadlock.
    Solution is to use _irqsave/_resore version of locking

    [ 466.460560] =================================
    [ 466.460565] [ INFO: inconsistent lock state ]
    [ 466.460572] 4.3.0-rc6+ #1 Tainted: G W
    [ 466.460576] ---------------------------------
    [ 466.460582] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
    [ 466.460589] kworker/0:2/94 [HC0[0]:SC0[0]:HE1:SE1] takes:
    [ 466.460595] (&(&data->rxlock)->rlock){?.-...}, at: [] btusb_work+0xa3/0x3fd [btusb]
    [ 466.460621] {IN-HARDIRQ-W} state was registered at:
    [ 466.460625] [] __lock_acquire+0xc45/0x1e80
    [ 466.460638] [] lock_acquire+0xe5/0x1f0
    [ 466.460646] [] _raw_spin_lock+0x38/0x50
    [ 466.460657] [] btusb_recv_intr+0x38/0x170 [btusb]
    [ 466.460668] [] btusb_intr_complete+0xa6/0x130 [btusb]
    [ 466.460679] [] __usb_hcd_giveback_urb+0x8e/0x160
    [ 466.460690] [] usb_hcd_giveback_urb+0x3f/0x120
    [ 466.460698] [] uhci_giveback_urb+0xad/0x280
    [ 466.460706] [] uhci_scan_schedule.part.33+0x6b4/0xbe0
    [ 466.460714] [] uhci_irq+0xd0/0x180
    [ 466.460722] [] usb_hcd_irq+0x26/0x40
    [ 466.460729] [] handle_irq_event_percpu+0x40/0x300
    [ 466.460739] [] handle_irq_event+0x40/0x60
    [ 466.460746] [] handle_fasteoi_irq+0x89/0x150
    [ 466.460754] [] handle_irq+0x73/0x120
    [ 466.460763] [] do_IRQ+0x61/0x120
    [ 466.460772] [] ret_from_intr+0x0/0x31
    [ 466.460780] [] cpuidle_enter+0x17/0x20
    [ 466.460790] [] call_cpuidle+0x32/0x60
    [ 466.460800] [] cpu_startup_entry+0x2b8/0x3f0
    [ 466.460807] [] rest_init+0x13a/0x140
    [ 466.460817] [] start_kernel+0x4a3/0x4c4
    [ 466.460827] [] x86_64_start_reservations+0x2a/0x2c
    [ 466.460837] [] x86_64_start_kernel+0x14a/0x16d
    [ 466.460846] irq event stamp: 754913
    [ 466.460851] hardirqs last enabled at (754913): [] _raw_spin_unlock_irq+0x2c/0x40
    [ 466.460861] hardirqs last disabled at (754912): [] _raw_spin_lock_irq+0x1d/0x60
    [ 466.460869] softirqs last enabled at (753024): [] __do_softirq+0x380/0x490
    [ 466.460880] softirqs last disabled at (753009): [] irq_exit+0x10f/0x120
    [ 466.460888]
    other info that might help us debug this:
    [ 466.460894] Possible unsafe locking scenario:

    [ 466.460899] CPU0
    [ 466.460903] ----
    [ 466.460907] lock(&(&data->rxlock)->rlock);
    [ 466.460915]
    [ 466.460918] lock(&(&data->rxlock)->rlock);
    [ 466.460926]
    *** DEADLOCK ***

    [ 466.460935] 2 locks held by kworker/0:2/94:
    [ 466.460939] #0: ("events"){.+.+.+}, at: [] process_one_work+0x16b/0x660
    [ 466.460958] #1: ((&data->work)){+.+...}, at: [] process_one_work+0x16b/0x660
    [ 466.460974]

    Signed-off-by: Kuba Pawlak
    Signed-off-by: Marcel Holtmann

    Kuba Pawlak
     

26 Oct, 2015

1 commit

  • for_each_compatible_node performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.

    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):

    //
    @@
    expression e;
    local idexpression n;
    @@

    for_each_compatible_node(n, ...) {
    ... when != of_node_put(n)
    when != e = n
    (
    return n;
    |
    + of_node_put(n);
    ? return ...;
    )
    ...
    }
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: Marcel Holtmann

    Julia Lawall
     

22 Oct, 2015

1 commit


21 Oct, 2015

15 commits

  • The Intel Bluetooth controllers can emit extra vendor specific events in
    error conditions or for debugging purposes. To make the life easier for
    engineers, enable them by default. When the vendor_diag options has been
    enabled, then additional debug events are also enabled.

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

    Marcel Holtmann
     
  • For Intel bootloader devices, set the manufacturer information so that
    it becomes possible to decode the boot process.

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

    Marcel Holtmann
     
  • Provide an early indication about the manufacturer information so that
    it can be forwarded into monitor channel.

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

    Marcel Holtmann
     
  • The latest Apple Bluetooth controllers with Broadcom chip in it have
    a small design change. Instead of including a USB hub with mouse and
    keyboard devices, they are now HID interfaces on the same device.

    T: Bus=04 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 39 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=05ac ProdID=8290 Rev= 0.79
    S: Manufacturer=Broadcom Corp.
    S: Product=Bluetooth USB Host Controller
    C:* #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr= 0mA
    A: FirstIf#= 2 IfCount= 4 Cls=ff(vend.) Sub=01 Prot=01
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
    E: Ad=85(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
    I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
    E: Ad=86(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
    I:* If#= 2 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#= 3 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#= 3 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#= 3 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#= 3 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#= 3 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#= 3 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
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=btusb
    E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    The general layout of Bluetooth devices is that interface 0 is the main
    interface and interface 1 is for audio data. This design obviously moves
    it to main interface 2 and audio data on interface 3.

    Starting with the MacBookPro12,1 (early 2015 models) the new Broadcom
    BCM943602CS cards are used which show this interface layout.

    usb 4-1.5: New USB device found, idVendor=05ac, idProduct=8290
    usb 4-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    usb 4-1.5: Product: Bluetooth USB Host Controller
    usb 4-1.5: Manufacturer: Broadcom Corp.
    Bluetooth: hci0: BCM: chip id 102 build 0243
    Bluetooth: hci0: BCM: product 05ac:8290
    Bluetooth: hci0: BCM20703A1 Generic USB UHE Apple 20Mhz fcbga_X87

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

    Marcel Holtmann
     
  • For the controllers from Intel and Broadcom (including Apple), it is
    helpful to have the information about the manufacturer send out early.

    This patch sets the hdev->manufacturer information which will be send
    out before actually calling the vendor specific hdev->setup driver
    callback.

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

    Marcel Holtmann
     
  • T: Bus=04 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=817b Rev=00.02
    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

    BugLink: https://bugs.launchpad.net/bugs/1506615

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

    Dmitry Tunin
     
  • This adapter works with the existing linux-firmware.

    T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0930 ProdID=021c 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

    BugLink: https://bugs.launchpad.net/bugs/1502781

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

    Dmitry Tunin
     
  • Recently salvaged this 'BCM43142A0' WiFi/Bluetooth module from a Lenovo laptop
    and noticed it doesn't work automatically, because the USB IDs are missing
    from btusb.c.

    Plugging in the adapter on Linux 4.1 (dmesg):
    usb 3-3.3.3: new full-speed USB device number 90 using xhci_hcd
    usb 3-3.3.3: New USB device found, idVendor=105b, idProduct=e065
    usb 3-3.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 3-3.3.3: Product: BCM43142A0
    usb 3-3.3.3: Manufacturer: Broadcom Corp
    usb 3-3.3.3: SerialNumber: 0090A286559E

    /sys/kernel/debug/usb/devices:
    T: Bus=03 Lev=03 Prnt=22 Port=02 Cnt=02 Dev#= 90 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=105b ProdID=e065 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM43142A0
    S: SerialNumber=0090A286559E
    C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    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=(none)
    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=(none)
    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=(none)
    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=(none)
    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=(none)
    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=(none)
    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)

    Support for the chipset was added in commit 88f9b65 and a similar BCM43142
    based device was added in commit 8f0c304.

    To work around the issue, I got the firmware
    (BCM43142A0_001.001.011.0122.0153) off a Windows installation of Broadcom
    bluetooth driver and converted it to a .hcd -file via. hex2hcd and placed it
    in /lib/firmware/brcm/BCM.hcd. After that:

    $ echo "105b e065 0 19ff 0239" > /sys/bus/usb/drivers/btusb/new_id
    ...(plug in the adapter)
    usb 3-3.3.3: new full-speed USB device number 91 using xhci_hcd
    usb 3-3.3.3: New USB device found, idVendor=105b, idProduct=e065
    usb 3-3.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 3-3.3.3: Product: BCM43142A0
    usb 3-3.3.3: Manufacturer: Broadcom Corp
    usb 3-3.3.3: SerialNumber: 0090A286559E
    Bluetooth: hci0: BCM: chip id 70
    Bluetooth: hci0: BCM (001.001.011) build 0000
    bluetooth hci0: firmware: direct-loading firmware brcm/BCM.hcd
    Bluetooth: hci0: BCM (001.001.011) build 0154

    Bam, now it works for me!

    /sys/kernel/debug/usb/devices:
    T: Bus=03 Lev=03 Prnt=22 Port=02 Cnt=02 Dev#= 92 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=105b ProdID=e065 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM43142A0
    S: SerialNumber=0090A286559E
    C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
    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)

    Signed-off-by: Santtu Rekilä
    Signed-off-by: Marcel Holtmann

    Santtu Rekilä
     
  • For the Apple Bluetooth devices, read the USB product information and
    print them. This allows for easy mapping of chip and USB details.

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

    Marcel Holtmann
     
  • The calculation for the firmware version number is off by one bit.

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

    Marcel Holtmann
     
  • The BCM2045 seems to have a problem with the stored link key commands
    and thus just mark them as broken.

    HCI Event: Command Complete (0x0e) plen 12
    Read Local Supported Features (0x04|0x0003) ncmd 1
    status 0x00
    Features: 0xff 0xff 0x8d 0xfe 0x8f 0xf9 0x00 0x80
    HCI Event: Command Complete (0x0e) plen 12
    Read Local Version Information (0x04|0x0001) ncmd 1
    status 0x00
    HCI Version: 2.0 (0x3) HCI Revision: 0x2000
    LMP Version: 2.0 (0x3) LMP Subversion: 0x410d
    Manufacturer: Broadcom Corporation (15)
    HCI Event: Command Complete (0x0e) plen 11
    Read Buffer Size (0x04|0x0005) ncmd 1
    status 0x00
    ACL MTU 1017:8 SCO MTU 64:0
    HCI Event: Command Complete (0x0e) plen 68
    Read Local Supported Commands (0x04|0x0002) ncmd 1
    status 0x00
    Commands: ffffff03feffcfffffffffff0300f8ff07
    HCI Event: Command Complete (0x0e) plen 4
    Delete Stored Link Key (0x03|0x0012) ncmd 1
    status 0x11 deleted 2048
    Error: Unsupported Feature or Parameter Value

    From the looks of it, this device seems genuine and not one of the
    devices that are neither Broadcom nor CSR devices in reality.

    T: Bus=04 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0a5c ProdID=2045 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM2045A
    S: SerialNumber=000000000000
    C:* #Ifs= 4 Cfg#= 1 Atr=a0 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
    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=00 Driver=(none)

    Reported-and-tested-by: Julio González Mejías
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     
  • For the older controllers like Wilkens Peak and Stone Peak, enabling the
    traces requires to switch into manufacturer mode first. This patch does
    exactly that, but only for these older controllers.

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

    Marcel Holtmann
     
  • For Intel controllers the diagnostics settings are not persistent over
    HCI Reset. So set the quirk to programm them again on every power up.

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

    Marcel Holtmann
     
  • The change to bpa10x to use the h4_recv_buf helper added a dependency
    on BT_HCIUART. This was incorrectly added to Kconfig by adding a
    'select' statement, which now in turn causes build failures
    when CONFIG_TTY is not set:

    warning: (BT_HCIBPA10X) selects BT_HCIUART which has unmet direct dependencies (NET && BT && TTY)
    vers/built-in.o: In function `hci_uart_tty_receive':
    fpga-mgr.c:(.text+0x282824): undefined reference to `tty_unthrottle'
    drivers/built-in.o: In function `hci_uart_tty_ioctl':
    fpga-mgr.c:(.text+0x282aa0): undefined reference to `n_tty_ioctl_helper'
    drivers/built-in.o: In function `hci_uart_flush':

    This replaces the 'select BT_HCIUART' dependency with 'depends on', which
    does not have this kind of problem. Alternatively, one could add 'depends
    on TTY', but avoiding 'select' on user-visible options is generally the
    preferred choice as that does not introduce the potential for dependency
    loops or incomplete dependency chains.

    Fixes: 91489919247a ("Bluetooth: bpa10x: Fix missing BT_HCIUART dependency")
    Fixes: 943cc592195e ("Bluetooth: bpa10x: Use h4_recv_buf helper for frame reassembly")
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Marcel Holtmann

    Arnd Bergmann
     
  • The lock states from Intel SfP controllers can only be read once before
    loading the firmware. So for debugging purposes, print them out.

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

    Marcel Holtmann