mse102x.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (C) 2021 in-tech smart charging GmbH
  3. *
  4. * driver is based on micrel/ks8851_spi.c
  5. */
  6. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  7. #include <linux/if_vlan.h>
  8. #include <linux/interrupt.h>
  9. #include <linux/module.h>
  10. #include <linux/kernel.h>
  11. #include <linux/netdevice.h>
  12. #include <linux/etherdevice.h>
  13. #include <linux/ethtool.h>
  14. #include <linux/cache.h>
  15. #include <linux/debugfs.h>
  16. #include <linux/seq_file.h>
  17. #include <linux/spi/spi.h>
  18. #include <linux/of_net.h>
  19. #define MSG_DEFAULT (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK | \
  20. NETIF_MSG_TIMER)
  21. #define DRV_NAME "mse102x"
  22. #define DET_CMD 0x0001
  23. #define DET_SOF 0x0002
  24. #define DET_DFT 0x55AA
  25. #define CMD_SHIFT 12
  26. #define CMD_RTS (0x1 << CMD_SHIFT)
  27. #define CMD_CTR (0x2 << CMD_SHIFT)
  28. #define CMD_MASK GENMASK(15, CMD_SHIFT)
  29. #define LEN_MASK GENMASK(CMD_SHIFT - 2, 0)
  30. #define DET_CMD_LEN 4
  31. #define DET_SOF_LEN 2
  32. #define DET_DFT_LEN 2
  33. #define MIN_FREQ_HZ 6000000
  34. #define MAX_FREQ_HZ 7142857
  35. struct mse102x_stats {
  36. u64 xfer_err;
  37. u64 invalid_cmd;
  38. u64 invalid_ctr;
  39. u64 invalid_dft;
  40. u64 invalid_len;
  41. u64 invalid_rts;
  42. u64 invalid_sof;
  43. u64 tx_timeout;
  44. };
  45. static const char mse102x_gstrings_stats[][ETH_GSTRING_LEN] = {
  46. "SPI transfer errors",
  47. "Invalid command",
  48. "Invalid CTR",
  49. "Invalid DFT",
  50. "Invalid frame length",
  51. "Invalid RTS",
  52. "Invalid SOF",
  53. "TX timeout",
  54. };
  55. struct mse102x_net {
  56. struct net_device *ndev;
  57. u8 rxd[8];
  58. u8 txd[8];
  59. u32 msg_enable ____cacheline_aligned;
  60. struct sk_buff_head txq;
  61. struct mse102x_stats stats;
  62. };
  63. struct mse102x_net_spi {
  64. struct mse102x_net mse102x;
  65. struct mutex lock; /* Protect SPI frame transfer */
  66. struct work_struct tx_work;
  67. struct spi_device *spidev;
  68. struct spi_message spi_msg;
  69. struct spi_transfer spi_xfer;
  70. #ifdef CONFIG_DEBUG_FS
  71. struct dentry *device_root;
  72. #endif
  73. };
  74. #define to_mse102x_spi(mse) container_of((mse), struct mse102x_net_spi, mse102x)
  75. #ifdef CONFIG_DEBUG_FS
  76. static int mse102x_info_show(struct seq_file *s, void *what)
  77. {
  78. struct mse102x_net_spi *mses = s->private;
  79. seq_printf(s, "TX ring size : %u\n",
  80. skb_queue_len(&mses->mse102x.txq));
  81. seq_printf(s, "IRQ : %d\n",
  82. mses->spidev->irq);
  83. seq_printf(s, "SPI effective speed : %lu\n",
  84. (unsigned long)mses->spi_xfer.effective_speed_hz);
  85. seq_printf(s, "SPI mode : %x\n",
  86. mses->spidev->mode);
  87. return 0;
  88. }
  89. DEFINE_SHOW_ATTRIBUTE(mse102x_info);
  90. static void mse102x_init_device_debugfs(struct mse102x_net_spi *mses)
  91. {
  92. mses->device_root = debugfs_create_dir(dev_name(&mses->mse102x.ndev->dev),
  93. NULL);
  94. debugfs_create_file("info", S_IFREG | 0444, mses->device_root, mses,
  95. &mse102x_info_fops);
  96. }
  97. static void mse102x_remove_device_debugfs(struct mse102x_net_spi *mses)
  98. {
  99. debugfs_remove_recursive(mses->device_root);
  100. }
  101. #else /* CONFIG_DEBUG_FS */
  102. static void mse102x_init_device_debugfs(struct mse102x_net_spi *mses)
  103. {
  104. }
  105. static void mse102x_remove_device_debugfs(struct mse102x_net_spi *mses)
  106. {
  107. }
  108. #endif
  109. /* SPI register read/write calls.
  110. *
  111. * All these calls issue SPI transactions to access the chip's registers. They
  112. * all require that the necessary lock is held to prevent accesses when the
  113. * chip is busy transferring packet data.
  114. */
  115. static void mse102x_tx_cmd_spi(struct mse102x_net *mse, u16 cmd)
  116. {
  117. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  118. struct spi_transfer *xfer = &mses->spi_xfer;
  119. struct spi_message *msg = &mses->spi_msg;
  120. __be16 txb[2];
  121. int ret;
  122. txb[0] = cpu_to_be16(DET_CMD);
  123. txb[1] = cpu_to_be16(cmd);
  124. xfer->tx_buf = txb;
  125. xfer->rx_buf = NULL;
  126. xfer->len = DET_CMD_LEN;
  127. ret = spi_sync(mses->spidev, msg);
  128. if (ret < 0) {
  129. netdev_err(mse->ndev, "%s: spi_sync() failed: %d\n",
  130. __func__, ret);
  131. mse->stats.xfer_err++;
  132. }
  133. }
  134. static int mse102x_rx_cmd_spi(struct mse102x_net *mse, u8 *rxb)
  135. {
  136. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  137. struct spi_transfer *xfer = &mses->spi_xfer;
  138. struct spi_message *msg = &mses->spi_msg;
  139. __be16 *txb = (__be16 *)mse->txd;
  140. __be16 *cmd = (__be16 *)mse->rxd;
  141. u8 *trx = mse->rxd;
  142. int ret;
  143. txb[0] = 0;
  144. txb[1] = 0;
  145. xfer->tx_buf = txb;
  146. xfer->rx_buf = trx;
  147. xfer->len = DET_CMD_LEN;
  148. ret = spi_sync(mses->spidev, msg);
  149. if (ret < 0) {
  150. netdev_err(mse->ndev, "%s: spi_sync() failed: %d\n",
  151. __func__, ret);
  152. mse->stats.xfer_err++;
  153. } else if (*cmd != cpu_to_be16(DET_CMD)) {
  154. net_dbg_ratelimited("%s: Unexpected response (0x%04x)\n",
  155. __func__, *cmd);
  156. mse->stats.invalid_cmd++;
  157. ret = -EIO;
  158. } else {
  159. memcpy(rxb, trx + 2, 2);
  160. }
  161. return ret;
  162. }
  163. static inline void mse102x_push_header(struct sk_buff *skb)
  164. {
  165. __be16 *header = skb_push(skb, DET_SOF_LEN);
  166. *header = cpu_to_be16(DET_SOF);
  167. }
  168. static inline void mse102x_put_footer(struct sk_buff *skb)
  169. {
  170. __be16 *footer = skb_put(skb, DET_DFT_LEN);
  171. *footer = cpu_to_be16(DET_DFT);
  172. }
  173. static int mse102x_tx_frame_spi(struct mse102x_net *mse, struct sk_buff *txp,
  174. unsigned int pad)
  175. {
  176. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  177. struct spi_transfer *xfer = &mses->spi_xfer;
  178. struct spi_message *msg = &mses->spi_msg;
  179. struct sk_buff *tskb = NULL;
  180. int ret;
  181. netif_dbg(mse, tx_queued, mse->ndev, "%s: skb %p, %d@%p\n",
  182. __func__, txp, txp->len, txp->data);
  183. if ((skb_headroom(txp) < DET_SOF_LEN) ||
  184. (skb_tailroom(txp) < DET_DFT_LEN + pad)) {
  185. tskb = skb_copy_expand(txp, DET_SOF_LEN, DET_DFT_LEN + pad,
  186. GFP_KERNEL);
  187. if (!tskb)
  188. return -ENOMEM;
  189. txp = tskb;
  190. }
  191. mse102x_push_header(txp);
  192. if (pad)
  193. skb_put_zero(txp, pad);
  194. mse102x_put_footer(txp);
  195. xfer->tx_buf = txp->data;
  196. xfer->rx_buf = NULL;
  197. xfer->len = txp->len;
  198. ret = spi_sync(mses->spidev, msg);
  199. if (ret < 0) {
  200. netdev_err(mse->ndev, "%s: spi_sync() failed: %d\n",
  201. __func__, ret);
  202. mse->stats.xfer_err++;
  203. }
  204. dev_kfree_skb(tskb);
  205. return ret;
  206. }
  207. static int mse102x_rx_frame_spi(struct mse102x_net *mse, u8 *buff,
  208. unsigned int frame_len, bool drop)
  209. {
  210. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  211. struct spi_transfer *xfer = &mses->spi_xfer;
  212. struct spi_message *msg = &mses->spi_msg;
  213. __be16 *sof = (__be16 *)buff;
  214. __be16 *dft = (__be16 *)(buff + DET_SOF_LEN + frame_len);
  215. int ret;
  216. xfer->rx_buf = buff;
  217. xfer->tx_buf = NULL;
  218. xfer->len = DET_SOF_LEN + frame_len + DET_DFT_LEN;
  219. ret = spi_sync(mses->spidev, msg);
  220. if (ret < 0) {
  221. netdev_err(mse->ndev, "%s: spi_sync() failed: %d\n",
  222. __func__, ret);
  223. mse->stats.xfer_err++;
  224. } else if (drop) {
  225. netdev_dbg(mse->ndev, "%s: Drop frame\n", __func__);
  226. ret = -EINVAL;
  227. } else if (*sof != cpu_to_be16(DET_SOF)) {
  228. netdev_dbg(mse->ndev, "%s: SPI start of frame is invalid (0x%04x)\n",
  229. __func__, *sof);
  230. mse->stats.invalid_sof++;
  231. ret = -EIO;
  232. } else if (*dft != cpu_to_be16(DET_DFT)) {
  233. netdev_dbg(mse->ndev, "%s: SPI frame tail is invalid (0x%04x)\n",
  234. __func__, *dft);
  235. mse->stats.invalid_dft++;
  236. ret = -EIO;
  237. }
  238. return ret;
  239. }
  240. static void mse102x_dump_packet(const char *msg, int len, const char *data)
  241. {
  242. printk(KERN_DEBUG ": %s - packet len:%d\n", msg, len);
  243. print_hex_dump(KERN_DEBUG, "pk data: ", DUMP_PREFIX_OFFSET, 16, 1,
  244. data, len, true);
  245. }
  246. static irqreturn_t mse102x_rx_pkt_spi(struct mse102x_net *mse)
  247. {
  248. struct sk_buff *skb;
  249. unsigned int rxalign;
  250. unsigned int rxlen;
  251. bool drop = false;
  252. __be16 rx = 0;
  253. u16 cmd_resp;
  254. u8 *rxpkt;
  255. int ret;
  256. mse102x_tx_cmd_spi(mse, CMD_CTR);
  257. ret = mse102x_rx_cmd_spi(mse, (u8 *)&rx);
  258. cmd_resp = be16_to_cpu(rx);
  259. if (ret || ((cmd_resp & CMD_MASK) != CMD_RTS)) {
  260. usleep_range(50, 100);
  261. mse102x_tx_cmd_spi(mse, CMD_CTR);
  262. ret = mse102x_rx_cmd_spi(mse, (u8 *)&rx);
  263. if (ret)
  264. return IRQ_NONE;
  265. cmd_resp = be16_to_cpu(rx);
  266. if ((cmd_resp & CMD_MASK) != CMD_RTS) {
  267. net_dbg_ratelimited("%s: Unexpected response (0x%04x)\n",
  268. __func__, cmd_resp);
  269. mse->stats.invalid_rts++;
  270. drop = true;
  271. goto drop;
  272. }
  273. net_dbg_ratelimited("%s: Unexpected response to first CMD\n",
  274. __func__);
  275. }
  276. rxlen = cmd_resp & LEN_MASK;
  277. if (rxlen < ETH_ZLEN || rxlen > VLAN_ETH_FRAME_LEN) {
  278. net_dbg_ratelimited("%s: Invalid frame length: %d\n", __func__,
  279. rxlen);
  280. mse->stats.invalid_len++;
  281. drop = true;
  282. }
  283. /* In case of a invalid CMD_RTS, the frame must be consumed anyway.
  284. * So assume the maximum possible frame length.
  285. */
  286. drop:
  287. if (drop)
  288. rxlen = VLAN_ETH_FRAME_LEN;
  289. rxalign = ALIGN(rxlen + DET_SOF_LEN + DET_DFT_LEN, 4);
  290. skb = netdev_alloc_skb_ip_align(mse->ndev, rxalign);
  291. if (!skb)
  292. return IRQ_NONE;
  293. /* 2 bytes Start of frame (before ethernet header)
  294. * 2 bytes Data frame tail (after ethernet frame)
  295. * They are copied, but ignored.
  296. */
  297. rxpkt = skb_put(skb, rxlen) - DET_SOF_LEN;
  298. if (mse102x_rx_frame_spi(mse, rxpkt, rxlen, drop)) {
  299. mse->ndev->stats.rx_errors++;
  300. dev_kfree_skb(skb);
  301. return IRQ_HANDLED;
  302. }
  303. if (netif_msg_pktdata(mse))
  304. mse102x_dump_packet(__func__, skb->len, skb->data);
  305. skb->protocol = eth_type_trans(skb, mse->ndev);
  306. netif_rx(skb);
  307. mse->ndev->stats.rx_packets++;
  308. mse->ndev->stats.rx_bytes += rxlen;
  309. return IRQ_HANDLED;
  310. }
  311. static int mse102x_tx_pkt_spi(struct mse102x_net *mse, struct sk_buff *txb,
  312. unsigned long work_timeout)
  313. {
  314. unsigned int pad = 0;
  315. __be16 rx = 0;
  316. u16 cmd_resp;
  317. int ret;
  318. bool first = true;
  319. if (txb->len < ETH_ZLEN)
  320. pad = ETH_ZLEN - txb->len;
  321. while (1) {
  322. mse102x_tx_cmd_spi(mse, CMD_RTS | (txb->len + pad));
  323. ret = mse102x_rx_cmd_spi(mse, (u8 *)&rx);
  324. cmd_resp = be16_to_cpu(rx);
  325. if (!ret) {
  326. /* ready to send frame ? */
  327. if (cmd_resp == CMD_CTR)
  328. break;
  329. net_dbg_ratelimited("%s: Unexpected response (0x%04x)\n",
  330. __func__, cmd_resp);
  331. mse->stats.invalid_ctr++;
  332. }
  333. /* It's not predictable how long / many retries it takes to
  334. * send at least one packet, so TX timeouts are possible.
  335. * That's the reason why the netdev watchdog is not used here.
  336. */
  337. if (time_after(jiffies, work_timeout))
  338. return -ETIMEDOUT;
  339. if (first) {
  340. /* throttle at first issue */
  341. netif_stop_queue(mse->ndev);
  342. /* fast retry */
  343. usleep_range(50, 100);
  344. first = false;
  345. } else {
  346. msleep(20);
  347. }
  348. }
  349. ret = mse102x_tx_frame_spi(mse, txb, pad);
  350. if (ret)
  351. net_dbg_ratelimited("%s: Failed to send (%d), drop frame\n",
  352. __func__, ret);
  353. return ret;
  354. }
  355. #define TX_QUEUE_MAX 10
  356. static void mse102x_tx_work(struct work_struct *work)
  357. {
  358. /* Make sure timeout is sufficient to transfer TX_QUEUE_MAX frames */
  359. unsigned long work_timeout = jiffies + msecs_to_jiffies(1000);
  360. struct mse102x_net_spi *mses;
  361. struct mse102x_net *mse;
  362. struct sk_buff *txb;
  363. int ret = 0;
  364. mses = container_of(work, struct mse102x_net_spi, tx_work);
  365. mse = &mses->mse102x;
  366. while ((txb = skb_dequeue(&mse->txq))) {
  367. unsigned int len = max_t(unsigned int, txb->len, ETH_ZLEN);
  368. mutex_lock(&mses->lock);
  369. ret = mse102x_tx_pkt_spi(mse, txb, work_timeout);
  370. mutex_unlock(&mses->lock);
  371. if (ret) {
  372. mse->ndev->stats.tx_dropped++;
  373. } else {
  374. mse->ndev->stats.tx_bytes += len;
  375. mse->ndev->stats.tx_packets++;
  376. }
  377. dev_kfree_skb(txb);
  378. }
  379. if (ret == -ETIMEDOUT) {
  380. if (netif_msg_timer(mse))
  381. netdev_err_once(mse->ndev, "tx work timeout\n");
  382. mse->stats.tx_timeout++;
  383. }
  384. netif_wake_queue(mse->ndev);
  385. }
  386. static netdev_tx_t mse102x_start_xmit_spi(struct sk_buff *skb,
  387. struct net_device *ndev)
  388. {
  389. struct mse102x_net *mse = netdev_priv(ndev);
  390. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  391. netif_dbg(mse, tx_queued, ndev,
  392. "%s: skb %p, %d@%p\n", __func__, skb, skb->len, skb->data);
  393. skb_queue_tail(&mse->txq, skb);
  394. if (skb_queue_len(&mse->txq) >= TX_QUEUE_MAX)
  395. netif_stop_queue(ndev);
  396. schedule_work(&mses->tx_work);
  397. return NETDEV_TX_OK;
  398. }
  399. static void mse102x_init_mac(struct mse102x_net *mse, struct device_node *np)
  400. {
  401. struct net_device *ndev = mse->ndev;
  402. int ret = of_get_ethdev_address(np, ndev);
  403. if (ret) {
  404. eth_hw_addr_random(ndev);
  405. dev_warn(ndev->dev.parent, "Using random MAC address: %pM\n",
  406. ndev->dev_addr);
  407. }
  408. }
  409. /* Assumption: this is called for every incoming packet */
  410. static irqreturn_t mse102x_irq(int irq, void *_mse)
  411. {
  412. struct mse102x_net *mse = _mse;
  413. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  414. irqreturn_t ret;
  415. mutex_lock(&mses->lock);
  416. ret = mse102x_rx_pkt_spi(mse);
  417. mutex_unlock(&mses->lock);
  418. return ret;
  419. }
  420. static int mse102x_net_open(struct net_device *ndev)
  421. {
  422. struct mse102x_net *mse = netdev_priv(ndev);
  423. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  424. int ret;
  425. ret = request_threaded_irq(ndev->irq, NULL, mse102x_irq, IRQF_ONESHOT,
  426. ndev->name, mse);
  427. if (ret < 0) {
  428. netdev_err(ndev, "Failed to get irq: %d\n", ret);
  429. return ret;
  430. }
  431. netif_dbg(mse, ifup, ndev, "opening\n");
  432. netif_start_queue(ndev);
  433. netif_carrier_on(ndev);
  434. /* The SPI interrupt can stuck in case of pending packet(s).
  435. * So poll for possible packet(s) to re-arm the interrupt.
  436. */
  437. mutex_lock(&mses->lock);
  438. mse102x_rx_pkt_spi(mse);
  439. mutex_unlock(&mses->lock);
  440. netif_dbg(mse, ifup, ndev, "network device up\n");
  441. return 0;
  442. }
  443. static int mse102x_net_stop(struct net_device *ndev)
  444. {
  445. struct mse102x_net *mse = netdev_priv(ndev);
  446. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  447. netif_info(mse, ifdown, ndev, "shutting down\n");
  448. netif_carrier_off(mse->ndev);
  449. /* stop any outstanding work */
  450. flush_work(&mses->tx_work);
  451. netif_stop_queue(ndev);
  452. skb_queue_purge(&mse->txq);
  453. free_irq(ndev->irq, mse);
  454. return 0;
  455. }
  456. static const struct net_device_ops mse102x_netdev_ops = {
  457. .ndo_open = mse102x_net_open,
  458. .ndo_stop = mse102x_net_stop,
  459. .ndo_start_xmit = mse102x_start_xmit_spi,
  460. .ndo_set_mac_address = eth_mac_addr,
  461. .ndo_validate_addr = eth_validate_addr,
  462. };
  463. /* ethtool support */
  464. static void mse102x_get_drvinfo(struct net_device *ndev,
  465. struct ethtool_drvinfo *di)
  466. {
  467. strscpy(di->driver, DRV_NAME, sizeof(di->driver));
  468. strscpy(di->bus_info, dev_name(ndev->dev.parent), sizeof(di->bus_info));
  469. }
  470. static u32 mse102x_get_msglevel(struct net_device *ndev)
  471. {
  472. struct mse102x_net *mse = netdev_priv(ndev);
  473. return mse->msg_enable;
  474. }
  475. static void mse102x_set_msglevel(struct net_device *ndev, u32 to)
  476. {
  477. struct mse102x_net *mse = netdev_priv(ndev);
  478. mse->msg_enable = to;
  479. }
  480. static void mse102x_get_ethtool_stats(struct net_device *ndev,
  481. struct ethtool_stats *estats, u64 *data)
  482. {
  483. struct mse102x_net *mse = netdev_priv(ndev);
  484. struct mse102x_stats *st = &mse->stats;
  485. memcpy(data, st, ARRAY_SIZE(mse102x_gstrings_stats) * sizeof(u64));
  486. }
  487. static void mse102x_get_strings(struct net_device *ndev, u32 stringset, u8 *buf)
  488. {
  489. switch (stringset) {
  490. case ETH_SS_STATS:
  491. memcpy(buf, &mse102x_gstrings_stats,
  492. sizeof(mse102x_gstrings_stats));
  493. break;
  494. default:
  495. WARN_ON(1);
  496. break;
  497. }
  498. }
  499. static int mse102x_get_sset_count(struct net_device *ndev, int sset)
  500. {
  501. switch (sset) {
  502. case ETH_SS_STATS:
  503. return ARRAY_SIZE(mse102x_gstrings_stats);
  504. default:
  505. return -EINVAL;
  506. }
  507. }
  508. static const struct ethtool_ops mse102x_ethtool_ops = {
  509. .get_drvinfo = mse102x_get_drvinfo,
  510. .get_link = ethtool_op_get_link,
  511. .get_msglevel = mse102x_get_msglevel,
  512. .set_msglevel = mse102x_set_msglevel,
  513. .get_ethtool_stats = mse102x_get_ethtool_stats,
  514. .get_strings = mse102x_get_strings,
  515. .get_sset_count = mse102x_get_sset_count,
  516. };
  517. /* driver bus management functions */
  518. static int mse102x_suspend(struct device *dev)
  519. {
  520. struct mse102x_net *mse = dev_get_drvdata(dev);
  521. struct net_device *ndev = mse->ndev;
  522. if (netif_running(ndev)) {
  523. netif_device_detach(ndev);
  524. mse102x_net_stop(ndev);
  525. }
  526. return 0;
  527. }
  528. static int mse102x_resume(struct device *dev)
  529. {
  530. struct mse102x_net *mse = dev_get_drvdata(dev);
  531. struct net_device *ndev = mse->ndev;
  532. if (netif_running(ndev)) {
  533. mse102x_net_open(ndev);
  534. netif_device_attach(ndev);
  535. }
  536. return 0;
  537. }
  538. static DEFINE_SIMPLE_DEV_PM_OPS(mse102x_pm_ops, mse102x_suspend, mse102x_resume);
  539. static int mse102x_probe_spi(struct spi_device *spi)
  540. {
  541. struct device *dev = &spi->dev;
  542. struct mse102x_net_spi *mses;
  543. struct net_device *ndev;
  544. struct mse102x_net *mse;
  545. int ret;
  546. spi->bits_per_word = 8;
  547. spi->mode |= SPI_MODE_3;
  548. /* enforce minimum speed to ensure device functionality */
  549. spi->controller->min_speed_hz = MIN_FREQ_HZ;
  550. if (!spi->max_speed_hz)
  551. spi->max_speed_hz = MAX_FREQ_HZ;
  552. if (spi->max_speed_hz < MIN_FREQ_HZ ||
  553. spi->max_speed_hz > MAX_FREQ_HZ) {
  554. dev_err(&spi->dev, "SPI max frequency out of range (min: %u, max: %u)\n",
  555. MIN_FREQ_HZ, MAX_FREQ_HZ);
  556. return -EINVAL;
  557. }
  558. ret = spi_setup(spi);
  559. if (ret < 0) {
  560. dev_err(&spi->dev, "Unable to setup SPI device: %d\n", ret);
  561. return ret;
  562. }
  563. ndev = devm_alloc_etherdev(dev, sizeof(struct mse102x_net_spi));
  564. if (!ndev)
  565. return -ENOMEM;
  566. ndev->needed_tailroom += ALIGN(DET_DFT_LEN, 4);
  567. ndev->needed_headroom += ALIGN(DET_SOF_LEN, 4);
  568. ndev->priv_flags &= ~IFF_TX_SKB_SHARING;
  569. ndev->tx_queue_len = 100;
  570. mse = netdev_priv(ndev);
  571. mses = to_mse102x_spi(mse);
  572. mses->spidev = spi;
  573. mutex_init(&mses->lock);
  574. INIT_WORK(&mses->tx_work, mse102x_tx_work);
  575. /* initialise pre-made spi transfer messages */
  576. spi_message_init(&mses->spi_msg);
  577. spi_message_add_tail(&mses->spi_xfer, &mses->spi_msg);
  578. ndev->irq = spi->irq;
  579. mse->ndev = ndev;
  580. /* set the default message enable */
  581. mse->msg_enable = netif_msg_init(-1, MSG_DEFAULT);
  582. skb_queue_head_init(&mse->txq);
  583. SET_NETDEV_DEV(ndev, dev);
  584. dev_set_drvdata(dev, mse);
  585. netif_carrier_off(mse->ndev);
  586. ndev->netdev_ops = &mse102x_netdev_ops;
  587. ndev->ethtool_ops = &mse102x_ethtool_ops;
  588. mse102x_init_mac(mse, dev->of_node);
  589. ret = register_netdev(ndev);
  590. if (ret) {
  591. dev_err(dev, "failed to register network device: %d\n", ret);
  592. return ret;
  593. }
  594. mse102x_init_device_debugfs(mses);
  595. return 0;
  596. }
  597. static void mse102x_remove_spi(struct spi_device *spi)
  598. {
  599. struct mse102x_net *mse = dev_get_drvdata(&spi->dev);
  600. struct mse102x_net_spi *mses = to_mse102x_spi(mse);
  601. mse102x_remove_device_debugfs(mses);
  602. unregister_netdev(mse->ndev);
  603. }
  604. static const struct of_device_id mse102x_match_table[] = {
  605. { .compatible = "vertexcom,mse1021" },
  606. { .compatible = "vertexcom,mse1022" },
  607. { }
  608. };
  609. MODULE_DEVICE_TABLE(of, mse102x_match_table);
  610. static const struct spi_device_id mse102x_ids[] = {
  611. { "mse1021" },
  612. { "mse1022" },
  613. { }
  614. };
  615. MODULE_DEVICE_TABLE(spi, mse102x_ids);
  616. static struct spi_driver mse102x_driver = {
  617. .driver = {
  618. .name = DRV_NAME,
  619. .of_match_table = mse102x_match_table,
  620. .pm = pm_sleep_ptr(&mse102x_pm_ops),
  621. },
  622. .probe = mse102x_probe_spi,
  623. .remove = mse102x_remove_spi,
  624. .id_table = mse102x_ids,
  625. };
  626. module_spi_driver(mse102x_driver);
  627. MODULE_DESCRIPTION("MSE102x Network driver");
  628. MODULE_AUTHOR("Stefan Wahren <stefan.wahren@chargebyte.com>");
  629. MODULE_LICENSE("GPL");
  630. MODULE_ALIAS("spi:" DRV_NAME);