mctp-i2c.c 28 KB

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