|
@@ -771,16 +771,28 @@ static int mentormac_mdio_read ( struct efab_nic *efab, int phy_id,
|
771
|
771
|
#define EF1_EVT3_REG 0x38
|
772
|
772
|
|
773
|
773
|
/** EEPROM access */
|
774
|
|
-#define EF1_EEPROM_REG 0x0040
|
|
774
|
+#define EF1_EEPROM_REG 0x40
|
|
775
|
+#define EF1_EEPROM_SDA_LBN 31
|
|
776
|
+#define EF1_EEPROM_SDA_WIDTH 1
|
|
777
|
+#define EF1_EEPROM_SCL_LBN 30
|
|
778
|
+#define EF1_EEPROM_SCL_WIDTH 1
|
|
779
|
+#define EF1_JTAG_DISCONNECT_LBN 17
|
|
780
|
+#define EF1_JTAG_DISCONNECT_WIDTH 1
|
775
|
781
|
#define EF1_EEPROM_LBN 0
|
776
|
782
|
#define EF1_EEPROM_WIDTH 32
|
777
|
783
|
|
778
|
784
|
/** Control register 2 */
|
779
|
785
|
#define EF1_CTL2_REG 0x4c
|
|
786
|
+#define EF1_PLL_TRAP_LBN 31
|
|
787
|
+#define EF1_PLL_TRAP_WIDTH 1
|
780
|
788
|
#define EF1_MEM_MAP_4MB_LBN 11
|
781
|
789
|
#define EF1_MEM_MAP_4MB_WIDTH 1
|
782
|
790
|
#define EF1_EV_INTR_CLR_WRITE_LBN 6
|
783
|
791
|
#define EF1_EV_INTR_CLR_WRITE_WIDTH 1
|
|
792
|
+#define EF1_BURST_MERGE_LBN 5
|
|
793
|
+#define EF1_BURST_MERGE_WIDTH 1
|
|
794
|
+#define EF1_CLEAR_NULL_PAD_LBN 4
|
|
795
|
+#define EF1_CLEAR_NULL_PAD_WIDTH 1
|
784
|
796
|
#define EF1_SW_RESET_LBN 2
|
785
|
797
|
#define EF1_SW_RESET_WIDTH 1
|
786
|
798
|
#define EF1_INTR_AFTER_EVENT_LBN 1
|
|
@@ -1083,15 +1095,20 @@ static int ef1002_init_nic ( struct efab_nic *efab ) {
|
1083
|
1095
|
/* General control register 0 */
|
1084
|
1096
|
ef1002_readl ( efab, ®, EF1_CTR_GEN_STATUS0_REG );
|
1085
|
1097
|
EFAB_SET_DWORD_FIELD ( reg, EF1_MASTER_EVENTS, 0 );
|
|
1098
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_TX_ENGINE_EN, 0 );
|
|
1099
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_RX_ENGINE_EN, 0 );
|
1086
|
1100
|
EFAB_SET_DWORD_FIELD ( reg, EF1_CAM_ENABLE, 1 );
|
1087
|
1101
|
ef1002_writel ( efab, ®, EF1_CTR_GEN_STATUS0_REG );
|
1088
|
1102
|
udelay ( 1000 );
|
1089
|
1103
|
|
1090
|
1104
|
/* General control register 2 */
|
1091
|
1105
|
ef1002_readl ( efab, ®, EF1_CTL2_REG );
|
1092
|
|
- EFAB_SET_DWORD_FIELD ( reg, EF1_INTR_AFTER_EVENT, 1 );
|
1093
|
|
- EFAB_SET_DWORD_FIELD ( reg, EF1_EV_INTR_CLR_WRITE, 0 );
|
|
1106
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_PLL_TRAP, 1 );
|
1094
|
1107
|
EFAB_SET_DWORD_FIELD ( reg, EF1_MEM_MAP_4MB, 0 );
|
|
1108
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_EV_INTR_CLR_WRITE, 0 );
|
|
1109
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_BURST_MERGE, 0 );
|
|
1110
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_CLEAR_NULL_PAD, 1 );
|
|
1111
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_INTR_AFTER_EVENT, 1 );
|
1095
|
1112
|
ef1002_writel ( efab, ®, EF1_CTL2_REG );
|
1096
|
1113
|
udelay ( 1000 );
|
1097
|
1114
|
|
|
@@ -1111,6 +1128,17 @@ static int ef1002_init_nic ( struct efab_nic *efab ) {
|
1111
|
1128
|
ef1002_writel ( efab, ®, EF1_DMA_TX_CSR_REG );
|
1112
|
1129
|
udelay ( 1000 );
|
1113
|
1130
|
|
|
1131
|
+ /* Disconnect the JTAG chain. Read-modify-write is impossible
|
|
1132
|
+ * on the I2C control bits, since reading gives the state of
|
|
1133
|
+ * the line inputs rather than the last written state.
|
|
1134
|
+ */
|
|
1135
|
+ ef1002_readl ( efab, ®, EF1_EEPROM_REG );
|
|
1136
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_EEPROM_SDA, 1 );
|
|
1137
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_EEPROM_SCL, 1 );
|
|
1138
|
+ EFAB_SET_DWORD_FIELD ( reg, EF1_JTAG_DISCONNECT, 1 );
|
|
1139
|
+ ef1002_writel ( efab, ®, EF1_EEPROM_REG );
|
|
1140
|
+ udelay ( 10 );
|
|
1141
|
+
|
1114
|
1142
|
/* Flush descriptor queues */
|
1115
|
1143
|
EFAB_ZERO_DWORD ( reg );
|
1116
|
1144
|
ef1002_writel ( efab, ®, EF1_RX_DESC_FIFO_FLUSH );
|