lkml.org 
[lkml]   [2018]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 160/164] iwlwifi: add shared clock PHY config flag for some devices
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Luca Coelho <luciano.coelho@intel.com>

    commit 86a2b2043af79deff5cf000c5a08847faa4f2ee0 upstream.

    Some devices use a shared clock which is very sensitive to variations
    and cause trouble in some situations. We need to set a bit in the phy
    configuration to indicate that to the FW. To make this generic, add a
    extra_phy_config_flags element to the device configuration and OR it
    into the phy_cfg before sending it to the firmware. And also create a
    set of configurations for devices that use shared clocks and need this
    extra bit to be set.

    Fixes: c62446d2b028 ("iwlwifi: add new 9460 series PCI IDs")
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 62 ++++++++++++++++++++++++
    drivers/net/wireless/intel/iwlwifi/fw/file.h | 1
    drivers/net/wireless/intel/iwlwifi/iwl-config.h | 5 +
    drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 4 +
    drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 38 +++++++-------
    5 files changed, 91 insertions(+), 19 deletions(-)

    --- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
    +++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
    @@ -53,6 +53,7 @@
    #include <linux/stringify.h>
    #include "iwl-config.h"
    #include "iwl-agn-hw.h"
    +#include "fw/file.h"

    /* Highest firmware API version supported */
    #define IWL9000_UCODE_API_MAX 34
    @@ -264,6 +265,67 @@ const struct iwl_cfg iwl9560_2ac_cfg_soc
    .integrated = true,
    .soc_latency = 5000,
    };
    +
    +const struct iwl_cfg iwl9460_2ac_cfg_shared_clk = {
    + .name = "Intel(R) Dual Band Wireless AC 9460",
    + .fw_name_pre = IWL9000A_FW_PRE,
    + .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
    + .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
    + IWL_DEVICE_9000,
    + .ht_params = &iwl9000_ht_params,
    + .nvm_ver = IWL9000_NVM_VERSION,
    + .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
    + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    + .integrated = true,
    + .soc_latency = 5000,
    + .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
    +};
    +
    +const struct iwl_cfg iwl9461_2ac_cfg_shared_clk = {
    + .name = "Intel(R) Dual Band Wireless AC 9461",
    + .fw_name_pre = IWL9000A_FW_PRE,
    + .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
    + .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
    + IWL_DEVICE_9000,
    + .ht_params = &iwl9000_ht_params,
    + .nvm_ver = IWL9000_NVM_VERSION,
    + .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
    + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    + .integrated = true,
    + .soc_latency = 5000,
    + .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
    +};
    +
    +const struct iwl_cfg iwl9462_2ac_cfg_shared_clk = {
    + .name = "Intel(R) Dual Band Wireless AC 9462",
    + .fw_name_pre = IWL9000A_FW_PRE,
    + .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
    + .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
    + IWL_DEVICE_9000,
    + .ht_params = &iwl9000_ht_params,
    + .nvm_ver = IWL9000_NVM_VERSION,
    + .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
    + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    + .integrated = true,
    + .soc_latency = 5000,
    + .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
    +};
    +
    +const struct iwl_cfg iwl9560_2ac_cfg_shared_clk = {
    + .name = "Intel(R) Dual Band Wireless AC 9560",
    + .fw_name_pre = IWL9000A_FW_PRE,
    + .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
    + .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
    + IWL_DEVICE_9000,
    + .ht_params = &iwl9000_ht_params,
    + .nvm_ver = IWL9000_NVM_VERSION,
    + .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
    + .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    + .integrated = true,
    + .soc_latency = 5000,
    + .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
    +};
    +
    MODULE_FIRMWARE(IWL9000A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
    MODULE_FIRMWARE(IWL9000B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
    MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
    --- a/drivers/net/wireless/intel/iwlwifi/fw/file.h
    +++ b/drivers/net/wireless/intel/iwlwifi/fw/file.h
    @@ -434,6 +434,7 @@ enum iwl_fw_phy_cfg {
    FW_PHY_CFG_TX_CHAIN = 0xf << FW_PHY_CFG_TX_CHAIN_POS,
    FW_PHY_CFG_RX_CHAIN_POS = 20,
    FW_PHY_CFG_RX_CHAIN = 0xf << FW_PHY_CFG_RX_CHAIN_POS,
    + FW_PHY_CFG_SHARED_CLK = BIT(31),
    };

    #define IWL_UCODE_MAX_CS 1
    --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
    +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
    @@ -394,6 +394,7 @@ struct iwl_cfg {
    u8 max_vht_ampdu_exponent;
    u8 ucode_api_max;
    u8 ucode_api_min;
    + u32 extra_phy_cfg_flags;
    };

    /*
    @@ -476,6 +477,10 @@ extern const struct iwl_cfg iwl9460_2ac_
    extern const struct iwl_cfg iwl9461_2ac_cfg_soc;
    extern const struct iwl_cfg iwl9462_2ac_cfg_soc;
    extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
    +extern const struct iwl_cfg iwl9460_2ac_cfg_shared_clk;
    +extern const struct iwl_cfg iwl9461_2ac_cfg_shared_clk;
    +extern const struct iwl_cfg iwl9462_2ac_cfg_shared_clk;
    +extern const struct iwl_cfg iwl9560_2ac_cfg_shared_clk;
    extern const struct iwl_cfg iwla000_2ac_cfg_hr;
    extern const struct iwl_cfg iwla000_2ac_cfg_hr_cdb;
    extern const struct iwl_cfg iwla000_2ac_cfg_jf;
    --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    @@ -435,6 +435,10 @@ static int iwl_send_phy_cfg_cmd(struct i

    /* Set parameters */
    phy_cfg_cmd.phy_cfg = cpu_to_le32(iwl_mvm_get_phy_config(mvm));
    +
    + /* set flags extra PHY configuration flags from the device's cfg */
    + phy_cfg_cmd.phy_cfg |= cpu_to_le32(mvm->cfg->extra_phy_cfg_flags);
    +
    phy_cfg_cmd.calib_control.event_trigger =
    mvm->fw->default_calib[ucode_type].event_trigger;
    phy_cfg_cmd.calib_control.flow_trigger =
    --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
    +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
    @@ -577,25 +577,25 @@ static const struct pci_device_id iwl_hw
    {IWL_PCI_DEVICE(0x30DC, 0x0264, iwl9461_2ac_cfg_soc)},
    {IWL_PCI_DEVICE(0x30DC, 0x02A0, iwl9462_2ac_cfg_soc)},
    {IWL_PCI_DEVICE(0x30DC, 0x02A4, iwl9462_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0064, iwl9461_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x00A0, iwl9462_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x00A4, iwl9462_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0230, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0234, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0238, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x023C, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0260, iwl9461_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x0264, iwl9461_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x02A0, iwl9462_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x02A4, iwl9462_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x4034, iwl9560_2ac_cfg_soc)},
    - {IWL_PCI_DEVICE(0x31DC, 0x40A4, iwl9462_2ac_cfg_soc)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0064, iwl9461_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x00A0, iwl9462_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x00A4, iwl9462_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0230, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0234, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0238, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x023C, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0260, iwl9461_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x0264, iwl9461_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x02A0, iwl9462_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x02A4, iwl9462_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x4034, iwl9560_2ac_cfg_shared_clk)},
    + {IWL_PCI_DEVICE(0x31DC, 0x40A4, iwl9462_2ac_cfg_shared_clk)},
    {IWL_PCI_DEVICE(0x34F0, 0x0030, iwl9560_2ac_cfg_soc)},
    {IWL_PCI_DEVICE(0x34F0, 0x0034, iwl9560_2ac_cfg_soc)},
    {IWL_PCI_DEVICE(0x34F0, 0x02A4, iwl9462_2ac_cfg_soc)},

    \
     
     \ /
      Last update: 2018-04-22 17:11    [W:4.321 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site