09 Jun, 2017

5 commits


08 Jun, 2017

4 commits


23 Feb, 2017

19 commits

  • Bcmdhd wifi driver default build as module, now default build in
    this wifi driver. To support this build in feature, this patch
    add flag ENABLE_INSMOD_NO_FW_LOAD, and use extern function
    sdio_reset_comm() as instead.

    Signed-off-by: Haibo Chen

    Haibo Chen
     
  • Some major fixes delivered by Broadcom.
    1. Initialize nd_config parameter of cfg80211_wowlan to NULL
    2. Avoid using hardcoded dummy channel number while creating p2p interface
    3. Avoid creation of multiple instance of wl_event_handler thread.

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • bcmdhd can't support removing host during suspend and
    driver crash when detect card after resume due to no response
    to CMD7.
    It looks bcmdhd has a special requirement to enumerate card
    by itself which is incompatible with current MMC core.
    So implement post-cd feature to allow driver to detect card
    as it wants, then we add back non-removable capability
    to avoid MMC core to redetect card after resume.

    root@imx6qdlsolo:~# echo standby > /sys/power/state
    PM: Syncing filesystems ... done.
    PM: Preparing system for standby sleep
    Freezing user space processes ... (elapsed 0.001 seconds) done.
    Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
    PM: Entering standby sleep
    evbug: Event. Dev: input3, Type: 0, Code: 0, Value: 1
    evbug: Event. Dev: input2, Type: 0, Code: 0, Value: 1
    PM: suspend of devices complete after 652.363 msecs
    PM: suspend devices took 0.660 seconds
    PM: late suspend of devices complete after 1.148 msecs
    PM: noirq suspend of devices complete after 1.043 msecs
    Disabling non-boot CPUs ...
    CPU1: shutdown
    Enabling non-boot CPUs ...
    CPU1 is up
    PM: noirq resume of devices complete after 0.534 msecs
    PM: early resume of devices complete after 0.553 msecs
    evbug: Event. Dev: input2, Type: 1, Code: 116, Value: 1
    evbug: Event. Dev: input2, Type: 0, Code: 0, Value: 0
    evbug: Event. Dev: input2, Type: 1, Code: 116, Value: 0
    evbug: Event. Dev: input2, Type: 0, Code: 0, Value: 0
    mmc1: error -110 during resume (card was removed?)
    PM: resume of devices complete after 605.525 msecs
    PM: resume devices took 0.610 seconds
    PM: Finishing wakeup.
    Restarting tasks ... done.
    WARNING: driver bcmsdh_sdmmc did not remove its interrupt handler!
    root@imx6qdlsolo:~# Unable to handle kernel NULL pointer dereference at virtual address 0000022c
    pgd = 80004000
    [0000022c] *pgd=00000000
    Internal error: Oops: 17 [#1] PREEMPT SMP ARM
    Modules linked in: bcmdhd evbug ov5647_camera_mipi mxc_mipi_csi mx6s_capture
    CPU: 1 PID: 780 Comm: kworker/u4:4 Not tainted 4.1.15-01434-g70f4b36 #1310
    Hardware name: Freescale i.MX7 Dual (Device Tree)
    Workqueue: kmmcd mmc_rescan
    task: a974af80 ti: a846e000 task.ti: a846e000
    PC is at _raw_spin_lock_irqsave+0x1c/0x5c
    LR is at get_parent_ip+0x10/0x2c
    pc : [] lr : [] psr: 60050093
    sp : a846fc20 ip : 0001001f fp : a800b000
    r10: 00000000 r9 : 00000001 r8 : 0000022c
    r7 : 00000002 r6 : 0000022c r5 : a0050013 r4 : 0000022c
    r3 : a974af80 r2 : 00000001 r1 : a846fc44 r0 : 00000000
    Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 10c53c7d Table: a951406a DAC: 00000015
    Process kworker/u4:4 (pid: 780, stack limit = 0xa846e210)
    Stack: (0xa846fc20 to 0xa8470000)
    fc20: 00000000 a846fc50 a846fc44 80061808 00000000 000001dc 00000000 805037fc
    fc40: 8d89d5ec 00000000 a974af80 80053e88 00000000 00000000 ab7293c0 00000000
    fc60: 7f09c828 000000c9 7f09c828 a916a804 00000001 0001001f a800b000 7f0698a4
    fc80: a974afc8 00000001 00000000 00000000 00012ebc a974af80 00000001 80ad46c0
    fca0: a974af80 00000000 a8eeccc0 00000001 0001001f a846fd04 00000000 7f099440
    fcc0: a800b000 7f0699c4 a846fcdf 00000000 00000001 7f068834 a937c900 0105c688
    fce0: a846fd04 a8e20000 00000000 00000001 00000000 7f071f08 a846fd04 a80a0000
    fd00: ffffffff 00000000 ffffffff a8e20000 a8e20000 00000000 7f099440 00000000
    fd20: 00000000 7f099440 a800b000 7f072f4c a974af80 00000000 00000000 80778564
    fd40: a846fd54 a9346550 80330028 00000001 a846e000 a8e20000 7f099440 00000000
    fd60: 18005000 a8eeccc0 00000000 7f099440 a800b000 7f073744 a846fd8c 80052130
    fd80: a9273898 00000000 a800b000 a8e20000 7f099440 00000001 a8eec200 a9270000
    fda0: 00000000 7f099440 a800b000 7f07cd3c 80b81100 8040003f a800b000 00000000
    fdc0: 00000000 a8e20000 7f099440 a9270000 a9273000 a9270000 00000000 7f099440
    fde0: a800b000 7f02df4c 00000001 a8e20000 7f099440 a8eec200 00000000 a916e008
    fe00: 00000000 a90bfb00 a800b000 7f074cbc a9270000 7f099440 a8e20000 00000000
    fe20: a8f81610 7f0765ec 7f0765b0 a8eeccc0 a855df40 7f069310 a916a800 a8eec200
    fe40: 7f09b414 7f06a950 7f06a908 a8f81608 a8f81600 8050e8b8 a8f81608 7f09b414
    fe60: 80b22c70 80379744 a974af80 a8f8163c a8f81608 803797d4 00000005 a81ce930
    fe80: a8f81608 8037923c a8f81608 a8f81608 80b93cf4 80376504 a846fea0 800e0e3c
    fea0: 00000000 00000000 a8f81608 000000bd a833f000 00000000 00000000 8050ed04
    fec0: 00000001 8050dd8c 400f8c0f a833f000 ffffff92 a833f000 a81ce600 8050de30
    fee0: 8050ddbc a833f240 a833f1dc 80506048 a90bfb00 a833f240 a800b000 a81ce600
    ff00: 00000000 800462f0 a81ce600 80043c94 00000000 a800b000 a90bfb18 a800b014
    ff20: a846e000 00000088 80b39379 a90bfb00 a800b000 8004654c 80ad4100 a800b164
    ff40: a90bfb00 00000000 a84856c0 a90bfb00 80046500 00000000 00000000 00000000
    ff60: 00000000 8004b1e8 2df9acc7 00000000 b5f3ff89 a90bfb00 00000000 00000000
    ff80: a846ff80 a846ff80 00000000 00000000 a846ff90 a846ff90 a846ffac a84856c0
    ffa0: 8004b10c 00000000 00000000 8000f568 00000000 00000000 00000000 00000000
    ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 ecd61557 f82769f5
    [] (_raw_spin_lock_irqsave) from [] (add_wait_queue+0x20/0x48)
    [] (add_wait_queue) from [] (__mmc_claim_host+0x58/0x1b0)
    [] (__mmc_claim_host) from [] (sdioh_request_byte+0x1cc/0x2a4 [bcmdhd])
    [] (sdioh_request_byte [bcmdhd]) from [] (sdioh_cfg_write+0x20/0x28 [bcmdhd])
    [] (sdioh_cfg_write [bcmdhd]) from [] (bcmsdh_cfg_write+0x90/0xdc [bcmdhd])
    [] (bcmsdh_cfg_write [bcmdhd]) from [] (dhdsdio_clk_kso_enab+0x38/0x168 [bcmdhd])
    [] (dhdsdio_clk_kso_enab [bcmdhd]) from [] (dhdsdio_clk_devsleep_iovar+0xf4/0x5f4 [bcmdhd])
    [] (dhdsdio_clk_devsleep_iovar [bcmdhd]) from [] (dhdsdio_bussleep+0x2f8/0x4dc [bcmdhd])
    [] (dhdsdio_bussleep [bcmdhd]) from [] (dhd_bus_stop+0x2e8/0x3f0 [bcmdhd])
    [] (dhd_bus_stop [bcmdhd]) from [] (dhd_detach+0x2a4/0x438 [bcmdhd])
    [] (dhd_detach [bcmdhd]) from [] (dhdsdio_release+0x4c/0x1dc [bcmdhd])
    [] (dhdsdio_release [bcmdhd]) from [] (dhdsdio_disconnect+0x3c/0xa0 [bcmdhd])
    [] (dhdsdio_disconnect [bcmdhd]) from [] (bcmsdh_remove+0x3c/0x60 [bcmdhd])
    [] (bcmsdh_remove [bcmdhd]) from [] (bcmsdh_sdmmc_remove+0x48/0x60 [bcmdhd])
    [] (bcmsdh_sdmmc_remove [bcmdhd]) from [] (sdio_bus_remove+0x30/0xf8)
    [] (sdio_bus_remove) from [] (__device_release_driver+0x70/0xe4)
    [] (__device_release_driver) from [] (device_release_driver+0x1c/0x28)
    [] (device_release_driver) from [] (bus_remove_device+0xd8/0x104)
    [] (bus_remove_device) from [] (device_del+0x10c/0x210)
    [] (device_del) from [] (sdio_remove_func+0x1c/0x28)
    [] (sdio_remove_func) from [] (mmc_sdio_remove+0x40/0x70)
    [] (mmc_sdio_remove) from [] (mmc_sdio_detect+0x74/0x100)
    [] (mmc_sdio_detect) from [] (mmc_rescan+0xb8/0x314)
    [] (mmc_rescan) from [] (process_one_work+0x120/0x330)
    [] (process_one_work) from [] (worker_thread+0x4c/0x480)
    [] (worker_thread) from [] (kthread+0xdc/0xf4)
    [] (kthread) from [] (ret_from_fork+0x14/0x2c)
    Code: f10c0080 e3a00001 ebe359b1 f594f000 (e1943f9f)

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • Fix the following crash during module removing.
    root@imx6qdlsolo:~# modprobe -r bcmdhd
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3271, ampdu_hostreorder get failed Err = -1
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3294 failed to enable/disable bdcv2 tlv signaling Err = -1
    dhd_detach(): thread:dhd_watchdog_thread:34f terminated OK
    dhd_dpc_thread: Unexpected up_cnt 0
    dhd_detach(): thread:dhd_dpc:350 terminated OK
    CFG80211-ERROR) wl_event_handler : was terminated
    wl_destroy_event_handler(): thread:wl_event_handler:34e terminated OK
    ------------[ cut here ]------------
    Kernel BUG at 800e0f40 [verbose debug info unavailable]
    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
    Modules linked in: bcmdhd(-) evbug ov5647_camera_mipi mxc_mipi_csi mx6s_capture [last unloaded: bcmdhd]
    CPU: 0 PID: 854 Comm: modprobe Not tainted 4.1.15-01434-g70f4b36 #1311
    Hardware name: Freescale i.MX7 Dual (Device Tree)
    task: a97fc4c0 ti: a912e000 task.ti: a912e000
    PC is at kfree+0x188/0x18c
    LR is at wiphy_unregister+0x17c/0x204
    pc : [] lr : [] psr: 400d0013
    sp : a912fe30 ip : 00080353 fp : a8647970
    r10: 7f219440 r9 : a9420140 r8 : ac75fa60
    r7 : a9420000 r6 : 00000000 r5 : 00000000 r4 : a9420140
    r3 : 00000000 r2 : 00000000 r1 : 07ffffff r0 : 00353443
    Flags: nZcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
    Control: 10c53c7d Table: a940c06a DAC: 00000015
    Process modprobe (pid: 854, stack limit = 0xa912e210)
    Stack: (0xa912fe30 to 0xa9130000)
    fe20: 7f219440 a9420140 00000000 00000000
    fe40: a9420000 a94203a0 a9420140 7f219440 a8647970 80712184 00000000 7f219440
    fe60: a8647970 805e1994 7f21d5d8 a8500000 a8574840 a94203a0 00000000 a8647000
    fe80: a94203a0 7f1cb9ec 00000000 00000000 a8644000 a8647000 a8644000 7f21d5d8
    fea0: 7f219440 7f1adf28 00000001 a956d000 7f219440 a9770440 00000000 8000f644
    fec0: a912e000 00000000 002691a0 7f1f4cbc a8644000 7f219440 a956d000 00000000
    fee0: 00000081 7f1f65ec 7f1f65b0 a9770b40 a9770b00 7f1e9310 a96f6000 a9770440
    ff00: 7f21b414 7f1ea950 7f1ea908 a8fdba08 a8fdba00 8050ee74 a8fdba08 7f21b414
    ff20: a8fdba3c 80379744 7f21b414 a8fdba08 7f21b414 80379ed4 7f21b414 002691dc
    ff40: 002691a0 803794a4 7f21b478 7f1ff6bc 7f1ff690 8008fec0 00000000 646d6362
    ff60: c0006468 00000000 a97fc8b8 00000000 a97fc8b8 00000000 80b41528 a97fc4c0
    ff80: 002691a0 80049c60 a8576540 a912e000 8000f644 0012ffb0 00000006 002691a0
    ffa0: 002691dc 8000f4c0 002691a0 002691dc 002691dc 00000800 76e72f78 00000000
    ffc0: 002691a0 002691dc 002691a0 00000081 00000001 00000000 00000001 002691a0
    ffe0: 76e388a0 7ec089f4 0001f008 76e388ac 600d0010 002691dc 00656e6f 635f6c77
    [] (kfree) from [] (wiphy_unregister+0x17c/0x204)
    [] (wiphy_unregister) from [] (wl_free_wdev+0x40/0x148 [bcmdhd])
    [] (wl_free_wdev [bcmdhd]) from [] (dhd_detach+0x280/0x438 [bcmdhd])
    [] (dhd_detach [bcmdhd]) from [] (dhdsdio_release+0x4c/0x1dc [bcmdhd])
    [] (dhdsdio_release [bcmdhd]) from [] (dhdsdio_disconnect+0x3c/0xa0 [bcmdhd])
    [] (dhdsdio_disconnect [bcmdhd]) from [] (bcmsdh_remove+0x3c/0x60 [bcmdhd])
    [] (bcmsdh_remove [bcmdhd]) from [] (bcmsdh_sdmmc_remove+0x48/0x60 [bcmdhd])
    [] (bcmsdh_sdmmc_remove [bcmdhd]) from [] (sdio_bus_remove+0x30/0xf8)
    [] (sdio_bus_remove) from [] (__device_release_driver+0x70/0xe4)
    [] (__device_release_driver) from [] (driver_detach+0xac/0xb0)
    [] (driver_detach) from [] (bus_remove_driver+0x4c/0xa0)
    [] (bus_remove_driver) from [] (dhd_module_cleanup+0x2c/0x3c [bcmdhd])
    [] (dhd_module_cleanup [bcmdhd]) from [] (SyS_delete_module+0x174/0x1b8)
    [] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x3c)
    Code: e1a03007 e28dd004 e8bd4ff0 eafffd59 (e7f001f2)
    ---[ end trace 49de84cadd3d030b ]---
    Segmentation fault
    root@imx6qdlsolo:~#

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • Broadcom bcmdhd engineering release for 4.1 kernel

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • When connect adhoc network, we got below warning, it's caused
    by network stack changes during kernel upgrade.

    root@imx6qdlsolo:/mnt/nfs/vte_mx63# iw wlan0 ibss join TestAdhoc1 2412
    ------------[ cut here ]------------
    WARNING: CPU: 1 PID: 1251 at /home/bamboo/build/4.1.X-1.0.0_ga/fsl-imx-fb/temp_build_dir/build_fsl-imx-fb/tmp/work-shared/imx6qdlsolo/kernel-source/net/wireless/ibss.c:67 wl_notify_connect_status+0x7b0/0x10f0 [bcmdhd]()
    root@imx6qdlsolo:/mnt/nfs/vte_mx6Modules linked in:3# bcmdhd ov5642_camera ov5640_camera_mipi_int ov5640_camera_int mxc_dcic galcore(O) mxc_v4l2_capture ipu_bg_overlay_sdc ipu_still v4l2_int_device ipu_prp_enc ipu_csi_enc ipu_fg_overlay_sdc evbug
    CPU: 1 PID: 1251 Comm: wl_event_handle Tainted: G O 4.1.8-1.0.0+g87e6c2f #1
    Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
    [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [] (show_stack) from [] (dump_stack+0x84/0xc4)
    [] (dump_stack) from [] (warn_slowpath_common+0x80/0xb0)
    [] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24)
    [] (warn_slowpath_null) from [] (wl_notify_connect_status+0x7b0/0x10f0 [bcmdhd])
    [] (wl_notify_connect_status [bcmdhd]) from [] (wl_event_handler+0x198/0x26c [bcmdhd])
    [] (wl_event_handler [bcmdhd]) from [] (kthread+0xdc/0xf4)
    [] (kthread) from [] (ret_from_fork+0x14/0x2c)
    ---[ end trace 40b45ccda84900ce ]---

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • Avoid to access the null interface before update tx status.

    This patch workaround to fix the panic when the p2p connection
    disconnect in the p2p stress test. The interface will be
    released during the disconnect process.

    Fixed coding style issue by Aisheng.

    Acked-by: Dong Aisheng
    Signed-off-by: Haoran Wang
    (cherry picked from commit 4e093820e74a83d86f3bb0dadc1054e3ddb8248c)

    Haoran Wang
     
  • Current driver will meet the following warning on MX6SL platform which does
    not support ADMA.
    It is caused by the driver is using fixed scatter gather DMA not matter whether
    the host supports or not. Then the host without ADMA capability will warning
    if found the DMA sg_count is non-1.
    Change the driver a bit to avoid multi DMA scatter list if found the
    host->max_segs is only 1 to fix the issue.

    root@imx6slevk:~# udhcpc -i wlan0
    udhcpc (v1.23.1) started
    Sending discover...
    Sending select for 192.168.1.11...
    Lease of 192.168.1.11 obtained, lease time 86400
    /etc/udhcpc.d/50default: Adding DNS 192.168.1.1
    root@imx6slevk:~# ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 954 at /home/jenkins/jobs/Standalone-X11_with_mfgtools/workspace/temp_build_dir/build_fsl-imx-internal-x11/tmp/work-shared/imx6slevk/kernel-source/drivers/mmc/host/sdhci.c:839 sdhci_send_command+0xc64/0xd10()
    Modules linked in: bcmdhd evbug [last unloaded: bcmdhd]
    CPU: 0 PID: 954 Comm: dhd_dpc Tainted: G W 3.14.52-1.1.0_ga+g76946e8 #1
    [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [] (show_stack) from [] (dump_stack+0x7c/0xbc)
    [] (dump_stack) from [] (warn_slowpath_common+0x70/0x8c)
    [] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24)
    [] (warn_slowpath_null) from [] (sdhci_send_command+0xc64/0xd10)
    [] (sdhci_send_command) from [] (sdhci_request+0xc0/0x1f0)
    [] (sdhci_request) from [] (__mmc_start_req+0x60/0x84)
    [] (__mmc_start_req) from [] (mmc_wait_for_req+0x10/0x20)
    [] (mmc_wait_for_req) from [] (sdioh_request_packet_chain+0x368/0x400 [bcmdhd])
    [] (sdioh_request_packet_chain [bcmdhd]) from [] (sdioh_request_buffer+0x124/0x294 [bcmdhd])
    [] (sdioh_request_buffer [bcmdhd]) from [] (bcmsdh_send_buf+0x94/0x108 [bcmdhd])
    [] (bcmsdh_send_buf [bcmdhd]) from [] (dhd_bcmsdh_send_buf.constprop.25+0x80/0x220 [bcmdhd])
    [] (dhd_bcmsdh_send_buf.constprop.25 [bcmdhd]) from [] (dhdsdio_txpkt.constprop.24+0x928/0xa2c [bcmdhd])
    [] (dhdsdio_txpkt.constprop.24 [bcmdhd]) from [] (dhdsdio_sendfromq+0x158/0x3c4 [bcmdhd])
    [] (dhdsdio_sendfromq [bcmdhd]) from [] (dhdsdio_dpc+0x2e8/0x1034 [bcmdhd])
    [] (dhdsdio_dpc [bcmdhd]) from [] (dhd_dpc_thread+0xe8/0x124 [bcmdhd])
    [] (dhd_dpc_thread [bcmdhd]) from [] (kthread+0xcc/0xe4)
    [] (kthread) from [] (ret_from_fork+0x14/0x34)

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 77ff69e3d3a82c4fcf2d6c6d2a904d4fc1793542)

    Dong Aisheng
     
  • Pull back sdpcm_hdrlen length from old skb as new skb here
    is passed to postprocessing.
    This is a generic fix. We must have it regardless of host is
    non scatter-gather or scatter gather capable.

    Suggested by: Vinayak Kamath
    Signed-off-by: Dong Aisheng

    (cherry picked from commit 45c96b8881eaa2b073b9dfa2a44229accd7409b7)
    (cherry picked from commit b72fea1818e92d18affe88a90f6f2460eab74360)

    Dong Aisheng
     
  • Fixing a lot of compiling issues due to kernel upgrade and then
    make it work on 4.1 kernel.

    Signed-off-by: Dong Aisheng

    Dong Aisheng
     
  • As part of starting up IBSS, CFG80211 driver needs BSS information to be
    plumbed into it. Hence in DHD we call cfg80211_infrom_bss() and it needs whole
    frame consist of IEs contained in beacon frame. But FW was passing frame buffer
    with some extra bytes preceded and when same is plumbed into CFG80211 it was not
    able to decode the frame and it ignores the frame as result we get such warnings.
    Using latest FW delivered by Broadcom to fix the issue.

    As well as wl_cfg80211.c changes are essential. This change is actually fix certain
    warnings seen when moving between IBSS and BSS network mode.
    Changes must be done in wl_cfg80211_change_virtual_iface() which you can find at
    wl_cfg80211.c and this file is not specific wl tool.

    Signed-off-by: Dong Aisheng
    (cherry picked from commit a6a35af7350b26c1e30cc14aa2ad6e117ab260dc)

    Dong Aisheng
     
  • Should call cfg80211_disconnected() when do rmmod if associcated with AP before..

    root@imx7d_all:~# modprobe -r bcmdhd
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3268, ampdu_hostreorder get failed Err = -1
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3291 failed to enable/disable bdcv2 tlv signaling Err = -1
    CFG80211-ERROR) wl_cfg80211_disconnect : Reason 3
    dhd_prot_ioctl : bus is down. we have nothing to do
    CFG80211-ERROR) wl_cfg80211_disconnect : error (-1)
    ------------[ cut here ]------------
    WARNING: CPU: 1 PID: 1057 at net/wireless/core.c:953 cfg80211_netdev_notifier_call+0x3f4/0x468()
    Modules linked in: bcmdhd(-) evbug
    CPU: 1 PID: 1057 Comm: modprobe Not tainted 3.14.38-02140-g3418ee9 #1074
    [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [] (show_stack) from [] (dump_stack+0x7c/0xbc)
    [] (dump_stack) from [] (warn_slowpath_common+0x6c/0x88)
    [] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24)
    [] (warn_slowpath_null) from [] (cfg80211_netdev_notifier_call+0x3f4/0x468)
    [] (cfg80211_netdev_notifier_call) from [] (notifier_call_chain+0x44/0x84)
    [] (notifier_call_chain) from [] (raw_notifier_call_chain+0x18/0x20)
    [] (raw_notifier_call_chain) from [] (rollback_registered_many+0x1dc/0x340)
    [] (rollback_registered_many) from [] (rollback_registered+0x28/0x3c)
    [] (rollback_registered) from [] (unregister_netdevice_queue+0x54/0xb0)
    [] (unregister_netdevice_queue) from [] (unregister_netdev+0x18/0x20)
    [] (unregister_netdev) from [] (dhd_detach+0x238/0x474 [bcmdhd])
    [] (dhd_detach [bcmdhd]) from [] (dhdsdio_release+0x40/0x1c0 [bcmdhd])
    [] (dhdsdio_release [bcmdhd]) from [] (dhdsdio_disconnect+0x3c/0x94 [bcmdhd])
    [] (dhdsdio_disconnect [bcmdhd]) from [] (bcmsdh_remove+0x3c/0x60 [bcmdhd])
    [] (bcmsdh_remove [bcmdhd]) from [] (bcmsdh_sdmmc_remove+0x4c/0x64 [bcmdhd])
    [] (bcmsdh_sdmmc_remove [bcmdhd]) from [] (sdio_bus_remove+0x30/0xf8)
    [] (sdio_bus_remove) from [] (__device_release_driver+0x70/0xcc)
    [] (__device_release_driver) from [] (driver_detach+0xac/0xb0)
    [] (driver_detach) from [] (bus_remove_driver+0x4c/0xa0)
    [] (bus_remove_driver) from [] (dhd_module_cleanup+0x2c/0x3c [bcmdhd])
    [] (dhd_module_cleanup [bcmdhd]) from [] (SyS_delete_module+0x11c/0x17c)
    [] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x30)
    ---[ end trace 89522c1a1370465d ]---
    dhd_detach(): thread:dhd_watchdog_thread:291 terminated OK
    dhd_dpc_thread: Unexpected up_cnt 0
    dhd_detach(): thread:dhd_dpc:292 terminated OK
    CFG80211-ERROR) wl_event_handler : was terminated
    wl_destroy_event_handler(): thread:wl_event_handler:290 terminated OK
    unregister wifi platform drivers
    wifi_platform_bus_enumerate device present 0
    mmc1: card 0001 removed

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 740bef7011441010f6183662d452304dca7c7adf)

    Dong Aisheng
     
  • CC [M] drivers/net/wireless/bcmdhd/dhd_ip.o
    LD [M] fs/udf/udf.o
    drivers/net/wireless/bcmdhd/dhd_common.c:108:22: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
    DHD_COMPILED " on " __DATE__ " at " __TIME__;
    ^
    drivers/net/wireless/bcmdhd/dhd_common.c:108:38: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
    DHD_COMPILED " on " __DATE__ " at " __TIME__;

    Drop debug version with build date/time.
    The kernel already has this information, and individual drivers
    shouldn't duplicate that. This also eliminates the use of __DATE__ and
    __TIME__, which make the build non-deterministic.

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 3f47e9588c8acf5c4cc5079e746bc05e7d5c69ec)

    Dong Aisheng
     
  • Without this, WiFi can not work when re-insmod module because
    the card is not reset in rmmod.

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 25ce53802b419f3b2002c5345abee1b85827c688)

    Dong Aisheng
     
  • root@imx7d_all:~# rmmod bcmdhd
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3268, ampdu_hostreorder get failed Err = -1
    dhd_prot_ioctl : bus is down. we have nothing to do
    dhd_wlfc_deinit():3291 failed to enable/disable bdcv2 tlv signaling Err = -1
    dhd_detach(): thread:dhd_watchdog_thread:2d4 terminated OK
    dhd_dpc_thread: Unexpected up_cnt 0
    dhd_detach(): thread:dhd_dpc:2d5 terminated OK
    CFG80211-ERROR) wl_event_handler : was terminated
    wl_destroy_event_handler(): thread:wl_event_handler:2d3 terminated OK
    ------------[ cut here ]------------
    Kernel BUG at 800d12b0 [verbose debug info unavailable]
    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
    Modules linked in: bcmdhd(-) evbug
    CPU: 0 PID: 755 Comm: rmmod Not tainted 3.14.28-7D_alpha #1
    task: a8a31680 ti: a841a000 task.ti: a841a000
    PC is at kfree+0x17c/0x180
    LR is at wiphy_unregister+0x15c/0x1cc
    pc : [] lr : [] psr: 40070013
    sp : a841be28 ip : 00000000 fp : a901396c
    r10: 7f078dc0 r9 : a9240120 r8 : a9240380
    r7 : a9240000 r6 : a9010000 r5 : ab73af20 r4 : a9240120
    r3 : 00000000 r2 : ab75a000 r1 : 00000000 r0 : 7f079220
    Flags: nZcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
    Control: 10c53c7d Table: a863406a DAC: 00000015
    Process rmmod (pid: 755, stack limit = 0xa841a238)
    Stack: (0xa841be28 to 0xa841c000)
    be20: 7f079220 a9240120 00000000 a9010000 a9240000 a9240380
    be40: a9240120 7f078dc0 a901396c 806b0cf8 00000000 7f078dc0 a901396c 805962b4
    be60: 7f07cea0 a8433800 a8ae3840 a9240380 a9010000 a9013000 a9240380 7f02b088
    be80: 00000000 00000000 a9010000 a9013000 a9010000 7f07cea0 7f078dc0 7f00f00c
    bea0: 00000001 a850f800 7f078dc0 a865b3c0 00000081 8000e5e4 a841a000 00000000
    bec0: 00000000 7f05588c 7f078dc0 a850f800 00000000 7f056080 7f056044 a865b180
    bee0: a865b340 7f048944 a8fe7800 a865b3c0 7f07acd4 7f04a37c 7f04a330 a8487408
    bf00: a8487400 804baf10 a8487408 7f07acd4 a848743c 803476b4 7f07acd4 a8487408
    bf20: 7f07acd4 80347dc4 7f07acd4 7f07ad38 00000800 803473b4 00000000 7f05f158
    bf40: 7f05f12c 80083be8 00000000 00000000 7f07ad38 00000800 a841bf4c 646d6362
    bf60: 00006468 00000000 8108f030 a8a31680 a8a31a30 00000000 00000000 8004605c
    bf80: a89c4d80 a841a018 8000e5e4 a841bfb0 a841a000 00011330 00000000 7ecc5e1c
    bfa0: 00000002 8000e460 00000000 7ecc5e1c 01b05d3c 00000800 76f26104 00002002
    bfc0: 00000000 7ecc5e1c 00000002 00000081 7ecc5f0a 00000001 01b05d08 00000000
    bfe0: 76eebeb0 7ecc5bfc 00016e3c 76eebebc 60080010 01b05d3c efdff749 faff7bf3
    [] (kfree) from [] (wiphy_unregister+0x15c/0x1cc)
    [] (wiphy_unregister) from [] (wl_free_wdev+0x2c/0xf8 [bcmdhd])
    [] (wl_free_wdev [bcmdhd]) from [] (dhd_detach+0x274/0x430 [bcmdhd])
    [] (dhd_detach [bcmdhd]) from [] (dhdsdio_release+0x40/0x1cc [bcmdhd])
    [] (dhdsdio_release [bcmdhd]) from [] (dhdsdio_disconnect+0x3c/0xa0 [bcmdhd])
    [] (dhdsdio_disconnect [bcmdhd]) from [] (bcmsdh_remove+0x3c/0x60 [bcmdhd])
    [] (bcmsdh_remove [bcmdhd]) from [] (bcmsdh_sdmmc_remove+0x4c/0x64 [bcmdhd])
    [] (bcmsdh_sdmmc_remove [bcmdhd]) from [] (sdio_bus_remove+0x30/0xf8)
    [] (sdio_bus_remove) from [] (__device_release_driver+0x70/0xcc)
    [] (__device_release_driver) from [] (driver_detach+0xac/0xb0)
    [] (driver_detach) from [] (bus_remove_driver+0x4c/0xa0)
    [] (bus_remove_driver) from [] (dhd_module_cleanup+0x2c/0x3c [bcmdhd])
    [] (dhd_module_cleanup [bcmdhd]) from [] (SyS_delete_module+0x11c/0x17c)
    [] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x30)
    Code: e1a01005 e1a02006 e8bd4ff8 eafffef1 (e7f001f2)
    ---[ end trace ca749705cd612037 ]---
    Segmentation fault

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 8d019afe680fd7f20e42159daf2da7d9bfc94577)

    Dong Aisheng
     
  • 1. Add dummy regulator in dts which is must required by bcmdhd driver
    2. Workaround to add dummy sdio_reset_comm as suggested by Broadcom guy
    because driver always failed in this function porting from Android kernel,
    root cause unknown.
    3. enable driver dts function, inband irq, built as module
    4. comment out the hard code in wifi_plat_dev_drv_probe which has to parse
    oob irq gpio properties and gpio regulators from device tree even the driver
    does not use it.
    5. warning fix

    Signed-off-by: Dong Aisheng
    (cherry picked from commit fb572304245ab19b79a101c66f0c658a555cc3fe)

    Dong Aisheng
     
  • Add missing file delivered by Broadcom to make driver work on L3.14.y kernel.

    Signed-off-by: Dong Aisheng
    (cherry picked from commit b795547e37c3b68ed019e5d0b9daa3fc6474f623)

    Dong Aisheng
     
  • Add bcmdhd driver into compilation

    Signed-off-by: Dong Aisheng
    (cherry picked from commit ca87be10e248965ed724b2f28e76f78187c22161)

    Dong Aisheng
     
  • It's default driver delivered by Broadcom.

    Signed-off-by: Dong Aisheng
    (cherry picked from commit 5595dca69a1135dba8a1fbc9159d00cf31356c1a)

    Dong Aisheng
     

