1. 28 Sep, 2021 17 commits
  2. 24 Sep, 2021 3 commits
  3. 21 Sep, 2021 4 commits
    • Bryan O'Donoghue's avatar
      wcn36xx: Implement Idle Mode Power Save · 0e159d2c
      Bryan O'Donoghue authored
      Idle Mode Power Save (IMPS) is a power saving mechanism which when called
      by wcn36xx will cause the radio hardware to enter power collapse.
      
      This particular call maps nicely to a simple conjunction/disjunction around
      IEEE80211_CONF_CHANGE_IDLE and IEEE80211_CONF_IDLE.
      
      Here we enter idle when we are not associated with an AP. The kernel will
      incrementally toggle idle on/off in the process of trying to establish a
      connection, thus saving power until we are connected to the AP again, at
      which point we give way to BMPS if power_save is on.
      
      We've validated that with IMPS an apq8039 device which has the wcn36xx
      module loaded but, has not authenticated with an AP will get to VMIN on
      suspend and will not without IMPS.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Tested-by: default avatarBenjamin Li <benl@squareup.com>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20210909153320.2624649-1-bryan.odonoghue@linaro.org
      0e159d2c
    • Bryan O'Donoghue's avatar
      wcn36xx: Add ability for wcn36xx_smd_dump_cmd_req to pass two's complement · c0c2eb20
      Bryan O'Donoghue authored
      Qcom documents suggest passing of negative values to the dump command,
      however currently we convert from string to u32 not s32, so we cannot pass
      a two's complement value to the firmware in this way.
      
      There is in fact only one parameter which takes a two's complement value
      <tigger threshold> in the antenna diversity switch command.
      
      Downstream:
      iwpriv wlan0 dump 71 3 <schedule period> <trigger threshold> <hysteresis value>
      
      Upstream:
      echo "71 3 <schedule period> <trigger threshold> <hysteresis value>" > /sys/kernel/debug/ieee80211/phy0/wcn36xx/dump
      
      Fixes: 8e84c258 ("wcn36xx: mac80211 driver for Qualcomm WCN3660/WCN3680 hardware")
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20210909144428.2564650-3-bryan.odonoghue@linaro.org
      c0c2eb20
    • Bryan O'Donoghue's avatar
      wcn36xx: Fix Antenna Diversity Switching · 701668d3
      Bryan O'Donoghue authored
      We have been tracking a strange bug with Antenna Diversity Switching (ADS)
      on wcn3680b for a while.
      
      ADS is configured like this:
         A. Via a firmware configuration table baked into the NV area.
             1. Defines if ADS is enabled.
             2. Defines which GPIOs are connected to which antenna enable pin.
             3. Defines which antenna/GPIO is primary and which is secondary.
      
         B. WCN36XX_CFG_VAL(ANTENNA_DIVERSITY, N)
            N is a bitmask of available antenna.
      
            Setting N to 3 indicates a bitmask of enabled antenna (1 | 2).
      
            Obviously then we can set N to 1 or N to 2 to fix to a particular
            antenna and disable antenna diversity.
      
         C. WCN36XX_CFG_VAL(ASD_PROBE_INTERVAL, XX)
            XX is the number of beacons between each antenna RSSI check.
            Setting this value to 50 means, every 50 received beacons, run the
            ADS algorithm.
      
         D. WCN36XX_CFG_VAL(ASD_TRIGGER_THRESHOLD, YY)
            YY is a two's complement integer which specifies the RSSI decibel
            threshold below which ADS will run.
            We default to -60db here, meaning a measured RSSI <= -60db will
            trigger an ADS probe.
      
         E. WCN36XX_CFG_VAL(ASD_RTT_RSSI_HYST_THRESHOLD, Z)
            Z is a hysteresis value, indicating a delta which the RSSI must
            exceed for the antenna switch to be valid.
      
            For example if HYST_THRESHOLD == 3 AntennaId1-RSSI == -60db and
            AntennaId-2-RSSI == -58db then firmware will not switch antenna.
            The threshold needs to be -57db or better to satisfy the criteria.
      
         F. A firmware feature bit also exists ANTENNA_DIVERSITY_SELECTION.
            This feature bit is used by the firmware to report if
            ANTENNA_DIVERSITY_SELECTION is supported. The host is not required to
            toggle this bit to enable or disable ADS.
      
      ADS works like this:
      
          A. Every XX beacons the firmware switches to or remains on the primary
             antenna.
      
          B. The firmware then sends a Request-To-Send (RTS) packet to the AP.
      
          C. The firmware waits for a Clear-To-Send (CTS) response from the AP.
      
          D. The firmware then notes the received RSSI on the CTS packet.
      
          E. The firmware then repeats steps A-D on the secondary antenna.
      
          F. Subsequently if the RSSI on the measured antenna is better than
             ASD_TRIGGER_THRESHOLD + the active antenna's RSSI then the
             measured antenna becomes the active antenna.
      
          G. If RSSI rises past ASD_TRIGGER_THRESHOLD then ADS doesn't run at
             all even if there is a substantially better RSSI on the alternative
             antenna.
      
      What we have been observing is that the RTS packet is being sent but the
      MAC address is a byte-swapped version of the target MAC. The ADS/RTS MAC is
      corrupted only when the link is encrypted, if the AP is open the RTS MAC is
      correct. Similarly if we configure the firmware to an RTS/CTS sequence for
      regular data - the transmitted RTS MAC is correctly formatted.
      
      Internally the wcn36xx firmware uses the indexes in the SMD commands to
      populate and extract data from specific entries in an STA lookup table. The
      AP's MAC appears a number of times in different indexes within this lookup
      table, so the MAC address extracted for the data-transmit RTS and the MAC
      address extracted for the ADS/RTS packet are not the same STA table index.
      
      Our analysis indicates the relevant firmware STA table index is
      "bssSelfStaIdx".
      
      There is an STA populate function responsible for formatting the MAC
      address of the bssSelfStaIdx including byte-swapping the MAC address.
      
      Its clear then that the required STA populate command did not run for
      bssSelfStaIdx.
      
      So taking a look at the sequence of SMD commands sent to the firmware we
      see the following downstream when moving from an unencrypted to encrypted
      BSS setup.
      
      - WLAN_HAL_CONFIG_BSS_REQ
      - WLAN_HAL_CONFIG_STA_REQ
      - WLAN_HAL_SET_STAKEY_REQ
      
      Upstream in wcn36xx we have
      
      - WLAN_HAL_CONFIG_BSS_REQ
      - WLAN_HAL_SET_STAKEY_REQ
      
      The solution then is to add the missing WLAN_HAL_CONFIG_STA_REQ between
      WLAN_HAL_CONFIG_BSS_REQ and WLAN_HAL_SET_STAKEY_REQ.
      
      No surprise WLAN_HAL_CONFIG_STA_REQ is the routine responsible for
      populating the STA lookup table in the firmware and once done the MAC sent
      by the ADS routine is in the correct byte-order.
      
      This bug is apparent with ADS but it is also the case that any other
      firmware routine that depends on the "bssSelfStaIdx" would retrieve
      malformed data on an encrypted link.
      
      Fixes: 3e977c5c ("wcn36xx: Define wcn3680 specific firmware parameters")
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Tested-by: default avatarBenjamin Li <benl@squareup.com>
      Reviewed-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20210909144428.2564650-2-bryan.odonoghue@linaro.org
      701668d3
    • Benjamin Li's avatar
      wcn36xx: handle connection loss indication · d6dbce45
      Benjamin Li authored
      Firmware sends delete_sta_context_ind when it detects the AP has gone
      away in STA mode. Right now the handler for that indication only handles
      AP mode; fix it to also handle STA mode.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarBenjamin Li <benl@squareup.com>
      Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20210901180606.11686-1-benl@squareup.com
      d6dbce45
  4. 16 Sep, 2021 7 commits
  5. 12 Sep, 2021 9 commits
    • Linus Torvalds's avatar
      Linux 5.15-rc1 · 6880fa6c
      Linus Torvalds authored
      6880fa6c
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v5.15-2021-09-11' of... · b5b65f13
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v5.15-2021-09-11' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull more perf tools updates from Arnaldo Carvalho de Melo:
      
       - Add missing fields and remove some duplicate fields when printing a
         perf_event_attr.
      
       - Fix hybrid config terms list corruption.
      
       - Update kernel header copies, some resulted in new kernel features
         being automagically added to 'perf trace' syscall/tracepoint argument
         id->string translators.
      
       - Add a file generated during the documentation build to .gitignore.
      
       - Add an option to build without libbfd, as some distros, like Debian
         consider its ABI unstable.
      
       - Add support to print a textual representation of IBS raw sample data
         in 'perf report'.
      
       - Fix bpf 'perf test' sample mismatch reporting
      
       - Fix passing arguments to stackcollapse report in a 'perf script'
         python script.
      
       - Allow build-id with trailing zeros.
      
       - Look for ImageBase in PE file to compute .text offset.
      
      * tag 'perf-tools-for-v5.15-2021-09-11' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (25 commits)
        tools headers UAPI: Update tools's copy of drm.h headers
        tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
        tools headers UAPI: Sync linux/fs.h with the kernel sources
        tools headers UAPI: Sync linux/in.h copy with the kernel sources
        perf tools: Add an option to build without libbfd
        perf tools: Allow build-id with trailing zeros
        perf tools: Fix hybrid config terms list corruption
        perf tools: Factor out copy_config_terms() and free_config_terms()
        perf tools: Fix perf_event_attr__fprintf() missing/dupl. fields
        perf tools: Ignore Documentation dependency file
        perf bpf: Provide a weak btf__load_from_kernel_by_id() for older libbpf versions
        tools include UAPI: Update linux/mount.h copy
        perf beauty: Cover more flags in the  move_mount syscall argument beautifier
        tools headers UAPI: Sync linux/prctl.h with the kernel sources
        tools include UAPI: Sync sound/asound.h copy with the kernel sources
        tools headers UAPI: Sync linux/kvm.h with the kernel sources
        tools headers UAPI: Sync x86's asm/kvm.h with the kernel sources
        perf report: Add support to print a textual representation of IBS raw sample data
        perf report: Add tools/arch/x86/include/asm/amd-ibs.h
        perf env: Add perf_env__cpuid, perf_env__{nr_}pmu_mappings
        ...
      b5b65f13
    • Linus Torvalds's avatar
      Merge tag 'compiler-attributes-for-linus-v5.15-rc1-v2' of git://github.com/ojeda/linux · c3e46874
      Linus Torvalds authored
      Pull compiler attributes updates from Miguel Ojeda:
      
       - Fix __has_attribute(__no_sanitize_coverage__) for GCC 4 (Marco Elver)
      
       - Add Nick as Reviewer for compiler_attributes.h (Nick Desaulniers)
      
       - Move __compiletime_{error|warning} (Nick Desaulniers)
      
      * tag 'compiler-attributes-for-linus-v5.15-rc1-v2' of git://github.com/ojeda/linux:
        compiler_attributes.h: move __compiletime_{error|warning}
        MAINTAINERS: add Nick as Reviewer for compiler_attributes.h
        Compiler Attributes: fix __has_attribute(__no_sanitize_coverage__) for GCC 4
      c3e46874
    • Linus Torvalds's avatar
      Merge tag 'auxdisplay-for-linus-v5.15-rc1' of git://github.com/ojeda/linux · d41adc4e
      Linus Torvalds authored
      Pull auxdisplay updates from Miguel Ojeda:
       "An assortment of improvements for auxdisplay:
      
         - Replace symbolic permissions with octal permissions (Jinchao Wang)
      
         - ks0108: Switch to use module_parport_driver() (Andy Shevchenko)
      
         - charlcd: Drop unneeded initializers and switch to C99 style (Andy
           Shevchenko)
      
         - hd44780: Fix oops on module unloading (Lars Poeschel)
      
         - Add I2C gpio expander example (Ralf Schlatterbeck)"
      
      * tag 'auxdisplay-for-linus-v5.15-rc1' of git://github.com/ojeda/linux:
        auxdisplay: Replace symbolic permissions with octal permissions
        auxdisplay: ks0108: Switch to use module_parport_driver()
        auxdisplay: charlcd: Drop unneeded initializers and switch to C99 style
        auxdisplay: hd44780: Fix oops on module unloading
        auxdisplay: Add I2C gpio expander example
      d41adc4e
    • Linus Torvalds's avatar
      Merge tag 'smp-urgent-2021-09-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · f306b90c
      Linus Torvalds authored
      Pull CPU hotplug updates from Thomas Gleixner:
       "Updates for the SMP and CPU hotplug:
      
         - Remove DEFINE_SMP_CALL_CACHE_FUNCTION() which is a left over of the
           original hotplug code and now causing trouble with the ARM64 cache
           topology setup due to the pointless SMP function call.
      
           It's not longer required as the hotplug callbacks are guaranteed to
           be invoked on the upcoming CPU.
      
         - Remove the deprecated and now unused CPU hotplug functions
      
         - Rewrite the CPU hotplug API documentation"
      
      * tag 'smp-urgent-2021-09-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        Documentation: core-api/cpuhotplug: Rewrite the API section
        cpu/hotplug: Remove deprecated CPU-hotplug functions.
        thermal: Replace deprecated CPU-hotplug functions.
        drivers: base: cacheinfo: Get rid of DEFINE_SMP_CALL_CACHE_FUNCTION()
      f306b90c
    • Linus Torvalds's avatar
      Merge tag 'char-misc-5.15-rc1-lkdtm' of... · d8e988b6
      Linus Torvalds authored
      Merge tag 'char-misc-5.15-rc1-lkdtm' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
      
      Pull misc driver fix from Greg KH:
       "Here is a single patch for 5.15-rc1, for the lkdtm misc driver.
      
        It resolves a build issue that many people were hitting with your
        current tree, and Kees and others felt would be good to get merged
        before -rc1 comes out, to prevent them from having to constantly hit
        it as many development trees restart on -rc1, not older -rc releases.
      
        It has NOT been in linux-next, but has passed 0-day testing and looks
        'obviously correct' when reviewing it locally :)"
      
      * tag 'char-misc-5.15-rc1-lkdtm' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
        lkdtm: Use init_uts_ns.name instead of macros
      d8e988b6
    • Linus Torvalds's avatar
      Merge tag 'for-linus-5.15-1' of git://github.com/cminyard/linux-ipmi · 1791596b
      Linus Torvalds authored
      Pull IPMI updates from Corey Minyard:
       "A couple of very minor fixes for style and rate limiting.
      
        Nothing big, but probably needs to go in"
      
      * tag 'for-linus-5.15-1' of git://github.com/cminyard/linux-ipmi:
        char: ipmi: use DEVICE_ATTR helper macro
        ipmi: rate limit ipmi smi_event failure message
      1791596b
    • Linus Torvalds's avatar
      Merge tag 'sched_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 56c24438
      Linus Torvalds authored
      Pull scheduler fixes from Borislav Petkov:
      
       - Make sure the idle timer expires in hardirq context, on PREEMPT_RT
      
       - Make sure the run-queue balance callback is invoked only on the
         outgoing CPU
      
      * tag 'sched_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched: Prevent balance_push() on remote runqueues
        sched/idle: Make the idle timer expire in hard interrupt context
      56c24438
    • Linus Torvalds's avatar
      Merge tag 'locking_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 165d05d8
      Linus Torvalds authored
      Pull locking fixes from Borislav Petkov:
      
       - Fix the futex PI requeue machinery to not return to userspace in
         inconsistent state
      
       - Avoid a potential null pointer dereference in the ww_mutex deadlock
         check
      
       - Other smaller cleanups and optimizations
      
      * tag 'locking_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        locking/rtmutex: Fix ww_mutex deadlock check
        futex: Remove unused variable 'vpid' in futex_proxy_trylock_atomic()
        futex: Avoid redundant task lookup
        futex: Clarify comment for requeue_pi_wake_futex()
        futex: Prevent inconsistent state and exit race
        futex: Return error code instead of assigning it without effect
        locking/rwsem: Add missing __init_rwsem() for PREEMPT_RT
      165d05d8