1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59#include "e1000.h"
60
61#define ICH_FLASH_GFPREG 0x0000
62#define ICH_FLASH_HSFSTS 0x0004
63#define ICH_FLASH_HSFCTL 0x0006
64#define ICH_FLASH_FADDR 0x0008
65#define ICH_FLASH_FDATA0 0x0010
66#define ICH_FLASH_PR0 0x0074
67
68#define ICH_FLASH_READ_COMMAND_TIMEOUT 500
69#define ICH_FLASH_WRITE_COMMAND_TIMEOUT 500
70#define ICH_FLASH_ERASE_COMMAND_TIMEOUT 3000000
71#define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
72#define ICH_FLASH_CYCLE_REPEAT_COUNT 10
73
74#define ICH_CYCLE_READ 0
75#define ICH_CYCLE_WRITE 2
76#define ICH_CYCLE_ERASE 3
77
78#define FLASH_GFPREG_BASE_MASK 0x1FFF
79#define FLASH_SECTOR_ADDR_SHIFT 12
80
81#define ICH_FLASH_SEG_SIZE_256 256
82#define ICH_FLASH_SEG_SIZE_4K 4096
83#define ICH_FLASH_SEG_SIZE_8K 8192
84#define ICH_FLASH_SEG_SIZE_64K 65536
85
86
87#define E1000_ICH_FWSM_RSPCIPHY 0x00000040
88
89#define E1000_ICH_FWSM_FW_VALID 0x00008000
90
91#define E1000_ICH_MNG_IAMT_MODE 0x2
92
93#define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \
94 (ID_LED_DEF1_OFF2 << 8) | \
95 (ID_LED_DEF1_ON2 << 4) | \
96 (ID_LED_DEF1_DEF2))
97
98#define E1000_ICH_NVM_SIG_WORD 0x13
99#define E1000_ICH_NVM_SIG_MASK 0xC000
100#define E1000_ICH_NVM_VALID_SIG_MASK 0xC0
101#define E1000_ICH_NVM_SIG_VALUE 0x80
102
103#define E1000_ICH8_LAN_INIT_TIMEOUT 1500
104
105#define E1000_FEXTNVM_SW_CONFIG 1
106#define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27)
107
108#define E1000_FEXTNVM4_BEACON_DURATION_MASK 0x7
109#define E1000_FEXTNVM4_BEACON_DURATION_8USEC 0x7
110#define E1000_FEXTNVM4_BEACON_DURATION_16USEC 0x3
111
112#define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL
113
114#define E1000_ICH_RAR_ENTRIES 7
115
116#define PHY_PAGE_SHIFT 5
117#define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \
118 ((reg) & MAX_PHY_REG_ADDRESS))
119#define IGP3_KMRN_DIAG PHY_REG(770, 19)
120#define IGP3_VR_CTRL PHY_REG(776, 18)
121
122#define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002
123#define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300
124#define IGP3_VR_CTRL_MODE_SHUTDOWN 0x0200
125
126#define HV_LED_CONFIG PHY_REG(768, 30)
127
128#define SW_FLAG_TIMEOUT 1000
129
130
131#define HV_SMB_ADDR PHY_REG(768, 26)
132#define HV_SMB_ADDR_MASK 0x007F
133#define HV_SMB_ADDR_PEC_EN 0x0200
134#define HV_SMB_ADDR_VALID 0x0080
135
136
137#define HV_PM_CTRL PHY_REG(770, 17)
138
139
140#define I82579_LPI_CTRL PHY_REG(772, 20)
141#define I82579_LPI_CTRL_ENABLE_MASK 0x6000
142
143
144#define E1000_STRAP 0x0000C
145#define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000
146#define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17
147
148
149#define HV_OEM_BITS PHY_REG(768, 25)
150#define HV_OEM_BITS_LPLU 0x0004
151#define HV_OEM_BITS_GBE_DIS 0x0040
152#define HV_OEM_BITS_RESTART_AN 0x0400
153
154#define E1000_NVM_K1_CONFIG 0x1B
155#define E1000_NVM_K1_ENABLE 0x1
156
157
158#define HV_KMRN_MODE_CTRL PHY_REG(769, 16)
159#define HV_KMRN_MDIO_SLOW 0x0400
160
161
162
163union ich8_hws_flash_status {
164 struct ich8_hsfsts {
165 u16 flcdone :1;
166 u16 flcerr :1;
167 u16 dael :1;
168 u16 berasesz :2;
169 u16 flcinprog :1;
170 u16 reserved1 :2;
171 u16 reserved2 :6;
172 u16 fldesvalid :1;
173 u16 flockdn :1;
174 } hsf_status;
175 u16 regval;
176};
177
178
179
180union ich8_hws_flash_ctrl {
181 struct ich8_hsflctl {
182 u16 flcgo :1;
183 u16 flcycle :2;
184 u16 reserved :5;
185 u16 fldbcount :2;
186 u16 flockdn :6;
187 } hsf_ctrl;
188 u16 regval;
189};
190
191
192union ich8_hws_flash_regacc {
193 struct ich8_flracc {
194 u32 grra :8;
195 u32 grwa :8;
196 u32 gmrag :8;
197 u32 gmwag :8;
198 } hsf_flregacc;
199 u16 regval;
200};
201
202
203union ich8_flash_protected_range {
204 struct ich8_pr {
205 u32 base:13;
206 u32 reserved1:2;
207 u32 rpe:1;
208 u32 limit:13;
209 u32 reserved2:2;
210 u32 wpe:1;
211 } range;
212 u32 regval;
213};
214
215static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw);
216static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw);
217static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw);
218static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank);
219static s32 e1000_retry_write_flash_byte_ich8lan(struct e1000_hw *hw,
220 u32 offset, u8 byte);
221static s32 e1000_read_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
222 u8 *data);
223static s32 e1000_read_flash_word_ich8lan(struct e1000_hw *hw, u32 offset,
224 u16 *data);
225static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
226 u8 size, u16 *data);
227static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw);
228static s32 e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw);
229static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw);
230static s32 e1000_cleanup_led_ich8lan(struct e1000_hw *hw);
231static s32 e1000_led_on_ich8lan(struct e1000_hw *hw);
232static s32 e1000_led_off_ich8lan(struct e1000_hw *hw);
233static s32 e1000_id_led_init_pchlan(struct e1000_hw *hw);
234static s32 e1000_setup_led_pchlan(struct e1000_hw *hw);
235static s32 e1000_cleanup_led_pchlan(struct e1000_hw *hw);
236static s32 e1000_led_on_pchlan(struct e1000_hw *hw);
237static s32 e1000_led_off_pchlan(struct e1000_hw *hw);
238static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active);
239static void e1000_power_down_phy_copper_ich8lan(struct e1000_hw *hw);
240static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
241static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
242static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw);
243static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw);
244static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw);
245static s32 e1000_k1_workaround_lv(struct e1000_hw *hw);
246static void e1000_gate_hw_phy_config_ich8lan(struct e1000_hw *hw, bool gate);
247
248static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
249{
250 return readw(hw->flash_address + reg);
251}
252
253static inline u32 __er32flash(struct e1000_hw *hw, unsigned long reg)
254{
255 return readl(hw->flash_address + reg);
256}
257
258static inline void __ew16flash(struct e1000_hw *hw, unsigned long reg, u16 val)
259{
260 writew(val, hw->flash_address + reg);
261}
262
263static inline void __ew32flash(struct e1000_hw *hw, unsigned long reg, u32 val)
264{
265 writel(val, hw->flash_address + reg);
266}
267
268#define er16flash(reg) __er16flash(hw, (reg))
269#define er32flash(reg) __er32flash(hw, (reg))
270#define ew16flash(reg,val) __ew16flash(hw, (reg), (val))
271#define ew32flash(reg,val) __ew32flash(hw, (reg), (val))
272
273
274
275
276
277
278
279static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
280{
281 struct e1000_phy_info *phy = &hw->phy;
282 u32 ctrl, fwsm;
283 s32 ret_val = 0;
284
285 phy->addr = 1;
286 phy->reset_delay_us = 100;
287
288 phy->ops.read_reg = e1000_read_phy_reg_hv;
289 phy->ops.read_reg_locked = e1000_read_phy_reg_hv_locked;
290 phy->ops.set_d0_lplu_state = e1000_set_lplu_state_pchlan;
291 phy->ops.set_d3_lplu_state = e1000_set_lplu_state_pchlan;
292 phy->ops.write_reg = e1000_write_phy_reg_hv;
293 phy->ops.write_reg_locked = e1000_write_phy_reg_hv_locked;
294 phy->ops.power_up = e1000_power_up_phy_copper;
295 phy->ops.power_down = e1000_power_down_phy_copper_ich8lan;
296 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
297
298
299
300
301
302
303
304 fwsm = er32(FWSM);
305 if (!(fwsm & E1000_ICH_FWSM_FW_VALID)) {
306 ctrl = er32(CTRL);
307 ctrl |= E1000_CTRL_LANPHYPC_OVERRIDE;
308 ctrl &= ~E1000_CTRL_LANPHYPC_VALUE;
309 ew32(CTRL, ctrl);
310 udelay(10);
311 ctrl &= ~E1000_CTRL_LANPHYPC_OVERRIDE;
312 ew32(CTRL, ctrl);
313 msleep(50);
314
315
316
317
318
319 if (hw->mac.type == e1000_pch2lan)
320 e1000_gate_hw_phy_config_ich8lan(hw, true);
321 }
322
323
324
325
326
327
328
329 ret_val = e1000e_phy_hw_reset_generic(hw);
330 if (ret_val)
331 goto out;
332
333
334 if ((hw->mac.type == e1000_pch2lan) &&
335 !(fwsm & E1000_ICH_FWSM_FW_VALID)) {
336 msleep(10);
337 e1000_gate_hw_phy_config_ich8lan(hw, false);
338 }
339
340 phy->id = e1000_phy_unknown;
341 switch (hw->mac.type) {
342 default:
343 ret_val = e1000e_get_phy_id(hw);
344 if (ret_val)
345 goto out;
346 if ((phy->id != 0) && (phy->id != PHY_REVISION_MASK))
347 break;
348
349 case e1000_pch2lan:
350
351
352
353
354 ret_val = e1000_set_mdio_slow_mode_hv(hw);
355 if (ret_val)
356 goto out;
357 ret_val = e1000e_get_phy_id(hw);
358 if (ret_val)
359 goto out;
360 break;
361 }
362 phy->type = e1000e_get_phy_type_from_id(phy->id);
363
364 switch (phy->type) {
365 case e1000_phy_82577:
366 case e1000_phy_82579:
367 phy->ops.check_polarity = e1000_check_polarity_82577;
368 phy->ops.force_speed_duplex =
369 e1000_phy_force_speed_duplex_82577;
370 phy->ops.get_cable_length = e1000_get_cable_length_82577;
371 phy->ops.get_info = e1000_get_phy_info_82577;
372 phy->ops.commit = e1000e_phy_sw_reset;
373 break;
374 case e1000_phy_82578:
375 phy->ops.check_polarity = e1000_check_polarity_m88;
376 phy->ops.force_speed_duplex = e1000e_phy_force_speed_duplex_m88;
377 phy->ops.get_cable_length = e1000e_get_cable_length_m88;
378 phy->ops.get_info = e1000e_get_phy_info_m88;
379 break;
380 default:
381 ret_val = -E1000_ERR_PHY;
382 break;
383 }
384
385out:
386 return ret_val;
387}
388
389
390
391
392
393
394
395static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
396{
397 struct e1000_phy_info *phy = &hw->phy;
398 s32 ret_val;
399 u16 i = 0;
400
401 phy->addr = 1;
402 phy->reset_delay_us = 100;
403
404 phy->ops.power_up = e1000_power_up_phy_copper;
405 phy->ops.power_down = e1000_power_down_phy_copper_ich8lan;
406
407
408
409
410
411 ret_val = e1000e_determine_phy_address(hw);
412 if (ret_val) {
413 phy->ops.write_reg = e1000e_write_phy_reg_bm;
414 phy->ops.read_reg = e1000e_read_phy_reg_bm;
415 ret_val = e1000e_determine_phy_address(hw);
416 if (ret_val) {
417 e_dbg("Cannot determine PHY addr. Erroring out\n");
418 return ret_val;
419 }
420 }
421
422 phy->id = 0;
423 while ((e1000_phy_unknown == e1000e_get_phy_type_from_id(phy->id)) &&
424 (i++ < 100)) {
425 msleep(1);
426 ret_val = e1000e_get_phy_id(hw);
427 if (ret_val)
428 return ret_val;
429 }
430
431
432 switch (phy->id) {
433 case IGP03E1000_E_PHY_ID:
434 phy->type = e1000_phy_igp_3;
435 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
436 phy->ops.read_reg_locked = e1000e_read_phy_reg_igp_locked;
437 phy->ops.write_reg_locked = e1000e_write_phy_reg_igp_locked;
438 phy->ops.get_info = e1000e_get_phy_info_igp;
439 phy->ops.check_polarity = e1000_check_polarity_igp;
440 phy->ops.force_speed_duplex = e1000e_phy_force_speed_duplex_igp;
441 break;
442 case IFE_E_PHY_ID:
443 case IFE_PLUS_E_PHY_ID:
444 case IFE_C_E_PHY_ID:
445 phy->type = e1000_phy_ife;
446 phy->autoneg_mask = E1000_ALL_NOT_GIG;
447 phy->ops.get_info = e1000_get_phy_info_ife;
448 phy->ops.check_polarity = e1000_check_polarity_ife;
449 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_ife;
450 break;
451 case BME1000_E_PHY_ID:
452 phy->type = e1000_phy_bm;
453 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
454 phy->ops.read_reg = e1000e_read_phy_reg_bm;
455 phy->ops.write_reg = e1000e_write_phy_reg_bm;
456 phy->ops.commit = e1000e_phy_sw_reset;
457 phy->ops.get_info = e1000e_get_phy_info_m88;
458 phy->ops.check_polarity = e1000_check_polarity_m88;
459 phy->ops.force_speed_duplex = e1000e_phy_force_speed_duplex_m88;
460 break;
461 default:
462 return -E1000_ERR_PHY;
463 break;
464 }
465
466 return 0;
467}
468
469
470
471
472
473
474
475
476static s32 e1000_init_nvm_params_ich8lan(struct e1000_hw *hw)
477{
478 struct e1000_nvm_info *nvm = &hw->nvm;
479 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
480 u32 gfpreg, sector_base_addr, sector_end_addr;
481 u16 i;
482
483
484 if (!hw->flash_address) {
485 e_dbg("ERROR: Flash registers not mapped\n");
486 return -E1000_ERR_CONFIG;
487 }
488
489 nvm->type = e1000_nvm_flash_sw;
490
491 gfpreg = er32flash(ICH_FLASH_GFPREG);
492
493
494
495
496
497
498 sector_base_addr = gfpreg & FLASH_GFPREG_BASE_MASK;
499 sector_end_addr = ((gfpreg >> 16) & FLASH_GFPREG_BASE_MASK) + 1;
500
501
502 nvm->flash_base_addr = sector_base_addr << FLASH_SECTOR_ADDR_SHIFT;
503
504
505
506
507
508 nvm->flash_bank_size = (sector_end_addr - sector_base_addr)
509 << FLASH_SECTOR_ADDR_SHIFT;
510 nvm->flash_bank_size /= 2;
511
512 nvm->flash_bank_size /= sizeof(u16);
513
514 nvm->word_size = E1000_ICH8_SHADOW_RAM_WORDS;
515
516
517 for (i = 0; i < nvm->word_size; i++) {
518 dev_spec->shadow_ram[i].modified = false;
519 dev_spec->shadow_ram[i].value = 0xFFFF;
520 }
521
522 return 0;
523}
524
525
526
527
528
529
530
531
532static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
533{
534 struct e1000_hw *hw = &adapter->hw;
535 struct e1000_mac_info *mac = &hw->mac;
536
537
538 hw->phy.media_type = e1000_media_type_copper;
539
540
541 mac->mta_reg_count = 32;
542
543 mac->rar_entry_count = E1000_ICH_RAR_ENTRIES;
544 if (mac->type == e1000_ich8lan)
545 mac->rar_entry_count--;
546
547 mac->has_fwsm = true;
548
549 mac->arc_subsystem_valid = false;
550
551 mac->adaptive_ifs = true;
552
553
554 switch (mac->type) {
555 case e1000_ich8lan:
556 case e1000_ich9lan:
557 case e1000_ich10lan:
558
559 mac->ops.check_mng_mode = e1000_check_mng_mode_ich8lan;
560
561 mac->ops.id_led_init = e1000e_id_led_init;
562
563 mac->ops.setup_led = e1000e_setup_led_generic;
564
565 mac->ops.cleanup_led = e1000_cleanup_led_ich8lan;
566
567 mac->ops.led_on = e1000_led_on_ich8lan;
568 mac->ops.led_off = e1000_led_off_ich8lan;
569 break;
570 case e1000_pchlan:
571 case e1000_pch2lan:
572
573 mac->ops.check_mng_mode = e1000_check_mng_mode_pchlan;
574
575 mac->ops.id_led_init = e1000_id_led_init_pchlan;
576
577 mac->ops.setup_led = e1000_setup_led_pchlan;
578
579 mac->ops.cleanup_led = e1000_cleanup_led_pchlan;
580
581 mac->ops.led_on = e1000_led_on_pchlan;
582 mac->ops.led_off = e1000_led_off_pchlan;
583 break;
584 default:
585 break;
586 }
587
588
589 if (mac->type == e1000_ich8lan)
590 e1000e_set_kmrn_lock_loss_workaround_ich8lan(hw, true);
591
592
593 if ((mac->type == e1000_pch2lan) &&
594 (er32(FWSM) & E1000_ICH_FWSM_FW_VALID))
595 e1000_gate_hw_phy_config_ich8lan(hw, true);
596
597 return 0;
598}
599
600
601
602
603
604
605
606
607static s32 e1000_set_eee_pchlan(struct e1000_hw *hw)
608{
609 s32 ret_val = 0;
610 u16 phy_reg;
611
612 if (hw->phy.type != e1000_phy_82579)
613 goto out;
614
615 ret_val = e1e_rphy(hw, I82579_LPI_CTRL, &phy_reg);
616 if (ret_val)
617 goto out;
618
619 if (hw->dev_spec.ich8lan.eee_disable)
620 phy_reg &= ~I82579_LPI_CTRL_ENABLE_MASK;
621 else
622 phy_reg |= I82579_LPI_CTRL_ENABLE_MASK;
623
624 ret_val = e1e_wphy(hw, I82579_LPI_CTRL, phy_reg);
625out:
626 return ret_val;
627}
628
629
630
631
632
633
634
635
636
637static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
638{
639 struct e1000_mac_info *mac = &hw->mac;
640 s32 ret_val;
641 bool link;
642
643
644
645
646
647
648
649 if (!mac->get_link_status) {
650 ret_val = 0;
651 goto out;
652 }
653
654
655
656
657
658
659 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
660 if (ret_val)
661 goto out;
662
663 if (hw->mac.type == e1000_pchlan) {
664 ret_val = e1000_k1_gig_workaround_hv(hw, link);
665 if (ret_val)
666 goto out;
667 }
668
669 if (!link)
670 goto out;
671
672 mac->get_link_status = false;
673
674 if (hw->phy.type == e1000_phy_82578) {
675 ret_val = e1000_link_stall_workaround_hv(hw);
676 if (ret_val)
677 goto out;
678 }
679
680 if (hw->mac.type == e1000_pch2lan) {
681 ret_val = e1000_k1_workaround_lv(hw);
682 if (ret_val)
683 goto out;
684 }
685
686
687
688
689
690 e1000e_check_downshift(hw);
691
692
693 ret_val = e1000_set_eee_pchlan(hw);
694 if (ret_val)
695 goto out;
696
697
698
699
700
701 if (!mac->autoneg) {
702 ret_val = -E1000_ERR_CONFIG;
703 goto out;
704 }
705
706
707
708
709
710
711 e1000e_config_collision_dist(hw);
712
713
714
715
716
717
718
719 ret_val = e1000e_config_fc_after_link_up(hw);
720 if (ret_val)
721 e_dbg("Error configuring flow control\n");
722
723out:
724 return ret_val;
725}
726
727static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
728{
729 struct e1000_hw *hw = &adapter->hw;
730 s32 rc;
731
732 rc = e1000_init_mac_params_ich8lan(adapter);
733 if (rc)
734 return rc;
735
736 rc = e1000_init_nvm_params_ich8lan(hw);
737 if (rc)
738 return rc;
739
740 switch (hw->mac.type) {
741 case e1000_ich8lan:
742 case e1000_ich9lan:
743 case e1000_ich10lan:
744 rc = e1000_init_phy_params_ich8lan(hw);
745 break;
746 case e1000_pchlan:
747 case e1000_pch2lan:
748 rc = e1000_init_phy_params_pchlan(hw);
749 break;
750 default:
751 break;
752 }
753 if (rc)
754 return rc;
755
756 if (adapter->hw.phy.type == e1000_phy_ife) {
757 adapter->flags &= ~FLAG_HAS_JUMBO_FRAMES;
758 adapter->max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN;
759 }
760
761 if ((adapter->hw.mac.type == e1000_ich8lan) &&
762 (adapter->hw.phy.type == e1000_phy_igp_3))
763 adapter->flags |= FLAG_LSC_GIG_SPEED_DROP;
764
765
766 if (adapter->flags2 & FLAG2_HAS_EEE)
767 adapter->hw.dev_spec.ich8lan.eee_disable = true;
768
769 return 0;
770}
771
772static DEFINE_MUTEX(nvm_mutex);
773
774
775
776
777
778
779
780static s32 e1000_acquire_nvm_ich8lan(struct e1000_hw *hw)
781{
782 mutex_lock(&nvm_mutex);
783
784 return 0;
785}
786
787
788
789
790
791
792
793static void e1000_release_nvm_ich8lan(struct e1000_hw *hw)
794{
795 mutex_unlock(&nvm_mutex);
796}
797
798static DEFINE_MUTEX(swflag_mutex);
799
800
801
802
803
804
805
806
807static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
808{
809 u32 extcnf_ctrl, timeout = PHY_CFG_TIMEOUT;
810 s32 ret_val = 0;
811
812 mutex_lock(&swflag_mutex);
813
814 while (timeout) {
815 extcnf_ctrl = er32(EXTCNF_CTRL);
816 if (!(extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG))
817 break;
818
819 mdelay(1);
820 timeout--;
821 }
822
823 if (!timeout) {
824 e_dbg("SW/FW/HW has locked the resource for too long.\n");
825 ret_val = -E1000_ERR_CONFIG;
826 goto out;
827 }
828
829 timeout = SW_FLAG_TIMEOUT;
830
831 extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
832 ew32(EXTCNF_CTRL, extcnf_ctrl);
833
834 while (timeout) {
835 extcnf_ctrl = er32(EXTCNF_CTRL);
836 if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
837 break;
838
839 mdelay(1);
840 timeout--;
841 }
842
843 if (!timeout) {
844 e_dbg("Failed to acquire the semaphore.\n");
845 extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
846 ew32(EXTCNF_CTRL, extcnf_ctrl);
847 ret_val = -E1000_ERR_CONFIG;
848 goto out;
849 }
850
851out:
852 if (ret_val)
853 mutex_unlock(&swflag_mutex);
854
855 return ret_val;
856}
857
858
859
860
861
862
863
864
865static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
866{
867 u32 extcnf_ctrl;
868
869 extcnf_ctrl = er32(EXTCNF_CTRL);
870 extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
871 ew32(EXTCNF_CTRL, extcnf_ctrl);
872
873 mutex_unlock(&swflag_mutex);
874}
875
876
877
878
879
880
881
882
883
884static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw)
885{
886 u32 fwsm;
887
888 fwsm = er32(FWSM);
889 return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
890 ((fwsm & E1000_FWSM_MODE_MASK) ==
891 (E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
892}
893
894
895
896
897
898
899
900
901
902static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw)
903{
904 u32 fwsm;
905
906 fwsm = er32(FWSM);
907 return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
908 (fwsm & (E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
909}
910
911
912
913
914
915
916
917
918
919static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw)
920{
921 u32 fwsm;
922
923 fwsm = er32(FWSM);
924
925 return (fwsm & E1000_ICH_FWSM_RSPCIPHY) ? 0 : E1000_BLK_PHY_RESET;
926}
927
928
929
930
931
932
933
934
935static s32 e1000_write_smbus_addr(struct e1000_hw *hw)
936{
937 u16 phy_data;
938 u32 strap = er32(STRAP);
939 s32 ret_val = 0;
940
941 strap &= E1000_STRAP_SMBUS_ADDRESS_MASK;
942
943 ret_val = e1000_read_phy_reg_hv_locked(hw, HV_SMB_ADDR, &phy_data);
944 if (ret_val)
945 goto out;
946
947 phy_data &= ~HV_SMB_ADDR_MASK;
948 phy_data |= (strap >> E1000_STRAP_SMBUS_ADDRESS_SHIFT);
949 phy_data |= HV_SMB_ADDR_PEC_EN | HV_SMB_ADDR_VALID;
950 ret_val = e1000_write_phy_reg_hv_locked(hw, HV_SMB_ADDR, phy_data);
951
952out:
953 return ret_val;
954}
955
956
957
958
959
960
961
962
963static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
964{
965 struct e1000_phy_info *phy = &hw->phy;
966 u32 i, data, cnf_size, cnf_base_addr, sw_cfg_mask;
967 s32 ret_val = 0;
968 u16 word_addr, reg_data, reg_addr, phy_page = 0;
969
970
971
972
973
974
975
976
977 switch (hw->mac.type) {
978 case e1000_ich8lan:
979 if (phy->type != e1000_phy_igp_3)
980 return ret_val;
981
982 if ((hw->adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_AMT) ||
983 (hw->adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_C)) {
984 sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
985 break;
986 }
987
988 case e1000_pchlan:
989 case e1000_pch2lan:
990 sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
991 break;
992 default:
993 return ret_val;
994 }
995
996 ret_val = hw->phy.ops.acquire(hw);
997 if (ret_val)
998 return ret_val;
999
1000 data = er32(FEXTNVM);
1001 if (!(data & sw_cfg_mask))
1002 goto out;
1003
1004
1005
1006
1007
1008 data = er32(EXTCNF_CTRL);
1009 if (!(hw->mac.type == e1000_pch2lan)) {
1010 if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
1011 goto out;
1012 }
1013
1014 cnf_size = er32(EXTCNF_SIZE);
1015 cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
1016 cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT;
1017 if (!cnf_size)
1018 goto out;
1019
1020 cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK;
1021 cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
1022
1023 if ((!(data & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) &&
1024 (hw->mac.type == e1000_pchlan)) ||
1025 (hw->mac.type == e1000_pch2lan)) {
1026
1027
1028
1029
1030
1031
1032 ret_val = e1000_write_smbus_addr(hw);
1033 if (ret_val)
1034 goto out;
1035
1036 data = er32(LEDCTL);
1037 ret_val = e1000_write_phy_reg_hv_locked(hw, HV_LED_CONFIG,
1038 (u16)data);
1039 if (ret_val)
1040 goto out;
1041 }
1042
1043
1044
1045
1046 word_addr = (u16)(cnf_base_addr << 1);
1047
1048 for (i = 0; i < cnf_size; i++) {
1049 ret_val = e1000_read_nvm(hw, (word_addr + i * 2), 1,
1050 ®_data);
1051 if (ret_val)
1052 goto out;
1053
1054 ret_val = e1000_read_nvm(hw, (word_addr + i * 2 + 1),
1055 1, ®_addr);
1056 if (ret_val)
1057 goto out;
1058
1059
1060 if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) {
1061 phy_page = reg_data;
1062 continue;
1063 }
1064
1065 reg_addr &= PHY_REG_MASK;
1066 reg_addr |= phy_page;
1067
1068 ret_val = phy->ops.write_reg_locked(hw, (u32)reg_addr,
1069 reg_data);
1070 if (ret_val)
1071 goto out;
1072 }
1073
1074out:
1075 hw->phy.ops.release(hw);
1076 return ret_val;
1077}
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link)
1090{
1091 s32 ret_val = 0;
1092 u16 status_reg = 0;
1093 bool k1_enable = hw->dev_spec.ich8lan.nvm_k1_enabled;
1094
1095 if (hw->mac.type != e1000_pchlan)
1096 goto out;
1097
1098
1099 ret_val = hw->phy.ops.acquire(hw);
1100 if (ret_val)
1101 goto out;
1102
1103
1104 if (link) {
1105 if (hw->phy.type == e1000_phy_82578) {
1106 ret_val = hw->phy.ops.read_reg_locked(hw, BM_CS_STATUS,
1107 &status_reg);
1108 if (ret_val)
1109 goto release;
1110
1111 status_reg &= BM_CS_STATUS_LINK_UP |
1112 BM_CS_STATUS_RESOLVED |
1113 BM_CS_STATUS_SPEED_MASK;
1114
1115 if (status_reg == (BM_CS_STATUS_LINK_UP |
1116 BM_CS_STATUS_RESOLVED |
1117 BM_CS_STATUS_SPEED_1000))
1118 k1_enable = false;
1119 }
1120
1121 if (hw->phy.type == e1000_phy_82577) {
1122 ret_val = hw->phy.ops.read_reg_locked(hw, HV_M_STATUS,
1123 &status_reg);
1124 if (ret_val)
1125 goto release;
1126
1127 status_reg &= HV_M_STATUS_LINK_UP |
1128 HV_M_STATUS_AUTONEG_COMPLETE |
1129 HV_M_STATUS_SPEED_MASK;
1130
1131 if (status_reg == (HV_M_STATUS_LINK_UP |
1132 HV_M_STATUS_AUTONEG_COMPLETE |
1133 HV_M_STATUS_SPEED_1000))
1134 k1_enable = false;
1135 }
1136
1137
1138 ret_val = hw->phy.ops.write_reg_locked(hw, PHY_REG(770, 19),
1139 0x0100);
1140 if (ret_val)
1141 goto release;
1142
1143 } else {
1144
1145 ret_val = hw->phy.ops.write_reg_locked(hw, PHY_REG(770, 19),
1146 0x4100);
1147 if (ret_val)
1148 goto release;
1149 }
1150
1151 ret_val = e1000_configure_k1_ich8lan(hw, k1_enable);
1152
1153release:
1154 hw->phy.ops.release(hw);
1155out:
1156 return ret_val;
1157}
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable)
1170{
1171 s32 ret_val = 0;
1172 u32 ctrl_reg = 0;
1173 u32 ctrl_ext = 0;
1174 u32 reg = 0;
1175 u16 kmrn_reg = 0;
1176
1177 ret_val = e1000e_read_kmrn_reg_locked(hw,
1178 E1000_KMRNCTRLSTA_K1_CONFIG,
1179 &kmrn_reg);
1180 if (ret_val)
1181 goto out;
1182
1183 if (k1_enable)
1184 kmrn_reg |= E1000_KMRNCTRLSTA_K1_ENABLE;
1185 else
1186 kmrn_reg &= ~E1000_KMRNCTRLSTA_K1_ENABLE;
1187
1188 ret_val = e1000e_write_kmrn_reg_locked(hw,
1189 E1000_KMRNCTRLSTA_K1_CONFIG,
1190 kmrn_reg);
1191 if (ret_val)
1192 goto out;
1193
1194 udelay(20);
1195 ctrl_ext = er32(CTRL_EXT);
1196 ctrl_reg = er32(CTRL);
1197
1198 reg = ctrl_reg & ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1199 reg |= E1000_CTRL_FRCSPD;
1200 ew32(CTRL, reg);
1201
1202 ew32(CTRL_EXT, ctrl_ext | E1000_CTRL_EXT_SPD_BYPS);
1203 udelay(20);
1204 ew32(CTRL, ctrl_reg);
1205 ew32(CTRL_EXT, ctrl_ext);
1206 udelay(20);
1207
1208out:
1209 return ret_val;
1210}
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)
1222{
1223 s32 ret_val = 0;
1224 u32 mac_reg;
1225 u16 oem_reg;
1226
1227 if ((hw->mac.type != e1000_pch2lan) && (hw->mac.type != e1000_pchlan))
1228 return ret_val;
1229
1230 ret_val = hw->phy.ops.acquire(hw);
1231 if (ret_val)
1232 return ret_val;
1233
1234 if (!(hw->mac.type == e1000_pch2lan)) {
1235 mac_reg = er32(EXTCNF_CTRL);
1236 if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE)
1237 goto out;
1238 }
1239
1240 mac_reg = er32(FEXTNVM);
1241 if (!(mac_reg & E1000_FEXTNVM_SW_CONFIG_ICH8M))
1242 goto out;
1243
1244 mac_reg = er32(PHY_CTRL);
1245
1246 ret_val = hw->phy.ops.read_reg_locked(hw, HV_OEM_BITS, &oem_reg);
1247 if (ret_val)
1248 goto out;
1249
1250 oem_reg &= ~(HV_OEM_BITS_GBE_DIS | HV_OEM_BITS_LPLU);
1251
1252 if (d0_state) {
1253 if (mac_reg & E1000_PHY_CTRL_GBE_DISABLE)
1254 oem_reg |= HV_OEM_BITS_GBE_DIS;
1255
1256 if (mac_reg & E1000_PHY_CTRL_D0A_LPLU)
1257 oem_reg |= HV_OEM_BITS_LPLU;
1258 } else {
1259 if (mac_reg & E1000_PHY_CTRL_NOND0A_GBE_DISABLE)
1260 oem_reg |= HV_OEM_BITS_GBE_DIS;
1261
1262 if (mac_reg & E1000_PHY_CTRL_NOND0A_LPLU)
1263 oem_reg |= HV_OEM_BITS_LPLU;
1264 }
1265
1266 if (!e1000_check_reset_block(hw))
1267 oem_reg |= HV_OEM_BITS_RESTART_AN;
1268 ret_val = hw->phy.ops.write_reg_locked(hw, HV_OEM_BITS, oem_reg);
1269
1270out:
1271 hw->phy.ops.release(hw);
1272
1273 return ret_val;
1274}
1275
1276
1277
1278
1279
1280
1281static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw)
1282{
1283 s32 ret_val;
1284 u16 data;
1285
1286 ret_val = e1e_rphy(hw, HV_KMRN_MODE_CTRL, &data);
1287 if (ret_val)
1288 return ret_val;
1289
1290 data |= HV_KMRN_MDIO_SLOW;
1291
1292 ret_val = e1e_wphy(hw, HV_KMRN_MODE_CTRL, data);
1293
1294 return ret_val;
1295}
1296
1297
1298
1299
1300
1301static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
1302{
1303 s32 ret_val = 0;
1304 u16 phy_data;
1305
1306 if (hw->mac.type != e1000_pchlan)
1307 return ret_val;
1308
1309
1310 if (hw->phy.type == e1000_phy_82577) {
1311 ret_val = e1000_set_mdio_slow_mode_hv(hw);
1312 if (ret_val)
1313 goto out;
1314 }
1315
1316 if (((hw->phy.type == e1000_phy_82577) &&
1317 ((hw->phy.revision == 1) || (hw->phy.revision == 2))) ||
1318 ((hw->phy.type == e1000_phy_82578) && (hw->phy.revision == 1))) {
1319
1320 ret_val = e1e_wphy(hw, PHY_REG(769, 25), 0x4431);
1321 if (ret_val)
1322 return ret_val;
1323
1324
1325 ret_val = e1e_wphy(hw, PHY_REG(770, 16), 0xA204);
1326 if (ret_val)
1327 return ret_val;
1328 }
1329
1330 if (hw->phy.type == e1000_phy_82578) {
1331
1332
1333
1334
1335 if (hw->phy.revision < 2) {
1336 e1000e_phy_sw_reset(hw);
1337 ret_val = e1e_wphy(hw, PHY_CONTROL, 0x3140);
1338 }
1339 }
1340
1341
1342 ret_val = hw->phy.ops.acquire(hw);
1343 if (ret_val)
1344 return ret_val;
1345
1346 hw->phy.addr = 1;
1347 ret_val = e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0);
1348 hw->phy.ops.release(hw);
1349 if (ret_val)
1350 goto out;
1351
1352
1353
1354
1355
1356 ret_val = e1000_k1_gig_workaround_hv(hw, true);
1357 if (ret_val)
1358 goto out;
1359
1360
1361 ret_val = hw->phy.ops.acquire(hw);
1362 if (ret_val)
1363 goto out;
1364 ret_val = hw->phy.ops.read_reg_locked(hw,
1365 PHY_REG(BM_PORT_CTRL_PAGE, 17),
1366 &phy_data);
1367 if (ret_val)
1368 goto release;
1369 ret_val = hw->phy.ops.write_reg_locked(hw,
1370 PHY_REG(BM_PORT_CTRL_PAGE, 17),
1371 phy_data & 0x00FF);
1372release:
1373 hw->phy.ops.release(hw);
1374out:
1375 return ret_val;
1376}
1377
1378
1379
1380
1381
1382void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw)
1383{
1384 u32 mac_reg;
1385 u16 i;
1386
1387
1388 for (i = 0; i < (hw->mac.rar_entry_count + 4); i++) {
1389 mac_reg = er32(RAL(i));
1390 e1e_wphy(hw, BM_RAR_L(i), (u16)(mac_reg & 0xFFFF));
1391 e1e_wphy(hw, BM_RAR_M(i), (u16)((mac_reg >> 16) & 0xFFFF));
1392 mac_reg = er32(RAH(i));
1393 e1e_wphy(hw, BM_RAR_H(i), (u16)(mac_reg & 0xFFFF));
1394 e1e_wphy(hw, BM_RAR_CTRL(i), (u16)((mac_reg >> 16) & 0x8000));
1395 }
1396}
1397
1398
1399
1400
1401
1402
1403
1404s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable)
1405{
1406 s32 ret_val = 0;
1407 u16 phy_reg, data;
1408 u32 mac_reg;
1409 u16 i;
1410
1411 if (hw->mac.type != e1000_pch2lan)
1412 goto out;
1413
1414
1415 e1e_rphy(hw, PHY_REG(769, 20), &phy_reg);
1416 ret_val = e1e_wphy(hw, PHY_REG(769, 20), phy_reg | (1 << 14));
1417 if (ret_val)
1418 goto out;
1419
1420 if (enable) {
1421
1422
1423
1424
1425 for (i = 0; i < (hw->mac.rar_entry_count + 4); i++) {
1426 u8 mac_addr[ETH_ALEN] = {0};
1427 u32 addr_high, addr_low;
1428
1429 addr_high = er32(RAH(i));
1430 if (!(addr_high & E1000_RAH_AV))
1431 continue;
1432 addr_low = er32(RAL(i));
1433 mac_addr[0] = (addr_low & 0xFF);
1434 mac_addr[1] = ((addr_low >> 8) & 0xFF);
1435 mac_addr[2] = ((addr_low >> 16) & 0xFF);
1436 mac_addr[3] = ((addr_low >> 24) & 0xFF);
1437 mac_addr[4] = (addr_high & 0xFF);
1438 mac_addr[5] = ((addr_high >> 8) & 0xFF);
1439
1440 ew32(PCH_RAICC(i), ~ether_crc_le(ETH_ALEN, mac_addr));
1441 }
1442
1443
1444 e1000_copy_rx_addrs_to_phy_ich8lan(hw);
1445
1446
1447 mac_reg = er32(FFLT_DBG);
1448 mac_reg &= ~(1 << 14);
1449 mac_reg |= (7 << 15);
1450 ew32(FFLT_DBG, mac_reg);
1451
1452 mac_reg = er32(RCTL);
1453 mac_reg |= E1000_RCTL_SECRC;
1454 ew32(RCTL, mac_reg);
1455
1456 ret_val = e1000e_read_kmrn_reg(hw,
1457 E1000_KMRNCTRLSTA_CTRL_OFFSET,
1458 &data);
1459 if (ret_val)
1460 goto out;
1461 ret_val = e1000e_write_kmrn_reg(hw,
1462 E1000_KMRNCTRLSTA_CTRL_OFFSET,
1463 data | (1 << 0));
1464 if (ret_val)
1465 goto out;
1466 ret_val = e1000e_read_kmrn_reg(hw,
1467 E1000_KMRNCTRLSTA_HD_CTRL,
1468 &data);
1469 if (ret_val)
1470 goto out;
1471 data &= ~(0xF << 8);
1472 data |= (0xB << 8);
1473 ret_val = e1000e_write_kmrn_reg(hw,
1474 E1000_KMRNCTRLSTA_HD_CTRL,
1475 data);
1476 if (ret_val)
1477 goto out;
1478
1479
1480 e1e_rphy(hw, PHY_REG(769, 23), &data);
1481 data &= ~(0x7F << 5);
1482 data |= (0x37 << 5);
1483 ret_val = e1e_wphy(hw, PHY_REG(769, 23), data);
1484 if (ret_val)
1485 goto out;
1486 e1e_rphy(hw, PHY_REG(769, 16), &data);
1487 data &= ~(1 << 13);
1488 ret_val = e1e_wphy(hw, PHY_REG(769, 16), data);
1489 if (ret_val)
1490 goto out;
1491 e1e_rphy(hw, PHY_REG(776, 20), &data);
1492 data &= ~(0x3FF << 2);
1493 data |= (0x1A << 2);
1494 ret_val = e1e_wphy(hw, PHY_REG(776, 20), data);
1495 if (ret_val)
1496 goto out;
1497 ret_val = e1e_wphy(hw, PHY_REG(776, 23), 0xFE00);
1498 if (ret_val)
1499 goto out;
1500 e1e_rphy(hw, HV_PM_CTRL, &data);
1501 ret_val = e1e_wphy(hw, HV_PM_CTRL, data | (1 << 10));
1502 if (ret_val)
1503 goto out;
1504 } else {
1505
1506 mac_reg = er32(FFLT_DBG);
1507 mac_reg &= ~(0xF << 14);
1508 ew32(FFLT_DBG, mac_reg);
1509
1510 mac_reg = er32(RCTL);
1511 mac_reg &= ~E1000_RCTL_SECRC;
1512 ew32(RCTL, mac_reg);
1513
1514 ret_val = e1000e_read_kmrn_reg(hw,
1515 E1000_KMRNCTRLSTA_CTRL_OFFSET,
1516 &data);
1517 if (ret_val)
1518 goto out;
1519 ret_val = e1000e_write_kmrn_reg(hw,
1520 E1000_KMRNCTRLSTA_CTRL_OFFSET,
1521 data & ~(1 << 0));
1522 if (ret_val)
1523 goto out;
1524 ret_val = e1000e_read_kmrn_reg(hw,
1525 E1000_KMRNCTRLSTA_HD_CTRL,
1526 &data);
1527 if (ret_val)
1528 goto out;
1529 data &= ~(0xF << 8);
1530 data |= (0xB << 8);
1531 ret_val = e1000e_write_kmrn_reg(hw,
1532 E1000_KMRNCTRLSTA_HD_CTRL,
1533 data);
1534 if (ret_val)
1535 goto out;
1536
1537
1538 e1e_rphy(hw, PHY_REG(769, 23), &data);
1539 data &= ~(0x7F << 5);
1540 ret_val = e1e_wphy(hw, PHY_REG(769, 23), data);
1541 if (ret_val)
1542 goto out;
1543 e1e_rphy(hw, PHY_REG(769, 16), &data);
1544 data |= (1 << 13);
1545 ret_val = e1e_wphy(hw, PHY_REG(769, 16), data);
1546 if (ret_val)
1547 goto out;
1548 e1e_rphy(hw, PHY_REG(776, 20), &data);
1549 data &= ~(0x3FF << 2);
1550 data |= (0x8 << 2);
1551 ret_val = e1e_wphy(hw, PHY_REG(776, 20), data);
1552 if (ret_val)
1553 goto out;
1554 ret_val = e1e_wphy(hw, PHY_REG(776, 23), 0x7E00);
1555 if (ret_val)
1556 goto out;
1557 e1e_rphy(hw, HV_PM_CTRL, &data);
1558 ret_val = e1e_wphy(hw, HV_PM_CTRL, data & ~(1 << 10));
1559 if (ret_val)
1560 goto out;
1561 }
1562
1563
1564 ret_val = e1e_wphy(hw, PHY_REG(769, 20), phy_reg & ~(1 << 14));
1565
1566out:
1567 return ret_val;
1568}
1569
1570
1571
1572
1573
1574static s32 e1000_lv_phy_workarounds_ich8lan(struct e1000_hw *hw)
1575{
1576 s32 ret_val = 0;
1577
1578 if (hw->mac.type != e1000_pch2lan)
1579 goto out;
1580
1581
1582 ret_val = e1000_set_mdio_slow_mode_hv(hw);
1583
1584out:
1585 return ret_val;
1586}
1587
1588
1589
1590
1591
1592
1593
1594static s32 e1000_k1_workaround_lv(struct e1000_hw *hw)
1595{
1596 s32 ret_val = 0;
1597 u16 status_reg = 0;
1598 u32 mac_reg;
1599
1600 if (hw->mac.type != e1000_pch2lan)
1601 goto out;
1602
1603
1604 ret_val = e1e_rphy(hw, HV_M_STATUS, &status_reg);
1605 if (ret_val)
1606 goto out;
1607
1608 if ((status_reg & (HV_M_STATUS_LINK_UP | HV_M_STATUS_AUTONEG_COMPLETE))
1609 == (HV_M_STATUS_LINK_UP | HV_M_STATUS_AUTONEG_COMPLETE)) {
1610 mac_reg = er32(FEXTNVM4);
1611 mac_reg &= ~E1000_FEXTNVM4_BEACON_DURATION_MASK;
1612
1613 if (status_reg & HV_M_STATUS_SPEED_1000)
1614 mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_8USEC;
1615 else
1616 mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_16USEC;
1617
1618 ew32(FEXTNVM4, mac_reg);
1619 }
1620
1621out:
1622 return ret_val;
1623}
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633static void e1000_gate_hw_phy_config_ich8lan(struct e1000_hw *hw, bool gate)
1634{
1635 u32 extcnf_ctrl;
1636
1637 if (hw->mac.type != e1000_pch2lan)
1638 return;
1639
1640 extcnf_ctrl = er32(EXTCNF_CTRL);
1641
1642 if (gate)
1643 extcnf_ctrl |= E1000_EXTCNF_CTRL_GATE_PHY_CFG;
1644 else
1645 extcnf_ctrl &= ~E1000_EXTCNF_CTRL_GATE_PHY_CFG;
1646
1647 ew32(EXTCNF_CTRL, extcnf_ctrl);
1648 return;
1649}
1650
1651
1652
1653
1654
1655
1656
1657
1658static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw)
1659{
1660 u32 data, loop = E1000_ICH8_LAN_INIT_TIMEOUT;
1661
1662
1663 do {
1664 data = er32(STATUS);
1665 data &= E1000_STATUS_LAN_INIT_DONE;
1666 udelay(100);
1667 } while ((!data) && --loop);
1668
1669
1670
1671
1672
1673
1674 if (loop == 0)
1675 e_dbg("LAN_INIT_DONE not set, increase timeout\n");
1676
1677
1678 data = er32(STATUS);
1679 data &= ~E1000_STATUS_LAN_INIT_DONE;
1680 ew32(STATUS, data);
1681}
1682
1683
1684
1685
1686
1687static s32 e1000_post_phy_reset_ich8lan(struct e1000_hw *hw)
1688{
1689 s32 ret_val = 0;
1690 u16 reg;
1691
1692 if (e1000_check_reset_block(hw))
1693 goto out;
1694
1695
1696 msleep(10);
1697
1698
1699 switch (hw->mac.type) {
1700 case e1000_pchlan:
1701 ret_val = e1000_hv_phy_workarounds_ich8lan(hw);
1702 if (ret_val)
1703 goto out;
1704 break;
1705 case e1000_pch2lan:
1706 ret_val = e1000_lv_phy_workarounds_ich8lan(hw);
1707 if (ret_val)
1708 goto out;
1709 break;
1710 default:
1711 break;
1712 }
1713
1714
1715 if (hw->mac.type >= e1000_pchlan)
1716 e1e_rphy(hw, BM_WUC, ®);
1717
1718
1719 ret_val = e1000_sw_lcd_config_ich8lan(hw);
1720 if (ret_val)
1721 goto out;
1722
1723
1724 ret_val = e1000_oem_bits_config_ich8lan(hw, true);
1725
1726
1727 if ((hw->mac.type == e1000_pch2lan) &&
1728 !(er32(FWSM) & E1000_ICH_FWSM_FW_VALID)) {
1729 msleep(10);
1730 e1000_gate_hw_phy_config_ich8lan(hw, false);
1731 }
1732
1733out:
1734 return ret_val;
1735}
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
1746{
1747 s32 ret_val = 0;
1748
1749
1750 if ((hw->mac.type == e1000_pch2lan) &&
1751 !(er32(FWSM) & E1000_ICH_FWSM_FW_VALID))
1752 e1000_gate_hw_phy_config_ich8lan(hw, true);
1753
1754 ret_val = e1000e_phy_hw_reset_generic(hw);
1755 if (ret_val)
1756 goto out;
1757
1758 ret_val = e1000_post_phy_reset_ich8lan(hw);
1759
1760out:
1761 return ret_val;
1762}
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active)
1776{
1777 s32 ret_val = 0;
1778 u16 oem_reg;
1779
1780 ret_val = e1e_rphy(hw, HV_OEM_BITS, &oem_reg);
1781 if (ret_val)
1782 goto out;
1783
1784 if (active)
1785 oem_reg |= HV_OEM_BITS_LPLU;
1786 else
1787 oem_reg &= ~HV_OEM_BITS_LPLU;
1788
1789 oem_reg |= HV_OEM_BITS_RESTART_AN;
1790 ret_val = e1e_wphy(hw, HV_OEM_BITS, oem_reg);
1791
1792out:
1793 return ret_val;
1794}
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809static s32 e1000_set_d0_lplu_state_ich8lan(struct e1000_hw *hw, bool active)
1810{
1811 struct e1000_phy_info *phy = &hw->phy;
1812 u32 phy_ctrl;
1813 s32 ret_val = 0;
1814 u16 data;
1815
1816 if (phy->type == e1000_phy_ife)
1817 return ret_val;
1818
1819 phy_ctrl = er32(PHY_CTRL);
1820
1821 if (active) {
1822 phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU;
1823 ew32(PHY_CTRL, phy_ctrl);
1824
1825 if (phy->type != e1000_phy_igp_3)
1826 return 0;
1827
1828
1829
1830
1831
1832 if (hw->mac.type == e1000_ich8lan)
1833 e1000e_gig_downshift_workaround_ich8lan(hw);
1834
1835
1836 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, &data);
1837 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1838 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, data);
1839 if (ret_val)
1840 return ret_val;
1841 } else {
1842 phy_ctrl &= ~E1000_PHY_CTRL_D0A_LPLU;
1843 ew32(PHY_CTRL, phy_ctrl);
1844
1845 if (phy->type != e1000_phy_igp_3)
1846 return 0;
1847
1848
1849
1850
1851
1852
1853
1854 if (phy->smart_speed == e1000_smart_speed_on) {
1855 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1856 &data);
1857 if (ret_val)
1858 return ret_val;
1859
1860 data |= IGP01E1000_PSCFR_SMART_SPEED;
1861 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1862 data);
1863 if (ret_val)
1864 return ret_val;
1865 } else if (phy->smart_speed == e1000_smart_speed_off) {
1866 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1867 &data);
1868 if (ret_val)
1869 return ret_val;
1870
1871 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1872 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1873 data);
1874 if (ret_val)
1875 return ret_val;
1876 }
1877 }
1878
1879 return 0;
1880}
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895static s32 e1000_set_d3_lplu_state_ich8lan(struct e1000_hw *hw, bool active)
1896{
1897 struct e1000_phy_info *phy = &hw->phy;
1898 u32 phy_ctrl;
1899 s32 ret_val;
1900 u16 data;
1901
1902 phy_ctrl = er32(PHY_CTRL);
1903
1904 if (!active) {
1905 phy_ctrl &= ~E1000_PHY_CTRL_NOND0A_LPLU;
1906 ew32(PHY_CTRL, phy_ctrl);
1907
1908 if (phy->type != e1000_phy_igp_3)
1909 return 0;
1910
1911
1912
1913
1914
1915
1916
1917 if (phy->smart_speed == e1000_smart_speed_on) {
1918 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1919 &data);
1920 if (ret_val)
1921 return ret_val;
1922
1923 data |= IGP01E1000_PSCFR_SMART_SPEED;
1924 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1925 data);
1926 if (ret_val)
1927 return ret_val;
1928 } else if (phy->smart_speed == e1000_smart_speed_off) {
1929 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1930 &data);
1931 if (ret_val)
1932 return ret_val;
1933
1934 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1935 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1936 data);
1937 if (ret_val)
1938 return ret_val;
1939 }
1940 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1941 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1942 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1943 phy_ctrl |= E1000_PHY_CTRL_NOND0A_LPLU;
1944 ew32(PHY_CTRL, phy_ctrl);
1945
1946 if (phy->type != e1000_phy_igp_3)
1947 return 0;
1948
1949
1950
1951
1952
1953 if (hw->mac.type == e1000_ich8lan)
1954 e1000e_gig_downshift_workaround_ich8lan(hw);
1955
1956
1957 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, &data);
1958 if (ret_val)
1959 return ret_val;
1960
1961 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1962 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, data);
1963 }
1964
1965 return 0;
1966}
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
1977{
1978 u32 eecd;
1979 struct e1000_nvm_info *nvm = &hw->nvm;
1980 u32 bank1_offset = nvm->flash_bank_size * sizeof(u16);
1981 u32 act_offset = E1000_ICH_NVM_SIG_WORD * 2 + 1;
1982 u8 sig_byte = 0;
1983 s32 ret_val = 0;
1984
1985 switch (hw->mac.type) {
1986 case e1000_ich8lan:
1987 case e1000_ich9lan:
1988 eecd = er32(EECD);
1989 if ((eecd & E1000_EECD_SEC1VAL_VALID_MASK) ==
1990 E1000_EECD_SEC1VAL_VALID_MASK) {
1991 if (eecd & E1000_EECD_SEC1VAL)
1992 *bank = 1;
1993 else
1994 *bank = 0;
1995
1996 return 0;
1997 }
1998 e_dbg("Unable to determine valid NVM bank via EEC - "
1999 "reading flash signature\n");
2000
2001 default:
2002
2003 *bank = 0;
2004
2005
2006 ret_val = e1000_read_flash_byte_ich8lan(hw, act_offset,
2007 &sig_byte);
2008 if (ret_val)
2009 return ret_val;
2010 if ((sig_byte & E1000_ICH_NVM_VALID_SIG_MASK) ==
2011 E1000_ICH_NVM_SIG_VALUE) {
2012 *bank = 0;
2013 return 0;
2014 }
2015
2016
2017 ret_val = e1000_read_flash_byte_ich8lan(hw, act_offset +
2018 bank1_offset,
2019 &sig_byte);
2020 if (ret_val)
2021 return ret_val;
2022 if ((sig_byte & E1000_ICH_NVM_VALID_SIG_MASK) ==
2023 E1000_ICH_NVM_SIG_VALUE) {
2024 *bank = 1;
2025 return 0;
2026 }
2027
2028 e_dbg("ERROR: No valid NVM bank present\n");
2029 return -E1000_ERR_NVM;
2030 }
2031
2032 return 0;
2033}
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044static s32 e1000_read_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
2045 u16 *data)
2046{
2047 struct e1000_nvm_info *nvm = &hw->nvm;
2048 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
2049 u32 act_offset;
2050 s32 ret_val = 0;
2051 u32 bank = 0;
2052 u16 i, word;
2053
2054 if ((offset >= nvm->word_size) || (words > nvm->word_size - offset) ||
2055 (words == 0)) {
2056 e_dbg("nvm parameter(s) out of bounds\n");
2057 ret_val = -E1000_ERR_NVM;
2058 goto out;
2059 }
2060
2061 nvm->ops.acquire(hw);
2062
2063 ret_val = e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
2064 if (ret_val) {
2065 e_dbg("Could not detect valid bank, assuming bank 0\n");
2066 bank = 0;
2067 }
2068
2069 act_offset = (bank) ? nvm->flash_bank_size : 0;
2070 act_offset += offset;
2071
2072 ret_val = 0;
2073 for (i = 0; i < words; i++) {
2074 if ((dev_spec->shadow_ram) &&
2075 (dev_spec->shadow_ram[offset+i].modified)) {
2076 data[i] = dev_spec->shadow_ram[offset+i].value;
2077 } else {
2078 ret_val = e1000_read_flash_word_ich8lan(hw,
2079 act_offset + i,
2080 &word);
2081 if (ret_val)
2082 break;
2083 data[i] = word;
2084 }
2085 }
2086
2087 nvm->ops.release(hw);
2088
2089out:
2090 if (ret_val)
2091 e_dbg("NVM read error: %d\n", ret_val);
2092
2093 return ret_val;
2094}
2095
2096
2097
2098
2099
2100
2101
2102
2103static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw)
2104{
2105 union ich8_hws_flash_status hsfsts;
2106 s32 ret_val = -E1000_ERR_NVM;
2107 s32 i = 0;
2108
2109 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2110
2111
2112 if (hsfsts.hsf_status.fldesvalid == 0) {
2113 e_dbg("Flash descriptor invalid. "
2114 "SW Sequencing must be used.\n");
2115 return -E1000_ERR_NVM;
2116 }
2117
2118
2119 hsfsts.hsf_status.flcerr = 1;
2120 hsfsts.hsf_status.dael = 1;
2121
2122 ew16flash(ICH_FLASH_HSFSTS, hsfsts.regval);
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133 if (hsfsts.hsf_status.flcinprog == 0) {
2134
2135
2136
2137
2138
2139 hsfsts.hsf_status.flcdone = 1;
2140 ew16flash(ICH_FLASH_HSFSTS, hsfsts.regval);
2141 ret_val = 0;
2142 } else {
2143
2144
2145
2146
2147 for (i = 0; i < ICH_FLASH_READ_COMMAND_TIMEOUT; i++) {
2148 hsfsts.regval = __er16flash(hw, ICH_FLASH_HSFSTS);
2149 if (hsfsts.hsf_status.flcinprog == 0) {
2150 ret_val = 0;
2151 break;
2152 }
2153 udelay(1);
2154 }
2155 if (ret_val == 0) {
2156
2157
2158
2159
2160 hsfsts.hsf_status.flcdone = 1;
2161 ew16flash(ICH_FLASH_HSFSTS, hsfsts.regval);
2162 } else {
2163 e_dbg("Flash controller busy, cannot get access\n");
2164 }
2165 }
2166
2167 return ret_val;
2168}
2169
2170
2171
2172
2173
2174
2175
2176
2177static s32 e1000_flash_cycle_ich8lan(struct e1000_hw *hw, u32 timeout)
2178{
2179 union ich8_hws_flash_ctrl hsflctl;
2180 union ich8_hws_flash_status hsfsts;
2181 s32 ret_val = -E1000_ERR_NVM;
2182 u32 i = 0;
2183
2184
2185 hsflctl.regval = er16flash(ICH_FLASH_HSFCTL);
2186 hsflctl.hsf_ctrl.flcgo = 1;
2187 ew16flash(ICH_FLASH_HSFCTL, hsflctl.regval);
2188
2189
2190 do {
2191 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2192 if (hsfsts.hsf_status.flcdone == 1)
2193 break;
2194 udelay(1);
2195 } while (i++ < timeout);
2196
2197 if (hsfsts.hsf_status.flcdone == 1 && hsfsts.hsf_status.flcerr == 0)
2198 return 0;
2199
2200 return ret_val;
2201}
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212static s32 e1000_read_flash_word_ich8lan(struct e1000_hw *hw, u32 offset,
2213 u16 *data)
2214{
2215
2216 offset <<= 1;
2217
2218 return e1000_read_flash_data_ich8lan(hw, offset, 2, data);
2219}
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229static s32 e1000_read_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
2230 u8 *data)
2231{
2232 s32 ret_val;
2233 u16 word = 0;
2234
2235 ret_val = e1000_read_flash_data_ich8lan(hw, offset, 1, &word);
2236 if (ret_val)
2237 return ret_val;
2238
2239 *data = (u8)word;
2240
2241 return 0;
2242}
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
2254 u8 size, u16 *data)
2255{
2256 union ich8_hws_flash_status hsfsts;
2257 union ich8_hws_flash_ctrl hsflctl;
2258 u32 flash_linear_addr;
2259 u32 flash_data = 0;
2260 s32 ret_val = -E1000_ERR_NVM;
2261 u8 count = 0;
2262
2263 if (size < 1 || size > 2 || offset > ICH_FLASH_LINEAR_ADDR_MASK)
2264 return -E1000_ERR_NVM;
2265
2266 flash_linear_addr = (ICH_FLASH_LINEAR_ADDR_MASK & offset) +
2267 hw->nvm.flash_base_addr;
2268
2269 do {
2270 udelay(1);
2271
2272 ret_val = e1000_flash_cycle_init_ich8lan(hw);
2273 if (ret_val != 0)
2274 break;
2275
2276 hsflctl.regval = er16flash(ICH_FLASH_HSFCTL);
2277
2278 hsflctl.hsf_ctrl.fldbcount = size - 1;
2279 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_READ;
2280 ew16flash(ICH_FLASH_HSFCTL, hsflctl.regval);
2281
2282 ew32flash(ICH_FLASH_FADDR, flash_linear_addr);
2283
2284 ret_val = e1000_flash_cycle_ich8lan(hw,
2285 ICH_FLASH_READ_COMMAND_TIMEOUT);
2286
2287
2288
2289
2290
2291
2292
2293 if (ret_val == 0) {
2294 flash_data = er32flash(ICH_FLASH_FDATA0);
2295 if (size == 1)
2296 *data = (u8)(flash_data & 0x000000FF);
2297 else if (size == 2)
2298 *data = (u16)(flash_data & 0x0000FFFF);
2299 break;
2300 } else {
2301
2302
2303
2304
2305
2306
2307 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2308 if (hsfsts.hsf_status.flcerr == 1) {
2309
2310 continue;
2311 } else if (hsfsts.hsf_status.flcdone == 0) {
2312 e_dbg("Timeout error - flash cycle "
2313 "did not complete.\n");
2314 break;
2315 }
2316 }
2317 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
2318
2319 return ret_val;
2320}
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331static s32 e1000_write_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
2332 u16 *data)
2333{
2334 struct e1000_nvm_info *nvm = &hw->nvm;
2335 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
2336 u16 i;
2337
2338 if ((offset >= nvm->word_size) || (words > nvm->word_size - offset) ||
2339 (words == 0)) {
2340 e_dbg("nvm parameter(s) out of bounds\n");
2341 return -E1000_ERR_NVM;
2342 }
2343
2344 nvm->ops.acquire(hw);
2345
2346 for (i = 0; i < words; i++) {
2347 dev_spec->shadow_ram[offset+i].modified = true;
2348 dev_spec->shadow_ram[offset+i].value = data[i];
2349 }
2350
2351 nvm->ops.release(hw);
2352
2353 return 0;
2354}
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
2368{
2369 struct e1000_nvm_info *nvm = &hw->nvm;
2370 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
2371 u32 i, act_offset, new_bank_offset, old_bank_offset, bank;
2372 s32 ret_val;
2373 u16 data;
2374
2375 ret_val = e1000e_update_nvm_checksum_generic(hw);
2376 if (ret_val)
2377 goto out;
2378
2379 if (nvm->type != e1000_nvm_flash_sw)
2380 goto out;
2381
2382 nvm->ops.acquire(hw);
2383
2384
2385
2386
2387
2388
2389 ret_val = e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
2390 if (ret_val) {
2391 e_dbg("Could not detect valid bank, assuming bank 0\n");
2392 bank = 0;
2393 }
2394
2395 if (bank == 0) {
2396 new_bank_offset = nvm->flash_bank_size;
2397 old_bank_offset = 0;
2398 ret_val = e1000_erase_flash_bank_ich8lan(hw, 1);
2399 if (ret_val)
2400 goto release;
2401 } else {
2402 old_bank_offset = nvm->flash_bank_size;
2403 new_bank_offset = 0;
2404 ret_val = e1000_erase_flash_bank_ich8lan(hw, 0);
2405 if (ret_val)
2406 goto release;
2407 }
2408
2409 for (i = 0; i < E1000_ICH8_SHADOW_RAM_WORDS; i++) {
2410
2411
2412
2413
2414
2415 if (dev_spec->shadow_ram[i].modified) {
2416 data = dev_spec->shadow_ram[i].value;
2417 } else {
2418 ret_val = e1000_read_flash_word_ich8lan(hw, i +
2419 old_bank_offset,
2420 &data);
2421 if (ret_val)
2422 break;
2423 }
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433 if (i == E1000_ICH_NVM_SIG_WORD)
2434 data |= E1000_ICH_NVM_SIG_MASK;
2435
2436
2437 act_offset = (i + new_bank_offset) << 1;
2438
2439 udelay(100);
2440
2441 ret_val = e1000_retry_write_flash_byte_ich8lan(hw,
2442 act_offset,
2443 (u8)data);
2444 if (ret_val)
2445 break;
2446
2447 udelay(100);
2448 ret_val = e1000_retry_write_flash_byte_ich8lan(hw,
2449 act_offset + 1,
2450 (u8)(data >> 8));
2451 if (ret_val)
2452 break;
2453 }
2454
2455
2456
2457
2458
2459 if (ret_val) {
2460
2461 e_dbg("Flash commit failed.\n");
2462 goto release;
2463 }
2464
2465
2466
2467
2468
2469
2470
2471 act_offset = new_bank_offset + E1000_ICH_NVM_SIG_WORD;
2472 ret_val = e1000_read_flash_word_ich8lan(hw, act_offset, &data);
2473 if (ret_val)
2474 goto release;
2475
2476 data &= 0xBFFF;
2477 ret_val = e1000_retry_write_flash_byte_ich8lan(hw,
2478 act_offset * 2 + 1,
2479 (u8)(data >> 8));
2480 if (ret_val)
2481 goto release;
2482
2483
2484
2485
2486
2487
2488
2489 act_offset = (old_bank_offset + E1000_ICH_NVM_SIG_WORD) * 2 + 1;
2490 ret_val = e1000_retry_write_flash_byte_ich8lan(hw, act_offset, 0);
2491 if (ret_val)
2492 goto release;
2493
2494
2495 for (i = 0; i < E1000_ICH8_SHADOW_RAM_WORDS; i++) {
2496 dev_spec->shadow_ram[i].modified = false;
2497 dev_spec->shadow_ram[i].value = 0xFFFF;
2498 }
2499
2500release:
2501 nvm->ops.release(hw);
2502
2503
2504
2505
2506
2507 if (!ret_val) {
2508 e1000e_reload_nvm(hw);
2509 msleep(10);
2510 }
2511
2512out:
2513 if (ret_val)
2514 e_dbg("NVM update error: %d\n", ret_val);
2515
2516 return ret_val;
2517}
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
2528{
2529 s32 ret_val;
2530 u16 data;
2531
2532
2533
2534
2535
2536
2537
2538 ret_val = e1000_read_nvm(hw, 0x19, 1, &data);
2539 if (ret_val)
2540 return ret_val;
2541
2542 if ((data & 0x40) == 0) {
2543 data |= 0x40;
2544 ret_val = e1000_write_nvm(hw, 0x19, 1, &data);
2545 if (ret_val)
2546 return ret_val;
2547 ret_val = e1000e_update_nvm_checksum(hw);
2548 if (ret_val)
2549 return ret_val;
2550 }
2551
2552 return e1000e_validate_nvm_checksum_generic(hw);
2553}
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw)
2566{
2567 struct e1000_nvm_info *nvm = &hw->nvm;
2568 union ich8_flash_protected_range pr0;
2569 union ich8_hws_flash_status hsfsts;
2570 u32 gfpreg;
2571
2572 nvm->ops.acquire(hw);
2573
2574 gfpreg = er32flash(ICH_FLASH_GFPREG);
2575
2576
2577 pr0.regval = er32flash(ICH_FLASH_PR0);
2578 pr0.range.base = gfpreg & FLASH_GFPREG_BASE_MASK;
2579 pr0.range.limit = ((gfpreg >> 16) & FLASH_GFPREG_BASE_MASK);
2580 pr0.range.wpe = true;
2581 ew32flash(ICH_FLASH_PR0, pr0.regval);
2582
2583
2584
2585
2586
2587
2588
2589 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2590 hsfsts.hsf_status.flockdn = true;
2591 ew32flash(ICH_FLASH_HSFSTS, hsfsts.regval);
2592
2593 nvm->ops.release(hw);
2594}
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
2606 u8 size, u16 data)
2607{
2608 union ich8_hws_flash_status hsfsts;
2609 union ich8_hws_flash_ctrl hsflctl;
2610 u32 flash_linear_addr;
2611 u32 flash_data = 0;
2612 s32 ret_val;
2613 u8 count = 0;
2614
2615 if (size < 1 || size > 2 || data > size * 0xff ||
2616 offset > ICH_FLASH_LINEAR_ADDR_MASK)
2617 return -E1000_ERR_NVM;
2618
2619 flash_linear_addr = (ICH_FLASH_LINEAR_ADDR_MASK & offset) +
2620 hw->nvm.flash_base_addr;
2621
2622 do {
2623 udelay(1);
2624
2625 ret_val = e1000_flash_cycle_init_ich8lan(hw);
2626 if (ret_val)
2627 break;
2628
2629 hsflctl.regval = er16flash(ICH_FLASH_HSFCTL);
2630
2631 hsflctl.hsf_ctrl.fldbcount = size -1;
2632 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_WRITE;
2633 ew16flash(ICH_FLASH_HSFCTL, hsflctl.regval);
2634
2635 ew32flash(ICH_FLASH_FADDR, flash_linear_addr);
2636
2637 if (size == 1)
2638 flash_data = (u32)data & 0x00FF;
2639 else
2640 flash_data = (u32)data;
2641
2642 ew32flash(ICH_FLASH_FDATA0, flash_data);
2643
2644
2645
2646
2647
2648 ret_val = e1000_flash_cycle_ich8lan(hw,
2649 ICH_FLASH_WRITE_COMMAND_TIMEOUT);
2650 if (!ret_val)
2651 break;
2652
2653
2654
2655
2656
2657
2658
2659 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2660 if (hsfsts.hsf_status.flcerr == 1)
2661
2662 continue;
2663 if (hsfsts.hsf_status.flcdone == 0) {
2664 e_dbg("Timeout error - flash cycle "
2665 "did not complete.");
2666 break;
2667 }
2668 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
2669
2670 return ret_val;
2671}
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681static s32 e1000_write_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
2682 u8 data)
2683{
2684 u16 word = (u16)data;
2685
2686 return e1000_write_flash_data_ich8lan(hw, offset, 1, word);
2687}
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698static s32 e1000_retry_write_flash_byte_ich8lan(struct e1000_hw *hw,
2699 u32 offset, u8 byte)
2700{
2701 s32 ret_val;
2702 u16 program_retries;
2703
2704 ret_val = e1000_write_flash_byte_ich8lan(hw, offset, byte);
2705 if (!ret_val)
2706 return ret_val;
2707
2708 for (program_retries = 0; program_retries < 100; program_retries++) {
2709 e_dbg("Retrying Byte %2.2X at offset %u\n", byte, offset);
2710 udelay(100);
2711 ret_val = e1000_write_flash_byte_ich8lan(hw, offset, byte);
2712 if (!ret_val)
2713 break;
2714 }
2715 if (program_retries == 100)
2716 return -E1000_ERR_NVM;
2717
2718 return 0;
2719}
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank)
2730{
2731 struct e1000_nvm_info *nvm = &hw->nvm;
2732 union ich8_hws_flash_status hsfsts;
2733 union ich8_hws_flash_ctrl hsflctl;
2734 u32 flash_linear_addr;
2735
2736 u32 flash_bank_size = nvm->flash_bank_size * 2;
2737 s32 ret_val;
2738 s32 count = 0;
2739 s32 j, iteration, sector_size;
2740
2741 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756 switch (hsfsts.hsf_status.berasesz) {
2757 case 0:
2758
2759 sector_size = ICH_FLASH_SEG_SIZE_256;
2760 iteration = flash_bank_size / ICH_FLASH_SEG_SIZE_256;
2761 break;
2762 case 1:
2763 sector_size = ICH_FLASH_SEG_SIZE_4K;
2764 iteration = 1;
2765 break;
2766 case 2:
2767 sector_size = ICH_FLASH_SEG_SIZE_8K;
2768 iteration = 1;
2769 break;
2770 case 3:
2771 sector_size = ICH_FLASH_SEG_SIZE_64K;
2772 iteration = 1;
2773 break;
2774 default:
2775 return -E1000_ERR_NVM;
2776 }
2777
2778
2779 flash_linear_addr = hw->nvm.flash_base_addr;
2780 flash_linear_addr += (bank) ? flash_bank_size : 0;
2781
2782 for (j = 0; j < iteration ; j++) {
2783 do {
2784
2785 ret_val = e1000_flash_cycle_init_ich8lan(hw);
2786 if (ret_val)
2787 return ret_val;
2788
2789
2790
2791
2792
2793 hsflctl.regval = er16flash(ICH_FLASH_HSFCTL);
2794 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_ERASE;
2795 ew16flash(ICH_FLASH_HSFCTL, hsflctl.regval);
2796
2797
2798
2799
2800
2801
2802 flash_linear_addr += (j * sector_size);
2803 ew32flash(ICH_FLASH_FADDR, flash_linear_addr);
2804
2805 ret_val = e1000_flash_cycle_ich8lan(hw,
2806 ICH_FLASH_ERASE_COMMAND_TIMEOUT);
2807 if (ret_val == 0)
2808 break;
2809
2810
2811
2812
2813
2814
2815 hsfsts.regval = er16flash(ICH_FLASH_HSFSTS);
2816 if (hsfsts.hsf_status.flcerr == 1)
2817
2818 continue;
2819 else if (hsfsts.hsf_status.flcdone == 0)
2820 return ret_val;
2821 } while (++count < ICH_FLASH_CYCLE_REPEAT_COUNT);
2822 }
2823
2824 return 0;
2825}
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836static s32 e1000_valid_led_default_ich8lan(struct e1000_hw *hw, u16 *data)
2837{
2838 s32 ret_val;
2839
2840 ret_val = e1000_read_nvm(hw, NVM_ID_LED_SETTINGS, 1, data);
2841 if (ret_val) {
2842 e_dbg("NVM Read Error\n");
2843 return ret_val;
2844 }
2845
2846 if (*data == ID_LED_RESERVED_0000 ||
2847 *data == ID_LED_RESERVED_FFFF)
2848 *data = ID_LED_DEFAULT_ICH8LAN;
2849
2850 return 0;
2851}
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866static s32 e1000_id_led_init_pchlan(struct e1000_hw *hw)
2867{
2868 struct e1000_mac_info *mac = &hw->mac;
2869 s32 ret_val;
2870 const u32 ledctl_on = E1000_LEDCTL_MODE_LINK_UP;
2871 const u32 ledctl_off = E1000_LEDCTL_MODE_LINK_UP | E1000_PHY_LED0_IVRT;
2872 u16 data, i, temp, shift;
2873
2874
2875 ret_val = hw->nvm.ops.valid_led_default(hw, &data);
2876 if (ret_val)
2877 goto out;
2878
2879 mac->ledctl_default = er32(LEDCTL);
2880 mac->ledctl_mode1 = mac->ledctl_default;
2881 mac->ledctl_mode2 = mac->ledctl_default;
2882
2883 for (i = 0; i < 4; i++) {
2884 temp = (data >> (i << 2)) & E1000_LEDCTL_LED0_MODE_MASK;
2885 shift = (i * 5);
2886 switch (temp) {
2887 case ID_LED_ON1_DEF2:
2888 case ID_LED_ON1_ON2:
2889 case ID_LED_ON1_OFF2:
2890 mac->ledctl_mode1 &= ~(E1000_PHY_LED0_MASK << shift);
2891 mac->ledctl_mode1 |= (ledctl_on << shift);
2892 break;
2893 case ID_LED_OFF1_DEF2:
2894 case ID_LED_OFF1_ON2:
2895 case ID_LED_OFF1_OFF2:
2896 mac->ledctl_mode1 &= ~(E1000_PHY_LED0_MASK << shift);
2897 mac->ledctl_mode1 |= (ledctl_off << shift);
2898 break;
2899 default:
2900
2901 break;
2902 }
2903 switch (temp) {
2904 case ID_LED_DEF1_ON2:
2905 case ID_LED_ON1_ON2:
2906 case ID_LED_OFF1_ON2:
2907 mac->ledctl_mode2 &= ~(E1000_PHY_LED0_MASK << shift);
2908 mac->ledctl_mode2 |= (ledctl_on << shift);
2909 break;
2910 case ID_LED_DEF1_OFF2:
2911 case ID_LED_ON1_OFF2:
2912 case ID_LED_OFF1_OFF2:
2913 mac->ledctl_mode2 &= ~(E1000_PHY_LED0_MASK << shift);
2914 mac->ledctl_mode2 |= (ledctl_off << shift);
2915 break;
2916 default:
2917
2918 break;
2919 }
2920 }
2921
2922out:
2923 return ret_val;
2924}
2925
2926
2927
2928
2929
2930
2931
2932
2933static s32 e1000_get_bus_info_ich8lan(struct e1000_hw *hw)
2934{
2935 struct e1000_bus_info *bus = &hw->bus;
2936 s32 ret_val;
2937
2938 ret_val = e1000e_get_bus_info_pcie(hw);
2939
2940
2941
2942
2943
2944
2945
2946 if (bus->width == e1000_bus_width_unknown)
2947 bus->width = e1000_bus_width_pcie_x1;
2948
2949 return ret_val;
2950}
2951
2952
2953
2954
2955
2956
2957
2958
2959static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
2960{
2961 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
2962 u16 reg;
2963 u32 ctrl, kab;
2964 s32 ret_val;
2965
2966
2967
2968
2969
2970 ret_val = e1000e_disable_pcie_master(hw);
2971 if (ret_val)
2972 e_dbg("PCI-E Master disable polling has failed.\n");
2973
2974 e_dbg("Masking off all interrupts\n");
2975 ew32(IMC, 0xffffffff);
2976
2977
2978
2979
2980
2981
2982 ew32(RCTL, 0);
2983 ew32(TCTL, E1000_TCTL_PSP);
2984 e1e_flush();
2985
2986 msleep(10);
2987
2988
2989 if (hw->mac.type == e1000_ich8lan) {
2990
2991 ew32(PBA, E1000_PBA_8K);
2992
2993 ew32(PBS, E1000_PBS_16K);
2994 }
2995
2996 if (hw->mac.type == e1000_pchlan) {
2997
2998 ret_val = e1000_read_nvm(hw, E1000_NVM_K1_CONFIG, 1, ®);
2999 if (ret_val)
3000 return ret_val;
3001
3002 if (reg & E1000_NVM_K1_ENABLE)
3003 dev_spec->nvm_k1_enabled = true;
3004 else
3005 dev_spec->nvm_k1_enabled = false;
3006 }
3007
3008 ctrl = er32(CTRL);
3009
3010 if (!e1000_check_reset_block(hw)) {
3011
3012
3013
3014
3015
3016 ctrl |= E1000_CTRL_PHY_RST;
3017
3018
3019
3020
3021
3022 if ((hw->mac.type == e1000_pch2lan) &&
3023 !(er32(FWSM) & E1000_ICH_FWSM_FW_VALID))
3024 e1000_gate_hw_phy_config_ich8lan(hw, true);
3025 }
3026 ret_val = e1000_acquire_swflag_ich8lan(hw);
3027 e_dbg("Issuing a global reset to ich8lan\n");
3028 ew32(CTRL, (ctrl | E1000_CTRL_RST));
3029 msleep(20);
3030
3031 if (!ret_val)
3032 e1000_release_swflag_ich8lan(hw);
3033
3034 if (ctrl & E1000_CTRL_PHY_RST) {
3035 ret_val = hw->phy.ops.get_cfg_done(hw);
3036 if (ret_val)
3037 goto out;
3038
3039 ret_val = e1000_post_phy_reset_ich8lan(hw);
3040 if (ret_val)
3041 goto out;
3042 }
3043
3044
3045
3046
3047
3048
3049 if (hw->mac.type == e1000_pchlan)
3050 ew32(CRC_OFFSET, 0x65656565);
3051
3052 ew32(IMC, 0xffffffff);
3053 er32(ICR);
3054
3055 kab = er32(KABGTXD);
3056 kab |= E1000_KABGTXD_BGSQLBIAS;
3057 ew32(KABGTXD, kab);
3058
3059out:
3060 return ret_val;
3061}
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
3076{
3077 struct e1000_mac_info *mac = &hw->mac;
3078 u32 ctrl_ext, txdctl, snoop;
3079 s32 ret_val;
3080 u16 i;
3081
3082 e1000_initialize_hw_bits_ich8lan(hw);
3083
3084
3085 ret_val = mac->ops.id_led_init(hw);
3086 if (ret_val)
3087 e_dbg("Error initializing identification LED\n");
3088
3089
3090
3091 e1000e_init_rx_addrs(hw, mac->rar_entry_count);
3092
3093
3094 e_dbg("Zeroing the MTA\n");
3095 for (i = 0; i < mac->mta_reg_count; i++)
3096 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
3097
3098
3099
3100
3101
3102
3103 if (hw->phy.type == e1000_phy_82578) {
3104 e1e_rphy(hw, BM_WUC, &i);
3105 ret_val = e1000_phy_hw_reset_ich8lan(hw);
3106 if (ret_val)
3107 return ret_val;
3108 }
3109
3110
3111 ret_val = e1000_setup_link_ich8lan(hw);
3112
3113
3114 txdctl = er32(TXDCTL(0));
3115 txdctl = (txdctl & ~E1000_TXDCTL_WTHRESH) |
3116 E1000_TXDCTL_FULL_TX_DESC_WB;
3117 txdctl = (txdctl & ~E1000_TXDCTL_PTHRESH) |
3118 E1000_TXDCTL_MAX_TX_DESC_PREFETCH;
3119 ew32(TXDCTL(0), txdctl);
3120 txdctl = er32(TXDCTL(1));
3121 txdctl = (txdctl & ~E1000_TXDCTL_WTHRESH) |
3122 E1000_TXDCTL_FULL_TX_DESC_WB;
3123 txdctl = (txdctl & ~E1000_TXDCTL_PTHRESH) |
3124 E1000_TXDCTL_MAX_TX_DESC_PREFETCH;
3125 ew32(TXDCTL(1), txdctl);
3126
3127
3128
3129
3130
3131 if (mac->type == e1000_ich8lan)
3132 snoop = PCIE_ICH8_SNOOP_ALL;
3133 else
3134 snoop = (u32) ~(PCIE_NO_SNOOP_ALL);
3135 e1000e_set_pcie_no_snoop(hw, snoop);
3136
3137 ctrl_ext = er32(CTRL_EXT);
3138 ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
3139 ew32(CTRL_EXT, ctrl_ext);
3140
3141
3142
3143
3144
3145
3146
3147 e1000_clear_hw_cntrs_ich8lan(hw);
3148
3149 return 0;
3150}
3151
3152
3153
3154
3155
3156
3157
3158static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw)
3159{
3160 u32 reg;
3161
3162
3163 reg = er32(CTRL_EXT);
3164 reg |= (1 << 22);
3165
3166 if (hw->mac.type >= e1000_pchlan)
3167 reg |= E1000_CTRL_EXT_PHYPDEN;
3168 ew32(CTRL_EXT, reg);
3169
3170
3171 reg = er32(TXDCTL(0));
3172 reg |= (1 << 22);
3173 ew32(TXDCTL(0), reg);
3174
3175
3176 reg = er32(TXDCTL(1));
3177 reg |= (1 << 22);
3178 ew32(TXDCTL(1), reg);
3179
3180
3181 reg = er32(TARC(0));
3182 if (hw->mac.type == e1000_ich8lan)
3183 reg |= (1 << 28) | (1 << 29);
3184 reg |= (1 << 23) | (1 << 24) | (1 << 26) | (1 << 27);
3185 ew32(TARC(0), reg);
3186
3187
3188 reg = er32(TARC(1));
3189 if (er32(TCTL) & E1000_TCTL_MULR)
3190 reg &= ~(1 << 28);
3191 else
3192 reg |= (1 << 28);
3193 reg |= (1 << 24) | (1 << 26) | (1 << 30);
3194 ew32(TARC(1), reg);
3195
3196
3197 if (hw->mac.type == e1000_ich8lan) {
3198 reg = er32(STATUS);
3199 reg &= ~(1 << 31);
3200 ew32(STATUS, reg);
3201 }
3202
3203
3204
3205
3206
3207 reg = er32(RFCTL);
3208 reg |= (E1000_RFCTL_NFSW_DIS | E1000_RFCTL_NFSR_DIS);
3209 ew32(RFCTL, reg);
3210}
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw)
3223{
3224 s32 ret_val;
3225
3226 if (e1000_check_reset_block(hw))
3227 return 0;
3228
3229
3230
3231
3232
3233
3234 if (hw->fc.requested_mode == e1000_fc_default) {
3235
3236 if (hw->mac.type == e1000_pchlan)
3237 hw->fc.requested_mode = e1000_fc_rx_pause;
3238 else
3239 hw->fc.requested_mode = e1000_fc_full;
3240 }
3241
3242
3243
3244
3245
3246 hw->fc.current_mode = hw->fc.requested_mode;
3247
3248 e_dbg("After fix-ups FlowControl is now = %x\n",
3249 hw->fc.current_mode);
3250
3251
3252 ret_val = e1000_setup_copper_link_ich8lan(hw);
3253 if (ret_val)
3254 return ret_val;
3255
3256 ew32(FCTTV, hw->fc.pause_time);
3257 if ((hw->phy.type == e1000_phy_82578) ||
3258 (hw->phy.type == e1000_phy_82579) ||
3259 (hw->phy.type == e1000_phy_82577)) {
3260 ew32(FCRTV_PCH, hw->fc.refresh_time);
3261
3262 ret_val = e1e_wphy(hw, PHY_REG(BM_PORT_CTRL_PAGE, 27),
3263 hw->fc.pause_time);
3264 if (ret_val)
3265 return ret_val;
3266 }
3267
3268 return e1000e_set_fc_watermarks(hw);
3269}
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw)
3280{
3281 u32 ctrl;
3282 s32 ret_val;
3283 u16 reg_data;
3284
3285 ctrl = er32(CTRL);
3286 ctrl |= E1000_CTRL_SLU;
3287 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
3288 ew32(CTRL, ctrl);
3289
3290
3291
3292
3293
3294
3295 ret_val = e1000e_write_kmrn_reg(hw, E1000_KMRNCTRLSTA_TIMEOUTS, 0xFFFF);
3296 if (ret_val)
3297 return ret_val;
3298 ret_val = e1000e_read_kmrn_reg(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
3299 ®_data);
3300 if (ret_val)
3301 return ret_val;
3302 reg_data |= 0x3F;
3303 ret_val = e1000e_write_kmrn_reg(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
3304 reg_data);
3305 if (ret_val)
3306 return ret_val;
3307
3308 switch (hw->phy.type) {
3309 case e1000_phy_igp_3:
3310 ret_val = e1000e_copper_link_setup_igp(hw);
3311 if (ret_val)
3312 return ret_val;
3313 break;
3314 case e1000_phy_bm:
3315 case e1000_phy_82578:
3316 ret_val = e1000e_copper_link_setup_m88(hw);
3317 if (ret_val)
3318 return ret_val;
3319 break;
3320 case e1000_phy_82577:
3321 case e1000_phy_82579:
3322 ret_val = e1000_copper_link_setup_82577(hw);
3323 if (ret_val)
3324 return ret_val;
3325 break;
3326 case e1000_phy_ife:
3327 ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, ®_data);
3328 if (ret_val)
3329 return ret_val;
3330
3331 reg_data &= ~IFE_PMC_AUTO_MDIX;
3332
3333 switch (hw->phy.mdix) {
3334 case 1:
3335 reg_data &= ~IFE_PMC_FORCE_MDIX;
3336 break;
3337 case 2:
3338 reg_data |= IFE_PMC_FORCE_MDIX;
3339 break;
3340 case 0:
3341 default:
3342 reg_data |= IFE_PMC_AUTO_MDIX;
3343 break;
3344 }
3345 ret_val = e1e_wphy(hw, IFE_PHY_MDIX_CONTROL, reg_data);
3346 if (ret_val)
3347 return ret_val;
3348 break;
3349 default:
3350 break;
3351 }
3352 return e1000e_setup_copper_link(hw);
3353}
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365static s32 e1000_get_link_up_info_ich8lan(struct e1000_hw *hw, u16 *speed,
3366 u16 *duplex)
3367{
3368 s32 ret_val;
3369
3370 ret_val = e1000e_get_speed_and_duplex_copper(hw, speed, duplex);
3371 if (ret_val)
3372 return ret_val;
3373
3374 if ((hw->mac.type == e1000_ich8lan) &&
3375 (hw->phy.type == e1000_phy_igp_3) &&
3376 (*speed == SPEED_1000)) {
3377 ret_val = e1000_kmrn_lock_loss_workaround_ich8lan(hw);
3378 }
3379
3380 return ret_val;
3381}
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398static s32 e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw)
3399{
3400 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
3401 u32 phy_ctrl;
3402 s32 ret_val;
3403 u16 i, data;
3404 bool link;
3405
3406 if (!dev_spec->kmrn_lock_loss_workaround_enabled)
3407 return 0;
3408
3409
3410
3411
3412
3413
3414 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
3415 if (!link)
3416 return 0;
3417
3418 for (i = 0; i < 10; i++) {
3419
3420 ret_val = e1e_rphy(hw, IGP3_KMRN_DIAG, &data);
3421 if (ret_val)
3422 return ret_val;
3423
3424 ret_val = e1e_rphy(hw, IGP3_KMRN_DIAG, &data);
3425 if (ret_val)
3426 return ret_val;
3427
3428
3429 if (!(data & IGP3_KMRN_DIAG_PCS_LOCK_LOSS))
3430 return 0;
3431
3432
3433 e1000_phy_hw_reset(hw);
3434 mdelay(5);
3435 }
3436
3437 phy_ctrl = er32(PHY_CTRL);
3438 phy_ctrl |= (E1000_PHY_CTRL_GBE_DISABLE |
3439 E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
3440 ew32(PHY_CTRL, phy_ctrl);
3441
3442
3443
3444
3445
3446 e1000e_gig_downshift_workaround_ich8lan(hw);
3447
3448
3449 return -E1000_ERR_PHY;
3450}
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
3461 bool state)
3462{
3463 struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
3464
3465 if (hw->mac.type != e1000_ich8lan) {
3466 e_dbg("Workaround applies to ICH8 only.\n");
3467 return;
3468 }
3469
3470 dev_spec->kmrn_lock_loss_workaround_enabled = state;
3471}
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw)
3484{
3485 u32 reg;
3486 u16 data;
3487 u8 retry = 0;
3488
3489 if (hw->phy.type != e1000_phy_igp_3)
3490 return;
3491
3492
3493 do {
3494
3495 reg = er32(PHY_CTRL);
3496 reg |= (E1000_PHY_CTRL_GBE_DISABLE |
3497 E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
3498 ew32(PHY_CTRL, reg);
3499
3500
3501
3502
3503
3504 if (hw->mac.type == e1000_ich8lan)
3505 e1000e_gig_downshift_workaround_ich8lan(hw);
3506
3507
3508 e1e_rphy(hw, IGP3_VR_CTRL, &data);
3509 data &= ~IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK;
3510 e1e_wphy(hw, IGP3_VR_CTRL, data | IGP3_VR_CTRL_MODE_SHUTDOWN);
3511
3512
3513 e1e_rphy(hw, IGP3_VR_CTRL, &data);
3514 data &= IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK;
3515 if ((data == IGP3_VR_CTRL_MODE_SHUTDOWN) || retry)
3516 break;
3517
3518
3519 reg = er32(CTRL);
3520 ew32(CTRL, reg | E1000_CTRL_PHY_RST);
3521 retry++;
3522 } while (retry);
3523}
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw)
3536{
3537 s32 ret_val;
3538 u16 reg_data;
3539
3540 if ((hw->mac.type != e1000_ich8lan) ||
3541 (hw->phy.type != e1000_phy_igp_3))
3542 return;
3543
3544 ret_val = e1000e_read_kmrn_reg(hw, E1000_KMRNCTRLSTA_DIAG_OFFSET,
3545 ®_data);
3546 if (ret_val)
3547 return;
3548 reg_data |= E1000_KMRNCTRLSTA_DIAG_NELPBK;
3549 ret_val = e1000e_write_kmrn_reg(hw, E1000_KMRNCTRLSTA_DIAG_OFFSET,
3550 reg_data);
3551 if (ret_val)
3552 return;
3553 reg_data &= ~E1000_KMRNCTRLSTA_DIAG_NELPBK;
3554 ret_val = e1000e_write_kmrn_reg(hw, E1000_KMRNCTRLSTA_DIAG_OFFSET,
3555 reg_data);
3556}
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569void e1000e_disable_gig_wol_ich8lan(struct e1000_hw *hw)
3570{
3571 u32 phy_ctrl;
3572 s32 ret_val;
3573
3574 phy_ctrl = er32(PHY_CTRL);
3575 phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU | E1000_PHY_CTRL_GBE_DISABLE;
3576 ew32(PHY_CTRL, phy_ctrl);
3577
3578 if (hw->mac.type >= e1000_pchlan) {
3579 e1000_oem_bits_config_ich8lan(hw, false);
3580 ret_val = hw->phy.ops.acquire(hw);
3581 if (ret_val)
3582 return;
3583 e1000_write_smbus_addr(hw);
3584 hw->phy.ops.release(hw);
3585 }
3586}
3587
3588
3589
3590
3591
3592
3593
3594static s32 e1000_cleanup_led_ich8lan(struct e1000_hw *hw)
3595{
3596 if (hw->phy.type == e1000_phy_ife)
3597 return e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED, 0);
3598
3599 ew32(LEDCTL, hw->mac.ledctl_default);
3600 return 0;
3601}
3602
3603
3604
3605
3606
3607
3608
3609static s32 e1000_led_on_ich8lan(struct e1000_hw *hw)
3610{
3611 if (hw->phy.type == e1000_phy_ife)
3612 return e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED,
3613 (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_ON));
3614
3615 ew32(LEDCTL, hw->mac.ledctl_mode2);
3616 return 0;
3617}
3618
3619
3620
3621
3622
3623
3624
3625static s32 e1000_led_off_ich8lan(struct e1000_hw *hw)
3626{
3627 if (hw->phy.type == e1000_phy_ife)
3628 return e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED,
3629 (IFE_PSCL_PROBE_MODE |
3630 IFE_PSCL_PROBE_LEDS_OFF));
3631
3632 ew32(LEDCTL, hw->mac.ledctl_mode1);
3633 return 0;
3634}
3635
3636
3637
3638
3639
3640
3641
3642static s32 e1000_setup_led_pchlan(struct e1000_hw *hw)
3643{
3644 return e1e_wphy(hw, HV_LED_CONFIG, (u16)hw->mac.ledctl_mode1);
3645}
3646
3647
3648
3649
3650
3651
3652
3653static s32 e1000_cleanup_led_pchlan(struct e1000_hw *hw)
3654{
3655 return e1e_wphy(hw, HV_LED_CONFIG, (u16)hw->mac.ledctl_default);
3656}
3657
3658
3659
3660
3661
3662
3663
3664static s32 e1000_led_on_pchlan(struct e1000_hw *hw)
3665{
3666 u16 data = (u16)hw->mac.ledctl_mode2;
3667 u32 i, led;
3668
3669
3670
3671
3672
3673 if (!(er32(STATUS) & E1000_STATUS_LU)) {
3674 for (i = 0; i < 3; i++) {
3675 led = (data >> (i * 5)) & E1000_PHY_LED0_MASK;
3676 if ((led & E1000_PHY_LED0_MODE_MASK) !=
3677 E1000_LEDCTL_MODE_LINK_UP)
3678 continue;
3679 if (led & E1000_PHY_LED0_IVRT)
3680 data &= ~(E1000_PHY_LED0_IVRT << (i * 5));
3681 else
3682 data |= (E1000_PHY_LED0_IVRT << (i * 5));
3683 }
3684 }
3685
3686 return e1e_wphy(hw, HV_LED_CONFIG, data);
3687}
3688
3689
3690
3691
3692
3693
3694
3695static s32 e1000_led_off_pchlan(struct e1000_hw *hw)
3696{
3697 u16 data = (u16)hw->mac.ledctl_mode1;
3698 u32 i, led;
3699
3700
3701
3702
3703
3704 if (!(er32(STATUS) & E1000_STATUS_LU)) {
3705 for (i = 0; i < 3; i++) {
3706 led = (data >> (i * 5)) & E1000_PHY_LED0_MASK;
3707 if ((led & E1000_PHY_LED0_MODE_MASK) !=
3708 E1000_LEDCTL_MODE_LINK_UP)
3709 continue;
3710 if (led & E1000_PHY_LED0_IVRT)
3711 data &= ~(E1000_PHY_LED0_IVRT << (i * 5));
3712 else
3713 data |= (E1000_PHY_LED0_IVRT << (i * 5));
3714 }
3715 }
3716
3717 return e1e_wphy(hw, HV_LED_CONFIG, data);
3718}
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw)
3733{
3734 s32 ret_val = 0;
3735 u32 bank = 0;
3736 u32 status;
3737
3738 e1000e_get_cfg_done(hw);
3739
3740
3741 if (hw->mac.type >= e1000_ich10lan) {
3742 e1000_lan_init_done_ich8lan(hw);
3743 } else {
3744 ret_val = e1000e_get_auto_rd_done(hw);
3745 if (ret_val) {
3746
3747
3748
3749
3750
3751 e_dbg("Auto Read Done did not complete\n");
3752 ret_val = 0;
3753 }
3754 }
3755
3756
3757 status = er32(STATUS);
3758 if (status & E1000_STATUS_PHYRA)
3759 ew32(STATUS, status & ~E1000_STATUS_PHYRA);
3760 else
3761 e_dbg("PHY Reset Asserted not set - needs delay\n");
3762
3763
3764 if (hw->mac.type <= e1000_ich9lan) {
3765 if (((er32(EECD) & E1000_EECD_PRES) == 0) &&
3766 (hw->phy.type == e1000_phy_igp_3)) {
3767 e1000e_phy_init_script_igp3(hw);
3768 }
3769 } else {
3770 if (e1000_valid_nvm_bank_detect_ich8lan(hw, &bank)) {
3771
3772 e_dbg("EEPROM not present\n");
3773 ret_val = -E1000_ERR_CONFIG;
3774 }
3775 }
3776
3777 return ret_val;
3778}
3779
3780
3781
3782
3783
3784
3785
3786
3787static void e1000_power_down_phy_copper_ich8lan(struct e1000_hw *hw)
3788{
3789
3790 if (!(hw->mac.ops.check_mng_mode(hw) ||
3791 hw->phy.ops.check_reset_block(hw)))
3792 e1000_power_down_phy_copper(hw);
3793}
3794
3795
3796
3797
3798
3799
3800
3801
3802static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw)
3803{
3804 u16 phy_data;
3805
3806 e1000e_clear_hw_cntrs_base(hw);
3807
3808 er32(ALGNERRC);
3809 er32(RXERRC);
3810 er32(TNCRS);
3811 er32(CEXTERR);
3812 er32(TSCTC);
3813 er32(TSCTFC);
3814
3815 er32(MGTPRC);
3816 er32(MGTPDC);
3817 er32(MGTPTC);
3818
3819 er32(IAC);
3820 er32(ICRXOC);
3821
3822
3823 if ((hw->phy.type == e1000_phy_82578) ||
3824 (hw->phy.type == e1000_phy_82579) ||
3825 (hw->phy.type == e1000_phy_82577)) {
3826 e1e_rphy(hw, HV_SCC_UPPER, &phy_data);
3827 e1e_rphy(hw, HV_SCC_LOWER, &phy_data);
3828 e1e_rphy(hw, HV_ECOL_UPPER, &phy_data);
3829 e1e_rphy(hw, HV_ECOL_LOWER, &phy_data);
3830 e1e_rphy(hw, HV_MCC_UPPER, &phy_data);
3831 e1e_rphy(hw, HV_MCC_LOWER, &phy_data);
3832 e1e_rphy(hw, HV_LATECOL_UPPER, &phy_data);
3833 e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data);
3834 e1e_rphy(hw, HV_COLC_UPPER, &phy_data);
3835 e1e_rphy(hw, HV_COLC_LOWER, &phy_data);
3836 e1e_rphy(hw, HV_DC_UPPER, &phy_data);
3837 e1e_rphy(hw, HV_DC_LOWER, &phy_data);
3838 e1e_rphy(hw, HV_TNCRS_UPPER, &phy_data);
3839 e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data);
3840 }
3841}
3842
3843static struct e1000_mac_operations ich8_mac_ops = {
3844 .id_led_init = e1000e_id_led_init,
3845
3846 .check_for_link = e1000_check_for_copper_link_ich8lan,
3847
3848 .clear_hw_cntrs = e1000_clear_hw_cntrs_ich8lan,
3849 .get_bus_info = e1000_get_bus_info_ich8lan,
3850 .set_lan_id = e1000_set_lan_id_single_port,
3851 .get_link_up_info = e1000_get_link_up_info_ich8lan,
3852
3853
3854 .update_mc_addr_list = e1000e_update_mc_addr_list_generic,
3855 .reset_hw = e1000_reset_hw_ich8lan,
3856 .init_hw = e1000_init_hw_ich8lan,
3857 .setup_link = e1000_setup_link_ich8lan,
3858 .setup_physical_interface= e1000_setup_copper_link_ich8lan,
3859
3860};
3861
3862static struct e1000_phy_operations ich8_phy_ops = {
3863 .acquire = e1000_acquire_swflag_ich8lan,
3864 .check_reset_block = e1000_check_reset_block_ich8lan,
3865 .commit = NULL,
3866 .get_cfg_done = e1000_get_cfg_done_ich8lan,
3867 .get_cable_length = e1000e_get_cable_length_igp_2,
3868 .read_reg = e1000e_read_phy_reg_igp,
3869 .release = e1000_release_swflag_ich8lan,
3870 .reset = e1000_phy_hw_reset_ich8lan,
3871 .set_d0_lplu_state = e1000_set_d0_lplu_state_ich8lan,
3872 .set_d3_lplu_state = e1000_set_d3_lplu_state_ich8lan,
3873 .write_reg = e1000e_write_phy_reg_igp,
3874};
3875
3876static struct e1000_nvm_operations ich8_nvm_ops = {
3877 .acquire = e1000_acquire_nvm_ich8lan,
3878 .read = e1000_read_nvm_ich8lan,
3879 .release = e1000_release_nvm_ich8lan,
3880 .update = e1000_update_nvm_checksum_ich8lan,
3881 .valid_led_default = e1000_valid_led_default_ich8lan,
3882 .validate = e1000_validate_nvm_checksum_ich8lan,
3883 .write = e1000_write_nvm_ich8lan,
3884};
3885
3886struct e1000_info e1000_ich8_info = {
3887 .mac = e1000_ich8lan,
3888 .flags = FLAG_HAS_WOL
3889 | FLAG_IS_ICH
3890 | FLAG_RX_CSUM_ENABLED
3891 | FLAG_HAS_CTRLEXT_ON_LOAD
3892 | FLAG_HAS_AMT
3893 | FLAG_HAS_FLASH
3894 | FLAG_APME_IN_WUC,
3895 .pba = 8,
3896 .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
3897 .get_variants = e1000_get_variants_ich8lan,
3898 .mac_ops = &ich8_mac_ops,
3899 .phy_ops = &ich8_phy_ops,
3900 .nvm_ops = &ich8_nvm_ops,
3901};
3902
3903struct e1000_info e1000_ich9_info = {
3904 .mac = e1000_ich9lan,
3905 .flags = FLAG_HAS_JUMBO_FRAMES
3906 | FLAG_IS_ICH
3907 | FLAG_HAS_WOL
3908 | FLAG_RX_CSUM_ENABLED
3909 | FLAG_HAS_CTRLEXT_ON_LOAD
3910 | FLAG_HAS_AMT
3911 | FLAG_HAS_ERT
3912 | FLAG_HAS_FLASH
3913 | FLAG_APME_IN_WUC,
3914 .pba = 10,
3915 .max_hw_frame_size = DEFAULT_JUMBO,
3916 .get_variants = e1000_get_variants_ich8lan,
3917 .mac_ops = &ich8_mac_ops,
3918 .phy_ops = &ich8_phy_ops,
3919 .nvm_ops = &ich8_nvm_ops,
3920};
3921
3922struct e1000_info e1000_ich10_info = {
3923 .mac = e1000_ich10lan,
3924 .flags = FLAG_HAS_JUMBO_FRAMES
3925 | FLAG_IS_ICH
3926 | FLAG_HAS_WOL
3927 | FLAG_RX_CSUM_ENABLED
3928 | FLAG_HAS_CTRLEXT_ON_LOAD
3929 | FLAG_HAS_AMT
3930 | FLAG_HAS_ERT
3931 | FLAG_HAS_FLASH
3932 | FLAG_APME_IN_WUC,
3933 .pba = 10,
3934 .max_hw_frame_size = DEFAULT_JUMBO,
3935 .get_variants = e1000_get_variants_ich8lan,
3936 .mac_ops = &ich8_mac_ops,
3937 .phy_ops = &ich8_phy_ops,
3938 .nvm_ops = &ich8_nvm_ops,
3939};
3940
3941struct e1000_info e1000_pch_info = {
3942 .mac = e1000_pchlan,
3943 .flags = FLAG_IS_ICH
3944 | FLAG_HAS_WOL
3945 | FLAG_RX_CSUM_ENABLED
3946 | FLAG_HAS_CTRLEXT_ON_LOAD
3947 | FLAG_HAS_AMT
3948 | FLAG_HAS_FLASH
3949 | FLAG_HAS_JUMBO_FRAMES
3950 | FLAG_DISABLE_FC_PAUSE_TIME
3951 | FLAG_APME_IN_WUC,
3952 .flags2 = FLAG2_HAS_PHY_STATS,
3953 .pba = 26,
3954 .max_hw_frame_size = 4096,
3955 .get_variants = e1000_get_variants_ich8lan,
3956 .mac_ops = &ich8_mac_ops,
3957 .phy_ops = &ich8_phy_ops,
3958 .nvm_ops = &ich8_nvm_ops,
3959};
3960
3961struct e1000_info e1000_pch2_info = {
3962 .mac = e1000_pch2lan,
3963 .flags = FLAG_IS_ICH
3964 | FLAG_HAS_WOL
3965 | FLAG_RX_CSUM_ENABLED
3966 | FLAG_HAS_CTRLEXT_ON_LOAD
3967 | FLAG_HAS_AMT
3968 | FLAG_HAS_FLASH
3969 | FLAG_HAS_JUMBO_FRAMES
3970 | FLAG_APME_IN_WUC,
3971 .flags2 = FLAG2_HAS_PHY_STATS
3972 | FLAG2_HAS_EEE,
3973 .pba = 26,
3974 .max_hw_frame_size = DEFAULT_JUMBO,
3975 .get_variants = e1000_get_variants_ich8lan,
3976 .mac_ops = &ich8_mac_ops,
3977 .phy_ops = &ich8_phy_ops,
3978 .nvm_ops = &ich8_nvm_ops,
3979};
3980