15 Feb, 2017

1 commit

  • commit 52f5631a4c056ad01682393be56d2be237e81610 upstream.

    In commit cf4747d7535a ("rtlwifi: Fix regression caused by commit
    d86e64768859, an error in the edit results in the wrong firmware
    being loaded for some models of the RTL8188/8192CE. In this condition,
    the connection suffered from high ping latency, slow transfer rates,
    and required higher signal strengths to work at all

    See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853073,
    https://bugzilla.opensuse.org/show_bug.cgi?id=1017471, and
    https://github.com/lwfinger/rtlwifi_new/issues/203 for descriptions
    of the problems. This patch fixes all of those problems.

    Fixes: cf4747d7535a ("rtlwifi: Fix regression caused by commit d86e64768859")
    Signed-off-by: Jurij Smakov
    Signed-off-by: Larry Finger
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Jurij Smakov
     

09 Feb, 2017

2 commits

  • commit 03c902bff524e0cf664737a33f2365f7837040bf upstream.

    When the firmware restarts in a situation in which any station
    has no queue reserved anymore because that queue was used, the
    code will crash trying to access the queue_info array at the
    offset 255, which is far too big. Fix this by checking that a
    queue is actually reserved before writing its status.

    Fixes: 8d98ae6eb0d5 ("iwlwifi: mvm: re-assign old queues after hw restart in dqa mode")
    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • commit 7941c59e45f3b6d30e07375e9b6713427e0a9f98 upstream.

    Mistakenly, the driver is trying to load the 8000C firmware with an
    incorrect name (i.e. with two hyphens where there should be only one)
    and that fails. Fix that by removing the hyphen from the format
    macro.

    Fixes: e1ba684f762b ("iwlwifi: 8000: fix MODULE_FIRMWARE input")
    Signed-off-by: Jürg Billeter
    Signed-off-by: Luca Coelho
    Signed-off-by: Greg Kroah-Hartman

    Jürg Billeter
     

20 Jan, 2017

1 commit

  • commit 570b90fa230b8021f51a67fab2245fe8df6fe37d upstream.

    Eric Biggers pointed out that the orinoco driver pointed scatterlists
    at the stack.

    Fix it by switching from ahash to shash. The result should be
    simpler, faster, and more correct.

    kvalo: cherry picked from commit 1fef293b8a9850cfa124a53c1d8878d355010403 as I
    accidentally applied this patch to wireless-drivers-next when I was supposed to
    apply this wireless-drivers

    Reported-by: Eric Biggers
    Signed-off-by: Andy Lutomirski
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Andrew Lutomirski
     

15 Jan, 2017

2 commits

  • commit 60f59ce0278557f7896d5158ae6d12a4855a72cc upstream.

    These drivers need to be able to reference "struct ieee80211_hw" from
    the driver's private data, and vice versa. The USB driver failed to
    store the address of ieee80211_hw in the private data. Although this
    bug has been present for a long time, it was not exposed until
    commit ba9f93f82aba ("rtlwifi: Fix enter/exit power_save").

    Fixes: ba9f93f82aba ("rtlwifi: Fix enter/exit power_save")
    Signed-off-by: Larry Finger
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • commit ba9f93f82abafe2552eac942ebb11c2df4f8dd7f upstream.

    In commit a5ffbe0a1993 ("rtlwifi: Fix scheduling while atomic bug") and
    commit a269913c52ad ("rtlwifi: Rework rtl_lps_leave() and rtl_lps_enter()
    to use work queue"), an error was introduced in the power-save routines
    due to the fact that leaving PS was delayed by the use of a work queue.

    This problem is fixed by detecting if the enter or leave routines are
    in interrupt mode. If so, the workqueue is used to place the request.
    If in normal mode, the enter or leave routines are called directly.

    Fixes: a269913c52ad ("rtlwifi: Rework rtl_lps_leave() and rtl_lps_enter() to use work queue")
    Reported-by: Ping-Ke Shih
    Signed-off-by: Larry Finger
    Cc: Stable
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     

12 Jan, 2017

3 commits

  • This reverts commit 98068574928f499b30f136ff57ef9a03cc575a36, which is
    commit ba9f93f82abafe2552eac942ebb11c2df4f8dd7f upstream as it causes
    problems.

    Reported-by: Dmitry Osipenko
    Cc: Ping-Ke Shih
    Cc: Larry Finger
    Cc: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org

    Greg Kroah-Hartman
     
  • commit 31b239824ece321c09bdb8e61e1d14814eaba38b upstream.

    The word "background" contains 10 characters so the third argument of
    strncmp() need to be 10 in order to match this prefix correctly.

    Signed-off-by: Nicolas Iooss
    Fixes: 855aed1220d2 ("ath10k: add spectral scan feature")
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Nicolas Iooss
     
  • commit fcf7cf1551cae54e747a771f5808240f2a37708f upstream.

    This partially reverts 'commit 2cdce425aa33
    ("ath10k: Fix broken NULL func data frame status for 10.4")'
    Unfortunately this breaks sending NULL func and the existing
    issue of obtaining proper tx status for NULL function will be
    fixed. Also update the comments for feature flag added to be
    useless and not working

    Fixes: 2cdce425aa33 "ath10k: Fix broken NULL func data frame status for
    10.4"
    Signed-off-by: Mohammed Shafi Shajakhan
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Mohammed Shafi Shajakhan
     

09 Jan, 2017

3 commits

  • commit d1f1c0e289e1bc46cd6873ba6dd6c627f459e7fa upstream.

    Starting with commit d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb
    where possible") the driver uses rcu_read_lock() && rcu_read_unlock(), yet on
    returning early in ath_tx_edma_tasklet() the unlock is missing leading to stalls
    and suspicious RCU usage:

    ===============================
    [ INFO: suspicious RCU usage. ]
    4.9.0-rc8 #11 Not tainted
    -------------------------------
    kernel/rcu/tree.c:705 Illegal idle entry in RCU read-side critical section.!

    other info that might help us debug this:

    RCU used illegally from idle CPU!
    rcu_scheduler_active = 1, debug_locks = 0
    RCU used illegally from extended quiescent state!
    1 lock held by swapper/7/0:
    #0:
    (
    rcu_read_lock
    ){......}
    , at:
    [] ath_tx_edma_tasklet+0x0/0x450 [ath9k]

    stack backtrace:
    CPU: 7 PID: 0 Comm: swapper/7 Not tainted 4.9.0-rc8 #11
    Hardware name: Acer Aspire V3-571G/VA50_HC_CR, BIOS V2.21 12/16/2013
    ffff88025efc3f38 ffffffff8132b1e5 ffff88017ede4540 0000000000000001
    ffff88025efc3f68 ffffffff810a25f7 ffff88025efcee60 ffff88017edebdd8
    ffff88025eeb5400 0000000000000091 ffff88025efc3f88 ffffffff810c3cd4
    Call Trace:

    [] dump_stack+0x68/0x93
    [] lockdep_rcu_suspicious+0xd7/0x110
    [] rcu_eqs_enter_common.constprop.85+0x154/0x200
    [] rcu_irq_exit+0x44/0xa0
    [] irq_exit+0x61/0xd0
    [] do_IRQ+0x65/0x110
    [] common_interrupt+0x89/0x89

    [] ? cpuidle_enter_state+0x151/0x200
    [] cpuidle_enter+0x12/0x20
    [] call_cpuidle+0x1e/0x40
    [] cpu_startup_entry+0x146/0x220
    [] start_secondary+0x148/0x170

    Signed-off-by: Tobias Klausmann
    Fixes: d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible")
    Acked-by: Felix Fietkau
    Acked-by: Paul E. McKenney
    Tested-by: Gabriel Craciunescu
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Tobias Klausmann
     
  • commit 79e57dd113d307a6c74773b8aaecf5442068988a upstream.

    The active_high LED of my Wistron DNMA-92 is still being recognized as
    active_low on 4.7.6 mainline. When I was preparing my former commit
    0f9edcdd88a9 ("ath9k: Fix LED polarity for some Mini PCI AR9220 MB92
    cards.") to fix that I must have somehow messed up with testing, because
    I tested the final version of that patch before sending it, and it was
    apparently working; but now it is not working on 4.7.6 mainline.

    I initially added the PCI_DEVICE_SUB section for 0x0029/0x2096 above the
    PCI_VDEVICE section for 0x0029; but then I moved the former below the
    latter after seeing how 0x002A sections were sorted in the file.

    This turned out to be wrong: if a generic PCI_VDEVICE entry (that has
    both subvendor and subdevice IDs set to PCI_ANY_ID) is put before a more
    specific one (PCI_DEVICE_SUB), then the generic PCI_VDEVICE entry will
    match first and will be used.

    With this patch, 0x0029/0x2096 has finally got active_high LED on 4.7.6.

    While I'm at it, let's fix 0x002A too by also moving its generic definition
    below its specific ones.

    Fixes: 0f9edcdd88a9 ("ath9k: Fix LED polarity for some Mini PCI AR9220 MB92 cards.")
    Signed-off-by: Vittorio Gambaletta
    [kvalo@qca.qualcomm.com: improve the commit log based on email discussions]
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Vittorio Gambaletta (VittGam)
     
  • commit 91851cc7a939039bd401adb6ca3da4402bec1d0c upstream.

    Commit b2d70d4944c1 ("ath9k: make GPIO API to support both of WMAC and
    SOC") refactored ath9k_hw_gpio_get() to support both WMAC and SOC GPIOs,
    changing the return on success from 1 to BIT(gpio). This broke some callers
    like ath_is_rfkill_set(). This doesn't fix any known bug in mainline at the
    moment, but should be fixed anyway.

    Instead of fixing all callers, change ath9k_hw_gpio_get() back to only
    return 0 or 1.

    Fixes: b2d70d4944c1 ("ath9k: make GPIO API to support both of WMAC and SOC")
    Signed-off-by: Matthias Schiffer
    [kvalo@qca.qualcomm.com: mention that doesn't fix any known bug]
    Signed-off-by: Kalle Valo
    Signed-off-by: Greg Kroah-Hartman

    Matthias Schiffer