mctp-i2c.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Management Controller Transport Protocol (MCTP)
  4. * Implements DMTF specification
  5. * "DSP0237 Management Component Transport Protocol (MCTP) SMBus/I2C
  6. * Transport Binding"
  7. * https://www.dmtf.org/sites/default/files/standards/documents/DSP0237_1.2.0.pdf
  8. *
  9. * A netdev is created for each I2C bus that handles MCTP. In the case of an I2C
  10. * mux topology a single I2C client is attached to the root of the mux topology,
  11. * shared between all mux I2C busses underneath. For non-mux cases an I2C client
  12. * is attached per netdev.
  13. *
  14. * mctp-i2c-controller.yml devicetree binding has further details.
  15. *
  16. * Copyright (c) 2022 Code Construct
  17. * Copyright (c) 2022 Google
  18. */
  19. #include <linux/module.h>
  20. #include <linux/netdevice.h>
  21. #include <linux/i2c.h>
  22. #include <linux/i2c-mux.h>
  23. #include <linux/if_arp.h>
  24. #include <net/mctp.h>
  25. #include <net/mctpdevice.h>
  26. /* byte_count is limited to u8 */
  27. #define MCTP_I2C_MAXBLOCK 255
  28. /* One byte is taken by source_slave */
  29. #define MCTP_I2C_MAXMTU (MCTP_I2C_MAXBLOCK - 1)
  30. #define MCTP_I2C_MINMTU (64 + 4)
  31. /* Allow space for dest_address, command, byte_count, data, PEC */
  32. #define MCTP_I2C_BUFSZ (3 + MCTP_I2C_MAXBLOCK + 1)
  33. #define MCTP_I2C_MINLEN 8
  34. #define MCTP_I2C_COMMANDCODE 0x0f
  35. #define MCTP_I2C_TX_WORK_LEN 100
  36. /* Sufficient for 64kB at min mtu */
  37. #define MCTP_I2C_TX_QUEUE_LEN 1100
  38. #define MCTP_I2C_OF_PROP "mctp-controller"
  39. enum {
  40. MCTP_I2C_FLOW_STATE_NEW = 0,
  41. MCTP_I2C_FLOW_STATE_ACTIVE,
  42. MCTP_I2C_FLOW_STATE_INVALID,
  43. };
  44. /* List of all struct mctp_i2c_client
  45. * Lock protects driver_clients and also prevents adding/removing adapters
  46. * during mctp_i2c_client probe/remove.
  47. */
  48. static DEFINE_MUTEX(driver_clients_lock);
  49. static LIST_HEAD(driver_clients);
  50. struct mctp_i2c_client;
  51. /* The netdev structure. One of these per I2C adapter. */
  52. struct mctp_i2c_dev {
  53. struct net_device *ndev;
  54. struct i2c_adapter *adapter;
  55. struct mctp_i2c_client *client;
  56. struct list_head list; /* For mctp_i2c_client.devs */
  57. size_t rx_pos;
  58. u8 rx_buffer[MCTP_I2C_BUFSZ];
  59. struct completion rx_done;
  60. struct task_struct *tx_thread;
  61. wait_queue_head_t tx_wq;
  62. struct sk_buff_head tx_queue;
  63. u8 tx_scratch[MCTP_I2C_BUFSZ];
  64. /* A fake entry in our tx queue to perform an unlock operation */
  65. struct sk_buff unlock_marker;
  66. /* Spinlock protects i2c_lock_count, release_count, allow_rx */
  67. spinlock_t lock;
  68. int i2c_lock_count;
  69. int release_count;
  70. /* Indicates that the netif is ready to receive incoming packets */
  71. bool allow_rx;
  72. };
  73. /* The i2c client structure. One per hardware i2c bus at the top of the
  74. * mux tree, shared by multiple netdevs
  75. */
  76. struct mctp_i2c_client {
  77. struct i2c_client *client;
  78. u8 lladdr;
  79. struct mctp_i2c_dev *sel;
  80. struct list_head devs;
  81. spinlock_t sel_lock; /* Protects sel and devs */
  82. struct list_head list; /* For driver_clients */
  83. };
  84. /* Header on the wire. */
  85. struct mctp_i2c_hdr {
  86. u8 dest_slave;
  87. u8 command;
  88. /* Count of bytes following byte_count, excluding PEC */
  89. u8 byte_count;
  90. u8 source_slave;
  91. };
  92. static int mctp_i2c_recv(struct mctp_i2c_dev *midev);
  93. static int mctp_i2c_slave_cb(struct i2c_client *client,
  94. enum i2c_slave_event event, u8 *val);
  95. static void mctp_i2c_ndo_uninit(struct net_device *dev);
  96. static int mctp_i2c_ndo_open(struct net_device *dev);
  97. static struct i2c_adapter *mux_root_adapter(struct i2c_adapter *adap)
  98. {
  99. #if IS_ENABLED(CONFIG_I2C_MUX)
  100. return i2c_root_adapter(&adap->dev);
  101. #else
  102. /* In non-mux config all i2c adapters are root adapters */
  103. return adap;
  104. #endif
  105. }
  106. /* Creates a new i2c slave device attached to the root adapter.
  107. * Sets up the slave callback.
  108. * Must be called with a client on a root adapter.
  109. */
  110. static struct mctp_i2c_client *mctp_i2c_new_client(struct i2c_client *client)
  111. {
  112. struct mctp_i2c_client *mcli = NULL;
  113. struct i2c_adapter *root = NULL;
  114. int rc;
  115. if (client->flags & I2C_CLIENT_TEN) {
  116. dev_err(&client->dev, "failed, MCTP requires a 7-bit I2C address, addr=0x%x\n",
  117. client->addr);
  118. rc = -EINVAL;
  119. goto err;
  120. }
  121. root = mux_root_adapter(client->adapter);
  122. if (!root) {
  123. dev_err(&client->dev, "failed to find root adapter\n");
  124. rc = -ENOENT;
  125. goto err;
  126. }
  127. if (root != client->adapter) {
  128. dev_err(&client->dev,
  129. "A mctp-i2c-controller client cannot be placed on an I2C mux adapter.\n"
  130. " It should be placed on the mux tree root adapter\n"
  131. " then set mctp-controller property on adapters to attach\n");
  132. rc = -EINVAL;
  133. goto err;
  134. }
  135. mcli = kzalloc_obj(*mcli);
  136. if (!mcli) {
  137. rc = -ENOMEM;
  138. goto err;
  139. }
  140. spin_lock_init(&mcli->sel_lock);
  141. INIT_LIST_HEAD(&mcli->devs);
  142. INIT_LIST_HEAD(&mcli->list);
  143. mcli->lladdr = client->addr & 0xff;
  144. mcli->client = client;
  145. i2c_set_clientdata(client, mcli);
  146. rc = i2c_slave_register(mcli->client, mctp_i2c_slave_cb);
  147. if (rc < 0) {
  148. dev_err(&client->dev, "i2c register failed %d\n", rc);
  149. mcli->client = NULL;
  150. i2c_set_clientdata(client, NULL);
  151. goto err;
  152. }
  153. return mcli;
  154. err:
  155. if (mcli) {
  156. i2c_unregister_device(mcli->client);
  157. kfree(mcli);
  158. }
  159. return ERR_PTR(rc);
  160. }
  161. static void mctp_i2c_free_client(struct mctp_i2c_client *mcli)
  162. {
  163. int rc;
  164. WARN_ON(!mutex_is_locked(&driver_clients_lock));
  165. WARN_ON(!list_empty(&mcli->devs));
  166. WARN_ON(mcli->sel); /* sanity check, no locking */
  167. rc = i2c_slave_unregister(mcli->client);
  168. /* Leak if it fails, we can't propagate errors upwards */
  169. if (rc < 0)
  170. dev_err(&mcli->client->dev, "i2c unregister failed %d\n", rc);
  171. else
  172. kfree(mcli);
  173. }
  174. /* Switch the mctp i2c device to receive responses.
  175. * Call with sel_lock held
  176. */
  177. static void __mctp_i2c_device_select(struct mctp_i2c_client *mcli,
  178. struct mctp_i2c_dev *midev)
  179. {
  180. assert_spin_locked(&mcli->sel_lock);
  181. if (midev)
  182. dev_hold(midev->ndev);
  183. if (mcli->sel)
  184. dev_put(mcli->sel->ndev);
  185. mcli->sel = midev;
  186. }
  187. /* Switch the mctp i2c device to receive responses */
  188. static void mctp_i2c_device_select(struct mctp_i2c_client *mcli,
  189. struct mctp_i2c_dev *midev)
  190. {
  191. unsigned long flags;
  192. spin_lock_irqsave(&mcli->sel_lock, flags);
  193. __mctp_i2c_device_select(mcli, midev);
  194. spin_unlock_irqrestore(&mcli->sel_lock, flags);
  195. }
  196. static int mctp_i2c_slave_cb(struct i2c_client *client,
  197. enum i2c_slave_event event, u8 *val)
  198. {
  199. struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
  200. struct mctp_i2c_dev *midev = NULL;
  201. unsigned long flags;
  202. int rc = 0;
  203. spin_lock_irqsave(&mcli->sel_lock, flags);
  204. midev = mcli->sel;
  205. if (midev)
  206. dev_hold(midev->ndev);
  207. spin_unlock_irqrestore(&mcli->sel_lock, flags);
  208. if (!midev)
  209. return 0;
  210. switch (event) {
  211. case I2C_SLAVE_READ_REQUESTED:
  212. case I2C_SLAVE_READ_PROCESSED:
  213. /* MCTP I2C transport only uses writes */
  214. midev->rx_pos = 0;
  215. *val = 0xff;
  216. break;
  217. case I2C_SLAVE_WRITE_RECEIVED:
  218. if (midev->rx_pos < MCTP_I2C_BUFSZ) {
  219. midev->rx_buffer[midev->rx_pos] = *val;
  220. midev->rx_pos++;
  221. } else {
  222. midev->ndev->stats.rx_over_errors++;
  223. }
  224. break;
  225. case I2C_SLAVE_WRITE_REQUESTED:
  226. /* dest_slave as first byte */
  227. midev->rx_buffer[0] = mcli->lladdr << 1;
  228. midev->rx_pos = 1;
  229. break;
  230. case I2C_SLAVE_STOP:
  231. rc = mctp_i2c_recv(midev);
  232. break;
  233. default:
  234. break;
  235. }
  236. dev_put(midev->ndev);
  237. return rc;
  238. }
  239. /* Processes incoming data that has been accumulated by the slave cb */
  240. static int mctp_i2c_recv(struct mctp_i2c_dev *midev)
  241. {
  242. struct net_device *ndev = midev->ndev;
  243. struct mctp_i2c_hdr *hdr;
  244. struct mctp_skb_cb *cb;
  245. struct sk_buff *skb;
  246. unsigned long flags;
  247. u8 pec, calc_pec;
  248. size_t recvlen;
  249. int status;
  250. if (midev->rx_pos == 0)
  251. return 0;
  252. /* + 1 for the PEC */
  253. if (midev->rx_pos < MCTP_I2C_MINLEN + 1) {
  254. ndev->stats.rx_length_errors++;
  255. return -EINVAL;
  256. }
  257. /* recvlen excludes PEC */
  258. recvlen = midev->rx_pos - 1;
  259. hdr = (void *)midev->rx_buffer;
  260. if (hdr->command != MCTP_I2C_COMMANDCODE) {
  261. ndev->stats.rx_dropped++;
  262. return -EINVAL;
  263. }
  264. if (hdr->byte_count + offsetof(struct mctp_i2c_hdr, source_slave) != recvlen) {
  265. ndev->stats.rx_length_errors++;
  266. return -EINVAL;
  267. }
  268. pec = midev->rx_buffer[midev->rx_pos - 1];
  269. calc_pec = i2c_smbus_pec(0, midev->rx_buffer, recvlen);
  270. if (pec != calc_pec) {
  271. ndev->stats.rx_crc_errors++;
  272. return -EINVAL;
  273. }
  274. skb = netdev_alloc_skb(ndev, recvlen);
  275. if (!skb) {
  276. ndev->stats.rx_dropped++;
  277. return -ENOMEM;
  278. }
  279. skb->protocol = htons(ETH_P_MCTP);
  280. skb_put_data(skb, midev->rx_buffer, recvlen);
  281. skb_reset_mac_header(skb);
  282. skb_pull(skb, sizeof(struct mctp_i2c_hdr));
  283. skb_reset_network_header(skb);
  284. cb = __mctp_cb(skb);
  285. cb->halen = 1;
  286. cb->haddr[0] = hdr->source_slave >> 1;
  287. /* We need to ensure that the netif is not used once netdev
  288. * unregister occurs
  289. */
  290. spin_lock_irqsave(&midev->lock, flags);
  291. if (midev->allow_rx) {
  292. reinit_completion(&midev->rx_done);
  293. spin_unlock_irqrestore(&midev->lock, flags);
  294. status = netif_rx(skb);
  295. complete(&midev->rx_done);
  296. } else {
  297. status = NET_RX_DROP;
  298. spin_unlock_irqrestore(&midev->lock, flags);
  299. kfree_skb(skb);
  300. }
  301. if (status == NET_RX_SUCCESS) {
  302. ndev->stats.rx_packets++;
  303. ndev->stats.rx_bytes += recvlen;
  304. } else {
  305. ndev->stats.rx_dropped++;
  306. }
  307. return 0;
  308. }
  309. enum mctp_i2c_flow_state {
  310. MCTP_I2C_TX_FLOW_INVALID,
  311. MCTP_I2C_TX_FLOW_NONE,
  312. MCTP_I2C_TX_FLOW_NEW,
  313. MCTP_I2C_TX_FLOW_EXISTING,
  314. };
  315. static enum mctp_i2c_flow_state
  316. mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb)
  317. {
  318. enum mctp_i2c_flow_state state;
  319. struct mctp_sk_key *key;
  320. struct mctp_flow *flow;
  321. unsigned long flags;
  322. flow = skb_ext_find(skb, SKB_EXT_MCTP);
  323. if (!flow)
  324. return MCTP_I2C_TX_FLOW_NONE;
  325. key = flow->key;
  326. if (!key)
  327. return MCTP_I2C_TX_FLOW_NONE;
  328. spin_lock_irqsave(&key->lock, flags);
  329. /* If the key is present but invalid, we're unlikely to be able
  330. * to handle the flow at all; just drop now
  331. */
  332. if (!key->valid) {
  333. state = MCTP_I2C_TX_FLOW_INVALID;
  334. } else {
  335. switch (key->dev_flow_state) {
  336. case MCTP_I2C_FLOW_STATE_NEW:
  337. key->dev_flow_state = MCTP_I2C_FLOW_STATE_ACTIVE;
  338. state = MCTP_I2C_TX_FLOW_NEW;
  339. break;
  340. case MCTP_I2C_FLOW_STATE_ACTIVE:
  341. state = MCTP_I2C_TX_FLOW_EXISTING;
  342. break;
  343. default:
  344. state = MCTP_I2C_TX_FLOW_INVALID;
  345. }
  346. }
  347. spin_unlock_irqrestore(&key->lock, flags);
  348. return state;
  349. }
  350. /* We're not contending with ourselves here; we only need to exclude other
  351. * i2c clients from using the bus. refcounts are simply to prevent
  352. * recursive locking.
  353. */
  354. static void mctp_i2c_lock_nest(struct mctp_i2c_dev *midev)
  355. {
  356. unsigned long flags;
  357. bool lock;
  358. spin_lock_irqsave(&midev->lock, flags);
  359. lock = midev->i2c_lock_count == 0;
  360. midev->i2c_lock_count++;
  361. spin_unlock_irqrestore(&midev->lock, flags);
  362. if (lock)
  363. i2c_lock_bus(midev->adapter, I2C_LOCK_SEGMENT);
  364. }
  365. static void mctp_i2c_unlock_nest(struct mctp_i2c_dev *midev)
  366. {
  367. unsigned long flags;
  368. bool unlock;
  369. spin_lock_irqsave(&midev->lock, flags);
  370. if (!WARN_ONCE(midev->i2c_lock_count == 0, "lock count underflow!"))
  371. midev->i2c_lock_count--;
  372. unlock = midev->i2c_lock_count == 0;
  373. spin_unlock_irqrestore(&midev->lock, flags);
  374. if (unlock)
  375. i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
  376. }
  377. /* Unlocks the bus if was previously locked, used for cleanup */
  378. static void mctp_i2c_unlock_reset(struct mctp_i2c_dev *midev)
  379. {
  380. unsigned long flags;
  381. bool unlock;
  382. spin_lock_irqsave(&midev->lock, flags);
  383. unlock = midev->i2c_lock_count > 0;
  384. midev->i2c_lock_count = 0;
  385. spin_unlock_irqrestore(&midev->lock, flags);
  386. if (unlock)
  387. i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
  388. }
  389. static void mctp_i2c_invalidate_tx_flow(struct mctp_i2c_dev *midev,
  390. struct sk_buff *skb)
  391. {
  392. struct mctp_sk_key *key;
  393. struct mctp_flow *flow;
  394. unsigned long flags;
  395. bool release;
  396. flow = skb_ext_find(skb, SKB_EXT_MCTP);
  397. if (!flow)
  398. return;
  399. key = flow->key;
  400. if (!key)
  401. return;
  402. spin_lock_irqsave(&key->lock, flags);
  403. if (key->manual_alloc) {
  404. /* we don't have control over lifetimes for manually-allocated
  405. * keys, so cannot assume we can invalidate all future flows
  406. * that would use this key.
  407. */
  408. release = false;
  409. } else {
  410. release = key->dev_flow_state == MCTP_I2C_FLOW_STATE_ACTIVE;
  411. key->dev_flow_state = MCTP_I2C_FLOW_STATE_INVALID;
  412. }
  413. spin_unlock_irqrestore(&key->lock, flags);
  414. /* if we have changed state from active, the flow held a reference on
  415. * the lock; release that now.
  416. */
  417. if (release)
  418. mctp_i2c_unlock_nest(midev);
  419. }
  420. static void mctp_i2c_xmit(struct mctp_i2c_dev *midev, struct sk_buff *skb)
  421. {
  422. struct net_device_stats *stats = &midev->ndev->stats;
  423. enum mctp_i2c_flow_state fs;
  424. struct mctp_i2c_hdr *hdr;
  425. struct i2c_msg msg = {0};
  426. u8 *pecp;
  427. int rc;
  428. fs = mctp_i2c_get_tx_flow_state(midev, skb);
  429. hdr = (void *)skb_mac_header(skb);
  430. /* Sanity check that packet contents matches skb length,
  431. * and can't exceed MCTP_I2C_BUFSZ
  432. */
  433. if (skb->len != hdr->byte_count + 3) {
  434. dev_warn_ratelimited(&midev->adapter->dev,
  435. "Bad tx length %d vs skb %u\n",
  436. hdr->byte_count + 3, skb->len);
  437. return;
  438. }
  439. if (skb_tailroom(skb) >= 1) {
  440. /* Linear case with space, we can just append the PEC */
  441. skb_put(skb, 1);
  442. } else {
  443. /* Otherwise need to copy the buffer */
  444. skb_copy_bits(skb, 0, midev->tx_scratch, skb->len);
  445. hdr = (void *)midev->tx_scratch;
  446. }
  447. pecp = (void *)&hdr->source_slave + hdr->byte_count;
  448. *pecp = i2c_smbus_pec(0, (u8 *)hdr, hdr->byte_count + 3);
  449. msg.buf = (void *)&hdr->command;
  450. /* command, bytecount, data, pec */
  451. msg.len = 2 + hdr->byte_count + 1;
  452. msg.addr = hdr->dest_slave >> 1;
  453. switch (fs) {
  454. case MCTP_I2C_TX_FLOW_NONE:
  455. /* no flow: full lock & unlock */
  456. mctp_i2c_lock_nest(midev);
  457. mctp_i2c_device_select(midev->client, midev);
  458. rc = __i2c_transfer(midev->adapter, &msg, 1);
  459. mctp_i2c_unlock_nest(midev);
  460. break;
  461. case MCTP_I2C_TX_FLOW_NEW:
  462. /* new flow: lock, tx, but don't unlock; that will happen
  463. * on flow release
  464. */
  465. mctp_i2c_lock_nest(midev);
  466. mctp_i2c_device_select(midev->client, midev);
  467. fallthrough;
  468. case MCTP_I2C_TX_FLOW_EXISTING:
  469. /* existing flow: we already have the lock; just tx */
  470. rc = __i2c_transfer(midev->adapter, &msg, 1);
  471. /* on tx errors, the flow can no longer be considered valid */
  472. if (rc < 0)
  473. mctp_i2c_invalidate_tx_flow(midev, skb);
  474. break;
  475. case MCTP_I2C_TX_FLOW_INVALID:
  476. return;
  477. }
  478. if (rc < 0) {
  479. dev_warn_ratelimited(&midev->adapter->dev,
  480. "__i2c_transfer failed %d\n", rc);
  481. stats->tx_errors++;
  482. } else {
  483. stats->tx_bytes += skb->len;
  484. stats->tx_packets++;
  485. }
  486. }
  487. static void mctp_i2c_flow_release(struct mctp_i2c_dev *midev)
  488. {
  489. unsigned long flags;
  490. bool unlock;
  491. spin_lock_irqsave(&midev->lock, flags);
  492. if (midev->release_count > midev->i2c_lock_count) {
  493. WARN_ONCE(1, "release count overflow");
  494. midev->release_count = midev->i2c_lock_count;
  495. }
  496. midev->i2c_lock_count -= midev->release_count;
  497. unlock = midev->i2c_lock_count == 0 && midev->release_count > 0;
  498. midev->release_count = 0;
  499. spin_unlock_irqrestore(&midev->lock, flags);
  500. if (unlock)
  501. i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
  502. }
  503. static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,
  504. unsigned short type, const void *daddr,
  505. const void *saddr, unsigned int len)
  506. {
  507. struct mctp_i2c_hdr *hdr;
  508. struct mctp_hdr *mhdr;
  509. u8 lldst, llsrc;
  510. int rc;
  511. if (len > MCTP_I2C_MAXMTU)
  512. return -EMSGSIZE;
  513. if (!daddr || !saddr)
  514. return -EINVAL;
  515. lldst = *((u8 *)daddr);
  516. llsrc = *((u8 *)saddr);
  517. rc = skb_cow_head(skb, sizeof(struct mctp_i2c_hdr));
  518. if (rc)
  519. return rc;
  520. skb_push(skb, sizeof(struct mctp_i2c_hdr));
  521. skb_reset_mac_header(skb);
  522. hdr = (void *)skb_mac_header(skb);
  523. mhdr = mctp_hdr(skb);
  524. hdr->dest_slave = (lldst << 1) & 0xff;
  525. hdr->command = MCTP_I2C_COMMANDCODE;
  526. hdr->byte_count = len + 1;
  527. hdr->source_slave = ((llsrc << 1) & 0xff) | 0x01;
  528. mhdr->ver = 0x01;
  529. return sizeof(struct mctp_i2c_hdr);
  530. }
  531. static int mctp_i2c_tx_thread(void *data)
  532. {
  533. struct mctp_i2c_dev *midev = data;
  534. struct sk_buff *skb;
  535. unsigned long flags;
  536. for (;;) {
  537. if (kthread_should_stop())
  538. break;
  539. spin_lock_irqsave(&midev->tx_queue.lock, flags);
  540. skb = __skb_dequeue(&midev->tx_queue);
  541. if (netif_queue_stopped(midev->ndev))
  542. netif_wake_queue(midev->ndev);
  543. spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
  544. if (skb == &midev->unlock_marker) {
  545. mctp_i2c_flow_release(midev);
  546. } else if (skb) {
  547. mctp_i2c_xmit(midev, skb);
  548. kfree_skb(skb);
  549. } else {
  550. wait_event_idle(midev->tx_wq,
  551. !skb_queue_empty(&midev->tx_queue) ||
  552. kthread_should_stop());
  553. }
  554. }
  555. return 0;
  556. }
  557. static netdev_tx_t mctp_i2c_start_xmit(struct sk_buff *skb,
  558. struct net_device *dev)
  559. {
  560. struct mctp_i2c_dev *midev = netdev_priv(dev);
  561. unsigned long flags;
  562. spin_lock_irqsave(&midev->tx_queue.lock, flags);
  563. if (skb_queue_len(&midev->tx_queue) >= MCTP_I2C_TX_WORK_LEN) {
  564. netif_stop_queue(dev);
  565. spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
  566. netdev_err(dev, "BUG! Tx Ring full when queue awake!\n");
  567. return NETDEV_TX_BUSY;
  568. }
  569. __skb_queue_tail(&midev->tx_queue, skb);
  570. if (skb_queue_len(&midev->tx_queue) == MCTP_I2C_TX_WORK_LEN)
  571. netif_stop_queue(dev);
  572. spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
  573. wake_up(&midev->tx_wq);
  574. return NETDEV_TX_OK;
  575. }
  576. static void mctp_i2c_release_flow(struct mctp_dev *mdev,
  577. struct mctp_sk_key *key)
  578. {
  579. struct mctp_i2c_dev *midev = netdev_priv(mdev->dev);
  580. bool queue_release = false;
  581. unsigned long flags;
  582. spin_lock_irqsave(&midev->lock, flags);
  583. /* if we have seen the flow/key previously, we need to pair the
  584. * original lock with a release
  585. */
  586. if (key->dev_flow_state == MCTP_I2C_FLOW_STATE_ACTIVE) {
  587. midev->release_count++;
  588. queue_release = true;
  589. }
  590. key->dev_flow_state = MCTP_I2C_FLOW_STATE_INVALID;
  591. spin_unlock_irqrestore(&midev->lock, flags);
  592. if (queue_release) {
  593. /* Ensure we have a release operation queued, through the fake
  594. * marker skb
  595. */
  596. spin_lock(&midev->tx_queue.lock);
  597. if (!midev->unlock_marker.next)
  598. __skb_queue_tail(&midev->tx_queue,
  599. &midev->unlock_marker);
  600. spin_unlock(&midev->tx_queue.lock);
  601. wake_up(&midev->tx_wq);
  602. }
  603. }
  604. static const struct net_device_ops mctp_i2c_ops = {
  605. .ndo_start_xmit = mctp_i2c_start_xmit,
  606. .ndo_uninit = mctp_i2c_ndo_uninit,
  607. .ndo_open = mctp_i2c_ndo_open,
  608. };
  609. static const struct header_ops mctp_i2c_headops = {
  610. .create = mctp_i2c_header_create,
  611. };
  612. static const struct mctp_netdev_ops mctp_i2c_mctp_ops = {
  613. .release_flow = mctp_i2c_release_flow,
  614. };
  615. static void mctp_i2c_net_setup(struct net_device *dev)
  616. {
  617. dev->type = ARPHRD_MCTP;
  618. dev->mtu = MCTP_I2C_MAXMTU;
  619. dev->min_mtu = MCTP_I2C_MINMTU;
  620. dev->max_mtu = MCTP_I2C_MAXMTU;
  621. dev->tx_queue_len = MCTP_I2C_TX_QUEUE_LEN;
  622. dev->hard_header_len = sizeof(struct mctp_i2c_hdr);
  623. dev->addr_len = 1;
  624. dev->netdev_ops = &mctp_i2c_ops;
  625. dev->header_ops = &mctp_i2c_headops;
  626. }
  627. /* Populates the mctp_i2c_dev priv struct for a netdev.
  628. * Returns an error pointer on failure.
  629. */
  630. static struct mctp_i2c_dev *mctp_i2c_midev_init(struct net_device *dev,
  631. struct mctp_i2c_client *mcli,
  632. struct i2c_adapter *adap)
  633. {
  634. struct mctp_i2c_dev *midev = netdev_priv(dev);
  635. unsigned long flags;
  636. midev->tx_thread = kthread_create(mctp_i2c_tx_thread, midev,
  637. "%s/tx", dev->name);
  638. if (IS_ERR(midev->tx_thread))
  639. return ERR_CAST(midev->tx_thread);
  640. midev->ndev = dev;
  641. get_device(&adap->dev);
  642. midev->adapter = adap;
  643. get_device(&mcli->client->dev);
  644. midev->client = mcli;
  645. INIT_LIST_HEAD(&midev->list);
  646. spin_lock_init(&midev->lock);
  647. midev->i2c_lock_count = 0;
  648. midev->release_count = 0;
  649. init_completion(&midev->rx_done);
  650. complete(&midev->rx_done);
  651. init_waitqueue_head(&midev->tx_wq);
  652. skb_queue_head_init(&midev->tx_queue);
  653. /* Add to the parent mcli */
  654. spin_lock_irqsave(&mcli->sel_lock, flags);
  655. list_add(&midev->list, &mcli->devs);
  656. /* Select a device by default */
  657. if (!mcli->sel)
  658. __mctp_i2c_device_select(mcli, midev);
  659. spin_unlock_irqrestore(&mcli->sel_lock, flags);
  660. /* Start the worker thread */
  661. wake_up_process(midev->tx_thread);
  662. return midev;
  663. }
  664. /* Counterpart of mctp_i2c_midev_init */
  665. static void mctp_i2c_midev_free(struct mctp_i2c_dev *midev)
  666. {
  667. struct mctp_i2c_client *mcli = midev->client;
  668. unsigned long flags;
  669. if (midev->tx_thread) {
  670. kthread_stop(midev->tx_thread);
  671. midev->tx_thread = NULL;
  672. }
  673. /* Unconditionally unlock on close */
  674. mctp_i2c_unlock_reset(midev);
  675. /* Remove the netdev from the parent i2c client. */
  676. spin_lock_irqsave(&mcli->sel_lock, flags);
  677. list_del(&midev->list);
  678. if (mcli->sel == midev) {
  679. struct mctp_i2c_dev *first;
  680. first = list_first_entry_or_null(&mcli->devs, struct mctp_i2c_dev, list);
  681. __mctp_i2c_device_select(mcli, first);
  682. }
  683. spin_unlock_irqrestore(&mcli->sel_lock, flags);
  684. skb_queue_purge(&midev->tx_queue);
  685. put_device(&midev->adapter->dev);
  686. put_device(&mcli->client->dev);
  687. }
  688. /* Stops, unregisters, and frees midev */
  689. static void mctp_i2c_unregister(struct mctp_i2c_dev *midev)
  690. {
  691. unsigned long flags;
  692. /* Stop tx thread prior to unregister, it uses netif_() functions */
  693. kthread_stop(midev->tx_thread);
  694. midev->tx_thread = NULL;
  695. /* Prevent any new rx in mctp_i2c_recv(), let any pending work finish */
  696. spin_lock_irqsave(&midev->lock, flags);
  697. midev->allow_rx = false;
  698. spin_unlock_irqrestore(&midev->lock, flags);
  699. wait_for_completion(&midev->rx_done);
  700. mctp_unregister_netdev(midev->ndev);
  701. /* midev has been freed now by mctp_i2c_ndo_uninit callback */
  702. free_netdev(midev->ndev);
  703. }
  704. static void mctp_i2c_ndo_uninit(struct net_device *dev)
  705. {
  706. struct mctp_i2c_dev *midev = netdev_priv(dev);
  707. /* Perform cleanup here to ensure that mcli->sel isn't holding
  708. * a reference that would prevent unregister_netdevice()
  709. * from completing.
  710. */
  711. mctp_i2c_midev_free(midev);
  712. }
  713. static int mctp_i2c_ndo_open(struct net_device *dev)
  714. {
  715. struct mctp_i2c_dev *midev = netdev_priv(dev);
  716. unsigned long flags;
  717. /* i2c rx handler can only pass packets once the netdev is registered */
  718. spin_lock_irqsave(&midev->lock, flags);
  719. midev->allow_rx = true;
  720. spin_unlock_irqrestore(&midev->lock, flags);
  721. return 0;
  722. }
  723. static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli,
  724. struct i2c_adapter *adap)
  725. {
  726. struct mctp_i2c_dev *midev = NULL;
  727. struct net_device *ndev = NULL;
  728. struct i2c_adapter *root;
  729. unsigned long flags;
  730. char namebuf[30];
  731. int rc;
  732. root = mux_root_adapter(adap);
  733. if (root != mcli->client->adapter) {
  734. dev_err(&mcli->client->dev,
  735. "I2C adapter %s is not a child bus of %s\n",
  736. mcli->client->adapter->name, root->name);
  737. return -EINVAL;
  738. }
  739. WARN_ON(!mutex_is_locked(&driver_clients_lock));
  740. snprintf(namebuf, sizeof(namebuf), "mctpi2c%d", adap->nr);
  741. ndev = alloc_netdev(sizeof(*midev), namebuf, NET_NAME_ENUM, mctp_i2c_net_setup);
  742. if (!ndev) {
  743. dev_err(&mcli->client->dev, "alloc netdev failed\n");
  744. rc = -ENOMEM;
  745. goto err;
  746. }
  747. dev_net_set(ndev, current->nsproxy->net_ns);
  748. SET_NETDEV_DEV(ndev, &adap->dev);
  749. dev_addr_set(ndev, &mcli->lladdr);
  750. midev = mctp_i2c_midev_init(ndev, mcli, adap);
  751. if (IS_ERR(midev)) {
  752. rc = PTR_ERR(midev);
  753. midev = NULL;
  754. goto err;
  755. }
  756. rc = mctp_register_netdev(ndev, &mctp_i2c_mctp_ops,
  757. MCTP_PHYS_BINDING_SMBUS);
  758. if (rc < 0) {
  759. dev_err(&mcli->client->dev,
  760. "register netdev \"%s\" failed %d\n",
  761. ndev->name, rc);
  762. goto err;
  763. }
  764. spin_lock_irqsave(&midev->lock, flags);
  765. midev->allow_rx = false;
  766. spin_unlock_irqrestore(&midev->lock, flags);
  767. return 0;
  768. err:
  769. if (midev)
  770. mctp_i2c_midev_free(midev);
  771. if (ndev)
  772. free_netdev(ndev);
  773. return rc;
  774. }
  775. /* Removes any netdev for adap. mcli is the parent root i2c client */
  776. static void mctp_i2c_remove_netdev(struct mctp_i2c_client *mcli,
  777. struct i2c_adapter *adap)
  778. {
  779. struct mctp_i2c_dev *midev = NULL, *m = NULL;
  780. unsigned long flags;
  781. WARN_ON(!mutex_is_locked(&driver_clients_lock));
  782. spin_lock_irqsave(&mcli->sel_lock, flags);
  783. /* List size is limited by number of MCTP netdevs on a single hardware bus */
  784. list_for_each_entry(m, &mcli->devs, list)
  785. if (m->adapter == adap) {
  786. midev = m;
  787. break;
  788. }
  789. spin_unlock_irqrestore(&mcli->sel_lock, flags);
  790. if (midev)
  791. mctp_i2c_unregister(midev);
  792. }
  793. /* Determines whether a device is an i2c adapter.
  794. * Optionally returns the root i2c_adapter
  795. */
  796. static struct i2c_adapter *mctp_i2c_get_adapter(struct device *dev,
  797. struct i2c_adapter **ret_root)
  798. {
  799. struct i2c_adapter *root, *adap;
  800. if (dev->type != &i2c_adapter_type)
  801. return NULL;
  802. adap = to_i2c_adapter(dev);
  803. root = mux_root_adapter(adap);
  804. WARN_ONCE(!root, "MCTP I2C failed to find root adapter for %s\n",
  805. dev_name(dev));
  806. if (!root)
  807. return NULL;
  808. if (ret_root)
  809. *ret_root = root;
  810. return adap;
  811. }
  812. /* Determines whether a device is an i2c adapter with the "mctp-controller"
  813. * devicetree property set. If adap is not an OF node, returns match_no_of
  814. */
  815. static bool mctp_i2c_adapter_match(struct i2c_adapter *adap, bool match_no_of)
  816. {
  817. if (!adap->dev.of_node)
  818. return match_no_of;
  819. return of_property_read_bool(adap->dev.of_node, MCTP_I2C_OF_PROP);
  820. }
  821. /* Called for each existing i2c device (adapter or client) when a
  822. * new mctp-i2c client is probed.
  823. */
  824. static int mctp_i2c_client_try_attach(struct device *dev, void *data)
  825. {
  826. struct i2c_adapter *adap = NULL, *root = NULL;
  827. struct mctp_i2c_client *mcli = data;
  828. adap = mctp_i2c_get_adapter(dev, &root);
  829. if (!adap)
  830. return 0;
  831. if (mcli->client->adapter != root)
  832. return 0;
  833. /* Must either have mctp-controller property on the adapter, or
  834. * be a root adapter if it's non-devicetree
  835. */
  836. if (!mctp_i2c_adapter_match(adap, adap == root))
  837. return 0;
  838. return mctp_i2c_add_netdev(mcli, adap);
  839. }
  840. static void mctp_i2c_notify_add(struct device *dev)
  841. {
  842. struct mctp_i2c_client *mcli = NULL, *m = NULL;
  843. struct i2c_adapter *root = NULL, *adap = NULL;
  844. int rc;
  845. adap = mctp_i2c_get_adapter(dev, &root);
  846. if (!adap)
  847. return;
  848. /* Check for mctp-controller property on the adapter */
  849. if (!mctp_i2c_adapter_match(adap, false))
  850. return;
  851. /* Find an existing mcli for adap's root */
  852. mutex_lock(&driver_clients_lock);
  853. list_for_each_entry(m, &driver_clients, list) {
  854. if (m->client->adapter == root) {
  855. mcli = m;
  856. break;
  857. }
  858. }
  859. if (mcli) {
  860. rc = mctp_i2c_add_netdev(mcli, adap);
  861. if (rc < 0)
  862. dev_warn(dev, "Failed adding mctp-i2c net device\n");
  863. }
  864. mutex_unlock(&driver_clients_lock);
  865. }
  866. static void mctp_i2c_notify_del(struct device *dev)
  867. {
  868. struct i2c_adapter *root = NULL, *adap = NULL;
  869. struct mctp_i2c_client *mcli = NULL;
  870. adap = mctp_i2c_get_adapter(dev, &root);
  871. if (!adap)
  872. return;
  873. mutex_lock(&driver_clients_lock);
  874. list_for_each_entry(mcli, &driver_clients, list) {
  875. if (mcli->client->adapter == root) {
  876. mctp_i2c_remove_netdev(mcli, adap);
  877. break;
  878. }
  879. }
  880. mutex_unlock(&driver_clients_lock);
  881. }
  882. static int mctp_i2c_probe(struct i2c_client *client)
  883. {
  884. struct mctp_i2c_client *mcli = NULL;
  885. int rc;
  886. mutex_lock(&driver_clients_lock);
  887. mcli = mctp_i2c_new_client(client);
  888. if (IS_ERR(mcli)) {
  889. rc = PTR_ERR(mcli);
  890. mcli = NULL;
  891. goto out;
  892. } else {
  893. list_add(&mcli->list, &driver_clients);
  894. }
  895. /* Add a netdev for adapters that have a 'mctp-controller' property */
  896. i2c_for_each_dev(mcli, mctp_i2c_client_try_attach);
  897. rc = 0;
  898. out:
  899. mutex_unlock(&driver_clients_lock);
  900. return rc;
  901. }
  902. static void mctp_i2c_remove(struct i2c_client *client)
  903. {
  904. struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
  905. struct mctp_i2c_dev *midev = NULL, *tmp = NULL;
  906. mutex_lock(&driver_clients_lock);
  907. list_del(&mcli->list);
  908. /* Remove all child adapter netdevs */
  909. list_for_each_entry_safe(midev, tmp, &mcli->devs, list)
  910. mctp_i2c_unregister(midev);
  911. mctp_i2c_free_client(mcli);
  912. mutex_unlock(&driver_clients_lock);
  913. }
  914. /* We look for a 'mctp-controller' property on I2C busses as they are
  915. * added/deleted, creating/removing netdevs as required.
  916. */
  917. static int mctp_i2c_notifier_call(struct notifier_block *nb,
  918. unsigned long action, void *data)
  919. {
  920. struct device *dev = data;
  921. switch (action) {
  922. case BUS_NOTIFY_ADD_DEVICE:
  923. mctp_i2c_notify_add(dev);
  924. break;
  925. case BUS_NOTIFY_DEL_DEVICE:
  926. mctp_i2c_notify_del(dev);
  927. break;
  928. }
  929. return NOTIFY_DONE;
  930. }
  931. static struct notifier_block mctp_i2c_notifier = {
  932. .notifier_call = mctp_i2c_notifier_call,
  933. };
  934. static const struct i2c_device_id mctp_i2c_id[] = {
  935. { "mctp-i2c-interface" },
  936. {}
  937. };
  938. MODULE_DEVICE_TABLE(i2c, mctp_i2c_id);
  939. static const struct of_device_id mctp_i2c_of_match[] = {
  940. { .compatible = "mctp-i2c-controller" },
  941. {},
  942. };
  943. MODULE_DEVICE_TABLE(of, mctp_i2c_of_match);
  944. static struct i2c_driver mctp_i2c_driver = {
  945. .driver = {
  946. .name = "mctp-i2c-interface",
  947. .of_match_table = mctp_i2c_of_match,
  948. },
  949. .probe = mctp_i2c_probe,
  950. .remove = mctp_i2c_remove,
  951. .id_table = mctp_i2c_id,
  952. };
  953. static __init int mctp_i2c_mod_init(void)
  954. {
  955. int rc;
  956. pr_info("MCTP I2C interface driver\n");
  957. rc = i2c_add_driver(&mctp_i2c_driver);
  958. if (rc < 0)
  959. return rc;
  960. rc = bus_register_notifier(&i2c_bus_type, &mctp_i2c_notifier);
  961. if (rc < 0) {
  962. i2c_del_driver(&mctp_i2c_driver);
  963. return rc;
  964. }
  965. return 0;
  966. }
  967. static __exit void mctp_i2c_mod_exit(void)
  968. {
  969. int rc;
  970. rc = bus_unregister_notifier(&i2c_bus_type, &mctp_i2c_notifier);
  971. if (rc < 0)
  972. pr_warn("MCTP I2C could not unregister notifier, %d\n", rc);
  973. i2c_del_driver(&mctp_i2c_driver);
  974. }
  975. module_init(mctp_i2c_mod_init);
  976. module_exit(mctp_i2c_mod_exit);
  977. MODULE_DESCRIPTION("MCTP I2C device");
  978. MODULE_LICENSE("GPL v2");
  979. MODULE_AUTHOR("Matt Johnston <matt@codeconstruct.com.au>");