lkml.org 
[lkml]   [2019]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 90/91] iwlwifi: mvm: dont send GEO_TX_POWER_LIMIT on version < 41
    Date
    From: Luca Coelho <luciano.coelho@intel.com>

    commit 39bd984c203e86f3109b49c2a2e20677c4d3ab65 upstream.

    Firmware versions before 41 don't support the GEO_TX_POWER_LIMIT
    command, and sending it to the firmware will cause a firmware crash.
    We allow this via debugfs, so we need to return an error value in case
    it's not supported.

    This had already been fixed during init, when we send the command if
    the ACPI WGDS table is present. Fix it also for the other,
    userspace-triggered case.

    Cc: stable@vger.kernel.org
    Fixes: 7fe90e0e3d60 ("iwlwifi: mvm: refactor geo init")
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 22 +++++++++++++++-------
    1 file changed, 15 insertions(+), 7 deletions(-)

    --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    @@ -836,6 +836,17 @@ int iwl_mvm_sar_select_profile(struct iw
    return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, len, &cmd);
    }

    +static bool iwl_mvm_sar_geo_support(struct iwl_mvm *mvm)
    +{
    + /*
    + * The GEO_TX_POWER_LIMIT command is not supported on earlier
    + * firmware versions. Unfortunately, we don't have a TLV API
    + * flag to rely on, so rely on the major version which is in
    + * the first byte of ucode_ver.
    + */
    + return IWL_UCODE_SERIAL(mvm->fw->ucode_ver) >= 41;
    +}
    +
    int iwl_mvm_get_sar_geo_profile(struct iwl_mvm *mvm)
    {
    struct iwl_geo_tx_power_profiles_resp *resp;
    @@ -851,6 +862,9 @@ int iwl_mvm_get_sar_geo_profile(struct i
    .data = { &geo_cmd },
    };

    + if (!iwl_mvm_sar_geo_support(mvm))
    + return -EOPNOTSUPP;
    +
    ret = iwl_mvm_send_cmd(mvm, &cmd);
    if (ret) {
    IWL_ERR(mvm, "Failed to get geographic profile info %d\n", ret);
    @@ -876,13 +890,7 @@ static int iwl_mvm_sar_geo_init(struct i
    int ret, i, j;
    u16 cmd_wide_id = WIDE_ID(PHY_OPS_GROUP, GEO_TX_POWER_LIMIT);

    - /*
    - * This command is not supported on earlier firmware versions.
    - * Unfortunately, we don't have a TLV API flag to rely on, so
    - * rely on the major version which is in the first byte of
    - * ucode_ver.
    - */
    - if (IWL_UCODE_SERIAL(mvm->fw->ucode_ver) < 41)
    + if (!iwl_mvm_sar_geo_support(mvm))
    return 0;

    ret = iwl_mvm_sar_get_wgds_table(mvm);

    \
     
     \ /
      Last update: 2019-08-14 19:26    [W:4.644 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site