siena.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030
  1. /****************************************************************************
  2. * Driver for Solarflare network controllers and boards
  3. * Copyright 2005-2006 Fen Systems Ltd.
  4. * Copyright 2006-2013 Solarflare Communications Inc.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License version 2 as published
  8. * by the Free Software Foundation, incorporated herein by reference.
  9. */
  10. #include <linux/bitops.h>
  11. #include <linux/delay.h>
  12. #include <linux/pci.h>
  13. #include <linux/module.h>
  14. #include <linux/slab.h>
  15. #include <linux/random.h>
  16. #include "net_driver.h"
  17. #include "bitfield.h"
  18. #include "efx.h"
  19. #include "nic.h"
  20. #include "farch_regs.h"
  21. #include "io.h"
  22. #include "phy.h"
  23. #include "workarounds.h"
  24. #include "mcdi.h"
  25. #include "mcdi_pcol.h"
  26. #include "selftest.h"
  27. /* Hardware control for SFC9000 family including SFL9021 (aka Siena). */
  28. static void siena_init_wol(struct efx_nic *efx);
  29. static void siena_push_irq_moderation(struct efx_channel *channel)
  30. {
  31. efx_dword_t timer_cmd;
  32. if (channel->irq_moderation)
  33. EFX_POPULATE_DWORD_2(timer_cmd,
  34. FRF_CZ_TC_TIMER_MODE,
  35. FFE_CZ_TIMER_MODE_INT_HLDOFF,
  36. FRF_CZ_TC_TIMER_VAL,
  37. channel->irq_moderation - 1);
  38. else
  39. EFX_POPULATE_DWORD_2(timer_cmd,
  40. FRF_CZ_TC_TIMER_MODE,
  41. FFE_CZ_TIMER_MODE_DIS,
  42. FRF_CZ_TC_TIMER_VAL, 0);
  43. efx_writed_page_locked(channel->efx, &timer_cmd, FR_BZ_TIMER_COMMAND_P0,
  44. channel->channel);
  45. }
  46. void siena_prepare_flush(struct efx_nic *efx)
  47. {
  48. if (efx->fc_disable++ == 0)
  49. efx_mcdi_set_mac(efx);
  50. }
  51. void siena_finish_flush(struct efx_nic *efx)
  52. {
  53. if (--efx->fc_disable == 0)
  54. efx_mcdi_set_mac(efx);
  55. }
  56. static const struct efx_farch_register_test siena_register_tests[] = {
  57. { FR_AZ_ADR_REGION,
  58. EFX_OWORD32(0x0003FFFF, 0x0003FFFF, 0x0003FFFF, 0x0003FFFF) },
  59. { FR_CZ_USR_EV_CFG,
  60. EFX_OWORD32(0x000103FF, 0x00000000, 0x00000000, 0x00000000) },
  61. { FR_AZ_RX_CFG,
  62. EFX_OWORD32(0xFFFFFFFE, 0xFFFFFFFF, 0x0003FFFF, 0x00000000) },
  63. { FR_AZ_TX_CFG,
  64. EFX_OWORD32(0x7FFF0037, 0xFFFF8000, 0xFFFFFFFF, 0x03FFFFFF) },
  65. { FR_AZ_TX_RESERVED,
  66. EFX_OWORD32(0xFFFEFE80, 0x1FFFFFFF, 0x020000FE, 0x007FFFFF) },
  67. { FR_AZ_SRM_TX_DC_CFG,
  68. EFX_OWORD32(0x001FFFFF, 0x00000000, 0x00000000, 0x00000000) },
  69. { FR_AZ_RX_DC_CFG,
  70. EFX_OWORD32(0x00000003, 0x00000000, 0x00000000, 0x00000000) },
  71. { FR_AZ_RX_DC_PF_WM,
  72. EFX_OWORD32(0x000003FF, 0x00000000, 0x00000000, 0x00000000) },
  73. { FR_BZ_DP_CTRL,
  74. EFX_OWORD32(0x00000FFF, 0x00000000, 0x00000000, 0x00000000) },
  75. { FR_BZ_RX_RSS_TKEY,
  76. EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) },
  77. { FR_CZ_RX_RSS_IPV6_REG1,
  78. EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) },
  79. { FR_CZ_RX_RSS_IPV6_REG2,
  80. EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) },
  81. { FR_CZ_RX_RSS_IPV6_REG3,
  82. EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000) },
  83. };
  84. static int siena_test_chip(struct efx_nic *efx, struct efx_self_tests *tests)
  85. {
  86. enum reset_type reset_method = RESET_TYPE_ALL;
  87. int rc, rc2;
  88. efx_reset_down(efx, reset_method);
  89. /* Reset the chip immediately so that it is completely
  90. * quiescent regardless of what any VF driver does.
  91. */
  92. rc = efx_mcdi_reset(efx, reset_method);
  93. if (rc)
  94. goto out;
  95. tests->registers =
  96. efx_farch_test_registers(efx, siena_register_tests,
  97. ARRAY_SIZE(siena_register_tests))
  98. ? -1 : 1;
  99. rc = efx_mcdi_reset(efx, reset_method);
  100. out:
  101. rc2 = efx_reset_up(efx, reset_method, rc == 0);
  102. return rc ? rc : rc2;
  103. }
  104. /**************************************************************************
  105. *
  106. * PTP
  107. *
  108. **************************************************************************
  109. */
  110. static void siena_ptp_write_host_time(struct efx_nic *efx, u32 host_time)
  111. {
  112. _efx_writed(efx, cpu_to_le32(host_time),
  113. FR_CZ_MC_TREG_SMEM + MC_SMEM_P0_PTP_TIME_OFST);
  114. }
  115. static int siena_ptp_set_ts_config(struct efx_nic *efx,
  116. struct hwtstamp_config *init)
  117. {
  118. int rc;
  119. switch (init->rx_filter) {
  120. case HWTSTAMP_FILTER_NONE:
  121. /* if TX timestamping is still requested then leave PTP on */
  122. return efx_ptp_change_mode(efx,
  123. init->tx_type != HWTSTAMP_TX_OFF,
  124. efx_ptp_get_mode(efx));
  125. case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
  126. case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
  127. case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
  128. init->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
  129. return efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V1);
  130. case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
  131. case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
  132. case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
  133. init->rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
  134. rc = efx_ptp_change_mode(efx, true,
  135. MC_CMD_PTP_MODE_V2_ENHANCED);
  136. /* bug 33070 - old versions of the firmware do not support the
  137. * improved UUID filtering option. Similarly old versions of the
  138. * application do not expect it to be enabled. If the firmware
  139. * does not accept the enhanced mode, fall back to the standard
  140. * PTP v2 UUID filtering. */
  141. if (rc != 0)
  142. rc = efx_ptp_change_mode(efx, true, MC_CMD_PTP_MODE_V2);
  143. return rc;
  144. default:
  145. return -ERANGE;
  146. }
  147. }
  148. /**************************************************************************
  149. *
  150. * Device reset
  151. *
  152. **************************************************************************
  153. */
  154. static int siena_map_reset_flags(u32 *flags)
  155. {
  156. enum {
  157. SIENA_RESET_PORT = (ETH_RESET_DMA | ETH_RESET_FILTER |
  158. ETH_RESET_OFFLOAD | ETH_RESET_MAC |
  159. ETH_RESET_PHY),
  160. SIENA_RESET_MC = (SIENA_RESET_PORT |
  161. ETH_RESET_MGMT << ETH_RESET_SHARED_SHIFT),
  162. };
  163. if ((*flags & SIENA_RESET_MC) == SIENA_RESET_MC) {
  164. *flags &= ~SIENA_RESET_MC;
  165. return RESET_TYPE_WORLD;
  166. }
  167. if ((*flags & SIENA_RESET_PORT) == SIENA_RESET_PORT) {
  168. *flags &= ~SIENA_RESET_PORT;
  169. return RESET_TYPE_ALL;
  170. }
  171. /* no invisible reset implemented */
  172. return -EINVAL;
  173. }
  174. #ifdef CONFIG_EEH
  175. /* When a PCI device is isolated from the bus, a subsequent MMIO read is
  176. * required for the kernel EEH mechanisms to notice. As the Solarflare driver
  177. * was written to minimise MMIO read (for latency) then a periodic call to check
  178. * the EEH status of the device is required so that device recovery can happen
  179. * in a timely fashion.
  180. */
  181. static void siena_monitor(struct efx_nic *efx)
  182. {
  183. struct eeh_dev *eehdev =
  184. of_node_to_eeh_dev(pci_device_to_OF_node(efx->pci_dev));
  185. eeh_dev_check_failure(eehdev);
  186. }
  187. #endif
  188. static int siena_probe_nvconfig(struct efx_nic *efx)
  189. {
  190. u32 caps = 0;
  191. int rc;
  192. rc = efx_mcdi_get_board_cfg(efx, efx->net_dev->perm_addr, NULL, &caps);
  193. efx->timer_quantum_ns =
  194. (caps & (1 << MC_CMD_CAPABILITIES_TURBO_ACTIVE_LBN)) ?
  195. 3072 : 6144; /* 768 cycles */
  196. return rc;
  197. }
  198. static int siena_dimension_resources(struct efx_nic *efx)
  199. {
  200. /* Each port has a small block of internal SRAM dedicated to
  201. * the buffer table and descriptor caches. In theory we can
  202. * map both blocks to one port, but we don't.
  203. */
  204. efx_farch_dimension_resources(efx, FR_CZ_BUF_FULL_TBL_ROWS / 2);
  205. return 0;
  206. }
  207. static unsigned int siena_mem_map_size(struct efx_nic *efx)
  208. {
  209. return FR_CZ_MC_TREG_SMEM +
  210. FR_CZ_MC_TREG_SMEM_STEP * FR_CZ_MC_TREG_SMEM_ROWS;
  211. }
  212. static int siena_probe_nic(struct efx_nic *efx)
  213. {
  214. struct siena_nic_data *nic_data;
  215. efx_oword_t reg;
  216. int rc;
  217. /* Allocate storage for hardware specific data */
  218. nic_data = kzalloc(sizeof(struct siena_nic_data), GFP_KERNEL);
  219. if (!nic_data)
  220. return -ENOMEM;
  221. nic_data->efx = efx;
  222. efx->nic_data = nic_data;
  223. if (efx_farch_fpga_ver(efx) != 0) {
  224. netif_err(efx, probe, efx->net_dev,
  225. "Siena FPGA not supported\n");
  226. rc = -ENODEV;
  227. goto fail1;
  228. }
  229. efx->max_channels = EFX_MAX_CHANNELS;
  230. efx_reado(efx, &reg, FR_AZ_CS_DEBUG);
  231. efx->port_num = EFX_OWORD_FIELD(reg, FRF_CZ_CS_PORT_NUM) - 1;
  232. rc = efx_mcdi_init(efx);
  233. if (rc)
  234. goto fail1;
  235. /* Now we can reset the NIC */
  236. rc = efx_mcdi_reset(efx, RESET_TYPE_ALL);
  237. if (rc) {
  238. netif_err(efx, probe, efx->net_dev, "failed to reset NIC\n");
  239. goto fail3;
  240. }
  241. siena_init_wol(efx);
  242. /* Allocate memory for INT_KER */
  243. rc = efx_nic_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t),
  244. GFP_KERNEL);
  245. if (rc)
  246. goto fail4;
  247. BUG_ON(efx->irq_status.dma_addr & 0x0f);
  248. netif_dbg(efx, probe, efx->net_dev,
  249. "INT_KER at %llx (virt %p phys %llx)\n",
  250. (unsigned long long)efx->irq_status.dma_addr,
  251. efx->irq_status.addr,
  252. (unsigned long long)virt_to_phys(efx->irq_status.addr));
  253. /* Read in the non-volatile configuration */
  254. rc = siena_probe_nvconfig(efx);
  255. if (rc == -EINVAL) {
  256. netif_err(efx, probe, efx->net_dev,
  257. "NVRAM is invalid therefore using defaults\n");
  258. efx->phy_type = PHY_TYPE_NONE;
  259. efx->mdio.prtad = MDIO_PRTAD_NONE;
  260. } else if (rc) {
  261. goto fail5;
  262. }
  263. rc = efx_mcdi_mon_probe(efx);
  264. if (rc)
  265. goto fail5;
  266. efx_siena_sriov_probe(efx);
  267. efx_ptp_defer_probe_with_channel(efx);
  268. return 0;
  269. fail5:
  270. efx_nic_free_buffer(efx, &efx->irq_status);
  271. fail4:
  272. fail3:
  273. efx_mcdi_fini(efx);
  274. fail1:
  275. kfree(efx->nic_data);
  276. return rc;
  277. }
  278. static void siena_rx_push_rss_config(struct efx_nic *efx)
  279. {
  280. efx_oword_t temp;
  281. /* Set hash key for IPv4 */
  282. memcpy(&temp, efx->rx_hash_key, sizeof(temp));
  283. efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY);
  284. /* Enable IPv6 RSS */
  285. BUILD_BUG_ON(sizeof(efx->rx_hash_key) <
  286. 2 * sizeof(temp) + FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH / 8 ||
  287. FRF_CZ_RX_RSS_IPV6_TKEY_HI_LBN != 0);
  288. memcpy(&temp, efx->rx_hash_key, sizeof(temp));
  289. efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG1);
  290. memcpy(&temp, efx->rx_hash_key + sizeof(temp), sizeof(temp));
  291. efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG2);
  292. EFX_POPULATE_OWORD_2(temp, FRF_CZ_RX_RSS_IPV6_THASH_ENABLE, 1,
  293. FRF_CZ_RX_RSS_IPV6_IP_THASH_ENABLE, 1);
  294. memcpy(&temp, efx->rx_hash_key + 2 * sizeof(temp),
  295. FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH / 8);
  296. efx_writeo(efx, &temp, FR_CZ_RX_RSS_IPV6_REG3);
  297. efx_farch_rx_push_indir_table(efx);
  298. }
  299. /* This call performs hardware-specific global initialisation, such as
  300. * defining the descriptor cache sizes and number of RSS channels.
  301. * It does not set up any buffers, descriptor rings or event queues.
  302. */
  303. static int siena_init_nic(struct efx_nic *efx)
  304. {
  305. efx_oword_t temp;
  306. int rc;
  307. /* Recover from a failed assertion post-reset */
  308. rc = efx_mcdi_handle_assertion(efx);
  309. if (rc)
  310. return rc;
  311. /* Squash TX of packets of 16 bytes or less */
  312. efx_reado(efx, &temp, FR_AZ_TX_RESERVED);
  313. EFX_SET_OWORD_FIELD(temp, FRF_BZ_TX_FLUSH_MIN_LEN_EN, 1);
  314. efx_writeo(efx, &temp, FR_AZ_TX_RESERVED);
  315. /* Do not enable TX_NO_EOP_DISC_EN, since it limits packets to 16
  316. * descriptors (which is bad).
  317. */
  318. efx_reado(efx, &temp, FR_AZ_TX_CFG);
  319. EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_NO_EOP_DISC_EN, 0);
  320. EFX_SET_OWORD_FIELD(temp, FRF_CZ_TX_FILTER_EN_BIT, 1);
  321. efx_writeo(efx, &temp, FR_AZ_TX_CFG);
  322. efx_reado(efx, &temp, FR_AZ_RX_CFG);
  323. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_DESC_PUSH_EN, 0);
  324. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_INGR_EN, 1);
  325. /* Enable hash insertion. This is broken for the 'Falcon' hash
  326. * if IPv6 hashing is also enabled, so also select Toeplitz
  327. * TCP/IPv4 and IPv4 hashes. */
  328. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_INSRT_HDR, 1);
  329. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_ALG, 1);
  330. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_IP_HASH, 1);
  331. EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_USR_BUF_SIZE,
  332. EFX_RX_USR_BUF_SIZE >> 5);
  333. efx_writeo(efx, &temp, FR_AZ_RX_CFG);
  334. siena_rx_push_rss_config(efx);
  335. /* Enable event logging */
  336. rc = efx_mcdi_log_ctrl(efx, true, false, 0);
  337. if (rc)
  338. return rc;
  339. /* Set destination of both TX and RX Flush events */
  340. EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0);
  341. efx_writeo(efx, &temp, FR_BZ_DP_CTRL);
  342. EFX_POPULATE_OWORD_1(temp, FRF_CZ_USREV_DIS, 1);
  343. efx_writeo(efx, &temp, FR_CZ_USR_EV_CFG);
  344. efx_farch_init_common(efx);
  345. return 0;
  346. }
  347. static void siena_remove_nic(struct efx_nic *efx)
  348. {
  349. efx_mcdi_mon_remove(efx);
  350. efx_nic_free_buffer(efx, &efx->irq_status);
  351. efx_mcdi_reset(efx, RESET_TYPE_ALL);
  352. efx_mcdi_fini(efx);
  353. /* Tear down the private nic state */
  354. kfree(efx->nic_data);
  355. efx->nic_data = NULL;
  356. }
  357. #define SIENA_DMA_STAT(ext_name, mcdi_name) \
  358. [SIENA_STAT_ ## ext_name] = \
  359. { #ext_name, 64, 8 * MC_CMD_MAC_ ## mcdi_name }
  360. #define SIENA_OTHER_STAT(ext_name) \
  361. [SIENA_STAT_ ## ext_name] = { #ext_name, 0, 0 }
  362. #define GENERIC_SW_STAT(ext_name) \
  363. [GENERIC_STAT_ ## ext_name] = { #ext_name, 0, 0 }
  364. static const struct efx_hw_stat_desc siena_stat_desc[SIENA_STAT_COUNT] = {
  365. SIENA_DMA_STAT(tx_bytes, TX_BYTES),
  366. SIENA_OTHER_STAT(tx_good_bytes),
  367. SIENA_DMA_STAT(tx_bad_bytes, TX_BAD_BYTES),
  368. SIENA_DMA_STAT(tx_packets, TX_PKTS),
  369. SIENA_DMA_STAT(tx_bad, TX_BAD_FCS_PKTS),
  370. SIENA_DMA_STAT(tx_pause, TX_PAUSE_PKTS),
  371. SIENA_DMA_STAT(tx_control, TX_CONTROL_PKTS),
  372. SIENA_DMA_STAT(tx_unicast, TX_UNICAST_PKTS),
  373. SIENA_DMA_STAT(tx_multicast, TX_MULTICAST_PKTS),
  374. SIENA_DMA_STAT(tx_broadcast, TX_BROADCAST_PKTS),
  375. SIENA_DMA_STAT(tx_lt64, TX_LT64_PKTS),
  376. SIENA_DMA_STAT(tx_64, TX_64_PKTS),
  377. SIENA_DMA_STAT(tx_65_to_127, TX_65_TO_127_PKTS),
  378. SIENA_DMA_STAT(tx_128_to_255, TX_128_TO_255_PKTS),
  379. SIENA_DMA_STAT(tx_256_to_511, TX_256_TO_511_PKTS),
  380. SIENA_DMA_STAT(tx_512_to_1023, TX_512_TO_1023_PKTS),
  381. SIENA_DMA_STAT(tx_1024_to_15xx, TX_1024_TO_15XX_PKTS),
  382. SIENA_DMA_STAT(tx_15xx_to_jumbo, TX_15XX_TO_JUMBO_PKTS),
  383. SIENA_DMA_STAT(tx_gtjumbo, TX_GTJUMBO_PKTS),
  384. SIENA_OTHER_STAT(tx_collision),
  385. SIENA_DMA_STAT(tx_single_collision, TX_SINGLE_COLLISION_PKTS),
  386. SIENA_DMA_STAT(tx_multiple_collision, TX_MULTIPLE_COLLISION_PKTS),
  387. SIENA_DMA_STAT(tx_excessive_collision, TX_EXCESSIVE_COLLISION_PKTS),
  388. SIENA_DMA_STAT(tx_deferred, TX_DEFERRED_PKTS),
  389. SIENA_DMA_STAT(tx_late_collision, TX_LATE_COLLISION_PKTS),
  390. SIENA_DMA_STAT(tx_excessive_deferred, TX_EXCESSIVE_DEFERRED_PKTS),
  391. SIENA_DMA_STAT(tx_non_tcpudp, TX_NON_TCPUDP_PKTS),
  392. SIENA_DMA_STAT(tx_mac_src_error, TX_MAC_SRC_ERR_PKTS),
  393. SIENA_DMA_STAT(tx_ip_src_error, TX_IP_SRC_ERR_PKTS),
  394. SIENA_DMA_STAT(rx_bytes, RX_BYTES),
  395. SIENA_OTHER_STAT(rx_good_bytes),
  396. SIENA_DMA_STAT(rx_bad_bytes, RX_BAD_BYTES),
  397. SIENA_DMA_STAT(rx_packets, RX_PKTS),
  398. SIENA_DMA_STAT(rx_good, RX_GOOD_PKTS),
  399. SIENA_DMA_STAT(rx_bad, RX_BAD_FCS_PKTS),
  400. SIENA_DMA_STAT(rx_pause, RX_PAUSE_PKTS),
  401. SIENA_DMA_STAT(rx_control, RX_CONTROL_PKTS),
  402. SIENA_DMA_STAT(rx_unicast, RX_UNICAST_PKTS),
  403. SIENA_DMA_STAT(rx_multicast, RX_MULTICAST_PKTS),
  404. SIENA_DMA_STAT(rx_broadcast, RX_BROADCAST_PKTS),
  405. SIENA_DMA_STAT(rx_lt64, RX_UNDERSIZE_PKTS),
  406. SIENA_DMA_STAT(rx_64, RX_64_PKTS),
  407. SIENA_DMA_STAT(rx_65_to_127, RX_65_TO_127_PKTS),
  408. SIENA_DMA_STAT(rx_128_to_255, RX_128_TO_255_PKTS),
  409. SIENA_DMA_STAT(rx_256_to_511, RX_256_TO_511_PKTS),
  410. SIENA_DMA_STAT(rx_512_to_1023, RX_512_TO_1023_PKTS),
  411. SIENA_DMA_STAT(rx_1024_to_15xx, RX_1024_TO_15XX_PKTS),
  412. SIENA_DMA_STAT(rx_15xx_to_jumbo, RX_15XX_TO_JUMBO_PKTS),
  413. SIENA_DMA_STAT(rx_gtjumbo, RX_GTJUMBO_PKTS),
  414. SIENA_DMA_STAT(rx_bad_gtjumbo, RX_JABBER_PKTS),
  415. SIENA_DMA_STAT(rx_overflow, RX_OVERFLOW_PKTS),
  416. SIENA_DMA_STAT(rx_false_carrier, RX_FALSE_CARRIER_PKTS),
  417. SIENA_DMA_STAT(rx_symbol_error, RX_SYMBOL_ERROR_PKTS),
  418. SIENA_DMA_STAT(rx_align_error, RX_ALIGN_ERROR_PKTS),
  419. SIENA_DMA_STAT(rx_length_error, RX_LENGTH_ERROR_PKTS),
  420. SIENA_DMA_STAT(rx_internal_error, RX_INTERNAL_ERROR_PKTS),
  421. SIENA_DMA_STAT(rx_nodesc_drop_cnt, RX_NODESC_DROPS),
  422. GENERIC_SW_STAT(rx_nodesc_trunc),
  423. GENERIC_SW_STAT(rx_noskb_drops),
  424. };
  425. static const unsigned long siena_stat_mask[] = {
  426. [0 ... BITS_TO_LONGS(SIENA_STAT_COUNT) - 1] = ~0UL,
  427. };
  428. static size_t siena_describe_nic_stats(struct efx_nic *efx, u8 *names)
  429. {
  430. return efx_nic_describe_stats(siena_stat_desc, SIENA_STAT_COUNT,
  431. siena_stat_mask, names);
  432. }
  433. static int siena_try_update_nic_stats(struct efx_nic *efx)
  434. {
  435. struct siena_nic_data *nic_data = efx->nic_data;
  436. u64 *stats = nic_data->stats;
  437. __le64 *dma_stats;
  438. __le64 generation_start, generation_end;
  439. dma_stats = efx->stats_buffer.addr;
  440. generation_end = dma_stats[MC_CMD_MAC_GENERATION_END];
  441. if (generation_end == EFX_MC_STATS_GENERATION_INVALID)
  442. return 0;
  443. rmb();
  444. efx_nic_update_stats(siena_stat_desc, SIENA_STAT_COUNT, siena_stat_mask,
  445. stats, efx->stats_buffer.addr, false);
  446. rmb();
  447. generation_start = dma_stats[MC_CMD_MAC_GENERATION_START];
  448. if (generation_end != generation_start)
  449. return -EAGAIN;
  450. /* Update derived statistics */
  451. efx_nic_fix_nodesc_drop_stat(efx,
  452. &stats[SIENA_STAT_rx_nodesc_drop_cnt]);
  453. efx_update_diff_stat(&stats[SIENA_STAT_tx_good_bytes],
  454. stats[SIENA_STAT_tx_bytes] -
  455. stats[SIENA_STAT_tx_bad_bytes]);
  456. stats[SIENA_STAT_tx_collision] =
  457. stats[SIENA_STAT_tx_single_collision] +
  458. stats[SIENA_STAT_tx_multiple_collision] +
  459. stats[SIENA_STAT_tx_excessive_collision] +
  460. stats[SIENA_STAT_tx_late_collision];
  461. efx_update_diff_stat(&stats[SIENA_STAT_rx_good_bytes],
  462. stats[SIENA_STAT_rx_bytes] -
  463. stats[SIENA_STAT_rx_bad_bytes]);
  464. efx_update_sw_stats(efx, stats);
  465. return 0;
  466. }
  467. static size_t siena_update_nic_stats(struct efx_nic *efx, u64 *full_stats,
  468. struct rtnl_link_stats64 *core_stats)
  469. {
  470. struct siena_nic_data *nic_data = efx->nic_data;
  471. u64 *stats = nic_data->stats;
  472. int retry;
  473. /* If we're unlucky enough to read statistics wduring the DMA, wait
  474. * up to 10ms for it to finish (typically takes <500us) */
  475. for (retry = 0; retry < 100; ++retry) {
  476. if (siena_try_update_nic_stats(efx) == 0)
  477. break;
  478. udelay(100);
  479. }
  480. if (full_stats)
  481. memcpy(full_stats, stats, sizeof(u64) * SIENA_STAT_COUNT);
  482. if (core_stats) {
  483. core_stats->rx_packets = stats[SIENA_STAT_rx_packets];
  484. core_stats->tx_packets = stats[SIENA_STAT_tx_packets];
  485. core_stats->rx_bytes = stats[SIENA_STAT_rx_bytes];
  486. core_stats->tx_bytes = stats[SIENA_STAT_tx_bytes];
  487. core_stats->rx_dropped = stats[SIENA_STAT_rx_nodesc_drop_cnt] +
  488. stats[GENERIC_STAT_rx_nodesc_trunc] +
  489. stats[GENERIC_STAT_rx_noskb_drops];
  490. core_stats->multicast = stats[SIENA_STAT_rx_multicast];
  491. core_stats->collisions = stats[SIENA_STAT_tx_collision];
  492. core_stats->rx_length_errors =
  493. stats[SIENA_STAT_rx_gtjumbo] +
  494. stats[SIENA_STAT_rx_length_error];
  495. core_stats->rx_crc_errors = stats[SIENA_STAT_rx_bad];
  496. core_stats->rx_frame_errors = stats[SIENA_STAT_rx_align_error];
  497. core_stats->rx_fifo_errors = stats[SIENA_STAT_rx_overflow];
  498. core_stats->tx_window_errors =
  499. stats[SIENA_STAT_tx_late_collision];
  500. core_stats->rx_errors = (core_stats->rx_length_errors +
  501. core_stats->rx_crc_errors +
  502. core_stats->rx_frame_errors +
  503. stats[SIENA_STAT_rx_symbol_error]);
  504. core_stats->tx_errors = (core_stats->tx_window_errors +
  505. stats[SIENA_STAT_tx_bad]);
  506. }
  507. return SIENA_STAT_COUNT;
  508. }
  509. static int siena_mac_reconfigure(struct efx_nic *efx)
  510. {
  511. MCDI_DECLARE_BUF(inbuf, MC_CMD_SET_MCAST_HASH_IN_LEN);
  512. int rc;
  513. BUILD_BUG_ON(MC_CMD_SET_MCAST_HASH_IN_LEN !=
  514. MC_CMD_SET_MCAST_HASH_IN_HASH0_OFST +
  515. sizeof(efx->multicast_hash));
  516. efx_farch_filter_sync_rx_mode(efx);
  517. WARN_ON(!mutex_is_locked(&efx->mac_lock));
  518. rc = efx_mcdi_set_mac(efx);
  519. if (rc != 0)
  520. return rc;
  521. memcpy(MCDI_PTR(inbuf, SET_MCAST_HASH_IN_HASH0),
  522. efx->multicast_hash.byte, sizeof(efx->multicast_hash));
  523. return efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH,
  524. inbuf, sizeof(inbuf), NULL, 0, NULL);
  525. }
  526. /**************************************************************************
  527. *
  528. * Wake on LAN
  529. *
  530. **************************************************************************
  531. */
  532. static void siena_get_wol(struct efx_nic *efx, struct ethtool_wolinfo *wol)
  533. {
  534. struct siena_nic_data *nic_data = efx->nic_data;
  535. wol->supported = WAKE_MAGIC;
  536. if (nic_data->wol_filter_id != -1)
  537. wol->wolopts = WAKE_MAGIC;
  538. else
  539. wol->wolopts = 0;
  540. memset(&wol->sopass, 0, sizeof(wol->sopass));
  541. }
  542. static int siena_set_wol(struct efx_nic *efx, u32 type)
  543. {
  544. struct siena_nic_data *nic_data = efx->nic_data;
  545. int rc;
  546. if (type & ~WAKE_MAGIC)
  547. return -EINVAL;
  548. if (type & WAKE_MAGIC) {
  549. if (nic_data->wol_filter_id != -1)
  550. efx_mcdi_wol_filter_remove(efx,
  551. nic_data->wol_filter_id);
  552. rc = efx_mcdi_wol_filter_set_magic(efx, efx->net_dev->dev_addr,
  553. &nic_data->wol_filter_id);
  554. if (rc)
  555. goto fail;
  556. pci_wake_from_d3(efx->pci_dev, true);
  557. } else {
  558. rc = efx_mcdi_wol_filter_reset(efx);
  559. nic_data->wol_filter_id = -1;
  560. pci_wake_from_d3(efx->pci_dev, false);
  561. if (rc)
  562. goto fail;
  563. }
  564. return 0;
  565. fail:
  566. netif_err(efx, hw, efx->net_dev, "%s failed: type=%d rc=%d\n",
  567. __func__, type, rc);
  568. return rc;
  569. }
  570. static void siena_init_wol(struct efx_nic *efx)
  571. {
  572. struct siena_nic_data *nic_data = efx->nic_data;
  573. int rc;
  574. rc = efx_mcdi_wol_filter_get_magic(efx, &nic_data->wol_filter_id);
  575. if (rc != 0) {
  576. /* If it failed, attempt to get into a synchronised
  577. * state with MC by resetting any set WoL filters */
  578. efx_mcdi_wol_filter_reset(efx);
  579. nic_data->wol_filter_id = -1;
  580. } else if (nic_data->wol_filter_id != -1) {
  581. pci_wake_from_d3(efx->pci_dev, true);
  582. }
  583. }
  584. /**************************************************************************
  585. *
  586. * MCDI
  587. *
  588. **************************************************************************
  589. */
  590. #define MCDI_PDU(efx) \
  591. (efx_port_num(efx) ? MC_SMEM_P1_PDU_OFST : MC_SMEM_P0_PDU_OFST)
  592. #define MCDI_DOORBELL(efx) \
  593. (efx_port_num(efx) ? MC_SMEM_P1_DOORBELL_OFST : MC_SMEM_P0_DOORBELL_OFST)
  594. #define MCDI_STATUS(efx) \
  595. (efx_port_num(efx) ? MC_SMEM_P1_STATUS_OFST : MC_SMEM_P0_STATUS_OFST)
  596. static void siena_mcdi_request(struct efx_nic *efx,
  597. const efx_dword_t *hdr, size_t hdr_len,
  598. const efx_dword_t *sdu, size_t sdu_len)
  599. {
  600. unsigned pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
  601. unsigned doorbell = FR_CZ_MC_TREG_SMEM + MCDI_DOORBELL(efx);
  602. unsigned int i;
  603. unsigned int inlen_dw = DIV_ROUND_UP(sdu_len, 4);
  604. EFX_BUG_ON_PARANOID(hdr_len != 4);
  605. efx_writed(efx, hdr, pdu);
  606. for (i = 0; i < inlen_dw; i++)
  607. efx_writed(efx, &sdu[i], pdu + hdr_len + 4 * i);
  608. /* Ensure the request is written out before the doorbell */
  609. wmb();
  610. /* ring the doorbell with a distinctive value */
  611. _efx_writed(efx, (__force __le32) 0x45789abc, doorbell);
  612. }
  613. static bool siena_mcdi_poll_response(struct efx_nic *efx)
  614. {
  615. unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
  616. efx_dword_t hdr;
  617. efx_readd(efx, &hdr, pdu);
  618. /* All 1's indicates that shared memory is in reset (and is
  619. * not a valid hdr). Wait for it to come out reset before
  620. * completing the command
  621. */
  622. return EFX_DWORD_FIELD(hdr, EFX_DWORD_0) != 0xffffffff &&
  623. EFX_DWORD_FIELD(hdr, MCDI_HEADER_RESPONSE);
  624. }
  625. static void siena_mcdi_read_response(struct efx_nic *efx, efx_dword_t *outbuf,
  626. size_t offset, size_t outlen)
  627. {
  628. unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
  629. unsigned int outlen_dw = DIV_ROUND_UP(outlen, 4);
  630. int i;
  631. for (i = 0; i < outlen_dw; i++)
  632. efx_readd(efx, &outbuf[i], pdu + offset + 4 * i);
  633. }
  634. static int siena_mcdi_poll_reboot(struct efx_nic *efx)
  635. {
  636. struct siena_nic_data *nic_data = efx->nic_data;
  637. unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx);
  638. efx_dword_t reg;
  639. u32 value;
  640. efx_readd(efx, &reg, addr);
  641. value = EFX_DWORD_FIELD(reg, EFX_DWORD_0);
  642. if (value == 0)
  643. return 0;
  644. EFX_ZERO_DWORD(reg);
  645. efx_writed(efx, &reg, addr);
  646. /* MAC statistics have been cleared on the NIC; clear the local
  647. * copies that we update with efx_update_diff_stat().
  648. */
  649. nic_data->stats[SIENA_STAT_tx_good_bytes] = 0;
  650. nic_data->stats[SIENA_STAT_rx_good_bytes] = 0;
  651. if (value == MC_STATUS_DWORD_ASSERT)
  652. return -EINTR;
  653. else
  654. return -EIO;
  655. }
  656. /**************************************************************************
  657. *
  658. * MTD
  659. *
  660. **************************************************************************
  661. */
  662. #ifdef CONFIG_SFC_MTD
  663. struct siena_nvram_type_info {
  664. int port;
  665. const char *name;
  666. };
  667. static const struct siena_nvram_type_info siena_nvram_types[] = {
  668. [MC_CMD_NVRAM_TYPE_DISABLED_CALLISTO] = { 0, "sfc_dummy_phy" },
  669. [MC_CMD_NVRAM_TYPE_MC_FW] = { 0, "sfc_mcfw" },
  670. [MC_CMD_NVRAM_TYPE_MC_FW_BACKUP] = { 0, "sfc_mcfw_backup" },
  671. [MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT0] = { 0, "sfc_static_cfg" },
  672. [MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT1] = { 1, "sfc_static_cfg" },
  673. [MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT0] = { 0, "sfc_dynamic_cfg" },
  674. [MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT1] = { 1, "sfc_dynamic_cfg" },
  675. [MC_CMD_NVRAM_TYPE_EXP_ROM] = { 0, "sfc_exp_rom" },
  676. [MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT0] = { 0, "sfc_exp_rom_cfg" },
  677. [MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT1] = { 1, "sfc_exp_rom_cfg" },
  678. [MC_CMD_NVRAM_TYPE_PHY_PORT0] = { 0, "sfc_phy_fw" },
  679. [MC_CMD_NVRAM_TYPE_PHY_PORT1] = { 1, "sfc_phy_fw" },
  680. [MC_CMD_NVRAM_TYPE_FPGA] = { 0, "sfc_fpga" },
  681. };
  682. static int siena_mtd_probe_partition(struct efx_nic *efx,
  683. struct efx_mcdi_mtd_partition *part,
  684. unsigned int type)
  685. {
  686. const struct siena_nvram_type_info *info;
  687. size_t size, erase_size;
  688. bool protected;
  689. int rc;
  690. if (type >= ARRAY_SIZE(siena_nvram_types) ||
  691. siena_nvram_types[type].name == NULL)
  692. return -ENODEV;
  693. info = &siena_nvram_types[type];
  694. if (info->port != efx_port_num(efx))
  695. return -ENODEV;
  696. rc = efx_mcdi_nvram_info(efx, type, &size, &erase_size, &protected);
  697. if (rc)
  698. return rc;
  699. if (protected)
  700. return -ENODEV; /* hide it */
  701. part->nvram_type = type;
  702. part->common.dev_type_name = "Siena NVRAM manager";
  703. part->common.type_name = info->name;
  704. part->common.mtd.type = MTD_NORFLASH;
  705. part->common.mtd.flags = MTD_CAP_NORFLASH;
  706. part->common.mtd.size = size;
  707. part->common.mtd.erasesize = erase_size;
  708. return 0;
  709. }
  710. static int siena_mtd_get_fw_subtypes(struct efx_nic *efx,
  711. struct efx_mcdi_mtd_partition *parts,
  712. size_t n_parts)
  713. {
  714. uint16_t fw_subtype_list[
  715. MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_MAXNUM];
  716. size_t i;
  717. int rc;
  718. rc = efx_mcdi_get_board_cfg(efx, NULL, fw_subtype_list, NULL);
  719. if (rc)
  720. return rc;
  721. for (i = 0; i < n_parts; i++)
  722. parts[i].fw_subtype = fw_subtype_list[parts[i].nvram_type];
  723. return 0;
  724. }
  725. static int siena_mtd_probe(struct efx_nic *efx)
  726. {
  727. struct efx_mcdi_mtd_partition *parts;
  728. u32 nvram_types;
  729. unsigned int type;
  730. size_t n_parts;
  731. int rc;
  732. ASSERT_RTNL();
  733. rc = efx_mcdi_nvram_types(efx, &nvram_types);
  734. if (rc)
  735. return rc;
  736. parts = kcalloc(hweight32(nvram_types), sizeof(*parts), GFP_KERNEL);
  737. if (!parts)
  738. return -ENOMEM;
  739. type = 0;
  740. n_parts = 0;
  741. while (nvram_types != 0) {
  742. if (nvram_types & 1) {
  743. rc = siena_mtd_probe_partition(efx, &parts[n_parts],
  744. type);
  745. if (rc == 0)
  746. n_parts++;
  747. else if (rc != -ENODEV)
  748. goto fail;
  749. }
  750. type++;
  751. nvram_types >>= 1;
  752. }
  753. rc = siena_mtd_get_fw_subtypes(efx, parts, n_parts);
  754. if (rc)
  755. goto fail;
  756. rc = efx_mtd_add(efx, &parts[0].common, n_parts, sizeof(*parts));
  757. fail:
  758. if (rc)
  759. kfree(parts);
  760. return rc;
  761. }
  762. #endif /* CONFIG_SFC_MTD */
  763. /**************************************************************************
  764. *
  765. * Revision-dependent attributes used by efx.c and nic.c
  766. *
  767. **************************************************************************
  768. */
  769. const struct efx_nic_type siena_a0_nic_type = {
  770. .mem_map_size = siena_mem_map_size,
  771. .probe = siena_probe_nic,
  772. .remove = siena_remove_nic,
  773. .init = siena_init_nic,
  774. .dimension_resources = siena_dimension_resources,
  775. .fini = efx_port_dummy_op_void,
  776. #ifdef CONFIG_EEH
  777. .monitor = siena_monitor,
  778. #else
  779. .monitor = NULL,
  780. #endif
  781. .map_reset_reason = efx_mcdi_map_reset_reason,
  782. .map_reset_flags = siena_map_reset_flags,
  783. .reset = efx_mcdi_reset,
  784. .probe_port = efx_mcdi_port_probe,
  785. .remove_port = efx_mcdi_port_remove,
  786. .fini_dmaq = efx_farch_fini_dmaq,
  787. .prepare_flush = siena_prepare_flush,
  788. .finish_flush = siena_finish_flush,
  789. .prepare_flr = efx_port_dummy_op_void,
  790. .finish_flr = efx_farch_finish_flr,
  791. .describe_stats = siena_describe_nic_stats,
  792. .update_stats = siena_update_nic_stats,
  793. .start_stats = efx_mcdi_mac_start_stats,
  794. .pull_stats = efx_mcdi_mac_pull_stats,
  795. .stop_stats = efx_mcdi_mac_stop_stats,
  796. .set_id_led = efx_mcdi_set_id_led,
  797. .push_irq_moderation = siena_push_irq_moderation,
  798. .reconfigure_mac = siena_mac_reconfigure,
  799. .check_mac_fault = efx_mcdi_mac_check_fault,
  800. .reconfigure_port = efx_mcdi_port_reconfigure,
  801. .get_wol = siena_get_wol,
  802. .set_wol = siena_set_wol,
  803. .resume_wol = siena_init_wol,
  804. .test_chip = siena_test_chip,
  805. .test_nvram = efx_mcdi_nvram_test_all,
  806. .mcdi_request = siena_mcdi_request,
  807. .mcdi_poll_response = siena_mcdi_poll_response,
  808. .mcdi_read_response = siena_mcdi_read_response,
  809. .mcdi_poll_reboot = siena_mcdi_poll_reboot,
  810. .irq_enable_master = efx_farch_irq_enable_master,
  811. .irq_test_generate = efx_farch_irq_test_generate,
  812. .irq_disable_non_ev = efx_farch_irq_disable_master,
  813. .irq_handle_msi = efx_farch_msi_interrupt,
  814. .irq_handle_legacy = efx_farch_legacy_interrupt,
  815. .tx_probe = efx_farch_tx_probe,
  816. .tx_init = efx_farch_tx_init,
  817. .tx_remove = efx_farch_tx_remove,
  818. .tx_write = efx_farch_tx_write,
  819. .rx_push_rss_config = siena_rx_push_rss_config,
  820. .rx_probe = efx_farch_rx_probe,
  821. .rx_init = efx_farch_rx_init,
  822. .rx_remove = efx_farch_rx_remove,
  823. .rx_write = efx_farch_rx_write,
  824. .rx_defer_refill = efx_farch_rx_defer_refill,
  825. .ev_probe = efx_farch_ev_probe,
  826. .ev_init = efx_farch_ev_init,
  827. .ev_fini = efx_farch_ev_fini,
  828. .ev_remove = efx_farch_ev_remove,
  829. .ev_process = efx_farch_ev_process,
  830. .ev_read_ack = efx_farch_ev_read_ack,
  831. .ev_test_generate = efx_farch_ev_test_generate,
  832. .filter_table_probe = efx_farch_filter_table_probe,
  833. .filter_table_restore = efx_farch_filter_table_restore,
  834. .filter_table_remove = efx_farch_filter_table_remove,
  835. .filter_update_rx_scatter = efx_farch_filter_update_rx_scatter,
  836. .filter_insert = efx_farch_filter_insert,
  837. .filter_remove_safe = efx_farch_filter_remove_safe,
  838. .filter_get_safe = efx_farch_filter_get_safe,
  839. .filter_clear_rx = efx_farch_filter_clear_rx,
  840. .filter_count_rx_used = efx_farch_filter_count_rx_used,
  841. .filter_get_rx_id_limit = efx_farch_filter_get_rx_id_limit,
  842. .filter_get_rx_ids = efx_farch_filter_get_rx_ids,
  843. #ifdef CONFIG_RFS_ACCEL
  844. .filter_rfs_insert = efx_farch_filter_rfs_insert,
  845. .filter_rfs_expire_one = efx_farch_filter_rfs_expire_one,
  846. #endif
  847. #ifdef CONFIG_SFC_MTD
  848. .mtd_probe = siena_mtd_probe,
  849. .mtd_rename = efx_mcdi_mtd_rename,
  850. .mtd_read = efx_mcdi_mtd_read,
  851. .mtd_erase = efx_mcdi_mtd_erase,
  852. .mtd_write = efx_mcdi_mtd_write,
  853. .mtd_sync = efx_mcdi_mtd_sync,
  854. #endif
  855. .ptp_write_host_time = siena_ptp_write_host_time,
  856. .ptp_set_ts_config = siena_ptp_set_ts_config,
  857. .sriov_init = efx_siena_sriov_init,
  858. .sriov_fini = efx_siena_sriov_fini,
  859. .sriov_mac_address_changed = efx_siena_sriov_mac_address_changed,
  860. .sriov_wanted = efx_siena_sriov_wanted,
  861. .sriov_reset = efx_siena_sriov_reset,
  862. .revision = EFX_REV_SIENA_A0,
  863. .txd_ptr_tbl_base = FR_BZ_TX_DESC_PTR_TBL,
  864. .rxd_ptr_tbl_base = FR_BZ_RX_DESC_PTR_TBL,
  865. .buf_tbl_base = FR_BZ_BUF_FULL_TBL,
  866. .evq_ptr_tbl_base = FR_BZ_EVQ_PTR_TBL,
  867. .evq_rptr_tbl_base = FR_BZ_EVQ_RPTR,
  868. .max_dma_mask = DMA_BIT_MASK(FSF_AZ_TX_KER_BUF_ADDR_WIDTH),
  869. .rx_prefix_size = FS_BZ_RX_PREFIX_SIZE,
  870. .rx_hash_offset = FS_BZ_RX_PREFIX_HASH_OFST,
  871. .rx_buffer_padding = 0,
  872. .can_rx_scatter = true,
  873. .max_interrupt_mode = EFX_INT_MODE_MSIX,
  874. .timer_period_max = 1 << FRF_CZ_TC_TIMER_VAL_WIDTH,
  875. .offload_features = (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  876. NETIF_F_RXHASH | NETIF_F_NTUPLE),
  877. .mcdi_max_ver = 1,
  878. .max_rx_ip_filters = FR_BZ_RX_FILTER_TBL0_ROWS,
  879. .hwtstamp_filters = (1 << HWTSTAMP_FILTER_NONE |
  880. 1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT |
  881. 1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC |
  882. 1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ |
  883. 1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT |
  884. 1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC |
  885. 1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ),
  886. };