diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2009-10-23 04:30:36 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-24 07:27:03 -0400 |
commit | 3e6c4538542ab2103ab7c01f4458bc2e21b672a1 (patch) | |
tree | 0ae49634fa3288704d6c5bf8e279909b52401734 /drivers/net/sfc/falcon_xmac.c | |
parent | 625b451455cebb7120492766c8425b6e808fc209 (diff) |
sfc: Update hardware definitions for Siena
Siena is still based on the Falcon hardware architecture and will
share many of these definitions, so replace falcon_hwdefs.h with
regs.h.
The new definitions have been generated according to a naming
convention which incorporates the type and revision information.
Update the code accordingly.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc/falcon_xmac.c')
-rw-r--r-- | drivers/net/sfc/falcon_xmac.c | 175 |
1 files changed, 85 insertions, 90 deletions
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c index b486a2b317b5..44e65584ee32 100644 --- a/drivers/net/sfc/falcon_xmac.c +++ b/drivers/net/sfc/falcon_xmac.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include "net_driver.h" | 12 | #include "net_driver.h" |
13 | #include "efx.h" | 13 | #include "efx.h" |
14 | #include "falcon.h" | 14 | #include "falcon.h" |
15 | #include "falcon_hwdefs.h" | 15 | #include "regs.h" |
16 | #include "falcon_io.h" | 16 | #include "falcon_io.h" |
17 | #include "mac.h" | 17 | #include "mac.h" |
18 | #include "mdio_10g.h" | 18 | #include "mdio_10g.h" |
@@ -35,27 +35,27 @@ static void falcon_setup_xaui(struct efx_nic *efx) | |||
35 | if (efx->phy_type == PHY_TYPE_NONE) | 35 | if (efx->phy_type == PHY_TYPE_NONE) |
36 | return; | 36 | return; |
37 | 37 | ||
38 | falcon_read(efx, &sdctl, XX_SD_CTL_REG); | 38 | falcon_read(efx, &sdctl, FR_AB_XX_SD_CTL); |
39 | EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVD, XX_SD_CTL_DRV_DEFAULT); | 39 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVD, FFE_AB_XX_SD_CTL_DRV_DEF); |
40 | EFX_SET_OWORD_FIELD(sdctl, XX_LODRVD, XX_SD_CTL_DRV_DEFAULT); | 40 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVD, FFE_AB_XX_SD_CTL_DRV_DEF); |
41 | EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVC, XX_SD_CTL_DRV_DEFAULT); | 41 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVC, FFE_AB_XX_SD_CTL_DRV_DEF); |
42 | EFX_SET_OWORD_FIELD(sdctl, XX_LODRVC, XX_SD_CTL_DRV_DEFAULT); | 42 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVC, FFE_AB_XX_SD_CTL_DRV_DEF); |
43 | EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVB, XX_SD_CTL_DRV_DEFAULT); | 43 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVB, FFE_AB_XX_SD_CTL_DRV_DEF); |
44 | EFX_SET_OWORD_FIELD(sdctl, XX_LODRVB, XX_SD_CTL_DRV_DEFAULT); | 44 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVB, FFE_AB_XX_SD_CTL_DRV_DEF); |
45 | EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVA, XX_SD_CTL_DRV_DEFAULT); | 45 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVA, FFE_AB_XX_SD_CTL_DRV_DEF); |
46 | EFX_SET_OWORD_FIELD(sdctl, XX_LODRVA, XX_SD_CTL_DRV_DEFAULT); | 46 | EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVA, FFE_AB_XX_SD_CTL_DRV_DEF); |
47 | falcon_write(efx, &sdctl, XX_SD_CTL_REG); | 47 | falcon_write(efx, &sdctl, FR_AB_XX_SD_CTL); |
48 | 48 | ||
49 | EFX_POPULATE_OWORD_8(txdrv, | 49 | EFX_POPULATE_OWORD_8(txdrv, |
50 | XX_DEQD, XX_TXDRV_DEQ_DEFAULT, | 50 | FRF_AB_XX_DEQD, FFE_AB_XX_TXDRV_DEQ_DEF, |
51 | XX_DEQC, XX_TXDRV_DEQ_DEFAULT, | 51 | FRF_AB_XX_DEQC, FFE_AB_XX_TXDRV_DEQ_DEF, |
52 | XX_DEQB, XX_TXDRV_DEQ_DEFAULT, | 52 | FRF_AB_XX_DEQB, FFE_AB_XX_TXDRV_DEQ_DEF, |
53 | XX_DEQA, XX_TXDRV_DEQ_DEFAULT, | 53 | FRF_AB_XX_DEQA, FFE_AB_XX_TXDRV_DEQ_DEF, |
54 | XX_DTXD, XX_TXDRV_DTX_DEFAULT, | 54 | FRF_AB_XX_DTXD, FFE_AB_XX_TXDRV_DTX_DEF, |
55 | XX_DTXC, XX_TXDRV_DTX_DEFAULT, | 55 | FRF_AB_XX_DTXC, FFE_AB_XX_TXDRV_DTX_DEF, |
56 | XX_DTXB, XX_TXDRV_DTX_DEFAULT, | 56 | FRF_AB_XX_DTXB, FFE_AB_XX_TXDRV_DTX_DEF, |
57 | XX_DTXA, XX_TXDRV_DTX_DEFAULT); | 57 | FRF_AB_XX_DTXA, FFE_AB_XX_TXDRV_DTX_DEF); |
58 | falcon_write(efx, &txdrv, XX_TXDRV_CTL_REG); | 58 | falcon_write(efx, &txdrv, FR_AB_XX_TXDRV_CTL); |
59 | } | 59 | } |
60 | 60 | ||
61 | int falcon_reset_xaui(struct efx_nic *efx) | 61 | int falcon_reset_xaui(struct efx_nic *efx) |
@@ -64,14 +64,14 @@ int falcon_reset_xaui(struct efx_nic *efx) | |||
64 | int count; | 64 | int count; |
65 | 65 | ||
66 | /* Start reset sequence */ | 66 | /* Start reset sequence */ |
67 | EFX_POPULATE_DWORD_1(reg, XX_RST_XX_EN, 1); | 67 | EFX_POPULATE_DWORD_1(reg, FRF_AB_XX_RST_XX_EN, 1); |
68 | falcon_write(efx, ®, XX_PWR_RST_REG); | 68 | falcon_write(efx, ®, FR_AB_XX_PWR_RST); |
69 | 69 | ||
70 | /* Wait up to 10 ms for completion, then reinitialise */ | 70 | /* Wait up to 10 ms for completion, then reinitialise */ |
71 | for (count = 0; count < 1000; count++) { | 71 | for (count = 0; count < 1000; count++) { |
72 | falcon_read(efx, ®, XX_PWR_RST_REG); | 72 | falcon_read(efx, ®, FR_AB_XX_PWR_RST); |
73 | if (EFX_OWORD_FIELD(reg, XX_RST_XX_EN) == 0 && | 73 | if (EFX_OWORD_FIELD(reg, FRF_AB_XX_RST_XX_EN) == 0 && |
74 | EFX_OWORD_FIELD(reg, XX_SD_RST_ACT) == 0) { | 74 | EFX_OWORD_FIELD(reg, FRF_AB_XX_SD_RST_ACT) == 0) { |
75 | falcon_setup_xaui(efx); | 75 | falcon_setup_xaui(efx); |
76 | return 0; | 76 | return 0; |
77 | } | 77 | } |
@@ -99,12 +99,12 @@ static void falcon_mask_status_intr(struct efx_nic *efx, bool enable) | |||
99 | 99 | ||
100 | /* Flush the ISR */ | 100 | /* Flush the ISR */ |
101 | if (enable) | 101 | if (enable) |
102 | falcon_read(efx, ®, XM_MGT_INT_REG_B0); | 102 | falcon_read(efx, ®, FR_AB_XM_MGT_INT_MSK); |
103 | 103 | ||
104 | EFX_POPULATE_OWORD_2(reg, | 104 | EFX_POPULATE_OWORD_2(reg, |
105 | XM_MSK_RMTFLT, !enable, | 105 | FRF_AB_XM_MSK_RMTFLT, !enable, |
106 | XM_MSK_LCLFLT, !enable); | 106 | FRF_AB_XM_MSK_LCLFLT, !enable); |
107 | falcon_write(efx, ®, XM_MGT_INT_MSK_REG_B0); | 107 | falcon_write(efx, ®, FR_AB_XM_MGT_INT_MASK); |
108 | } | 108 | } |
109 | 109 | ||
110 | /* Get status of XAUI link */ | 110 | /* Get status of XAUI link */ |
@@ -118,18 +118,18 @@ bool falcon_xaui_link_ok(struct efx_nic *efx) | |||
118 | return true; | 118 | return true; |
119 | 119 | ||
120 | /* Read link status */ | 120 | /* Read link status */ |
121 | falcon_read(efx, ®, XX_CORE_STAT_REG); | 121 | falcon_read(efx, ®, FR_AB_XX_CORE_STAT); |
122 | 122 | ||
123 | align_done = EFX_OWORD_FIELD(reg, XX_ALIGN_DONE); | 123 | align_done = EFX_OWORD_FIELD(reg, FRF_AB_XX_ALIGN_DONE); |
124 | sync_status = EFX_OWORD_FIELD(reg, XX_SYNC_STAT); | 124 | sync_status = EFX_OWORD_FIELD(reg, FRF_AB_XX_SYNC_STAT); |
125 | if (align_done && (sync_status == XX_SYNC_STAT_DECODE_SYNCED)) | 125 | if (align_done && (sync_status == FFE_AB_XX_STAT_ALL_LANES)) |
126 | link_ok = true; | 126 | link_ok = true; |
127 | 127 | ||
128 | /* Clear link status ready for next read */ | 128 | /* Clear link status ready for next read */ |
129 | EFX_SET_OWORD_FIELD(reg, XX_COMMA_DET, XX_COMMA_DET_RESET); | 129 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_COMMA_DET, FFE_AB_XX_STAT_ALL_LANES); |
130 | EFX_SET_OWORD_FIELD(reg, XX_CHARERR, XX_CHARERR_RESET); | 130 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_CHAR_ERR, FFE_AB_XX_STAT_ALL_LANES); |
131 | EFX_SET_OWORD_FIELD(reg, XX_DISPERR, XX_DISPERR_RESET); | 131 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_DISPERR, FFE_AB_XX_STAT_ALL_LANES); |
132 | falcon_write(efx, ®, XX_CORE_STAT_REG); | 132 | falcon_write(efx, ®, FR_AB_XX_CORE_STAT); |
133 | 133 | ||
134 | /* If the link is up, then check the phy side of the xaui link */ | 134 | /* If the link is up, then check the phy side of the xaui link */ |
135 | if (efx->link_up && link_ok) | 135 | if (efx->link_up && link_ok) |
@@ -147,55 +147,49 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx) | |||
147 | 147 | ||
148 | /* Configure MAC - cut-thru mode is hard wired on */ | 148 | /* Configure MAC - cut-thru mode is hard wired on */ |
149 | EFX_POPULATE_DWORD_3(reg, | 149 | EFX_POPULATE_DWORD_3(reg, |
150 | XM_RX_JUMBO_MODE, 1, | 150 | FRF_AB_XM_RX_JUMBO_MODE, 1, |
151 | XM_TX_STAT_EN, 1, | 151 | FRF_AB_XM_TX_STAT_EN, 1, |
152 | XM_RX_STAT_EN, 1); | 152 | FRF_AB_XM_RX_STAT_EN, 1); |
153 | falcon_write(efx, ®, XM_GLB_CFG_REG); | 153 | falcon_write(efx, ®, FR_AB_XM_GLB_CFG); |
154 | 154 | ||
155 | /* Configure TX */ | 155 | /* Configure TX */ |
156 | EFX_POPULATE_DWORD_6(reg, | 156 | EFX_POPULATE_DWORD_6(reg, |
157 | XM_TXEN, 1, | 157 | FRF_AB_XM_TXEN, 1, |
158 | XM_TX_PRMBL, 1, | 158 | FRF_AB_XM_TX_PRMBL, 1, |
159 | XM_AUTO_PAD, 1, | 159 | FRF_AB_XM_AUTO_PAD, 1, |
160 | XM_TXCRC, 1, | 160 | FRF_AB_XM_TXCRC, 1, |
161 | XM_FCNTL, 1, | 161 | FRF_AB_XM_FCNTL, 1, |
162 | XM_IPG, 0x3); | 162 | FRF_AB_XM_IPG, 0x3); |
163 | falcon_write(efx, ®, XM_TX_CFG_REG); | 163 | falcon_write(efx, ®, FR_AB_XM_TX_CFG); |
164 | 164 | ||
165 | /* Configure RX */ | 165 | /* Configure RX */ |
166 | EFX_POPULATE_DWORD_5(reg, | 166 | EFX_POPULATE_DWORD_5(reg, |
167 | XM_RXEN, 1, | 167 | FRF_AB_XM_RXEN, 1, |
168 | XM_AUTO_DEPAD, 0, | 168 | FRF_AB_XM_AUTO_DEPAD, 0, |
169 | XM_ACPT_ALL_MCAST, 1, | 169 | FRF_AB_XM_ACPT_ALL_MCAST, 1, |
170 | XM_ACPT_ALL_UCAST, efx->promiscuous, | 170 | FRF_AB_XM_ACPT_ALL_UCAST, efx->promiscuous, |
171 | XM_PASS_CRC_ERR, 1); | 171 | FRF_AB_XM_PASS_CRC_ERR, 1); |
172 | falcon_write(efx, ®, XM_RX_CFG_REG); | 172 | falcon_write(efx, ®, FR_AB_XM_RX_CFG); |
173 | 173 | ||
174 | /* Set frame length */ | 174 | /* Set frame length */ |
175 | max_frame_len = EFX_MAX_FRAME_LEN(efx->net_dev->mtu); | 175 | max_frame_len = EFX_MAX_FRAME_LEN(efx->net_dev->mtu); |
176 | EFX_POPULATE_DWORD_1(reg, XM_MAX_RX_FRM_SIZE, max_frame_len); | 176 | EFX_POPULATE_DWORD_1(reg, FRF_AB_XM_MAX_RX_FRM_SIZE, max_frame_len); |
177 | falcon_write(efx, ®, XM_RX_PARAM_REG); | 177 | falcon_write(efx, ®, FR_AB_XM_RX_PARAM); |
178 | EFX_POPULATE_DWORD_2(reg, | 178 | EFX_POPULATE_DWORD_2(reg, |
179 | XM_MAX_TX_FRM_SIZE, max_frame_len, | 179 | FRF_AB_XM_MAX_TX_FRM_SIZE, max_frame_len, |
180 | XM_TX_JUMBO_MODE, 1); | 180 | FRF_AB_XM_TX_JUMBO_MODE, 1); |
181 | falcon_write(efx, ®, XM_TX_PARAM_REG); | 181 | falcon_write(efx, ®, FR_AB_XM_TX_PARAM); |
182 | 182 | ||
183 | EFX_POPULATE_DWORD_2(reg, | 183 | EFX_POPULATE_DWORD_2(reg, |
184 | XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */ | 184 | FRF_AB_XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */ |
185 | XM_DIS_FCNTL, !rx_fc); | 185 | FRF_AB_XM_DIS_FCNTL, !rx_fc); |
186 | falcon_write(efx, ®, XM_FC_REG); | 186 | falcon_write(efx, ®, FR_AB_XM_FC); |
187 | 187 | ||
188 | /* Set MAC address */ | 188 | /* Set MAC address */ |
189 | EFX_POPULATE_DWORD_4(reg, | 189 | memcpy(®, &efx->net_dev->dev_addr[0], 4); |
190 | XM_ADR_0, efx->net_dev->dev_addr[0], | 190 | falcon_write(efx, ®, FR_AB_XM_ADR_LO); |
191 | XM_ADR_1, efx->net_dev->dev_addr[1], | 191 | memcpy(®, &efx->net_dev->dev_addr[4], 2); |
192 | XM_ADR_2, efx->net_dev->dev_addr[2], | 192 | falcon_write(efx, ®, FR_AB_XM_ADR_HI); |
193 | XM_ADR_3, efx->net_dev->dev_addr[3]); | ||
194 | falcon_write(efx, ®, XM_ADR_LO_REG); | ||
195 | EFX_POPULATE_DWORD_2(reg, | ||
196 | XM_ADR_4, efx->net_dev->dev_addr[4], | ||
197 | XM_ADR_5, efx->net_dev->dev_addr[5]); | ||
198 | falcon_write(efx, ®, XM_ADR_HI_REG); | ||
199 | } | 193 | } |
200 | 194 | ||
201 | static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) | 195 | static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) |
@@ -211,12 +205,13 @@ static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) | |||
211 | bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback; | 205 | bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback; |
212 | bool reset_xgxs; | 206 | bool reset_xgxs; |
213 | 207 | ||
214 | falcon_read(efx, ®, XX_CORE_STAT_REG); | 208 | falcon_read(efx, ®, FR_AB_XX_CORE_STAT); |
215 | old_xgxs_loopback = EFX_OWORD_FIELD(reg, XX_XGXS_LB_EN); | 209 | old_xgxs_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN); |
216 | old_xgmii_loopback = EFX_OWORD_FIELD(reg, XX_XGMII_LB_EN); | 210 | old_xgmii_loopback = |
211 | EFX_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN); | ||
217 | 212 | ||
218 | falcon_read(efx, ®, XX_SD_CTL_REG); | 213 | falcon_read(efx, ®, FR_AB_XX_SD_CTL); |
219 | old_xaui_loopback = EFX_OWORD_FIELD(reg, XX_LPBKA); | 214 | old_xaui_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_LPBKA); |
220 | 215 | ||
221 | /* The PHY driver may have turned XAUI off */ | 216 | /* The PHY driver may have turned XAUI off */ |
222 | reset_xgxs = ((xgxs_loopback != old_xgxs_loopback) || | 217 | reset_xgxs = ((xgxs_loopback != old_xgxs_loopback) || |
@@ -227,20 +222,20 @@ static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) | |||
227 | falcon_reset_xaui(efx); | 222 | falcon_reset_xaui(efx); |
228 | } | 223 | } |
229 | 224 | ||
230 | falcon_read(efx, ®, XX_CORE_STAT_REG); | 225 | falcon_read(efx, ®, FR_AB_XX_CORE_STAT); |
231 | EFX_SET_OWORD_FIELD(reg, XX_FORCE_SIG, | 226 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_FORCE_SIG, |
232 | (xgxs_loopback || xaui_loopback) ? | 227 | (xgxs_loopback || xaui_loopback) ? |
233 | XX_FORCE_SIG_DECODE_FORCED : 0); | 228 | FFE_AB_XX_FORCE_SIG_ALL_LANES : 0); |
234 | EFX_SET_OWORD_FIELD(reg, XX_XGXS_LB_EN, xgxs_loopback); | 229 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN, xgxs_loopback); |
235 | EFX_SET_OWORD_FIELD(reg, XX_XGMII_LB_EN, xgmii_loopback); | 230 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN, xgmii_loopback); |
236 | falcon_write(efx, ®, XX_CORE_STAT_REG); | 231 | falcon_write(efx, ®, FR_AB_XX_CORE_STAT); |
237 | 232 | ||
238 | falcon_read(efx, ®, XX_SD_CTL_REG); | 233 | falcon_read(efx, ®, FR_AB_XX_SD_CTL); |
239 | EFX_SET_OWORD_FIELD(reg, XX_LPBKD, xaui_loopback); | 234 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKD, xaui_loopback); |
240 | EFX_SET_OWORD_FIELD(reg, XX_LPBKC, xaui_loopback); | 235 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKC, xaui_loopback); |
241 | EFX_SET_OWORD_FIELD(reg, XX_LPBKB, xaui_loopback); | 236 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKB, xaui_loopback); |
242 | EFX_SET_OWORD_FIELD(reg, XX_LPBKA, xaui_loopback); | 237 | EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKA, xaui_loopback); |
243 | falcon_write(efx, ®, XX_SD_CTL_REG); | 238 | falcon_write(efx, ®, FR_AB_XX_SD_CTL); |
244 | } | 239 | } |
245 | 240 | ||
246 | 241 | ||