1 /* 2 * This file is provided under a CDDLv1 license. When using or 3 * redistributing this file, you may do so under this license. 4 * In redistributing this file this license must be included 5 * and no other modification of this header file is permitted. 6 * 7 * CDDL LICENSE SUMMARY 8 * 9 * Copyright(c) 1999 - 2009 Intel Corporation. All rights reserved. 10 * 11 * The contents of this file are subject to the terms of Version 12 * 1.0 of the Common Development and Distribution License (the "License"). 13 * 14 * You should have received a copy of the License with this software. 15 * You can obtain a copy of the License at 16 * http://www.opensolaris.org/os/licensing. 17 * See the License for the specific language governing permissions 18 * and limitations under the License. 19 */ 20 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms of the CDDLv1. 24 */ 25 26 /* 27 * IntelVersion: 1.49 v3-1-10-1_2009-9-18_Release14-6 28 */ 29 #include "e1000_api.h" 30 31 static void e1000_reload_nvm_generic(struct e1000_hw *hw); 32 33 /* 34 * e1000_init_nvm_ops_generic - Initialize NVM function pointers 35 * @hw: pointer to the HW structure 36 * 37 * Setups up the function pointers to no-op functions 38 */ 39 void 40 e1000_init_nvm_ops_generic(struct e1000_hw *hw) 41 { 42 struct e1000_nvm_info *nvm = &hw->nvm; 43 DEBUGFUNC("e1000_init_nvm_ops_generic"); 44 45 /* Initialize function pointers */ 46 nvm->ops.init_params = e1000_null_ops_generic; 47 nvm->ops.acquire = e1000_null_ops_generic; 48 nvm->ops.read = e1000_null_read_nvm; 49 nvm->ops.release = e1000_null_nvm_generic; 50 nvm->ops.reload = e1000_reload_nvm_generic; 51 nvm->ops.update = e1000_null_ops_generic; 52 nvm->ops.valid_led_default = e1000_null_led_default; 53 nvm->ops.validate = e1000_null_ops_generic; 54 nvm->ops.write = e1000_null_write_nvm; 55 } 56 57 /* 58 * e1000_null_nvm_read - No-op function, return 0 59 * @hw: pointer to the HW structure 60 */ 61 s32 62 e1000_null_read_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c) 63 { 64 DEBUGFUNC("e1000_null_read_nvm"); 65 UNREFERENCED_4PARAMETER(hw, a, b, c); 66 return (E1000_SUCCESS); 67 } 68 69 /* 70 * e1000_null_nvm_generic - No-op function, return void 71 * @hw: pointer to the HW structure 72 */ 73 void 74 e1000_null_nvm_generic(struct e1000_hw *hw) 75 { 76 DEBUGFUNC("e1000_null_nvm_generic"); 77 UNREFERENCED_1PARAMETER(hw); 78 } 79 80 /* 81 * e1000_null_led_default - No-op function, return 0 82 * @hw: pointer to the HW structure 83 */ 84 s32 85 e1000_null_led_default(struct e1000_hw *hw, u16 *data) 86 { 87 DEBUGFUNC("e1000_null_led_default"); 88 UNREFERENCED_2PARAMETER(hw, data); 89 return (E1000_SUCCESS); 90 } 91 92 /* 93 * e1000_null_write_nvm - No-op function, return 0 94 * @hw: pointer to the HW structure 95 */ 96 s32 97 e1000_null_write_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c) 98 { 99 DEBUGFUNC("e1000_null_write_nvm"); 100 UNREFERENCED_4PARAMETER(hw, a, b, c); 101 return (E1000_SUCCESS); 102 } 103 104 /* 105 * e1000_raise_eec_clk - Raise EEPROM clock 106 * @hw: pointer to the HW structure 107 * @eecd: pointer to the EEPROM 108 * 109 * Enable/Raise the EEPROM clock bit. 110 */ 111 static void 112 e1000_raise_eec_clk(struct e1000_hw *hw, u32 *eecd) 113 { 114 *eecd = *eecd | E1000_EECD_SK; 115 E1000_WRITE_REG(hw, E1000_EECD, *eecd); 116 E1000_WRITE_FLUSH(hw); 117 usec_delay(hw->nvm.delay_usec); 118 } 119 120 /* 121 * e1000_lower_eec_clk - Lower EEPROM clock 122 * @hw: pointer to the HW structure 123 * @eecd: pointer to the EEPROM 124 * 125 * Clear/Lower the EEPROM clock bit. 126 */ 127 static void 128 e1000_lower_eec_clk(struct e1000_hw *hw, u32 *eecd) 129 { 130 *eecd = *eecd & ~E1000_EECD_SK; 131 E1000_WRITE_REG(hw, E1000_EECD, *eecd); 132 E1000_WRITE_FLUSH(hw); 133 usec_delay(hw->nvm.delay_usec); 134 } 135 136 /* 137 * e1000_shift_out_eec_bits - Shift data bits our to the EEPROM 138 * @hw: pointer to the HW structure 139 * @data: data to send to the EEPROM 140 * @count: number of bits to shift out 141 * 142 * We need to shift 'count' bits out to the EEPROM. So, the value in the 143 * "data" parameter will be shifted out to the EEPROM one bit at a time. 144 * In order to do this, "data" must be broken down into bits. 145 */ 146 static void 147 e1000_shift_out_eec_bits(struct e1000_hw *hw, u16 data, u16 count) 148 { 149 struct e1000_nvm_info *nvm = &hw->nvm; 150 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 151 u32 mask; 152 153 DEBUGFUNC("e1000_shift_out_eec_bits"); 154 155 mask = 0x01 << (count - 1); 156 if (nvm->type == e1000_nvm_eeprom_microwire) 157 eecd &= ~E1000_EECD_DO; 158 else if (nvm->type == e1000_nvm_eeprom_spi) 159 eecd |= E1000_EECD_DO; 160 161 do { 162 eecd &= ~E1000_EECD_DI; 163 164 if (data & mask) 165 eecd |= E1000_EECD_DI; 166 167 E1000_WRITE_REG(hw, E1000_EECD, eecd); 168 E1000_WRITE_FLUSH(hw); 169 170 usec_delay(nvm->delay_usec); 171 172 e1000_raise_eec_clk(hw, &eecd); 173 e1000_lower_eec_clk(hw, &eecd); 174 175 mask >>= 1; 176 } while (mask); 177 178 eecd &= ~E1000_EECD_DI; 179 E1000_WRITE_REG(hw, E1000_EECD, eecd); 180 } 181 182 /* 183 * e1000_shift_in_eec_bits - Shift data bits in from the EEPROM 184 * @hw: pointer to the HW structure 185 * @count: number of bits to shift in 186 * 187 * In order to read a register from the EEPROM, we need to shift 'count' bits 188 * in from the EEPROM. Bits are "shifted in" by raising the clock input to 189 * the EEPROM (setting the SK bit), and then reading the value of the data out 190 * "DO" bit. During this "shifting in" process the data in "DI" bit should 191 * always be clear. 192 */ 193 static u16 194 e1000_shift_in_eec_bits(struct e1000_hw *hw, u16 count) 195 { 196 u32 eecd; 197 u32 i; 198 u16 data; 199 200 DEBUGFUNC("e1000_shift_in_eec_bits"); 201 202 eecd = E1000_READ_REG(hw, E1000_EECD); 203 204 eecd &= ~(E1000_EECD_DO | E1000_EECD_DI); 205 data = 0; 206 207 for (i = 0; i < count; i++) { 208 data <<= 1; 209 e1000_raise_eec_clk(hw, &eecd); 210 211 eecd = E1000_READ_REG(hw, E1000_EECD); 212 213 eecd &= ~E1000_EECD_DI; 214 if (eecd & E1000_EECD_DO) 215 data |= 1; 216 217 e1000_lower_eec_clk(hw, &eecd); 218 } 219 220 return (data); 221 } 222 223 /* 224 * e1000_poll_eerd_eewr_done - Poll for EEPROM read/write completion 225 * @hw: pointer to the HW structure 226 * @ee_reg: EEPROM flag for polling 227 * 228 * Polls the EEPROM status bit for either read or write completion based 229 * upon the value of 'ee_reg'. 230 */ 231 s32 232 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg) 233 { 234 u32 attempts = 100000; 235 u32 i, reg = 0; 236 s32 ret_val = -E1000_ERR_NVM; 237 238 DEBUGFUNC("e1000_poll_eerd_eewr_done"); 239 240 for (i = 0; i < attempts; i++) { 241 if (ee_reg == E1000_NVM_POLL_READ) 242 reg = E1000_READ_REG(hw, E1000_EERD); 243 else 244 reg = E1000_READ_REG(hw, E1000_EEWR); 245 246 if (reg & E1000_NVM_RW_REG_DONE) { 247 ret_val = E1000_SUCCESS; 248 break; 249 } 250 251 usec_delay(5); 252 } 253 254 return (ret_val); 255 } 256 257 /* 258 * e1000_acquire_nvm_generic - Generic request for access to EEPROM 259 * @hw: pointer to the HW structure 260 * 261 * Set the EEPROM access request bit and wait for EEPROM access grant bit. 262 * Return successful if access grant bit set, else clear the request for 263 * EEPROM access and return -E1000_ERR_NVM (-1). 264 */ 265 s32 266 e1000_acquire_nvm_generic(struct e1000_hw *hw) 267 { 268 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 269 s32 timeout = E1000_NVM_GRANT_ATTEMPTS; 270 s32 ret_val = E1000_SUCCESS; 271 272 DEBUGFUNC("e1000_acquire_nvm_generic"); 273 274 E1000_WRITE_REG(hw, E1000_EECD, eecd | E1000_EECD_REQ); 275 eecd = E1000_READ_REG(hw, E1000_EECD); 276 277 while (timeout) { 278 if (eecd & E1000_EECD_GNT) 279 break; 280 usec_delay(5); 281 eecd = E1000_READ_REG(hw, E1000_EECD); 282 timeout--; 283 } 284 285 if (!timeout) { 286 eecd &= ~E1000_EECD_REQ; 287 E1000_WRITE_REG(hw, E1000_EECD, eecd); 288 DEBUGOUT("Could not acquire NVM grant\n"); 289 ret_val = -E1000_ERR_NVM; 290 } 291 return (ret_val); 292 } 293 294 /* 295 * e1000_standby_nvm - Return EEPROM to standby state 296 * @hw: pointer to the HW structure 297 * 298 * Return the EEPROM to a standby state. 299 */ 300 static void 301 e1000_standby_nvm(struct e1000_hw *hw) 302 { 303 struct e1000_nvm_info *nvm = &hw->nvm; 304 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 305 306 DEBUGFUNC("e1000_standby_nvm"); 307 308 if (nvm->type == e1000_nvm_eeprom_microwire) { 309 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); 310 E1000_WRITE_REG(hw, E1000_EECD, eecd); 311 E1000_WRITE_FLUSH(hw); 312 usec_delay(nvm->delay_usec); 313 314 e1000_raise_eec_clk(hw, &eecd); 315 316 /* Select EEPROM */ 317 eecd |= E1000_EECD_CS; 318 E1000_WRITE_REG(hw, E1000_EECD, eecd); 319 E1000_WRITE_FLUSH(hw); 320 usec_delay(nvm->delay_usec); 321 322 e1000_lower_eec_clk(hw, &eecd); 323 } else if (nvm->type == e1000_nvm_eeprom_spi) { 324 /* Toggle CS to flush commands */ 325 eecd |= E1000_EECD_CS; 326 E1000_WRITE_REG(hw, E1000_EECD, eecd); 327 E1000_WRITE_FLUSH(hw); 328 usec_delay(nvm->delay_usec); 329 eecd &= ~E1000_EECD_CS; 330 E1000_WRITE_REG(hw, E1000_EECD, eecd); 331 E1000_WRITE_FLUSH(hw); 332 usec_delay(nvm->delay_usec); 333 } 334 } 335 336 /* 337 * e1000_stop_nvm - Terminate EEPROM command 338 * @hw: pointer to the HW structure 339 * 340 * Terminates the current command by inverting the EEPROM's chip select pin. 341 */ 342 void 343 e1000_stop_nvm(struct e1000_hw *hw) 344 { 345 u32 eecd; 346 347 DEBUGFUNC("e1000_stop_nvm"); 348 349 eecd = E1000_READ_REG(hw, E1000_EECD); 350 if (hw->nvm.type == e1000_nvm_eeprom_spi) { 351 /* Pull CS high */ 352 eecd |= E1000_EECD_CS; 353 e1000_lower_eec_clk(hw, &eecd); 354 } else if (hw->nvm.type == e1000_nvm_eeprom_microwire) { 355 /* CS on Microwire is active-high */ 356 eecd &= ~(E1000_EECD_CS | E1000_EECD_DI); 357 E1000_WRITE_REG(hw, E1000_EECD, eecd); 358 e1000_raise_eec_clk(hw, &eecd); 359 e1000_lower_eec_clk(hw, &eecd); 360 } 361 } 362 363 /* 364 * e1000_release_nvm_generic - Release exclusive access to EEPROM 365 * @hw: pointer to the HW structure 366 * 367 * Stop any current commands to the EEPROM and clear the EEPROM request bit. 368 */ 369 void 370 e1000_release_nvm_generic(struct e1000_hw *hw) 371 { 372 u32 eecd; 373 374 DEBUGFUNC("e1000_release_nvm_generic"); 375 376 e1000_stop_nvm(hw); 377 378 eecd = E1000_READ_REG(hw, E1000_EECD); 379 eecd &= ~E1000_EECD_REQ; 380 E1000_WRITE_REG(hw, E1000_EECD, eecd); 381 } 382 383 /* 384 * e1000_ready_nvm_eeprom - Prepares EEPROM for read/write 385 * @hw: pointer to the HW structure 386 * 387 * Setups the EEPROM for reading and writing. 388 */ 389 static s32 390 e1000_ready_nvm_eeprom(struct e1000_hw *hw) 391 { 392 struct e1000_nvm_info *nvm = &hw->nvm; 393 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 394 s32 ret_val = E1000_SUCCESS; 395 u16 timeout = 0; 396 u8 spi_stat_reg; 397 398 DEBUGFUNC("e1000_ready_nvm_eeprom"); 399 400 if (nvm->type == e1000_nvm_eeprom_microwire) { 401 /* Clear SK and DI */ 402 eecd &= ~(E1000_EECD_DI | E1000_EECD_SK); 403 E1000_WRITE_REG(hw, E1000_EECD, eecd); 404 /* Set CS */ 405 eecd |= E1000_EECD_CS; 406 E1000_WRITE_REG(hw, E1000_EECD, eecd); 407 } else if (nvm->type == e1000_nvm_eeprom_spi) { 408 /* Clear SK and CS */ 409 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); 410 E1000_WRITE_REG(hw, E1000_EECD, eecd); 411 usec_delay(1); 412 timeout = NVM_MAX_RETRY_SPI; 413 414 /* 415 * Read "Status Register" repeatedly until the LSB is cleared. 416 * The EEPROM will signal that the command has been completed 417 * by clearing bit 0 of the internal status register. If it's 418 * not cleared within 'timeout', then error out. 419 */ 420 while (timeout) { 421 e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI, 422 hw->nvm.opcode_bits); 423 spi_stat_reg = (u8)e1000_shift_in_eec_bits(hw, 8); 424 if (!(spi_stat_reg & NVM_STATUS_RDY_SPI)) 425 break; 426 427 usec_delay(5); 428 e1000_standby_nvm(hw); 429 timeout--; 430 } 431 432 if (!timeout) { 433 DEBUGOUT("SPI NVM Status error\n"); 434 ret_val = -E1000_ERR_NVM; 435 goto out; 436 } 437 } 438 439 out: 440 return (ret_val); 441 } 442 443 /* 444 * e1000_read_nvm_spi - Read EEPROM's using SPI 445 * @hw: pointer to the HW structure 446 * @offset: offset of word in the EEPROM to read 447 * @words: number of words to read 448 * @data: word read from the EEPROM 449 * 450 * Reads a 16 bit word from the EEPROM. 451 */ 452 s32 453 e1000_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 * data) 454 { 455 struct e1000_nvm_info *nvm = &hw->nvm; 456 u32 i = 0; 457 s32 ret_val; 458 u16 word_in; 459 u8 read_opcode = NVM_READ_OPCODE_SPI; 460 461 DEBUGFUNC("e1000_read_nvm_spi"); 462 463 /* 464 * A check for invalid values: offset too large, too many words, and 465 * not enough words. 466 */ 467 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || 468 (words == 0)) { 469 DEBUGOUT("nvm parameter(s) out of bounds\n"); 470 ret_val = -E1000_ERR_NVM; 471 goto out; 472 } 473 474 ret_val = nvm->ops.acquire(hw); 475 if (ret_val) 476 goto out; 477 478 ret_val = e1000_ready_nvm_eeprom(hw); 479 if (ret_val) 480 goto release; 481 482 e1000_standby_nvm(hw); 483 484 if ((nvm->address_bits == 8) && (offset >= 128)) 485 read_opcode |= NVM_A8_OPCODE_SPI; 486 487 /* Send the READ command (opcode + addr) */ 488 e1000_shift_out_eec_bits(hw, read_opcode, nvm->opcode_bits); 489 e1000_shift_out_eec_bits(hw, (u16)(offset * 2), nvm->address_bits); 490 491 /* 492 * Read the data. SPI NVMs increment the address with each byte read 493 * and will roll over if reading beyond the end. This allows us to 494 * read the whole NVM from any offset 495 */ 496 for (i = 0; i < words; i++) { 497 word_in = e1000_shift_in_eec_bits(hw, 16); 498 data[i] = (word_in >> 8) | (word_in << 8); 499 } 500 501 release: 502 nvm->ops.release(hw); 503 504 out: 505 return (ret_val); 506 } 507 508 /* 509 * e1000_read_nvm_microwire - Reads EEPROM's using microwire 510 * @hw: pointer to the HW structure 511 * @offset: offset of word in the EEPROM to read 512 * @words: number of words to read 513 * @data: word read from the EEPROM 514 * 515 * Reads a 16 bit word from the EEPROM. 516 */ 517 s32 518 e1000_read_nvm_microwire(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 519 { 520 struct e1000_nvm_info *nvm = &hw->nvm; 521 u32 i = 0; 522 s32 ret_val; 523 u8 read_opcode = NVM_READ_OPCODE_MICROWIRE; 524 525 DEBUGFUNC("e1000_read_nvm_microwire"); 526 527 /* 528 * A check for invalid values: offset too large, too many words, and 529 * not enough words. 530 */ 531 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || 532 (words == 0)) { 533 DEBUGOUT("nvm parameter(s) out of bounds\n"); 534 ret_val = -E1000_ERR_NVM; 535 goto out; 536 } 537 538 ret_val = nvm->ops.acquire(hw); 539 if (ret_val) 540 goto out; 541 542 ret_val = e1000_ready_nvm_eeprom(hw); 543 if (ret_val) 544 goto release; 545 546 for (i = 0; i < words; i++) { 547 /* Send the READ command (opcode + addr) */ 548 e1000_shift_out_eec_bits(hw, read_opcode, nvm->opcode_bits); 549 e1000_shift_out_eec_bits(hw, (u16)(offset + i), 550 nvm->address_bits); 551 552 /* 553 * Read the data. For microwire, each word requires the 554 * overhead of setup and tear-down. 555 */ 556 data[i] = e1000_shift_in_eec_bits(hw, 16); 557 e1000_standby_nvm(hw); 558 } 559 560 release: 561 nvm->ops.release(hw); 562 563 out: 564 return (ret_val); 565 } 566 567 /* 568 * e1000_read_nvm_eerd - Reads EEPROM using EERD register 569 * @hw: pointer to the HW structure 570 * @offset: offset of word in the EEPROM to read 571 * @words: number of words to read 572 * @data: word read from the EEPROM 573 * 574 * Reads a 16 bit word from the EEPROM using the EERD register. 575 */ 576 s32 577 e1000_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 578 { 579 struct e1000_nvm_info *nvm = &hw->nvm; 580 u32 i, eerd = 0; 581 s32 ret_val = E1000_SUCCESS; 582 583 DEBUGFUNC("e1000_read_nvm_eerd"); 584 585 /* 586 * A check for invalid values: offset too large, too many words, 587 * too many words for the offset, and not enough words. 588 */ 589 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || 590 (words == 0)) { 591 DEBUGOUT("nvm parameter(s) out of bounds\n"); 592 ret_val = -E1000_ERR_NVM; 593 goto out; 594 } 595 596 for (i = 0; i < words; i++) { 597 eerd = ((offset + i) << E1000_NVM_RW_ADDR_SHIFT) + 598 E1000_NVM_RW_REG_START; 599 600 E1000_WRITE_REG(hw, E1000_EERD, eerd); 601 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ); 602 if (ret_val) 603 break; 604 605 data[i] = (E1000_READ_REG(hw, E1000_EERD) >> 606 E1000_NVM_RW_REG_DATA); 607 } 608 609 out: 610 return (ret_val); 611 } 612 613 /* 614 * e1000_write_nvm_spi - Write to EEPROM using SPI 615 * @hw: pointer to the HW structure 616 * @offset: offset within the EEPROM to be written to 617 * @words: number of words to write 618 * @data: 16 bit word(s) to be written to the EEPROM 619 * 620 * Writes data to EEPROM at offset using SPI interface. 621 * 622 * If e1000_update_nvm_checksum is not called after this function , the 623 * EEPROM will most likely contain an invalid checksum. 624 */ 625 s32 626 e1000_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 627 { 628 struct e1000_nvm_info *nvm = &hw->nvm; 629 s32 ret_val; 630 u16 widx = 0; 631 632 DEBUGFUNC("e1000_write_nvm_spi"); 633 634 /* 635 * A check for invalid values: offset too large, too many words, and 636 * not enough words. 637 */ 638 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || 639 (words == 0)) { 640 DEBUGOUT("nvm parameter(s) out of bounds\n"); 641 ret_val = -E1000_ERR_NVM; 642 goto out; 643 } 644 645 ret_val = nvm->ops.acquire(hw); 646 if (ret_val) 647 goto out; 648 649 while (widx < words) { 650 u8 write_opcode = NVM_WRITE_OPCODE_SPI; 651 652 ret_val = e1000_ready_nvm_eeprom(hw); 653 if (ret_val) 654 goto release; 655 656 e1000_standby_nvm(hw); 657 658 /* Send the WRITE ENABLE command (8 bit opcode) */ 659 e1000_shift_out_eec_bits(hw, NVM_WREN_OPCODE_SPI, 660 nvm->opcode_bits); 661 662 e1000_standby_nvm(hw); 663 664 /* 665 * Some SPI eeproms use the 8th address bit embedded in the 666 * opcode 667 */ 668 if ((nvm->address_bits == 8) && (offset >= 128)) 669 write_opcode |= NVM_A8_OPCODE_SPI; 670 671 /* Send the Write command (8-bit opcode + addr) */ 672 e1000_shift_out_eec_bits(hw, write_opcode, nvm->opcode_bits); 673 e1000_shift_out_eec_bits(hw, (u16)((offset + widx) * 2), 674 nvm->address_bits); 675 676 /* Loop to allow for up to whole page write of eeprom */ 677 while (widx < words) { 678 u16 word_out = data[widx]; 679 680 word_out = (word_out >> 8) | (word_out << 8); 681 e1000_shift_out_eec_bits(hw, word_out, 16); 682 widx++; 683 684 if ((((offset + widx) * 2) % nvm->page_size) == 0) { 685 e1000_standby_nvm(hw); 686 break; 687 } 688 } 689 } 690 691 msec_delay(10); 692 release: 693 nvm->ops.release(hw); 694 695 out: 696 return (ret_val); 697 } 698 699 /* 700 * e1000_write_nvm_microwire - Writes EEPROM using microwire 701 * @hw: pointer to the HW structure 702 * @offset: offset within the EEPROM to be written to 703 * @words: number of words to write 704 * @data: 16 bit word(s) to be written to the EEPROM 705 * 706 * Writes data to EEPROM at offset using microwire interface. 707 * 708 * If e1000_update_nvm_checksum is not called after this function , the 709 * EEPROM will most likely contain an invalid checksum. 710 */ 711 s32 712 e1000_write_nvm_microwire(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) 713 { 714 struct e1000_nvm_info *nvm = &hw->nvm; 715 s32 ret_val; 716 u32 eecd; 717 u16 words_written = 0; 718 u16 widx = 0; 719 720 DEBUGFUNC("e1000_write_nvm_microwire"); 721 722 /* 723 * A check for invalid values: offset too large, too many words, and 724 * not enough words. 725 */ 726 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || 727 (words == 0)) { 728 DEBUGOUT("nvm parameter(s) out of bounds\n"); 729 ret_val = -E1000_ERR_NVM; 730 goto out; 731 } 732 733 ret_val = nvm->ops.acquire(hw); 734 if (ret_val) 735 goto out; 736 737 ret_val = e1000_ready_nvm_eeprom(hw); 738 if (ret_val) 739 goto release; 740 741 e1000_shift_out_eec_bits(hw, NVM_EWEN_OPCODE_MICROWIRE, 742 (u16)(nvm->opcode_bits + 2)); 743 744 e1000_shift_out_eec_bits(hw, 0, (u16)(nvm->address_bits - 2)); 745 746 e1000_standby_nvm(hw); 747 748 while (words_written < words) { 749 e1000_shift_out_eec_bits(hw, NVM_WRITE_OPCODE_MICROWIRE, 750 nvm->opcode_bits); 751 752 e1000_shift_out_eec_bits(hw, (u16)(offset + words_written), 753 nvm->address_bits); 754 755 e1000_shift_out_eec_bits(hw, data[words_written], 16); 756 757 e1000_standby_nvm(hw); 758 759 for (widx = 0; widx < 200; widx++) { 760 eecd = E1000_READ_REG(hw, E1000_EECD); 761 if (eecd & E1000_EECD_DO) 762 break; 763 usec_delay(50); 764 } 765 766 if (widx == 200) { 767 DEBUGOUT("NVM Write did not complete\n"); 768 ret_val = -E1000_ERR_NVM; 769 goto release; 770 } 771 772 e1000_standby_nvm(hw); 773 774 words_written++; 775 } 776 777 e1000_shift_out_eec_bits(hw, NVM_EWDS_OPCODE_MICROWIRE, 778 (u16)(nvm->opcode_bits + 2)); 779 780 e1000_shift_out_eec_bits(hw, 0, (u16)(nvm->address_bits - 2)); 781 782 release: 783 nvm->ops.release(hw); 784 785 out: 786 return (ret_val); 787 } 788 789 /* 790 * e1000_read_pba_num_generic - Read device part number 791 * @hw: pointer to the HW structure 792 * @pba_num: pointer to device part number 793 * 794 * Reads the product board assembly (PBA) number from the EEPROM and stores 795 * the value in pba_num. 796 */ 797 s32 798 e1000_read_pba_num_generic(struct e1000_hw *hw, u32 *pba_num) 799 { 800 s32 ret_val; 801 u16 nvm_data; 802 803 DEBUGFUNC("e1000_read_pba_num_generic"); 804 805 ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_0, 1, &nvm_data); 806 if (ret_val) { 807 DEBUGOUT("NVM Read Error\n"); 808 goto out; 809 } 810 *pba_num = (u32)(nvm_data << 16); 811 812 ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_1, 1, &nvm_data); 813 if (ret_val) { 814 DEBUGOUT("NVM Read Error\n"); 815 goto out; 816 } 817 *pba_num |= nvm_data; 818 819 out: 820 return (ret_val); 821 } 822 823 /* 824 * e1000_read_mac_addr_generic - Read device MAC address 825 * @hw: pointer to the HW structure 826 * 827 * Reads the device MAC address from the EEPROM and stores the value. 828 * Since devices with two ports use the same EEPROM, we increment the 829 * last bit in the MAC address for the second port. 830 */ 831 s32 832 e1000_read_mac_addr_generic(struct e1000_hw *hw) 833 { 834 u32 rar_high; 835 u32 rar_low; 836 u16 i; 837 838 rar_high = E1000_READ_REG(hw, E1000_RAH(0)); 839 rar_low = E1000_READ_REG(hw, E1000_RAL(0)); 840 841 for (i = 0; i < E1000_RAL_MAC_ADDR_LEN; i++) 842 hw->mac.perm_addr[i] = (u8)(rar_low >> (i*8)); 843 844 for (i = 0; i < E1000_RAH_MAC_ADDR_LEN; i++) 845 hw->mac.perm_addr[i+4] = (u8)(rar_high >> (i*8)); 846 847 for (i = 0; i < ETH_ADDR_LEN; i++) 848 hw->mac.addr[i] = hw->mac.perm_addr[i]; 849 850 return (E1000_SUCCESS); 851 } 852 853 /* 854 * e1000_validate_nvm_checksum_generic - Validate EEPROM checksum 855 * @hw: pointer to the HW structure 856 * 857 * Calculates the EEPROM checksum by reading/adding each word of the EEPROM 858 * and then verifies that the sum of the EEPROM is equal to 0xBABA. 859 */ 860 s32 861 e1000_validate_nvm_checksum_generic(struct e1000_hw *hw) 862 { 863 s32 ret_val = E1000_SUCCESS; 864 u16 checksum = 0; 865 u16 i, nvm_data; 866 867 DEBUGFUNC("e1000_validate_nvm_checksum_generic"); 868 869 for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) { 870 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); 871 if (ret_val) { 872 DEBUGOUT("NVM Read Error\n"); 873 goto out; 874 } 875 checksum += nvm_data; 876 } 877 878 if (checksum != (u16)NVM_SUM) { 879 DEBUGOUT("NVM Checksum Invalid\n"); 880 ret_val = -E1000_ERR_NVM; 881 goto out; 882 } 883 884 out: 885 return (ret_val); 886 } 887 888 /* 889 * e1000_update_nvm_checksum_generic - Update EEPROM checksum 890 * @hw: pointer to the HW structure 891 * 892 * Updates the EEPROM checksum by reading/adding each word of the EEPROM 893 * up to the checksum. Then calculates the EEPROM checksum and writes the 894 * value to the EEPROM. 895 */ 896 s32 897 e1000_update_nvm_checksum_generic(struct e1000_hw *hw) 898 { 899 s32 ret_val; 900 u16 checksum = 0; 901 u16 i, nvm_data; 902 903 DEBUGFUNC("e1000_update_nvm_checksum"); 904 905 for (i = 0; i < NVM_CHECKSUM_REG; i++) { 906 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); 907 if (ret_val) { 908 DEBUGOUT("NVM Read Error while updating checksum.\n"); 909 goto out; 910 } 911 checksum += nvm_data; 912 } 913 checksum = (u16)NVM_SUM - checksum; 914 ret_val = hw->nvm.ops.write(hw, NVM_CHECKSUM_REG, 1, &checksum); 915 if (ret_val) { 916 /* EMPTY */ 917 DEBUGOUT("NVM Write Error while updating checksum.\n"); 918 } 919 920 out: 921 return (ret_val); 922 } 923 924 /* 925 * e1000_reload_nvm_generic - Reloads EEPROM 926 * @hw: pointer to the HW structure 927 * 928 * Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the 929 * extended control register. 930 */ 931 void 932 e1000_reload_nvm_generic(struct e1000_hw *hw) 933 { 934 u32 ctrl_ext; 935 936 DEBUGFUNC("e1000_reload_nvm_generic"); 937 938 usec_delay(10); 939 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 940 ctrl_ext |= E1000_CTRL_EXT_EE_RST; 941 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 942 E1000_WRITE_FLUSH(hw); 943 } 944