6
6
* GPL LICENSE SUMMARY
8
* Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
8
* Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10
10
* This program is free software; you can redistribute it and/or modify
11
11
* it under the terms of version 2 of the GNU General Public License as
143
143
******************************************************************************/
146
* The device's EEPROM semaphore prevents conflicts between driver and uCode
147
* when accessing the EEPROM; each access is a series of pulses to/from the
148
* EEPROM chip, not a single event, so even reads could conflict if they
149
* weren't arbitrated by the semaphore.
151
static int iwl_eeprom_acquire_semaphore(struct iwl_priv *priv)
156
for (count = 0; count < EEPROM_SEM_RETRY_LIMIT; count++) {
157
/* Request semaphore */
158
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
159
CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM);
161
/* See if we got it */
162
ret = iwl_poll_bit(priv, CSR_HW_IF_CONFIG_REG,
163
CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM,
164
CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM,
167
IWL_DEBUG_EEPROM(priv,
168
"Acquired semaphore after %d tries.\n",
177
static void iwl_eeprom_release_semaphore(struct iwl_priv *priv)
179
iwl_clear_bit(priv, CSR_HW_IF_CONFIG_REG,
180
CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM);
145
184
static int iwl_eeprom_verify_signature(struct iwl_priv *priv)
147
186
u32 gp = iwl_read32(priv, CSR_EEPROM_GP) & CSR_EEPROM_GP_VALID_MSK;
178
217
static void iwl_set_otp_access(struct iwl_priv *priv, enum iwl_access_mode mode)
219
iwl_read32(priv, CSR_OTP_GP_REG);
182
otpgp = iwl_read32(priv, CSR_OTP_GP_REG);
183
221
if (mode == IWL_OTP_ACCESS_ABSOLUTE)
184
222
iwl_clear_bit(priv, CSR_OTP_GP_REG,
185
CSR_OTP_GP_REG_OTP_ACCESS_MODE);
223
CSR_OTP_GP_REG_OTP_ACCESS_MODE);
187
225
iwl_set_bit(priv, CSR_OTP_GP_REG,
188
CSR_OTP_GP_REG_OTP_ACCESS_MODE);
226
CSR_OTP_GP_REG_OTP_ACCESS_MODE);
191
static int iwlcore_get_nvm_type(struct iwl_priv *priv)
229
static int iwlcore_get_nvm_type(struct iwl_priv *priv, u32 hw_rev)
196
234
/* OTP only valid for CP/PP and after */
197
switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) {
235
switch (hw_rev & CSR_HW_REV_TYPE_MSK) {
198
236
case CSR_HW_REV_TYPE_NONE:
199
237
IWL_ERR(priv, "Unknown hardware type\n");
201
case CSR_HW_REV_TYPE_3945:
202
case CSR_HW_REV_TYPE_4965:
203
239
case CSR_HW_REV_TYPE_5300:
204
240
case CSR_HW_REV_TYPE_5350:
205
241
case CSR_HW_REV_TYPE_5100:
220
const u8 *iwlcore_eeprom_query_addr(const struct iwl_priv *priv, size_t offset)
222
BUG_ON(offset >= priv->cfg->base_params->eeprom_size);
223
return &priv->eeprom[offset];
225
EXPORT_SYMBOL(iwlcore_eeprom_query_addr);
227
256
static int iwl_init_otp_access(struct iwl_priv *priv)
231
260
/* Enable 40MHz radio clock */
232
_iwl_write32(priv, CSR_GP_CNTRL,
233
_iwl_read32(priv, CSR_GP_CNTRL) |
234
CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
261
iwl_write32(priv, CSR_GP_CNTRL,
262
iwl_read32(priv, CSR_GP_CNTRL) |
263
CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
236
265
/* wait for clock to be ready */
237
266
ret = iwl_poll_bit(priv, CSR_GP_CNTRL,
238
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
239
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
267
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
268
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY,
242
271
IWL_ERR(priv, "Time out access OTP\n");
267
_iwl_write32(priv, CSR_EEPROM_REG,
268
CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
296
iwl_write32(priv, CSR_EEPROM_REG,
297
CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
269
298
ret = iwl_poll_bit(priv, CSR_EEPROM_REG,
270
CSR_EEPROM_REG_READ_VALID_MSK,
271
CSR_EEPROM_REG_READ_VALID_MSK,
272
IWL_EEPROM_ACCESS_TIMEOUT);
299
CSR_EEPROM_REG_READ_VALID_MSK,
300
CSR_EEPROM_REG_READ_VALID_MSK,
301
IWL_EEPROM_ACCESS_TIMEOUT);
274
303
IWL_ERR(priv, "Time out reading OTP[%d]\n", addr);
277
r = _iwl_read_direct32(priv, CSR_EEPROM_REG);
306
r = iwl_read32(priv, CSR_EEPROM_REG);
278
307
/* check for ECC errors: */
279
308
otpgp = iwl_read32(priv, CSR_OTP_GP_REG);
280
309
if (otpgp & CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK) {
400
427
* NOTE: This routine uses the non-debug IO access functions.
402
int iwl_eeprom_init(struct iwl_priv *priv)
429
int iwl_eeprom_init(struct iwl_priv *priv, u32 hw_rev)
405
432
u32 gp = iwl_read32(priv, CSR_EEPROM_GP);
434
461
/* Make sure driver (instead of uCode) is allowed to read EEPROM */
435
ret = priv->cfg->ops->lib->eeprom_ops.acquire_semaphore(priv);
462
ret = iwl_eeprom_acquire_semaphore(priv);
437
464
IWL_ERR(priv, "Failed to acquire EEPROM semaphore.\n");
450
_iwl_write32(priv, CSR_EEPROM_GP,
451
iwl_read32(priv, CSR_EEPROM_GP) &
452
~CSR_EEPROM_GP_IF_OWNER_MSK);
477
iwl_write32(priv, CSR_EEPROM_GP,
478
iwl_read32(priv, CSR_EEPROM_GP) &
479
~CSR_EEPROM_GP_IF_OWNER_MSK);
454
481
iwl_set_bit(priv, CSR_OTP_GP_REG,
455
482
CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK |
476
503
for (addr = 0; addr < sz; addr += sizeof(u16)) {
479
_iwl_write32(priv, CSR_EEPROM_REG,
480
CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
506
iwl_write32(priv, CSR_EEPROM_REG,
507
CSR_EEPROM_REG_MSK_ADDR & (addr << 1));
482
509
ret = iwl_poll_bit(priv, CSR_EEPROM_REG,
483
510
CSR_EEPROM_REG_READ_VALID_MSK,
487
514
IWL_ERR(priv, "Time out reading EEPROM[%d]\n", addr);
490
r = _iwl_read_direct32(priv, CSR_EEPROM_REG);
517
r = iwl_read32(priv, CSR_EEPROM_REG);
491
518
e[addr / 2] = cpu_to_le16(r >> 16);
512
EXPORT_SYMBOL(iwl_eeprom_init);
514
540
void iwl_eeprom_free(struct iwl_priv *priv)
516
542
kfree(priv->eeprom);
517
543
priv->eeprom = NULL;
519
EXPORT_SYMBOL(iwl_eeprom_free);
521
546
static void iwl_init_band_reference(const struct iwl_priv *priv,
522
547
int eep_band, int *eeprom_ch_count,
724
749
flags & EEPROM_CHANNEL_RADAR))
727
/* Set the tx_power_user_lmt to the highest power
728
* supported by any channel */
729
if (eeprom_ch_info[ch].max_power_avg >
730
priv->tx_power_user_lmt)
731
priv->tx_power_user_lmt =
732
eeprom_ch_info[ch].max_power_avg;