xref: /titanic_50/usr/src/uts/common/io/e1000api/e1000_nvm.c (revision 6aa4fc89ec1cf2cdf7d7c3b9ec059802ac9abe65)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2013, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 #include "e1000_api.h"
36 
37 static void e1000_reload_nvm_generic(struct e1000_hw *hw);
38 
39 /**
40  *  e1000_init_nvm_ops_generic - Initialize NVM function pointers
41  *  @hw: pointer to the HW structure
42  *
43  *  Setups up the function pointers to no-op functions
44  **/
45 void e1000_init_nvm_ops_generic(struct e1000_hw *hw)
46 {
47 	struct e1000_nvm_info *nvm = &hw->nvm;
48 	DEBUGFUNC("e1000_init_nvm_ops_generic");
49 
50 	/* Initialize function pointers */
51 	nvm->ops.init_params = e1000_null_ops_generic;
52 	nvm->ops.acquire = e1000_null_ops_generic;
53 	nvm->ops.read = e1000_null_read_nvm;
54 	nvm->ops.release = e1000_null_nvm_generic;
55 	nvm->ops.reload = e1000_reload_nvm_generic;
56 	nvm->ops.update = e1000_null_ops_generic;
57 	nvm->ops.valid_led_default = e1000_null_led_default;
58 	nvm->ops.validate = e1000_null_ops_generic;
59 	nvm->ops.write = e1000_null_write_nvm;
60 }
61 
62 /**
63  *  e1000_null_nvm_read - No-op function, return 0
64  *  @hw: pointer to the HW structure
65  **/
66 s32 e1000_null_read_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c)
67 {
68 	DEBUGFUNC("e1000_null_read_nvm");
69 	return E1000_SUCCESS;
70 }
71 
72 /**
73  *  e1000_null_nvm_generic - No-op function, return void
74  *  @hw: pointer to the HW structure
75  **/
76 void e1000_null_nvm_generic(struct e1000_hw *hw)
77 {
78 	DEBUGFUNC("e1000_null_nvm_generic");
79 	return;
80 }
81 
82 /**
83  *  e1000_null_led_default - No-op function, return 0
84  *  @hw: pointer to the HW structure
85  **/
86 s32 e1000_null_led_default(struct e1000_hw *hw, u16 *data)
87 {
88 	DEBUGFUNC("e1000_null_led_default");
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 e1000_null_write_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c)
97 {
98 	DEBUGFUNC("e1000_null_write_nvm");
99 	return E1000_SUCCESS;
100 }
101 
102 /**
103  *  e1000_raise_eec_clk - Raise EEPROM clock
104  *  @hw: pointer to the HW structure
105  *  @eecd: pointer to the EEPROM
106  *
107  *  Enable/Raise the EEPROM clock bit.
108  **/
109 static void e1000_raise_eec_clk(struct e1000_hw *hw, u32 *eecd)
110 {
111 	*eecd = *eecd | E1000_EECD_SK;
112 	E1000_WRITE_REG(hw, E1000_EECD, *eecd);
113 	E1000_WRITE_FLUSH(hw);
114 	usec_delay(hw->nvm.delay_usec);
115 }
116 
117 /**
118  *  e1000_lower_eec_clk - Lower EEPROM clock
119  *  @hw: pointer to the HW structure
120  *  @eecd: pointer to the EEPROM
121  *
122  *  Clear/Lower the EEPROM clock bit.
123  **/
124 static void e1000_lower_eec_clk(struct e1000_hw *hw, u32 *eecd)
125 {
126 	*eecd = *eecd & ~E1000_EECD_SK;
127 	E1000_WRITE_REG(hw, E1000_EECD, *eecd);
128 	E1000_WRITE_FLUSH(hw);
129 	usec_delay(hw->nvm.delay_usec);
130 }
131 
132 /**
133  *  e1000_shift_out_eec_bits - Shift data bits our to the EEPROM
134  *  @hw: pointer to the HW structure
135  *  @data: data to send to the EEPROM
136  *  @count: number of bits to shift out
137  *
138  *  We need to shift 'count' bits out to the EEPROM.  So, the value in the
139  *  "data" parameter will be shifted out to the EEPROM one bit at a time.
140  *  In order to do this, "data" must be broken down into bits.
141  **/
142 static void e1000_shift_out_eec_bits(struct e1000_hw *hw, u16 data, u16 count)
143 {
144 	struct e1000_nvm_info *nvm = &hw->nvm;
145 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
146 	u32 mask;
147 
148 	DEBUGFUNC("e1000_shift_out_eec_bits");
149 
150 	mask = 0x01 << (count - 1);
151 	if (nvm->type == e1000_nvm_eeprom_microwire)
152 		eecd &= ~E1000_EECD_DO;
153 	else
154 	if (nvm->type == e1000_nvm_eeprom_spi)
155 		eecd |= E1000_EECD_DO;
156 
157 	do {
158 		eecd &= ~E1000_EECD_DI;
159 
160 		if (data & mask)
161 			eecd |= E1000_EECD_DI;
162 
163 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
164 		E1000_WRITE_FLUSH(hw);
165 
166 		usec_delay(nvm->delay_usec);
167 
168 		e1000_raise_eec_clk(hw, &eecd);
169 		e1000_lower_eec_clk(hw, &eecd);
170 
171 		mask >>= 1;
172 	} while (mask);
173 
174 	eecd &= ~E1000_EECD_DI;
175 	E1000_WRITE_REG(hw, E1000_EECD, eecd);
176 }
177 
178 /**
179  *  e1000_shift_in_eec_bits - Shift data bits in from the EEPROM
180  *  @hw: pointer to the HW structure
181  *  @count: number of bits to shift in
182  *
183  *  In order to read a register from the EEPROM, we need to shift 'count' bits
184  *  in from the EEPROM.  Bits are "shifted in" by raising the clock input to
185  *  the EEPROM (setting the SK bit), and then reading the value of the data out
186  *  "DO" bit.  During this "shifting in" process the data in "DI" bit should
187  *  always be clear.
188  **/
189 static u16 e1000_shift_in_eec_bits(struct e1000_hw *hw, u16 count)
190 {
191 	u32 eecd;
192 	u32 i;
193 	u16 data;
194 
195 	DEBUGFUNC("e1000_shift_in_eec_bits");
196 
197 	eecd = E1000_READ_REG(hw, E1000_EECD);
198 
199 	eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
200 	data = 0;
201 
202 	for (i = 0; i < count; i++) {
203 		data <<= 1;
204 		e1000_raise_eec_clk(hw, &eecd);
205 
206 		eecd = E1000_READ_REG(hw, E1000_EECD);
207 
208 		eecd &= ~E1000_EECD_DI;
209 		if (eecd & E1000_EECD_DO)
210 			data |= 1;
211 
212 		e1000_lower_eec_clk(hw, &eecd);
213 	}
214 
215 	return data;
216 }
217 
218 /**
219  *  e1000_poll_eerd_eewr_done - Poll for EEPROM read/write completion
220  *  @hw: pointer to the HW structure
221  *  @ee_reg: EEPROM flag for polling
222  *
223  *  Polls the EEPROM status bit for either read or write completion based
224  *  upon the value of 'ee_reg'.
225  **/
226 s32 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg)
227 {
228 	u32 attempts = 100000;
229 	u32 i, reg = 0;
230 
231 	DEBUGFUNC("e1000_poll_eerd_eewr_done");
232 
233 	for (i = 0; i < attempts; i++) {
234 		if (ee_reg == E1000_NVM_POLL_READ)
235 			reg = E1000_READ_REG(hw, E1000_EERD);
236 		else
237 			reg = E1000_READ_REG(hw, E1000_EEWR);
238 
239 		if (reg & E1000_NVM_RW_REG_DONE)
240 			return E1000_SUCCESS;
241 
242 		usec_delay(5);
243 	}
244 
245 	return -E1000_ERR_NVM;
246 }
247 
248 /**
249  *  e1000_acquire_nvm_generic - Generic request for access to EEPROM
250  *  @hw: pointer to the HW structure
251  *
252  *  Set the EEPROM access request bit and wait for EEPROM access grant bit.
253  *  Return successful if access grant bit set, else clear the request for
254  *  EEPROM access and return -E1000_ERR_NVM (-1).
255  **/
256 s32 e1000_acquire_nvm_generic(struct e1000_hw *hw)
257 {
258 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
259 	s32 timeout = E1000_NVM_GRANT_ATTEMPTS;
260 
261 	DEBUGFUNC("e1000_acquire_nvm_generic");
262 
263 	E1000_WRITE_REG(hw, E1000_EECD, eecd | E1000_EECD_REQ);
264 	eecd = E1000_READ_REG(hw, E1000_EECD);
265 
266 	while (timeout) {
267 		if (eecd & E1000_EECD_GNT)
268 			break;
269 		usec_delay(5);
270 		eecd = E1000_READ_REG(hw, E1000_EECD);
271 		timeout--;
272 	}
273 
274 	if (!timeout) {
275 		eecd &= ~E1000_EECD_REQ;
276 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
277 		DEBUGOUT("Could not acquire NVM grant\n");
278 		return -E1000_ERR_NVM;
279 	}
280 
281 	return E1000_SUCCESS;
282 }
283 
284 /**
285  *  e1000_standby_nvm - Return EEPROM to standby state
286  *  @hw: pointer to the HW structure
287  *
288  *  Return the EEPROM to a standby state.
289  **/
290 static void e1000_standby_nvm(struct e1000_hw *hw)
291 {
292 	struct e1000_nvm_info *nvm = &hw->nvm;
293 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
294 
295 	DEBUGFUNC("e1000_standby_nvm");
296 
297 	if (nvm->type == e1000_nvm_eeprom_microwire) {
298 		eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
299 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
300 		E1000_WRITE_FLUSH(hw);
301 		usec_delay(nvm->delay_usec);
302 
303 		e1000_raise_eec_clk(hw, &eecd);
304 
305 		/* Select EEPROM */
306 		eecd |= E1000_EECD_CS;
307 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
308 		E1000_WRITE_FLUSH(hw);
309 		usec_delay(nvm->delay_usec);
310 
311 		e1000_lower_eec_clk(hw, &eecd);
312 	} else if (nvm->type == e1000_nvm_eeprom_spi) {
313 		/* Toggle CS to flush commands */
314 		eecd |= E1000_EECD_CS;
315 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
316 		E1000_WRITE_FLUSH(hw);
317 		usec_delay(nvm->delay_usec);
318 		eecd &= ~E1000_EECD_CS;
319 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
320 		E1000_WRITE_FLUSH(hw);
321 		usec_delay(nvm->delay_usec);
322 	}
323 }
324 
325 /**
326  *  e1000_stop_nvm - Terminate EEPROM command
327  *  @hw: pointer to the HW structure
328  *
329  *  Terminates the current command by inverting the EEPROM's chip select pin.
330  **/
331 void e1000_stop_nvm(struct e1000_hw *hw)
332 {
333 	u32 eecd;
334 
335 	DEBUGFUNC("e1000_stop_nvm");
336 
337 	eecd = E1000_READ_REG(hw, E1000_EECD);
338 	if (hw->nvm.type == e1000_nvm_eeprom_spi) {
339 		/* Pull CS high */
340 		eecd |= E1000_EECD_CS;
341 		e1000_lower_eec_clk(hw, &eecd);
342 	} else if (hw->nvm.type == e1000_nvm_eeprom_microwire) {
343 		/* CS on Microwire is active-high */
344 		eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
345 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
346 		e1000_raise_eec_clk(hw, &eecd);
347 		e1000_lower_eec_clk(hw, &eecd);
348 	}
349 }
350 
351 /**
352  *  e1000_release_nvm_generic - Release exclusive access to EEPROM
353  *  @hw: pointer to the HW structure
354  *
355  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
356  **/
357 void e1000_release_nvm_generic(struct e1000_hw *hw)
358 {
359 	u32 eecd;
360 
361 	DEBUGFUNC("e1000_release_nvm_generic");
362 
363 	e1000_stop_nvm(hw);
364 
365 	eecd = E1000_READ_REG(hw, E1000_EECD);
366 	eecd &= ~E1000_EECD_REQ;
367 	E1000_WRITE_REG(hw, E1000_EECD, eecd);
368 }
369 
370 /**
371  *  e1000_ready_nvm_eeprom - Prepares EEPROM for read/write
372  *  @hw: pointer to the HW structure
373  *
374  *  Setups the EEPROM for reading and writing.
375  **/
376 static s32 e1000_ready_nvm_eeprom(struct e1000_hw *hw)
377 {
378 	struct e1000_nvm_info *nvm = &hw->nvm;
379 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
380 	u8 spi_stat_reg;
381 
382 	DEBUGFUNC("e1000_ready_nvm_eeprom");
383 
384 	if (nvm->type == e1000_nvm_eeprom_microwire) {
385 		/* Clear SK and DI */
386 		eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
387 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
388 		/* Set CS */
389 		eecd |= E1000_EECD_CS;
390 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
391 	} else if (nvm->type == e1000_nvm_eeprom_spi) {
392 		u16 timeout = NVM_MAX_RETRY_SPI;
393 
394 		/* Clear SK and CS */
395 		eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
396 		E1000_WRITE_REG(hw, E1000_EECD, eecd);
397 		E1000_WRITE_FLUSH(hw);
398 		usec_delay(1);
399 
400 		/* Read "Status Register" repeatedly until the LSB is cleared.
401 		 * The EEPROM will signal that the command has been completed
402 		 * by clearing bit 0 of the internal status register.  If it's
403 		 * not cleared within 'timeout', then error out.
404 		 */
405 		while (timeout) {
406 			e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI,
407 						 hw->nvm.opcode_bits);
408 			spi_stat_reg = (u8)e1000_shift_in_eec_bits(hw, 8);
409 			if (!(spi_stat_reg & NVM_STATUS_RDY_SPI))
410 				break;
411 
412 			usec_delay(5);
413 			e1000_standby_nvm(hw);
414 			timeout--;
415 		}
416 
417 		if (!timeout) {
418 			DEBUGOUT("SPI NVM Status error\n");
419 			return -E1000_ERR_NVM;
420 		}
421 	}
422 
423 	return E1000_SUCCESS;
424 }
425 
426 /**
427  *  e1000_read_nvm_spi - Read EEPROM's using SPI
428  *  @hw: pointer to the HW structure
429  *  @offset: offset of word in the EEPROM to read
430  *  @words: number of words to read
431  *  @data: word read from the EEPROM
432  *
433  *  Reads a 16 bit word from the EEPROM.
434  **/
435 s32 e1000_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
436 {
437 	struct e1000_nvm_info *nvm = &hw->nvm;
438 	u32 i = 0;
439 	s32 ret_val;
440 	u16 word_in;
441 	u8 read_opcode = NVM_READ_OPCODE_SPI;
442 
443 	DEBUGFUNC("e1000_read_nvm_spi");
444 
445 	/* A check for invalid values:  offset too large, too many words,
446 	 * and not enough words.
447 	 */
448 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
449 	    (words == 0)) {
450 		DEBUGOUT("nvm parameter(s) out of bounds\n");
451 		return -E1000_ERR_NVM;
452 	}
453 
454 	ret_val = nvm->ops.acquire(hw);
455 	if (ret_val)
456 		return ret_val;
457 
458 	ret_val = e1000_ready_nvm_eeprom(hw);
459 	if (ret_val)
460 		goto release;
461 
462 	e1000_standby_nvm(hw);
463 
464 	if ((nvm->address_bits == 8) && (offset >= 128))
465 		read_opcode |= NVM_A8_OPCODE_SPI;
466 
467 	/* Send the READ command (opcode + addr) */
468 	e1000_shift_out_eec_bits(hw, read_opcode, nvm->opcode_bits);
469 	e1000_shift_out_eec_bits(hw, (u16)(offset*2), nvm->address_bits);
470 
471 	/* Read the data.  SPI NVMs increment the address with each byte
472 	 * read and will roll over if reading beyond the end.  This allows
473 	 * us to read the whole NVM from any offset
474 	 */
475 	for (i = 0; i < words; i++) {
476 		word_in = e1000_shift_in_eec_bits(hw, 16);
477 		data[i] = (word_in >> 8) | (word_in << 8);
478 	}
479 
480 release:
481 	nvm->ops.release(hw);
482 
483 	return ret_val;
484 }
485 
486 /**
487  *  e1000_read_nvm_microwire - Reads EEPROM's using microwire
488  *  @hw: pointer to the HW structure
489  *  @offset: offset of word in the EEPROM to read
490  *  @words: number of words to read
491  *  @data: word read from the EEPROM
492  *
493  *  Reads a 16 bit word from the EEPROM.
494  **/
495 s32 e1000_read_nvm_microwire(struct e1000_hw *hw, u16 offset, u16 words,
496 			     u16 *data)
497 {
498 	struct e1000_nvm_info *nvm = &hw->nvm;
499 	u32 i = 0;
500 	s32 ret_val;
501 	u8 read_opcode = NVM_READ_OPCODE_MICROWIRE;
502 
503 	DEBUGFUNC("e1000_read_nvm_microwire");
504 
505 	/* A check for invalid values:  offset too large, too many words,
506 	 * and not enough words.
507 	 */
508 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
509 	    (words == 0)) {
510 		DEBUGOUT("nvm parameter(s) out of bounds\n");
511 		return -E1000_ERR_NVM;
512 	}
513 
514 	ret_val = nvm->ops.acquire(hw);
515 	if (ret_val)
516 		return ret_val;
517 
518 	ret_val = e1000_ready_nvm_eeprom(hw);
519 	if (ret_val)
520 		goto release;
521 
522 	for (i = 0; i < words; i++) {
523 		/* Send the READ command (opcode + addr) */
524 		e1000_shift_out_eec_bits(hw, read_opcode, nvm->opcode_bits);
525 		e1000_shift_out_eec_bits(hw, (u16)(offset + i),
526 					nvm->address_bits);
527 
528 		/* Read the data.  For microwire, each word requires the
529 		 * overhead of setup and tear-down.
530 		 */
531 		data[i] = e1000_shift_in_eec_bits(hw, 16);
532 		e1000_standby_nvm(hw);
533 	}
534 
535 release:
536 	nvm->ops.release(hw);
537 
538 	return ret_val;
539 }
540 
541 /**
542  *  e1000_read_nvm_eerd - Reads EEPROM using EERD register
543  *  @hw: pointer to the HW structure
544  *  @offset: offset of word in the EEPROM to read
545  *  @words: number of words to read
546  *  @data: word read from the EEPROM
547  *
548  *  Reads a 16 bit word from the EEPROM using the EERD register.
549  **/
550 s32 e1000_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
551 {
552 	struct e1000_nvm_info *nvm = &hw->nvm;
553 	u32 i, eerd = 0;
554 	s32 ret_val = E1000_SUCCESS;
555 
556 	DEBUGFUNC("e1000_read_nvm_eerd");
557 
558 	/* A check for invalid values:  offset too large, too many words,
559 	 * too many words for the offset, and not enough words.
560 	 */
561 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
562 	    (words == 0)) {
563 		DEBUGOUT("nvm parameter(s) out of bounds\n");
564 		return -E1000_ERR_NVM;
565 	}
566 
567 	for (i = 0; i < words; i++) {
568 		eerd = ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) +
569 		       E1000_NVM_RW_REG_START;
570 
571 		E1000_WRITE_REG(hw, E1000_EERD, eerd);
572 		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ);
573 		if (ret_val)
574 			break;
575 
576 		data[i] = (E1000_READ_REG(hw, E1000_EERD) >>
577 			   E1000_NVM_RW_REG_DATA);
578 	}
579 
580 	return ret_val;
581 }
582 
583 /**
584  *  e1000_write_nvm_spi - Write to EEPROM using SPI
585  *  @hw: pointer to the HW structure
586  *  @offset: offset within the EEPROM to be written to
587  *  @words: number of words to write
588  *  @data: 16 bit word(s) to be written to the EEPROM
589  *
590  *  Writes data to EEPROM at offset using SPI interface.
591  *
592  *  If e1000_update_nvm_checksum is not called after this function , the
593  *  EEPROM will most likely contain an invalid checksum.
594  **/
595 s32 e1000_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
596 {
597 	struct e1000_nvm_info *nvm = &hw->nvm;
598 	s32 ret_val = -E1000_ERR_NVM;
599 	u16 widx = 0;
600 
601 	DEBUGFUNC("e1000_write_nvm_spi");
602 
603 	/* A check for invalid values:  offset too large, too many words,
604 	 * and not enough words.
605 	 */
606 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
607 	    (words == 0)) {
608 		DEBUGOUT("nvm parameter(s) out of bounds\n");
609 		return -E1000_ERR_NVM;
610 	}
611 
612 	while (widx < words) {
613 		u8 write_opcode = NVM_WRITE_OPCODE_SPI;
614 
615 		ret_val = nvm->ops.acquire(hw);
616 		if (ret_val)
617 			return ret_val;
618 
619 		ret_val = e1000_ready_nvm_eeprom(hw);
620 		if (ret_val) {
621 			nvm->ops.release(hw);
622 			return ret_val;
623 		}
624 
625 		e1000_standby_nvm(hw);
626 
627 		/* Send the WRITE ENABLE command (8 bit opcode) */
628 		e1000_shift_out_eec_bits(hw, NVM_WREN_OPCODE_SPI,
629 					 nvm->opcode_bits);
630 
631 		e1000_standby_nvm(hw);
632 
633 		/* Some SPI eeproms use the 8th address bit embedded in the
634 		 * opcode
635 		 */
636 		if ((nvm->address_bits == 8) && (offset >= 128))
637 			write_opcode |= NVM_A8_OPCODE_SPI;
638 
639 		/* Send the Write command (8-bit opcode + addr) */
640 		e1000_shift_out_eec_bits(hw, write_opcode, nvm->opcode_bits);
641 		e1000_shift_out_eec_bits(hw, (u16)((offset + widx) * 2),
642 					 nvm->address_bits);
643 
644 		/* Loop to allow for up to whole page write of eeprom */
645 		while (widx < words) {
646 			u16 word_out = data[widx];
647 			word_out = (word_out >> 8) | (word_out << 8);
648 			e1000_shift_out_eec_bits(hw, word_out, 16);
649 			widx++;
650 
651 			if ((((offset + widx) * 2) % nvm->page_size) == 0) {
652 				e1000_standby_nvm(hw);
653 				break;
654 			}
655 		}
656 		msec_delay(10);
657 		nvm->ops.release(hw);
658 	}
659 
660 	return ret_val;
661 }
662 
663 /**
664  *  e1000_write_nvm_microwire - Writes EEPROM using microwire
665  *  @hw: pointer to the HW structure
666  *  @offset: offset within the EEPROM to be written to
667  *  @words: number of words to write
668  *  @data: 16 bit word(s) to be written to the EEPROM
669  *
670  *  Writes data to EEPROM at offset using microwire interface.
671  *
672  *  If e1000_update_nvm_checksum is not called after this function , the
673  *  EEPROM will most likely contain an invalid checksum.
674  **/
675 s32 e1000_write_nvm_microwire(struct e1000_hw *hw, u16 offset, u16 words,
676 			      u16 *data)
677 {
678 	struct e1000_nvm_info *nvm = &hw->nvm;
679 	s32  ret_val;
680 	u32 eecd;
681 	u16 words_written = 0;
682 	u16 widx = 0;
683 
684 	DEBUGFUNC("e1000_write_nvm_microwire");
685 
686 	/* A check for invalid values:  offset too large, too many words,
687 	 * and not enough words.
688 	 */
689 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
690 	    (words == 0)) {
691 		DEBUGOUT("nvm parameter(s) out of bounds\n");
692 		return -E1000_ERR_NVM;
693 	}
694 
695 	ret_val = nvm->ops.acquire(hw);
696 	if (ret_val)
697 		return ret_val;
698 
699 	ret_val = e1000_ready_nvm_eeprom(hw);
700 	if (ret_val)
701 		goto release;
702 
703 	e1000_shift_out_eec_bits(hw, NVM_EWEN_OPCODE_MICROWIRE,
704 				 (u16)(nvm->opcode_bits + 2));
705 
706 	e1000_shift_out_eec_bits(hw, 0, (u16)(nvm->address_bits - 2));
707 
708 	e1000_standby_nvm(hw);
709 
710 	while (words_written < words) {
711 		e1000_shift_out_eec_bits(hw, NVM_WRITE_OPCODE_MICROWIRE,
712 					 nvm->opcode_bits);
713 
714 		e1000_shift_out_eec_bits(hw, (u16)(offset + words_written),
715 					 nvm->address_bits);
716 
717 		e1000_shift_out_eec_bits(hw, data[words_written], 16);
718 
719 		e1000_standby_nvm(hw);
720 
721 		for (widx = 0; widx < 200; widx++) {
722 			eecd = E1000_READ_REG(hw, E1000_EECD);
723 			if (eecd & E1000_EECD_DO)
724 				break;
725 			usec_delay(50);
726 		}
727 
728 		if (widx == 200) {
729 			DEBUGOUT("NVM Write did not complete\n");
730 			ret_val = -E1000_ERR_NVM;
731 			goto release;
732 		}
733 
734 		e1000_standby_nvm(hw);
735 
736 		words_written++;
737 	}
738 
739 	e1000_shift_out_eec_bits(hw, NVM_EWDS_OPCODE_MICROWIRE,
740 				 (u16)(nvm->opcode_bits + 2));
741 
742 	e1000_shift_out_eec_bits(hw, 0, (u16)(nvm->address_bits - 2));
743 
744 release:
745 	nvm->ops.release(hw);
746 
747 	return ret_val;
748 }
749 
750 /**
751  *  e1000_read_pba_string_generic - Read device part number
752  *  @hw: pointer to the HW structure
753  *  @pba_num: pointer to device part number
754  *  @pba_num_size: size of part number buffer
755  *
756  *  Reads the product board assembly (PBA) number from the EEPROM and stores
757  *  the value in pba_num.
758  **/
759 s32 e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num,
760 				  u32 pba_num_size)
761 {
762 	s32 ret_val;
763 	u16 nvm_data;
764 	u16 pba_ptr;
765 	u16 offset;
766 	u16 length;
767 
768 	DEBUGFUNC("e1000_read_pba_string_generic");
769 
770 	if (pba_num == NULL) {
771 		DEBUGOUT("PBA string buffer was null\n");
772 		return -E1000_ERR_INVALID_ARGUMENT;
773 	}
774 
775 	ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_0, 1, &nvm_data);
776 	if (ret_val) {
777 		DEBUGOUT("NVM Read Error\n");
778 		return ret_val;
779 	}
780 
781 	ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_1, 1, &pba_ptr);
782 	if (ret_val) {
783 		DEBUGOUT("NVM Read Error\n");
784 		return ret_val;
785 	}
786 
787 	/* if nvm_data is not ptr guard the PBA must be in legacy format which
788 	 * means pba_ptr is actually our second data word for the PBA number
789 	 * and we can decode it into an ascii string
790 	 */
791 	if (nvm_data != NVM_PBA_PTR_GUARD) {
792 		DEBUGOUT("NVM PBA number is not stored as string\n");
793 
794 		/* make sure callers buffer is big enough to store the PBA */
795 		if (pba_num_size < E1000_PBANUM_LENGTH) {
796 			DEBUGOUT("PBA string buffer too small\n");
797 			return E1000_ERR_NO_SPACE;
798 		}
799 
800 		/* extract hex string from data and pba_ptr */
801 		pba_num[0] = (nvm_data >> 12) & 0xF;
802 		pba_num[1] = (nvm_data >> 8) & 0xF;
803 		pba_num[2] = (nvm_data >> 4) & 0xF;
804 		pba_num[3] = nvm_data & 0xF;
805 		pba_num[4] = (pba_ptr >> 12) & 0xF;
806 		pba_num[5] = (pba_ptr >> 8) & 0xF;
807 		pba_num[6] = '-';
808 		pba_num[7] = 0;
809 		pba_num[8] = (pba_ptr >> 4) & 0xF;
810 		pba_num[9] = pba_ptr & 0xF;
811 
812 		/* put a null character on the end of our string */
813 		pba_num[10] = '\0';
814 
815 		/* switch all the data but the '-' to hex char */
816 		for (offset = 0; offset < 10; offset++) {
817 			if (pba_num[offset] < 0xA)
818 				pba_num[offset] += '0';
819 			else if (pba_num[offset] < 0x10)
820 				pba_num[offset] += 'A' - 0xA;
821 		}
822 
823 		return E1000_SUCCESS;
824 	}
825 
826 	ret_val = hw->nvm.ops.read(hw, pba_ptr, 1, &length);
827 	if (ret_val) {
828 		DEBUGOUT("NVM Read Error\n");
829 		return ret_val;
830 	}
831 
832 	if (length == 0xFFFF || length == 0) {
833 		DEBUGOUT("NVM PBA number section invalid length\n");
834 		return -E1000_ERR_NVM_PBA_SECTION;
835 	}
836 	/* check if pba_num buffer is big enough */
837 	if (pba_num_size < (((u32)length * 2) - 1)) {
838 		DEBUGOUT("PBA string buffer too small\n");
839 		return -E1000_ERR_NO_SPACE;
840 	}
841 
842 	/* trim pba length from start of string */
843 	pba_ptr++;
844 	length--;
845 
846 	for (offset = 0; offset < length; offset++) {
847 		ret_val = hw->nvm.ops.read(hw, pba_ptr + offset, 1, &nvm_data);
848 		if (ret_val) {
849 			DEBUGOUT("NVM Read Error\n");
850 			return ret_val;
851 		}
852 		pba_num[offset * 2] = (u8)(nvm_data >> 8);
853 		pba_num[(offset * 2) + 1] = (u8)(nvm_data & 0xFF);
854 	}
855 	pba_num[offset * 2] = '\0';
856 
857 	return E1000_SUCCESS;
858 }
859 
860 /**
861  *  e1000_read_pba_length_generic - Read device part number length
862  *  @hw: pointer to the HW structure
863  *  @pba_num_size: size of part number buffer
864  *
865  *  Reads the product board assembly (PBA) number length from the EEPROM and
866  *  stores the value in pba_num_size.
867  **/
868 s32 e1000_read_pba_length_generic(struct e1000_hw *hw, u32 *pba_num_size)
869 {
870 	s32 ret_val;
871 	u16 nvm_data;
872 	u16 pba_ptr;
873 	u16 length;
874 
875 	DEBUGFUNC("e1000_read_pba_length_generic");
876 
877 	if (pba_num_size == NULL) {
878 		DEBUGOUT("PBA buffer size was null\n");
879 		return -E1000_ERR_INVALID_ARGUMENT;
880 	}
881 
882 	ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_0, 1, &nvm_data);
883 	if (ret_val) {
884 		DEBUGOUT("NVM Read Error\n");
885 		return ret_val;
886 	}
887 
888 	ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_1, 1, &pba_ptr);
889 	if (ret_val) {
890 		DEBUGOUT("NVM Read Error\n");
891 		return ret_val;
892 	}
893 
894 	 /* if data is not ptr guard the PBA must be in legacy format */
895 	if (nvm_data != NVM_PBA_PTR_GUARD) {
896 		*pba_num_size = E1000_PBANUM_LENGTH;
897 		return E1000_SUCCESS;
898 	}
899 
900 	ret_val = hw->nvm.ops.read(hw, pba_ptr, 1, &length);
901 	if (ret_val) {
902 		DEBUGOUT("NVM Read Error\n");
903 		return ret_val;
904 	}
905 
906 	if (length == 0xFFFF || length == 0) {
907 		DEBUGOUT("NVM PBA number section invalid length\n");
908 		return -E1000_ERR_NVM_PBA_SECTION;
909 	}
910 
911 	/* Convert from length in u16 values to u8 chars, add 1 for NULL,
912 	 * and subtract 2 because length field is included in length.
913 	 */
914 	*pba_num_size = ((u32)length * 2) - 1;
915 
916 	return E1000_SUCCESS;
917 }
918 
919 
920 /**
921  *  e1000_read_pba_raw
922  *  @hw: pointer to the HW structure
923  *  @eeprom_buf: optional pointer to EEPROM image
924  *  @eeprom_buf_size: size of EEPROM image in words
925  *  @max_pba_block_size: PBA block size limit
926  *  @pba: pointer to output PBA structure
927  *
928  *  Reads PBA from EEPROM image when eeprom_buf is not NULL.
929  *  Reads PBA from physical EEPROM device when eeprom_buf is NULL.
930  *
931  **/
932 s32 e1000_read_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
933 		       u32 eeprom_buf_size, u16 max_pba_block_size,
934 		       struct e1000_pba *pba)
935 {
936 	s32 ret_val;
937 	u16 pba_block_size;
938 
939 	if (pba == NULL)
940 		return -E1000_ERR_PARAM;
941 
942 	if (eeprom_buf == NULL) {
943 		ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_0, 2,
944 					 &pba->word[0]);
945 		if (ret_val)
946 			return ret_val;
947 	} else {
948 		if (eeprom_buf_size > NVM_PBA_OFFSET_1) {
949 			pba->word[0] = eeprom_buf[NVM_PBA_OFFSET_0];
950 			pba->word[1] = eeprom_buf[NVM_PBA_OFFSET_1];
951 		} else {
952 			return -E1000_ERR_PARAM;
953 		}
954 	}
955 
956 	if (pba->word[0] == NVM_PBA_PTR_GUARD) {
957 		if (pba->pba_block == NULL)
958 			return -E1000_ERR_PARAM;
959 
960 		ret_val = e1000_get_pba_block_size(hw, eeprom_buf,
961 						   eeprom_buf_size,
962 						   &pba_block_size);
963 		if (ret_val)
964 			return ret_val;
965 
966 		if (pba_block_size > max_pba_block_size)
967 			return -E1000_ERR_PARAM;
968 
969 		if (eeprom_buf == NULL) {
970 			ret_val = e1000_read_nvm(hw, pba->word[1],
971 						 pba_block_size,
972 						 pba->pba_block);
973 			if (ret_val)
974 				return ret_val;
975 		} else {
976 			if (eeprom_buf_size > (u32)(pba->word[1] +
977 					      pba->pba_block[0])) {
978 				memcpy(pba->pba_block,
979 				       &eeprom_buf[pba->word[1]],
980 				       pba_block_size * sizeof(u16));
981 			} else {
982 				return -E1000_ERR_PARAM;
983 			}
984 		}
985 	}
986 
987 	return E1000_SUCCESS;
988 }
989 
990 /**
991  *  e1000_write_pba_raw
992  *  @hw: pointer to the HW structure
993  *  @eeprom_buf: optional pointer to EEPROM image
994  *  @eeprom_buf_size: size of EEPROM image in words
995  *  @pba: pointer to PBA structure
996  *
997  *  Writes PBA to EEPROM image when eeprom_buf is not NULL.
998  *  Writes PBA to physical EEPROM device when eeprom_buf is NULL.
999  *
1000  **/
1001 s32 e1000_write_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
1002 			u32 eeprom_buf_size, struct e1000_pba *pba)
1003 {
1004 	s32 ret_val;
1005 
1006 	if (pba == NULL)
1007 		return -E1000_ERR_PARAM;
1008 
1009 	if (eeprom_buf == NULL) {
1010 		ret_val = e1000_write_nvm(hw, NVM_PBA_OFFSET_0, 2,
1011 					  &pba->word[0]);
1012 		if (ret_val)
1013 			return ret_val;
1014 	} else {
1015 		if (eeprom_buf_size > NVM_PBA_OFFSET_1) {
1016 			eeprom_buf[NVM_PBA_OFFSET_0] = pba->word[0];
1017 			eeprom_buf[NVM_PBA_OFFSET_1] = pba->word[1];
1018 		} else {
1019 			return -E1000_ERR_PARAM;
1020 		}
1021 	}
1022 
1023 	if (pba->word[0] == NVM_PBA_PTR_GUARD) {
1024 		if (pba->pba_block == NULL)
1025 			return -E1000_ERR_PARAM;
1026 
1027 		if (eeprom_buf == NULL) {
1028 			ret_val = e1000_write_nvm(hw, pba->word[1],
1029 						  pba->pba_block[0],
1030 						  pba->pba_block);
1031 			if (ret_val)
1032 				return ret_val;
1033 		} else {
1034 			if (eeprom_buf_size > (u32)(pba->word[1] +
1035 					      pba->pba_block[0])) {
1036 				memcpy(&eeprom_buf[pba->word[1]],
1037 				       pba->pba_block,
1038 				       pba->pba_block[0] * sizeof(u16));
1039 			} else {
1040 				return -E1000_ERR_PARAM;
1041 			}
1042 		}
1043 	}
1044 
1045 	return E1000_SUCCESS;
1046 }
1047 
1048 /**
1049  *  e1000_get_pba_block_size
1050  *  @hw: pointer to the HW structure
1051  *  @eeprom_buf: optional pointer to EEPROM image
1052  *  @eeprom_buf_size: size of EEPROM image in words
1053  *  @pba_data_size: pointer to output variable
1054  *
1055  *  Returns the size of the PBA block in words. Function operates on EEPROM
1056  *  image if the eeprom_buf pointer is not NULL otherwise it accesses physical
1057  *  EEPROM device.
1058  *
1059  **/
1060 s32 e1000_get_pba_block_size(struct e1000_hw *hw, u16 *eeprom_buf,
1061 			     u32 eeprom_buf_size, u16 *pba_block_size)
1062 {
1063 	s32 ret_val;
1064 	u16 pba_word[2];
1065 	u16 length;
1066 
1067 	DEBUGFUNC("e1000_get_pba_block_size");
1068 
1069 	if (eeprom_buf == NULL) {
1070 		ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_0, 2, &pba_word[0]);
1071 		if (ret_val)
1072 			return ret_val;
1073 	} else {
1074 		if (eeprom_buf_size > NVM_PBA_OFFSET_1) {
1075 			pba_word[0] = eeprom_buf[NVM_PBA_OFFSET_0];
1076 			pba_word[1] = eeprom_buf[NVM_PBA_OFFSET_1];
1077 		} else {
1078 			return -E1000_ERR_PARAM;
1079 		}
1080 	}
1081 
1082 	if (pba_word[0] == NVM_PBA_PTR_GUARD) {
1083 		if (eeprom_buf == NULL) {
1084 			ret_val = e1000_read_nvm(hw, pba_word[1] + 0, 1,
1085 						 &length);
1086 			if (ret_val)
1087 				return ret_val;
1088 		} else {
1089 			if (eeprom_buf_size > pba_word[1])
1090 				length = eeprom_buf[pba_word[1] + 0];
1091 			else
1092 				return -E1000_ERR_PARAM;
1093 		}
1094 
1095 		if (length == 0xFFFF || length == 0)
1096 			return -E1000_ERR_NVM_PBA_SECTION;
1097 	} else {
1098 		/* PBA number in legacy format, there is no PBA Block. */
1099 		length = 0;
1100 	}
1101 
1102 	if (pba_block_size != NULL)
1103 		*pba_block_size = length;
1104 
1105 	return E1000_SUCCESS;
1106 }
1107 
1108 /**
1109  *  e1000_read_mac_addr_generic - Read device MAC address
1110  *  @hw: pointer to the HW structure
1111  *
1112  *  Reads the device MAC address from the EEPROM and stores the value.
1113  *  Since devices with two ports use the same EEPROM, we increment the
1114  *  last bit in the MAC address for the second port.
1115  **/
1116 s32 e1000_read_mac_addr_generic(struct e1000_hw *hw)
1117 {
1118 	u32 rar_high;
1119 	u32 rar_low;
1120 	u16 i;
1121 
1122 	rar_high = E1000_READ_REG(hw, E1000_RAH(0));
1123 	rar_low = E1000_READ_REG(hw, E1000_RAL(0));
1124 
1125 	for (i = 0; i < E1000_RAL_MAC_ADDR_LEN; i++)
1126 		hw->mac.perm_addr[i] = (u8)(rar_low >> (i*8));
1127 
1128 	for (i = 0; i < E1000_RAH_MAC_ADDR_LEN; i++)
1129 		hw->mac.perm_addr[i+4] = (u8)(rar_high >> (i*8));
1130 
1131 	for (i = 0; i < ETH_ADDR_LEN; i++)
1132 		hw->mac.addr[i] = hw->mac.perm_addr[i];
1133 
1134 	return E1000_SUCCESS;
1135 }
1136 
1137 /**
1138  *  e1000_validate_nvm_checksum_generic - Validate EEPROM checksum
1139  *  @hw: pointer to the HW structure
1140  *
1141  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
1142  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
1143  **/
1144 s32 e1000_validate_nvm_checksum_generic(struct e1000_hw *hw)
1145 {
1146 	s32 ret_val;
1147 	u16 checksum = 0;
1148 	u16 i, nvm_data;
1149 
1150 	DEBUGFUNC("e1000_validate_nvm_checksum_generic");
1151 
1152 	for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
1153 		ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
1154 		if (ret_val) {
1155 			DEBUGOUT("NVM Read Error\n");
1156 			return ret_val;
1157 		}
1158 		checksum += nvm_data;
1159 	}
1160 
1161 	if (checksum != (u16) NVM_SUM) {
1162 		DEBUGOUT("NVM Checksum Invalid\n");
1163 		return -E1000_ERR_NVM;
1164 	}
1165 
1166 	return E1000_SUCCESS;
1167 }
1168 
1169 /**
1170  *  e1000_update_nvm_checksum_generic - Update EEPROM checksum
1171  *  @hw: pointer to the HW structure
1172  *
1173  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
1174  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
1175  *  value to the EEPROM.
1176  **/
1177 s32 e1000_update_nvm_checksum_generic(struct e1000_hw *hw)
1178 {
1179 	s32 ret_val;
1180 	u16 checksum = 0;
1181 	u16 i, nvm_data;
1182 
1183 	DEBUGFUNC("e1000_update_nvm_checksum");
1184 
1185 	for (i = 0; i < NVM_CHECKSUM_REG; i++) {
1186 		ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
1187 		if (ret_val) {
1188 			DEBUGOUT("NVM Read Error while updating checksum.\n");
1189 			return ret_val;
1190 		}
1191 		checksum += nvm_data;
1192 	}
1193 	checksum = (u16) NVM_SUM - checksum;
1194 	ret_val = hw->nvm.ops.write(hw, NVM_CHECKSUM_REG, 1, &checksum);
1195 	if (ret_val)
1196 		DEBUGOUT("NVM Write Error while updating checksum.\n");
1197 
1198 	return ret_val;
1199 }
1200 
1201 /**
1202  *  e1000_reload_nvm_generic - Reloads EEPROM
1203  *  @hw: pointer to the HW structure
1204  *
1205  *  Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the
1206  *  extended control register.
1207  **/
1208 static void e1000_reload_nvm_generic(struct e1000_hw *hw)
1209 {
1210 	u32 ctrl_ext;
1211 
1212 	DEBUGFUNC("e1000_reload_nvm_generic");
1213 
1214 	usec_delay(10);
1215 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1216 	ctrl_ext |= E1000_CTRL_EXT_EE_RST;
1217 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1218 	E1000_WRITE_FLUSH(hw);
1219 }
1220