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

18 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
     
  • For Intel controllers with firmware that allows tracing of baseband
    functionality this allows enabling it via set_diag driver callback.

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

    Marcel Holtmann
     
  • The Broadcom Bluetooth USB devices have a third interface that is
    dedicated for LM_DIAG messages. The If#= 2 describes this interface
    and it consists of one bulk in and one bulk endpoint.

    T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 38 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=19ff ProdID=0239 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM20702A0
    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=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#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    For all Broadcom based devices with this interface, the driver now
    claims it and schedules URBs for it. This allows to capture the
    LM_DIAG messages and allows forwarding them via hci_recv_diag into
    the diagnostic channel of the Bluetooth subsystem.

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

    Marcel Holtmann
     
  • Selecting just BT_HCIUART_H4 is not enough and it also needs to select
    BT_HCIUART to avoid this warning:

    warning: (BT_HCIBPA10X) selects BT_HCIUART_H4 which has unmet direct
    dependencies (NET && BT && BT_HCIUART)

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

    Marcel Holtmann
     

08 Oct, 2015

5 commits

  • The manually coded frame reassembly is actually broken. The h4_recv_buf
    helper from the UART driver is a perfect fit for frame reassembly for
    this driver. So just export that function and use it here as well.

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

    Marcel Holtmann
     
  • The BPA-10x devices support tracing operation. Use the set_diag driver
    callback to allow enabling and disabling that functionality.

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

    Marcel Holtmann
     
  • For debugging pruposes, read the revision string of the BPA-10x devices
    and print it. For example one of the latest devices respond with the
    string SNIF_102,BB930,02/01/18,10:37:56.

    < HCI Command: Vendor (0x3f|0x000e) plen 1
    07 .
    > HCI Event: Command Complete (0x0e) plen 49
    Vendor (0x3f|0x000e) ncmd 1
    Status: Success (0x00)
    53 4e 49 46 5f 31 30 32 2c 42 42 39 33 30 2c 30 SNIF_102,BB930,0
    32 2f 30 31 2f 31 38 2c 31 30 3a 33 37 3a 35 36 2/01/18,10:37:56
    00 00 00 00 00 00 00 00 00 00 00 00 00 .............

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

    Marcel Holtmann
     
  • The set_diag driver callback allows enabling and disabling the vendor
    specific diagnostic information. Since Broadcom chips have support for
    a dedicated LM_DIAG channel, hook it up accordingly.

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

    Marcel Holtmann
     
  • The Broadcom UART based controllers can send LM_DIAG messages with the
    identifier 0x07 inside the HCI stream. These messages are 63 octets in
    size and have no variable payload or length indicator.

    This patch adds correct parsing information for the h4_recv_buf handler
    and in case these packets are received, they are forwarded to the
    Bluetooth core via hci_recv_diag interface.

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

    Marcel Holtmann
     

07 Oct, 2015

1 commit

  • The Broadcom Bluetooth controllers have the chip name included in the
    ROM firmware or later in the patchram firmware. For debugging purposes
    read the local name and print it out. This is only done during setup
    stage and only once before loading the firmware and once after loading
    the firmware.

    For the Broadcom based controllers from Apple, the name is only read once
    after determining the chip id.

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

    Marcel Holtmann
     

05 Oct, 2015

3 commits

  • Setting and clearing of HCI_RUNNING flag in each and every driver is
    just duplicating the same code all over the place. So instead of having
    the driver do it in their hdev->open and hdev->close callbacks, set it
    globally in the core transport handling.

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

    Marcel Holtmann
     
  • In all callbacks for hdev->send the status of HCI_RUNNING is checked. So
    instead of repeating that code in every driver, move the check into the
    hci_send_frame function before calling hdev->send.

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

    Marcel Holtmann
     
  • The commit 7bee8b08c428 allows the Read Verbose Config Info to fail
    gracefully and not cause the controller setup to abort. It seems the
    reason that command failed in the first place was the missing HCI Reset
    to bring the controller in full Bluetooth mode.

    Apple Bluetooth controllers start out in HID mode and when in that mode
    the Read Verbose Config Info command is not allowed. Sending HCI Reset
    switches the controller into full HCI mode.

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

    Marcel Holtmann
     

04 Oct, 2015

2 commits

  • Its a bit odd that debugfs_create_bool() takes 'u32 *' as an argument,
    when all it needs is a boolean pointer.

    It would be better to update this API to make it accept 'bool *'
    instead, as that will make it more consistent and often more convenient.
    Over that bool takes just a byte.

    That required updates to all user sites as well, in the same commit
    updating the API. regmap core was also using
    debugfs_{read|write}_file_bool(), directly and variable types were
    updated for that to be bool as well.

    Signed-off-by: Viresh Kumar
    Acked-by: Mark Brown
    Acked-by: Charles Keepax
    Signed-off-by: Greg Kroah-Hartman

    Viresh Kumar
     
  • Add regmap ibt to support Intel Bluetooth silicon register access
    over HCI. Intel BT/FM combo chip allows to read/write some registers
    (e.g. FM registers) via its HCI interface.

    Read/Write operations are performed via a HCI transaction composed of
    a HCI command (host->controller) followed by a HCI command complete
    event (controller->host). Read/Write Command opcodes can be specified
    to the regmap init function.
    We define data formats which are intel/vendor specific.

    Register Read/Write HCI command payload (Host):
    Field: | REG ADDR | MODE | DATA_LEN | DATA... |
    size: | 32b | 8b | 8b | 8b* |

    Register Read HCI command complete event payload (Controller):
    Field: | CMD STATUS | REG ADDR | DATA... |
    size: | 8b | 32b | 8b* |

    Register Write HCI command complete event payload (Controller):
    Field: | CMD_STATUS |
    size: | 8b |

    Since this payload is HCI encapsulated, Little Endian byte order is
    used.

    Write/Read Example:

    If we write 0x0000002a at address 0x00008c04, with opcode_write 0xfc5d,
    The resulting transaction is (btmon trace):

    < HCI Command (0x3f|0x005d) plen 10 [hci0]
    04 8c 00 00 02 04 2a 00 00 00
    > HCI Event (0x0e) plen 4
    Unknown (0x3f|0x005d) ncmd 1
    00

    Then, if we read the same register with opcode_read 0xfc5e:

    < HCI Command (0x3f|0x005e) plen 6 [hci0]
    04 8c 00 00 02 04
    > HCI Event (0x0e) plen 12 [hci0]
    Unknown (0x3f|0x005e) ncmd 1
    00 04 8c 00 00 2a 00 00 00

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

    Loic Poulain
     

01 Oct, 2015

6 commits