diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw.c | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c index d3c067e670a8..500f818dba04 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c | |||
@@ -79,17 +79,8 @@ | |||
79 | #define UCODE_VALID_OK cpu_to_le32(0x1) | 79 | #define UCODE_VALID_OK cpu_to_le32(0x1) |
80 | 80 | ||
81 | /* Default calibration values for WkP - set to INIT image w/o running */ | 81 | /* Default calibration values for WkP - set to INIT image w/o running */ |
82 | static const u8 wkp_calib_values_bb_filter[] = { 0xbf, 0x00, 0x5f, 0x00, 0x2f, | ||
83 | 0x00, 0x18, 0x00 }; | ||
84 | static const u8 wkp_calib_values_rx_dc[] = { 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, | ||
85 | 0x7f, 0x7f, 0x7f }; | ||
86 | static const u8 wkp_calib_values_tx_lo[] = { 0x00, 0x00, 0x00, 0x00 }; | ||
87 | static const u8 wkp_calib_values_tx_iq[] = { 0xff, 0x00, 0xff, 0x00, 0x00, | ||
88 | 0x00 }; | ||
89 | static const u8 wkp_calib_values_rx_iq[] = { 0xff, 0x00, 0x00, 0x00 }; | ||
90 | static const u8 wkp_calib_values_rx_iq_skew[] = { 0x00, 0x00, 0x01, 0x00 }; | 82 | static const u8 wkp_calib_values_rx_iq_skew[] = { 0x00, 0x00, 0x01, 0x00 }; |
91 | static const u8 wkp_calib_values_tx_iq_skew[] = { 0x01, 0x00, 0x00, 0x00 }; | 83 | static const u8 wkp_calib_values_tx_iq_skew[] = { 0x01, 0x00, 0x00, 0x00 }; |
92 | static const u8 wkp_calib_values_xtal[] = { 0xd2, 0xd2 }; | ||
93 | 84 | ||
94 | struct iwl_calib_default_data { | 85 | struct iwl_calib_default_data { |
95 | u16 size; | 86 | u16 size; |
@@ -99,12 +90,7 @@ struct iwl_calib_default_data { | |||
99 | #define CALIB_SIZE_N_DATA(_buf) {.size = sizeof(_buf), .data = &_buf} | 90 | #define CALIB_SIZE_N_DATA(_buf) {.size = sizeof(_buf), .data = &_buf} |
100 | 91 | ||
101 | static const struct iwl_calib_default_data wkp_calib_default_data[12] = { | 92 | static const struct iwl_calib_default_data wkp_calib_default_data[12] = { |
102 | [5] = CALIB_SIZE_N_DATA(wkp_calib_values_rx_dc), | ||
103 | [6] = CALIB_SIZE_N_DATA(wkp_calib_values_bb_filter), | ||
104 | [7] = CALIB_SIZE_N_DATA(wkp_calib_values_tx_lo), | ||
105 | [8] = CALIB_SIZE_N_DATA(wkp_calib_values_tx_iq), | ||
106 | [9] = CALIB_SIZE_N_DATA(wkp_calib_values_tx_iq_skew), | 93 | [9] = CALIB_SIZE_N_DATA(wkp_calib_values_tx_iq_skew), |
107 | [10] = CALIB_SIZE_N_DATA(wkp_calib_values_rx_iq), | ||
108 | [11] = CALIB_SIZE_N_DATA(wkp_calib_values_rx_iq_skew), | 94 | [11] = CALIB_SIZE_N_DATA(wkp_calib_values_rx_iq_skew), |
109 | }; | 95 | }; |
110 | 96 | ||
@@ -261,103 +247,6 @@ static int iwl_send_phy_cfg_cmd(struct iwl_mvm *mvm) | |||
261 | sizeof(phy_cfg_cmd), &phy_cfg_cmd); | 247 | sizeof(phy_cfg_cmd), &phy_cfg_cmd); |
262 | } | 248 | } |
263 | 249 | ||
264 | /* Starting with the new PHY DB implementation - New calibs are enabled */ | ||
265 | /* Value - 0x405e7 */ | ||
266 | #define IWL_CALIB_DEFAULT_FLOW_INIT (IWL_CALIB_CFG_XTAL_IDX |\ | ||
267 | IWL_CALIB_CFG_TEMPERATURE_IDX |\ | ||
268 | IWL_CALIB_CFG_VOLTAGE_READ_IDX |\ | ||
269 | IWL_CALIB_CFG_DC_IDX |\ | ||
270 | IWL_CALIB_CFG_BB_FILTER_IDX |\ | ||
271 | IWL_CALIB_CFG_LO_LEAKAGE_IDX |\ | ||
272 | IWL_CALIB_CFG_TX_IQ_IDX |\ | ||
273 | IWL_CALIB_CFG_RX_IQ_IDX |\ | ||
274 | IWL_CALIB_CFG_AGC_IDX) | ||
275 | |||
276 | #define IWL_CALIB_DEFAULT_EVENT_INIT 0x0 | ||
277 | |||
278 | /* Value 0x41567 */ | ||
279 | #define IWL_CALIB_DEFAULT_FLOW_RUN (IWL_CALIB_CFG_XTAL_IDX |\ | ||
280 | IWL_CALIB_CFG_TEMPERATURE_IDX |\ | ||
281 | IWL_CALIB_CFG_VOLTAGE_READ_IDX |\ | ||
282 | IWL_CALIB_CFG_BB_FILTER_IDX |\ | ||
283 | IWL_CALIB_CFG_DC_IDX |\ | ||
284 | IWL_CALIB_CFG_TX_IQ_IDX |\ | ||
285 | IWL_CALIB_CFG_RX_IQ_IDX |\ | ||
286 | IWL_CALIB_CFG_SENSITIVITY_IDX |\ | ||
287 | IWL_CALIB_CFG_AGC_IDX) | ||
288 | |||
289 | #define IWL_CALIB_DEFAULT_EVENT_RUN (IWL_CALIB_CFG_XTAL_IDX |\ | ||
290 | IWL_CALIB_CFG_TEMPERATURE_IDX |\ | ||
291 | IWL_CALIB_CFG_VOLTAGE_READ_IDX |\ | ||
292 | IWL_CALIB_CFG_TX_PWR_IDX |\ | ||
293 | IWL_CALIB_CFG_DC_IDX |\ | ||
294 | IWL_CALIB_CFG_TX_IQ_IDX |\ | ||
295 | IWL_CALIB_CFG_SENSITIVITY_IDX) | ||
296 | |||
297 | /* | ||
298 | * Sets the calibrations trigger values that will be sent to the FW for runtime | ||
299 | * and init calibrations. | ||
300 | * The ones given in the FW TLV are not correct. | ||
301 | */ | ||
302 | static void iwl_set_default_calib_trigger(struct iwl_mvm *mvm) | ||
303 | { | ||
304 | struct iwl_tlv_calib_ctrl default_calib; | ||
305 | |||
306 | /* | ||
307 | * WkP FW TLV calib bits are wrong, overwrite them. | ||
308 | * This defines the dynamic calibrations which are implemented in the | ||
309 | * uCode both for init(flow) calculation and event driven calibs. | ||
310 | */ | ||
311 | |||
312 | /* Init Image */ | ||
313 | default_calib.event_trigger = cpu_to_le32(IWL_CALIB_DEFAULT_EVENT_INIT); | ||
314 | default_calib.flow_trigger = cpu_to_le32(IWL_CALIB_DEFAULT_FLOW_INIT); | ||
315 | |||
316 | if (default_calib.event_trigger != | ||
317 | mvm->fw->default_calib[IWL_UCODE_INIT].event_trigger) | ||
318 | IWL_ERR(mvm, | ||
319 | "Updating the event calib for INIT image: 0x%x -> 0x%x\n", | ||
320 | mvm->fw->default_calib[IWL_UCODE_INIT].event_trigger, | ||
321 | default_calib.event_trigger); | ||
322 | if (default_calib.flow_trigger != | ||
323 | mvm->fw->default_calib[IWL_UCODE_INIT].flow_trigger) | ||
324 | IWL_ERR(mvm, | ||
325 | "Updating the flow calib for INIT image: 0x%x -> 0x%x\n", | ||
326 | mvm->fw->default_calib[IWL_UCODE_INIT].flow_trigger, | ||
327 | default_calib.flow_trigger); | ||
328 | |||
329 | memcpy((void *)&mvm->fw->default_calib[IWL_UCODE_INIT], | ||
330 | &default_calib, sizeof(struct iwl_tlv_calib_ctrl)); | ||
331 | IWL_ERR(mvm, | ||
332 | "Setting uCode init calibrations event 0x%x, trigger 0x%x\n", | ||
333 | default_calib.event_trigger, | ||
334 | default_calib.flow_trigger); | ||
335 | |||
336 | /* Run time image */ | ||
337 | default_calib.event_trigger = cpu_to_le32(IWL_CALIB_DEFAULT_EVENT_RUN); | ||
338 | default_calib.flow_trigger = cpu_to_le32(IWL_CALIB_DEFAULT_FLOW_RUN); | ||
339 | |||
340 | if (default_calib.event_trigger != | ||
341 | mvm->fw->default_calib[IWL_UCODE_REGULAR].event_trigger) | ||
342 | IWL_ERR(mvm, | ||
343 | "Updating the event calib for RT image: 0x%x -> 0x%x\n", | ||
344 | mvm->fw->default_calib[IWL_UCODE_REGULAR].event_trigger, | ||
345 | default_calib.event_trigger); | ||
346 | if (default_calib.flow_trigger != | ||
347 | mvm->fw->default_calib[IWL_UCODE_REGULAR].flow_trigger) | ||
348 | IWL_ERR(mvm, | ||
349 | "Updating the flow calib for RT image: 0x%x -> 0x%x\n", | ||
350 | mvm->fw->default_calib[IWL_UCODE_REGULAR].flow_trigger, | ||
351 | default_calib.flow_trigger); | ||
352 | |||
353 | memcpy((void *)&mvm->fw->default_calib[IWL_UCODE_REGULAR], | ||
354 | &default_calib, sizeof(struct iwl_tlv_calib_ctrl)); | ||
355 | IWL_ERR(mvm, | ||
356 | "Setting uCode runtime calibs event 0x%x, trigger 0x%x\n", | ||
357 | default_calib.event_trigger, | ||
358 | default_calib.flow_trigger); | ||
359 | } | ||
360 | |||
361 | static int iwl_set_default_calibrations(struct iwl_mvm *mvm) | 250 | static int iwl_set_default_calibrations(struct iwl_mvm *mvm) |
362 | { | 251 | { |
363 | u8 cmd_raw[16]; /* holds the variable size commands */ | 252 | u8 cmd_raw[16]; /* holds the variable size commands */ |
@@ -437,9 +326,6 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
437 | if (ret) | 326 | if (ret) |
438 | goto error; | 327 | goto error; |
439 | 328 | ||
440 | /* Override the calibrations from TLV and the const of fw */ | ||
441 | iwl_set_default_calib_trigger(mvm); | ||
442 | |||
443 | /* WkP doesn't have all calibrations, need to set default values */ | 329 | /* WkP doesn't have all calibrations, need to set default values */ |
444 | if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { | 330 | if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { |
445 | ret = iwl_set_default_calibrations(mvm); | 331 | ret = iwl_set_default_calibrations(mvm); |