1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 1999 - 2008 Intel Corporation. */
3 
4 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
5 
6 #include "ixgb_hw.h"
7 #include "ixgb_ee.h"
8 /* Local prototypes */
9 static u16 ixgb_shift_in_bits(struct ixgb_hw *hw);
10 
11 static void ixgb_shift_out_bits(struct ixgb_hw *hw,
12 				u16 data,
13 				u16 count);
14 static void ixgb_standby_eeprom(struct ixgb_hw *hw);
15 
16 static bool ixgb_wait_eeprom_command(struct ixgb_hw *hw);
17 
18 static void ixgb_cleanup_eeprom(struct ixgb_hw *hw);
19 
20 /******************************************************************************
21  * Raises the EEPROM's clock input.
22  *
23  * hw - Struct containing variables accessed by shared code
24  * eecd_reg - EECD's current value
25  *****************************************************************************/
26 static void
ixgb_raise_clock(struct ixgb_hw * hw,u32 * eecd_reg)27 ixgb_raise_clock(struct ixgb_hw *hw,
28 		  u32 *eecd_reg)
29 {
30 	/* Raise the clock input to the EEPROM (by setting the SK bit), and then
31 	 *  wait 50 microseconds.
32 	 */
33 	*eecd_reg = *eecd_reg | IXGB_EECD_SK;
34 	IXGB_WRITE_REG(hw, EECD, *eecd_reg);
35 	IXGB_WRITE_FLUSH(hw);
36 	udelay(50);
37 }
38 
39 /******************************************************************************
40  * Lowers the EEPROM's clock input.
41  *
42  * hw - Struct containing variables accessed by shared code
43  * eecd_reg - EECD's current value
44  *****************************************************************************/
45 static void
ixgb_lower_clock(struct ixgb_hw * hw,u32 * eecd_reg)46 ixgb_lower_clock(struct ixgb_hw *hw,
47 		  u32 *eecd_reg)
48 {
49 	/* Lower the clock input to the EEPROM (by clearing the SK bit), and then
50 	 * wait 50 microseconds.
51 	 */
52 	*eecd_reg = *eecd_reg & ~IXGB_EECD_SK;
53 	IXGB_WRITE_REG(hw, EECD, *eecd_reg);
54 	IXGB_WRITE_FLUSH(hw);
55 	udelay(50);
56 }
57 
58 /******************************************************************************
59  * Shift data bits out to the EEPROM.
60  *
61  * hw - Struct containing variables accessed by shared code
62  * data - data to send to the EEPROM
63  * count - number of bits to shift out
64  *****************************************************************************/
65 static void
ixgb_shift_out_bits(struct ixgb_hw * hw,u16 data,u16 count)66 ixgb_shift_out_bits(struct ixgb_hw *hw,
67 					 u16 data,
68 					 u16 count)
69 {
70 	u32 eecd_reg;
71 	u32 mask;
72 
73 	/* We need to shift "count" bits out to the EEPROM. So, value in the
74 	 * "data" parameter will be shifted out to the EEPROM one bit at a time.
75 	 * In order to do this, "data" must be broken down into bits.
76 	 */
77 	mask = 0x01 << (count - 1);
78 	eecd_reg = IXGB_READ_REG(hw, EECD);
79 	eecd_reg &= ~(IXGB_EECD_DO | IXGB_EECD_DI);
80 	do {
81 		/* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",
82 		 * and then raising and then lowering the clock (the SK bit controls
83 		 * the clock input to the EEPROM).  A "0" is shifted out to the EEPROM
84 		 * by setting "DI" to "0" and then raising and then lowering the clock.
85 		 */
86 		eecd_reg &= ~IXGB_EECD_DI;
87 
88 		if (data & mask)
89 			eecd_reg |= IXGB_EECD_DI;
90 
91 		IXGB_WRITE_REG(hw, EECD, eecd_reg);
92 		IXGB_WRITE_FLUSH(hw);
93 
94 		udelay(50);
95 
96 		ixgb_raise_clock(hw, &eecd_reg);
97 		ixgb_lower_clock(hw, &eecd_reg);
98 
99 		mask = mask >> 1;
100 
101 	} while (mask);
102 
103 	/* We leave the "DI" bit set to "0" when we leave this routine. */
104 	eecd_reg &= ~IXGB_EECD_DI;
105 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
106 }
107 
108 /******************************************************************************
109  * Shift data bits in from the EEPROM
110  *
111  * hw - Struct containing variables accessed by shared code
112  *****************************************************************************/
113 static u16
ixgb_shift_in_bits(struct ixgb_hw * hw)114 ixgb_shift_in_bits(struct ixgb_hw *hw)
115 {
116 	u32 eecd_reg;
117 	u32 i;
118 	u16 data;
119 
120 	/* In order to read a register from the EEPROM, we need to shift 16 bits
121 	 * in from the EEPROM. Bits are "shifted in" by raising the clock input to
122 	 * the EEPROM (setting the SK bit), and then reading the value of the "DO"
123 	 * bit.  During this "shifting in" process the "DI" bit should always be
124 	 * clear..
125 	 */
126 
127 	eecd_reg = IXGB_READ_REG(hw, EECD);
128 
129 	eecd_reg &= ~(IXGB_EECD_DO | IXGB_EECD_DI);
130 	data = 0;
131 
132 	for (i = 0; i < 16; i++) {
133 		data = data << 1;
134 		ixgb_raise_clock(hw, &eecd_reg);
135 
136 		eecd_reg = IXGB_READ_REG(hw, EECD);
137 
138 		eecd_reg &= ~(IXGB_EECD_DI);
139 		if (eecd_reg & IXGB_EECD_DO)
140 			data |= 1;
141 
142 		ixgb_lower_clock(hw, &eecd_reg);
143 	}
144 
145 	return data;
146 }
147 
148 /******************************************************************************
149  * Prepares EEPROM for access
150  *
151  * hw - Struct containing variables accessed by shared code
152  *
153  * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
154  * function should be called before issuing a command to the EEPROM.
155  *****************************************************************************/
156 static void
ixgb_setup_eeprom(struct ixgb_hw * hw)157 ixgb_setup_eeprom(struct ixgb_hw *hw)
158 {
159 	u32 eecd_reg;
160 
161 	eecd_reg = IXGB_READ_REG(hw, EECD);
162 
163 	/*  Clear SK and DI  */
164 	eecd_reg &= ~(IXGB_EECD_SK | IXGB_EECD_DI);
165 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
166 
167 	/*  Set CS  */
168 	eecd_reg |= IXGB_EECD_CS;
169 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
170 }
171 
172 /******************************************************************************
173  * Returns EEPROM to a "standby" state
174  *
175  * hw - Struct containing variables accessed by shared code
176  *****************************************************************************/
177 static void
ixgb_standby_eeprom(struct ixgb_hw * hw)178 ixgb_standby_eeprom(struct ixgb_hw *hw)
179 {
180 	u32 eecd_reg;
181 
182 	eecd_reg = IXGB_READ_REG(hw, EECD);
183 
184 	/*  Deselect EEPROM  */
185 	eecd_reg &= ~(IXGB_EECD_CS | IXGB_EECD_SK);
186 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
187 	IXGB_WRITE_FLUSH(hw);
188 	udelay(50);
189 
190 	/*  Clock high  */
191 	eecd_reg |= IXGB_EECD_SK;
192 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
193 	IXGB_WRITE_FLUSH(hw);
194 	udelay(50);
195 
196 	/*  Select EEPROM  */
197 	eecd_reg |= IXGB_EECD_CS;
198 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
199 	IXGB_WRITE_FLUSH(hw);
200 	udelay(50);
201 
202 	/*  Clock low  */
203 	eecd_reg &= ~IXGB_EECD_SK;
204 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
205 	IXGB_WRITE_FLUSH(hw);
206 	udelay(50);
207 }
208 
209 /******************************************************************************
210  * Raises then lowers the EEPROM's clock pin
211  *
212  * hw - Struct containing variables accessed by shared code
213  *****************************************************************************/
214 static void
ixgb_clock_eeprom(struct ixgb_hw * hw)215 ixgb_clock_eeprom(struct ixgb_hw *hw)
216 {
217 	u32 eecd_reg;
218 
219 	eecd_reg = IXGB_READ_REG(hw, EECD);
220 
221 	/*  Rising edge of clock  */
222 	eecd_reg |= IXGB_EECD_SK;
223 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
224 	IXGB_WRITE_FLUSH(hw);
225 	udelay(50);
226 
227 	/*  Falling edge of clock  */
228 	eecd_reg &= ~IXGB_EECD_SK;
229 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
230 	IXGB_WRITE_FLUSH(hw);
231 	udelay(50);
232 }
233 
234 /******************************************************************************
235  * Terminates a command by lowering the EEPROM's chip select pin
236  *
237  * hw - Struct containing variables accessed by shared code
238  *****************************************************************************/
239 static void
ixgb_cleanup_eeprom(struct ixgb_hw * hw)240 ixgb_cleanup_eeprom(struct ixgb_hw *hw)
241 {
242 	u32 eecd_reg;
243 
244 	eecd_reg = IXGB_READ_REG(hw, EECD);
245 
246 	eecd_reg &= ~(IXGB_EECD_CS | IXGB_EECD_DI);
247 
248 	IXGB_WRITE_REG(hw, EECD, eecd_reg);
249 
250 	ixgb_clock_eeprom(hw);
251 }
252 
253 /******************************************************************************
254  * Waits for the EEPROM to finish the current command.
255  *
256  * hw - Struct containing variables accessed by shared code
257  *
258  * The command is done when the EEPROM's data out pin goes high.
259  *
260  * Returns:
261  *      true: EEPROM data pin is high before timeout.
262  *      false:  Time expired.
263  *****************************************************************************/
264 static bool
ixgb_wait_eeprom_command(struct ixgb_hw * hw)265 ixgb_wait_eeprom_command(struct ixgb_hw *hw)
266 {
267 	u32 eecd_reg;
268 	u32 i;
269 
270 	/* Toggle the CS line.  This in effect tells to EEPROM to actually execute
271 	 * the command in question.
272 	 */
273 	ixgb_standby_eeprom(hw);
274 
275 	/* Now read DO repeatedly until is high (equal to '1').  The EEPROM will
276 	 * signal that the command has been completed by raising the DO signal.
277 	 * If DO does not go high in 10 milliseconds, then error out.
278 	 */
279 	for (i = 0; i < 200; i++) {
280 		eecd_reg = IXGB_READ_REG(hw, EECD);
281 
282 		if (eecd_reg & IXGB_EECD_DO)
283 			return true;
284 
285 		udelay(50);
286 	}
287 	ASSERT(0);
288 	return false;
289 }
290 
291 /******************************************************************************
292  * Verifies that the EEPROM has a valid checksum
293  *
294  * hw - Struct containing variables accessed by shared code
295  *
296  * Reads the first 64 16 bit words of the EEPROM and sums the values read.
297  * If the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
298  * valid.
299  *
300  * Returns:
301  *  true: Checksum is valid
302  *  false: Checksum is not valid.
303  *****************************************************************************/
304 bool
ixgb_validate_eeprom_checksum(struct ixgb_hw * hw)305 ixgb_validate_eeprom_checksum(struct ixgb_hw *hw)
306 {
307 	u16 checksum = 0;
308 	u16 i;
309 
310 	for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++)
311 		checksum += ixgb_read_eeprom(hw, i);
312 
313 	if (checksum == (u16) EEPROM_SUM)
314 		return true;
315 	else
316 		return false;
317 }
318 
319 /******************************************************************************
320  * Calculates the EEPROM checksum and writes it to the EEPROM
321  *
322  * hw - Struct containing variables accessed by shared code
323  *
324  * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
325  * Writes the difference to word offset 63 of the EEPROM.
326  *****************************************************************************/
327 void
ixgb_update_eeprom_checksum(struct ixgb_hw * hw)328 ixgb_update_eeprom_checksum(struct ixgb_hw *hw)
329 {
330 	u16 checksum = 0;
331 	u16 i;
332 
333 	for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
334 		checksum += ixgb_read_eeprom(hw, i);
335 
336 	checksum = (u16) EEPROM_SUM - checksum;
337 
338 	ixgb_write_eeprom(hw, EEPROM_CHECKSUM_REG, checksum);
339 }
340 
341 /******************************************************************************
342  * Writes a 16 bit word to a given offset in the EEPROM.
343  *
344  * hw - Struct containing variables accessed by shared code
345  * reg - offset within the EEPROM to be written to
346  * data - 16 bit word to be written to the EEPROM
347  *
348  * If ixgb_update_eeprom_checksum is not called after this function, the
349  * EEPROM will most likely contain an invalid checksum.
350  *
351  *****************************************************************************/
352 void
ixgb_write_eeprom(struct ixgb_hw * hw,u16 offset,u16 data)353 ixgb_write_eeprom(struct ixgb_hw *hw, u16 offset, u16 data)
354 {
355 	struct ixgb_ee_map_type *ee_map = (struct ixgb_ee_map_type *)hw->eeprom;
356 
357 	/* Prepare the EEPROM for writing */
358 	ixgb_setup_eeprom(hw);
359 
360 	/*  Send the 9-bit EWEN (write enable) command to the EEPROM (5-bit opcode
361 	 *  plus 4-bit dummy).  This puts the EEPROM into write/erase mode.
362 	 */
363 	ixgb_shift_out_bits(hw, EEPROM_EWEN_OPCODE, 5);
364 	ixgb_shift_out_bits(hw, 0, 4);
365 
366 	/*  Prepare the EEPROM  */
367 	ixgb_standby_eeprom(hw);
368 
369 	/*  Send the Write command (3-bit opcode + 6-bit addr)  */
370 	ixgb_shift_out_bits(hw, EEPROM_WRITE_OPCODE, 3);
371 	ixgb_shift_out_bits(hw, offset, 6);
372 
373 	/*  Send the data  */
374 	ixgb_shift_out_bits(hw, data, 16);
375 
376 	ixgb_wait_eeprom_command(hw);
377 
378 	/*  Recover from write  */
379 	ixgb_standby_eeprom(hw);
380 
381 	/* Send the 9-bit EWDS (write disable) command to the EEPROM (5-bit
382 	 * opcode plus 4-bit dummy).  This takes the EEPROM out of write/erase
383 	 * mode.
384 	 */
385 	ixgb_shift_out_bits(hw, EEPROM_EWDS_OPCODE, 5);
386 	ixgb_shift_out_bits(hw, 0, 4);
387 
388 	/*  Done with writing  */
389 	ixgb_cleanup_eeprom(hw);
390 
391 	/* clear the init_ctrl_reg_1 to signify that the cache is invalidated */
392 	ee_map->init_ctrl_reg_1 = cpu_to_le16(EEPROM_ICW1_SIGNATURE_CLEAR);
393 }
394 
395 /******************************************************************************
396  * Reads a 16 bit word from the EEPROM.
397  *
398  * hw - Struct containing variables accessed by shared code
399  * offset - offset of 16 bit word in the EEPROM to read
400  *
401  * Returns:
402  *  The 16-bit value read from the eeprom
403  *****************************************************************************/
404 u16
ixgb_read_eeprom(struct ixgb_hw * hw,u16 offset)405 ixgb_read_eeprom(struct ixgb_hw *hw,
406 		  u16 offset)
407 {
408 	u16 data;
409 
410 	/*  Prepare the EEPROM for reading  */
411 	ixgb_setup_eeprom(hw);
412 
413 	/*  Send the READ command (opcode + addr)  */
414 	ixgb_shift_out_bits(hw, EEPROM_READ_OPCODE, 3);
415 	/*
416 	 * We have a 64 word EEPROM, there are 6 address bits
417 	 */
418 	ixgb_shift_out_bits(hw, offset, 6);
419 
420 	/*  Read the data  */
421 	data = ixgb_shift_in_bits(hw);
422 
423 	/*  End this read operation  */
424 	ixgb_standby_eeprom(hw);
425 
426 	return data;
427 }
428 
429 /******************************************************************************
430  * Reads eeprom and stores data in shared structure.
431  * Validates eeprom checksum and eeprom signature.
432  *
433  * hw - Struct containing variables accessed by shared code
434  *
435  * Returns:
436  *      true: if eeprom read is successful
437  *      false: otherwise.
438  *****************************************************************************/
439 bool
ixgb_get_eeprom_data(struct ixgb_hw * hw)440 ixgb_get_eeprom_data(struct ixgb_hw *hw)
441 {
442 	u16 i;
443 	u16 checksum = 0;
444 	struct ixgb_ee_map_type *ee_map;
445 
446 	ENTER();
447 
448 	ee_map = (struct ixgb_ee_map_type *)hw->eeprom;
449 
450 	pr_debug("Reading eeprom data\n");
451 	for (i = 0; i < IXGB_EEPROM_SIZE ; i++) {
452 		u16 ee_data;
453 		ee_data = ixgb_read_eeprom(hw, i);
454 		checksum += ee_data;
455 		hw->eeprom[i] = cpu_to_le16(ee_data);
456 	}
457 
458 	if (checksum != (u16) EEPROM_SUM) {
459 		pr_debug("Checksum invalid\n");
460 		/* clear the init_ctrl_reg_1 to signify that the cache is
461 		 * invalidated */
462 		ee_map->init_ctrl_reg_1 = cpu_to_le16(EEPROM_ICW1_SIGNATURE_CLEAR);
463 		return false;
464 	}
465 
466 	if ((ee_map->init_ctrl_reg_1 & cpu_to_le16(EEPROM_ICW1_SIGNATURE_MASK))
467 		 != cpu_to_le16(EEPROM_ICW1_SIGNATURE_VALID)) {
468 		pr_debug("Signature invalid\n");
469 		return false;
470 	}
471 
472 	return true;
473 }
474 
475 /******************************************************************************
476  * Local function to check if the eeprom signature is good
477  * If the eeprom signature is good, calls ixgb)get_eeprom_data.
478  *
479  * hw - Struct containing variables accessed by shared code
480  *
481  * Returns:
482  *      true: eeprom signature was good and the eeprom read was successful
483  *      false: otherwise.
484  ******************************************************************************/
485 static bool
ixgb_check_and_get_eeprom_data(struct ixgb_hw * hw)486 ixgb_check_and_get_eeprom_data (struct ixgb_hw* hw)
487 {
488 	struct ixgb_ee_map_type *ee_map = (struct ixgb_ee_map_type *)hw->eeprom;
489 
490 	if ((ee_map->init_ctrl_reg_1 & cpu_to_le16(EEPROM_ICW1_SIGNATURE_MASK))
491 	    == cpu_to_le16(EEPROM_ICW1_SIGNATURE_VALID)) {
492 		return true;
493 	} else {
494 		return ixgb_get_eeprom_data(hw);
495 	}
496 }
497 
498 /******************************************************************************
499  * return a word from the eeprom
500  *
501  * hw - Struct containing variables accessed by shared code
502  * index - Offset of eeprom word
503  *
504  * Returns:
505  *          Word at indexed offset in eeprom, if valid, 0 otherwise.
506  ******************************************************************************/
507 __le16
ixgb_get_eeprom_word(struct ixgb_hw * hw,u16 index)508 ixgb_get_eeprom_word(struct ixgb_hw *hw, u16 index)
509 {
510 
511 	if (index < IXGB_EEPROM_SIZE && ixgb_check_and_get_eeprom_data(hw))
512 		return hw->eeprom[index];
513 
514 	return 0;
515 }
516 
517 /******************************************************************************
518  * return the mac address from EEPROM
519  *
520  * hw       - Struct containing variables accessed by shared code
521  * mac_addr - Ethernet Address if EEPROM contents are valid, 0 otherwise
522  *
523  * Returns: None.
524  ******************************************************************************/
525 void
ixgb_get_ee_mac_addr(struct ixgb_hw * hw,u8 * mac_addr)526 ixgb_get_ee_mac_addr(struct ixgb_hw *hw,
527 			u8 *mac_addr)
528 {
529 	int i;
530 	struct ixgb_ee_map_type *ee_map = (struct ixgb_ee_map_type *)hw->eeprom;
531 
532 	ENTER();
533 
534 	if (ixgb_check_and_get_eeprom_data(hw)) {
535 		for (i = 0; i < ETH_ALEN; i++) {
536 			mac_addr[i] = ee_map->mac_addr[i];
537 		}
538 		pr_debug("eeprom mac address = %pM\n", mac_addr);
539 	}
540 }
541 
542 
543 /******************************************************************************
544  * return the Printed Board Assembly number from EEPROM
545  *
546  * hw - Struct containing variables accessed by shared code
547  *
548  * Returns:
549  *          PBA number if EEPROM contents are valid, 0 otherwise
550  ******************************************************************************/
551 u32
ixgb_get_ee_pba_number(struct ixgb_hw * hw)552 ixgb_get_ee_pba_number(struct ixgb_hw *hw)
553 {
554 	if (ixgb_check_and_get_eeprom_data(hw))
555 		return le16_to_cpu(hw->eeprom[EEPROM_PBA_1_2_REG])
556 			| (le16_to_cpu(hw->eeprom[EEPROM_PBA_3_4_REG])<<16);
557 
558 	return 0;
559 }
560 
561 
562 /******************************************************************************
563  * return the Device Id from EEPROM
564  *
565  * hw - Struct containing variables accessed by shared code
566  *
567  * Returns:
568  *          Device Id if EEPROM contents are valid, 0 otherwise
569  ******************************************************************************/
570 u16
ixgb_get_ee_device_id(struct ixgb_hw * hw)571 ixgb_get_ee_device_id(struct ixgb_hw *hw)
572 {
573 	struct ixgb_ee_map_type *ee_map = (struct ixgb_ee_map_type *)hw->eeprom;
574 
575 	if (ixgb_check_and_get_eeprom_data(hw))
576 		return le16_to_cpu(ee_map->device_id);
577 
578 	return 0;
579 }
580 
581