1 // SPDX-License-Identifier: GPL-2.0
3 * Management Controller Transport Protocol (MCTP)
4 * Implements DMTF specification
5 * "DSP0237 Management Component Transport Protocol (MCTP) SMBus/I2C
7 * https://www.dmtf.org/sites/default/files/standards/documents/DSP0237_1.2.0.pdf
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.
14 * mctp-i2c-controller.yml devicetree binding has further details.
16 * Copyright (c) 2022 Code Construct
17 * Copyright (c) 2022 Google
20 #include <linux/module.h>
21 #include <linux/netdevice.h>
22 #include <linux/i2c.h>
23 #include <linux/i2c-mux.h>
24 #include <linux/if_arp.h>
26 #include <net/mctpdevice.h>
28 /* byte_count is limited to u8 */
29 #define MCTP_I2C_MAXBLOCK 255
30 /* One byte is taken by source_slave */
31 #define MCTP_I2C_MAXMTU (MCTP_I2C_MAXBLOCK - 1)
32 #define MCTP_I2C_MINMTU (64 + 4)
33 /* Allow space for dest_address, command, byte_count, data, PEC */
34 #define MCTP_I2C_BUFSZ (3 + MCTP_I2C_MAXBLOCK + 1)
35 #define MCTP_I2C_MINLEN 8
36 #define MCTP_I2C_COMMANDCODE 0x0f
37 #define MCTP_I2C_TX_WORK_LEN 100
38 /* Sufficient for 64kB at min mtu */
39 #define MCTP_I2C_TX_QUEUE_LEN 1100
41 #define MCTP_I2C_OF_PROP "mctp-controller"
44 MCTP_I2C_FLOW_STATE_NEW = 0,
45 MCTP_I2C_FLOW_STATE_ACTIVE,
48 /* List of all struct mctp_i2c_client
49 * Lock protects driver_clients and also prevents adding/removing adapters
50 * during mctp_i2c_client probe/remove.
52 static DEFINE_MUTEX(driver_clients_lock);
53 static LIST_HEAD(driver_clients);
55 struct mctp_i2c_client;
57 /* The netdev structure. One of these per I2C adapter. */
59 struct net_device *ndev;
60 struct i2c_adapter *adapter;
61 struct mctp_i2c_client *client;
62 struct list_head list; /* For mctp_i2c_client.devs */
65 u8 rx_buffer[MCTP_I2C_BUFSZ];
66 struct completion rx_done;
68 struct task_struct *tx_thread;
69 wait_queue_head_t tx_wq;
70 struct sk_buff_head tx_queue;
71 u8 tx_scratch[MCTP_I2C_BUFSZ];
73 /* A fake entry in our tx queue to perform an unlock operation */
74 struct sk_buff unlock_marker;
76 /* Spinlock protects i2c_lock_count, release_count, allow_rx */
80 /* Indicates that the netif is ready to receive incoming packets */
85 /* The i2c client structure. One per hardware i2c bus at the top of the
86 * mux tree, shared by multiple netdevs
88 struct mctp_i2c_client {
89 struct i2c_client *client;
92 struct mctp_i2c_dev *sel;
93 struct list_head devs;
94 spinlock_t sel_lock; /* Protects sel and devs */
96 struct list_head list; /* For driver_clients */
99 /* Header on the wire. */
100 struct mctp_i2c_hdr {
103 /* Count of bytes following byte_count, excluding PEC */
108 static int mctp_i2c_recv(struct mctp_i2c_dev *midev);
109 static int mctp_i2c_slave_cb(struct i2c_client *client,
110 enum i2c_slave_event event, u8 *val);
111 static void mctp_i2c_ndo_uninit(struct net_device *dev);
112 static int mctp_i2c_ndo_open(struct net_device *dev);
114 static struct i2c_adapter *mux_root_adapter(struct i2c_adapter *adap)
116 #if IS_ENABLED(CONFIG_I2C_MUX)
117 return i2c_root_adapter(&adap->dev);
119 /* In non-mux config all i2c adapters are root adapters */
124 /* Creates a new i2c slave device attached to the root adapter.
125 * Sets up the slave callback.
126 * Must be called with a client on a root adapter.
128 static struct mctp_i2c_client *mctp_i2c_new_client(struct i2c_client *client)
130 struct mctp_i2c_client *mcli = NULL;
131 struct i2c_adapter *root = NULL;
134 if (client->flags & I2C_CLIENT_TEN) {
135 dev_err(&client->dev, "failed, MCTP requires a 7-bit I2C address, addr=0x%x\n",
141 root = mux_root_adapter(client->adapter);
143 dev_err(&client->dev, "failed to find root adapter\n");
147 if (root != client->adapter) {
148 dev_err(&client->dev,
149 "A mctp-i2c-controller client cannot be placed on an I2C mux adapter.\n"
150 " It should be placed on the mux tree root adapter\n"
151 " then set mctp-controller property on adapters to attach\n");
156 mcli = kzalloc(sizeof(*mcli), GFP_KERNEL);
161 spin_lock_init(&mcli->sel_lock);
162 INIT_LIST_HEAD(&mcli->devs);
163 INIT_LIST_HEAD(&mcli->list);
164 mcli->lladdr = client->addr & 0xff;
165 mcli->client = client;
166 i2c_set_clientdata(client, mcli);
168 rc = i2c_slave_register(mcli->client, mctp_i2c_slave_cb);
170 dev_err(&client->dev, "i2c register failed %d\n", rc);
172 i2c_set_clientdata(client, NULL);
180 i2c_unregister_device(mcli->client);
186 static void mctp_i2c_free_client(struct mctp_i2c_client *mcli)
190 WARN_ON(!mutex_is_locked(&driver_clients_lock));
191 WARN_ON(!list_empty(&mcli->devs));
192 WARN_ON(mcli->sel); /* sanity check, no locking */
194 rc = i2c_slave_unregister(mcli->client);
195 /* Leak if it fails, we can't propagate errors upwards */
197 dev_err(&mcli->client->dev, "i2c unregister failed %d\n", rc);
202 /* Switch the mctp i2c device to receive responses.
203 * Call with sel_lock held
205 static void __mctp_i2c_device_select(struct mctp_i2c_client *mcli,
206 struct mctp_i2c_dev *midev)
208 assert_spin_locked(&mcli->sel_lock);
210 dev_hold(midev->ndev);
212 dev_put(mcli->sel->ndev);
216 /* Switch the mctp i2c device to receive responses */
217 static void mctp_i2c_device_select(struct mctp_i2c_client *mcli,
218 struct mctp_i2c_dev *midev)
222 spin_lock_irqsave(&mcli->sel_lock, flags);
223 __mctp_i2c_device_select(mcli, midev);
224 spin_unlock_irqrestore(&mcli->sel_lock, flags);
227 static int mctp_i2c_slave_cb(struct i2c_client *client,
228 enum i2c_slave_event event, u8 *val)
230 struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
231 struct mctp_i2c_dev *midev = NULL;
235 spin_lock_irqsave(&mcli->sel_lock, flags);
238 dev_hold(midev->ndev);
239 spin_unlock_irqrestore(&mcli->sel_lock, flags);
245 case I2C_SLAVE_WRITE_RECEIVED:
246 if (midev->rx_pos < MCTP_I2C_BUFSZ) {
247 midev->rx_buffer[midev->rx_pos] = *val;
250 midev->ndev->stats.rx_over_errors++;
254 case I2C_SLAVE_WRITE_REQUESTED:
255 /* dest_slave as first byte */
256 midev->rx_buffer[0] = mcli->lladdr << 1;
260 rc = mctp_i2c_recv(midev);
266 dev_put(midev->ndev);
270 /* Processes incoming data that has been accumulated by the slave cb */
271 static int mctp_i2c_recv(struct mctp_i2c_dev *midev)
273 struct net_device *ndev = midev->ndev;
274 struct mctp_i2c_hdr *hdr;
275 struct mctp_skb_cb *cb;
282 /* + 1 for the PEC */
283 if (midev->rx_pos < MCTP_I2C_MINLEN + 1) {
284 ndev->stats.rx_length_errors++;
287 /* recvlen excludes PEC */
288 recvlen = midev->rx_pos - 1;
290 hdr = (void *)midev->rx_buffer;
291 if (hdr->command != MCTP_I2C_COMMANDCODE) {
292 ndev->stats.rx_dropped++;
296 if (hdr->byte_count + offsetof(struct mctp_i2c_hdr, source_slave) != recvlen) {
297 ndev->stats.rx_length_errors++;
301 pec = midev->rx_buffer[midev->rx_pos - 1];
302 calc_pec = i2c_smbus_pec(0, midev->rx_buffer, recvlen);
303 if (pec != calc_pec) {
304 ndev->stats.rx_crc_errors++;
308 skb = netdev_alloc_skb(ndev, recvlen);
310 ndev->stats.rx_dropped++;
314 skb->protocol = htons(ETH_P_MCTP);
315 skb_put_data(skb, midev->rx_buffer, recvlen);
316 skb_reset_mac_header(skb);
317 skb_pull(skb, sizeof(struct mctp_i2c_hdr));
318 skb_reset_network_header(skb);
322 cb->haddr[0] = hdr->source_slave >> 1;
324 /* We need to ensure that the netif is not used once netdev
327 spin_lock_irqsave(&midev->lock, flags);
328 if (midev->allow_rx) {
329 reinit_completion(&midev->rx_done);
330 spin_unlock_irqrestore(&midev->lock, flags);
332 status = netif_rx(skb);
333 complete(&midev->rx_done);
335 status = NET_RX_DROP;
336 spin_unlock_irqrestore(&midev->lock, flags);
339 if (status == NET_RX_SUCCESS) {
340 ndev->stats.rx_packets++;
341 ndev->stats.rx_bytes += recvlen;
343 ndev->stats.rx_dropped++;
348 enum mctp_i2c_flow_state {
349 MCTP_I2C_TX_FLOW_INVALID,
350 MCTP_I2C_TX_FLOW_NONE,
351 MCTP_I2C_TX_FLOW_NEW,
352 MCTP_I2C_TX_FLOW_EXISTING,
355 static enum mctp_i2c_flow_state
356 mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb)
358 enum mctp_i2c_flow_state state;
359 struct mctp_sk_key *key;
360 struct mctp_flow *flow;
363 flow = skb_ext_find(skb, SKB_EXT_MCTP);
365 return MCTP_I2C_TX_FLOW_NONE;
369 return MCTP_I2C_TX_FLOW_NONE;
371 spin_lock_irqsave(&key->lock, flags);
372 /* If the key is present but invalid, we're unlikely to be able
373 * to handle the flow at all; just drop now
376 state = MCTP_I2C_TX_FLOW_INVALID;
378 } else if (key->dev_flow_state == MCTP_I2C_FLOW_STATE_NEW) {
379 key->dev_flow_state = MCTP_I2C_FLOW_STATE_ACTIVE;
380 state = MCTP_I2C_TX_FLOW_NEW;
382 state = MCTP_I2C_TX_FLOW_EXISTING;
385 spin_unlock_irqrestore(&key->lock, flags);
390 /* We're not contending with ourselves here; we only need to exclude other
391 * i2c clients from using the bus. refcounts are simply to prevent
394 static void mctp_i2c_lock_nest(struct mctp_i2c_dev *midev)
399 spin_lock_irqsave(&midev->lock, flags);
400 lock = midev->i2c_lock_count == 0;
401 midev->i2c_lock_count++;
402 spin_unlock_irqrestore(&midev->lock, flags);
405 i2c_lock_bus(midev->adapter, I2C_LOCK_SEGMENT);
408 static void mctp_i2c_unlock_nest(struct mctp_i2c_dev *midev)
413 spin_lock_irqsave(&midev->lock, flags);
414 if (!WARN_ONCE(midev->i2c_lock_count == 0, "lock count underflow!"))
415 midev->i2c_lock_count--;
416 unlock = midev->i2c_lock_count == 0;
417 spin_unlock_irqrestore(&midev->lock, flags);
420 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
423 /* Unlocks the bus if was previously locked, used for cleanup */
424 static void mctp_i2c_unlock_reset(struct mctp_i2c_dev *midev)
429 spin_lock_irqsave(&midev->lock, flags);
430 unlock = midev->i2c_lock_count > 0;
431 midev->i2c_lock_count = 0;
432 spin_unlock_irqrestore(&midev->lock, flags);
435 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
438 static void mctp_i2c_xmit(struct mctp_i2c_dev *midev, struct sk_buff *skb)
440 struct net_device_stats *stats = &midev->ndev->stats;
441 enum mctp_i2c_flow_state fs;
442 struct mctp_i2c_hdr *hdr;
443 struct i2c_msg msg = {0};
447 fs = mctp_i2c_get_tx_flow_state(midev, skb);
449 hdr = (void *)skb_mac_header(skb);
450 /* Sanity check that packet contents matches skb length,
451 * and can't exceed MCTP_I2C_BUFSZ
453 if (skb->len != hdr->byte_count + 3) {
454 dev_warn_ratelimited(&midev->adapter->dev,
455 "Bad tx length %d vs skb %u\n",
456 hdr->byte_count + 3, skb->len);
460 if (skb_tailroom(skb) >= 1) {
461 /* Linear case with space, we can just append the PEC */
464 /* Otherwise need to copy the buffer */
465 skb_copy_bits(skb, 0, midev->tx_scratch, skb->len);
466 hdr = (void *)midev->tx_scratch;
469 pecp = (void *)&hdr->source_slave + hdr->byte_count;
470 *pecp = i2c_smbus_pec(0, (u8 *)hdr, hdr->byte_count + 3);
471 msg.buf = (void *)&hdr->command;
472 /* command, bytecount, data, pec */
473 msg.len = 2 + hdr->byte_count + 1;
474 msg.addr = hdr->dest_slave >> 1;
477 case MCTP_I2C_TX_FLOW_NONE:
478 /* no flow: full lock & unlock */
479 mctp_i2c_lock_nest(midev);
480 mctp_i2c_device_select(midev->client, midev);
481 rc = __i2c_transfer(midev->adapter, &msg, 1);
482 mctp_i2c_unlock_nest(midev);
485 case MCTP_I2C_TX_FLOW_NEW:
486 /* new flow: lock, tx, but don't unlock; that will happen
489 mctp_i2c_lock_nest(midev);
490 mctp_i2c_device_select(midev->client, midev);
493 case MCTP_I2C_TX_FLOW_EXISTING:
494 /* existing flow: we already have the lock; just tx */
495 rc = __i2c_transfer(midev->adapter, &msg, 1);
498 case MCTP_I2C_TX_FLOW_INVALID:
503 dev_warn_ratelimited(&midev->adapter->dev,
504 "__i2c_transfer failed %d\n", rc);
507 stats->tx_bytes += skb->len;
512 static void mctp_i2c_flow_release(struct mctp_i2c_dev *midev)
517 spin_lock_irqsave(&midev->lock, flags);
518 if (midev->release_count > midev->i2c_lock_count) {
519 WARN_ONCE(1, "release count overflow");
520 midev->release_count = midev->i2c_lock_count;
523 midev->i2c_lock_count -= midev->release_count;
524 unlock = midev->i2c_lock_count == 0 && midev->release_count > 0;
525 midev->release_count = 0;
526 spin_unlock_irqrestore(&midev->lock, flags);
529 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
532 static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,
533 unsigned short type, const void *daddr,
534 const void *saddr, unsigned int len)
536 struct mctp_i2c_hdr *hdr;
537 struct mctp_hdr *mhdr;
540 if (len > MCTP_I2C_MAXMTU)
543 lldst = *((u8 *)daddr);
544 llsrc = *((u8 *)saddr);
546 skb_push(skb, sizeof(struct mctp_i2c_hdr));
547 skb_reset_mac_header(skb);
548 hdr = (void *)skb_mac_header(skb);
549 mhdr = mctp_hdr(skb);
550 hdr->dest_slave = (lldst << 1) & 0xff;
551 hdr->command = MCTP_I2C_COMMANDCODE;
552 hdr->byte_count = len + 1;
553 hdr->source_slave = ((llsrc << 1) & 0xff) | 0x01;
559 static int mctp_i2c_tx_thread(void *data)
561 struct mctp_i2c_dev *midev = data;
566 if (kthread_should_stop())
569 spin_lock_irqsave(&midev->tx_queue.lock, flags);
570 skb = __skb_dequeue(&midev->tx_queue);
571 if (netif_queue_stopped(midev->ndev))
572 netif_wake_queue(midev->ndev);
573 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
575 if (skb == &midev->unlock_marker) {
576 mctp_i2c_flow_release(midev);
579 mctp_i2c_xmit(midev, skb);
583 wait_event_idle(midev->tx_wq,
584 !skb_queue_empty(&midev->tx_queue) ||
585 kthread_should_stop());
592 static netdev_tx_t mctp_i2c_start_xmit(struct sk_buff *skb,
593 struct net_device *dev)
595 struct mctp_i2c_dev *midev = netdev_priv(dev);
598 spin_lock_irqsave(&midev->tx_queue.lock, flags);
599 if (skb_queue_len(&midev->tx_queue) >= MCTP_I2C_TX_WORK_LEN) {
600 netif_stop_queue(dev);
601 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
602 netdev_err(dev, "BUG! Tx Ring full when queue awake!\n");
603 return NETDEV_TX_BUSY;
606 __skb_queue_tail(&midev->tx_queue, skb);
607 if (skb_queue_len(&midev->tx_queue) == MCTP_I2C_TX_WORK_LEN)
608 netif_stop_queue(dev);
609 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
611 wake_up(&midev->tx_wq);
615 static void mctp_i2c_release_flow(struct mctp_dev *mdev,
616 struct mctp_sk_key *key)
619 struct mctp_i2c_dev *midev = netdev_priv(mdev->dev);
622 spin_lock_irqsave(&midev->lock, flags);
623 midev->release_count++;
624 spin_unlock_irqrestore(&midev->lock, flags);
626 /* Ensure we have a release operation queued, through the fake
629 spin_lock(&midev->tx_queue.lock);
630 if (!midev->unlock_marker.next)
631 __skb_queue_tail(&midev->tx_queue, &midev->unlock_marker);
632 spin_unlock(&midev->tx_queue.lock);
634 wake_up(&midev->tx_wq);
637 static const struct net_device_ops mctp_i2c_ops = {
638 .ndo_start_xmit = mctp_i2c_start_xmit,
639 .ndo_uninit = mctp_i2c_ndo_uninit,
640 .ndo_open = mctp_i2c_ndo_open,
643 static const struct header_ops mctp_i2c_headops = {
644 .create = mctp_i2c_header_create,
647 static const struct mctp_netdev_ops mctp_i2c_mctp_ops = {
648 .release_flow = mctp_i2c_release_flow,
651 static void mctp_i2c_net_setup(struct net_device *dev)
653 dev->type = ARPHRD_MCTP;
655 dev->mtu = MCTP_I2C_MAXMTU;
656 dev->min_mtu = MCTP_I2C_MINMTU;
657 dev->max_mtu = MCTP_I2C_MAXMTU;
658 dev->tx_queue_len = MCTP_I2C_TX_QUEUE_LEN;
660 dev->hard_header_len = sizeof(struct mctp_i2c_hdr);
663 dev->netdev_ops = &mctp_i2c_ops;
664 dev->header_ops = &mctp_i2c_headops;
667 /* Populates the mctp_i2c_dev priv struct for a netdev.
668 * Returns an error pointer on failure.
670 static struct mctp_i2c_dev *mctp_i2c_midev_init(struct net_device *dev,
671 struct mctp_i2c_client *mcli,
672 struct i2c_adapter *adap)
674 struct mctp_i2c_dev *midev = netdev_priv(dev);
677 midev->tx_thread = kthread_create(mctp_i2c_tx_thread, midev,
679 if (IS_ERR(midev->tx_thread))
680 return ERR_CAST(midev->tx_thread);
683 get_device(&adap->dev);
684 midev->adapter = adap;
685 get_device(&mcli->client->dev);
686 midev->client = mcli;
687 INIT_LIST_HEAD(&midev->list);
688 spin_lock_init(&midev->lock);
689 midev->i2c_lock_count = 0;
690 midev->release_count = 0;
691 init_completion(&midev->rx_done);
692 complete(&midev->rx_done);
693 init_waitqueue_head(&midev->tx_wq);
694 skb_queue_head_init(&midev->tx_queue);
696 /* Add to the parent mcli */
697 spin_lock_irqsave(&mcli->sel_lock, flags);
698 list_add(&midev->list, &mcli->devs);
699 /* Select a device by default */
701 __mctp_i2c_device_select(mcli, midev);
702 spin_unlock_irqrestore(&mcli->sel_lock, flags);
704 /* Start the worker thread */
705 wake_up_process(midev->tx_thread);
710 /* Counterpart of mctp_i2c_midev_init */
711 static void mctp_i2c_midev_free(struct mctp_i2c_dev *midev)
713 struct mctp_i2c_client *mcli = midev->client;
716 if (midev->tx_thread) {
717 kthread_stop(midev->tx_thread);
718 midev->tx_thread = NULL;
721 /* Unconditionally unlock on close */
722 mctp_i2c_unlock_reset(midev);
724 /* Remove the netdev from the parent i2c client. */
725 spin_lock_irqsave(&mcli->sel_lock, flags);
726 list_del(&midev->list);
727 if (mcli->sel == midev) {
728 struct mctp_i2c_dev *first;
730 first = list_first_entry_or_null(&mcli->devs, struct mctp_i2c_dev, list);
731 __mctp_i2c_device_select(mcli, first);
733 spin_unlock_irqrestore(&mcli->sel_lock, flags);
735 skb_queue_purge(&midev->tx_queue);
736 put_device(&midev->adapter->dev);
737 put_device(&mcli->client->dev);
740 /* Stops, unregisters, and frees midev */
741 static void mctp_i2c_unregister(struct mctp_i2c_dev *midev)
745 /* Stop tx thread prior to unregister, it uses netif_() functions */
746 kthread_stop(midev->tx_thread);
747 midev->tx_thread = NULL;
749 /* Prevent any new rx in mctp_i2c_recv(), let any pending work finish */
750 spin_lock_irqsave(&midev->lock, flags);
751 midev->allow_rx = false;
752 spin_unlock_irqrestore(&midev->lock, flags);
753 wait_for_completion(&midev->rx_done);
755 mctp_unregister_netdev(midev->ndev);
756 /* midev has been freed now by mctp_i2c_ndo_uninit callback */
758 free_netdev(midev->ndev);
761 static void mctp_i2c_ndo_uninit(struct net_device *dev)
763 struct mctp_i2c_dev *midev = netdev_priv(dev);
765 /* Perform cleanup here to ensure that mcli->sel isn't holding
766 * a reference that would prevent unregister_netdevice()
769 mctp_i2c_midev_free(midev);
772 static int mctp_i2c_ndo_open(struct net_device *dev)
774 struct mctp_i2c_dev *midev = netdev_priv(dev);
777 /* i2c rx handler can only pass packets once the netdev is registered */
778 spin_lock_irqsave(&midev->lock, flags);
779 midev->allow_rx = true;
780 spin_unlock_irqrestore(&midev->lock, flags);
785 static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli,
786 struct i2c_adapter *adap)
788 struct mctp_i2c_dev *midev = NULL;
789 struct net_device *ndev = NULL;
790 struct i2c_adapter *root;
795 root = mux_root_adapter(adap);
796 if (root != mcli->client->adapter) {
797 dev_err(&mcli->client->dev,
798 "I2C adapter %s is not a child bus of %s\n",
799 mcli->client->adapter->name, root->name);
803 WARN_ON(!mutex_is_locked(&driver_clients_lock));
804 snprintf(namebuf, sizeof(namebuf), "mctpi2c%d", adap->nr);
805 ndev = alloc_netdev(sizeof(*midev), namebuf, NET_NAME_ENUM, mctp_i2c_net_setup);
807 dev_err(&mcli->client->dev, "alloc netdev failed\n");
811 dev_net_set(ndev, current->nsproxy->net_ns);
812 SET_NETDEV_DEV(ndev, &adap->dev);
813 dev_addr_set(ndev, &mcli->lladdr);
815 midev = mctp_i2c_midev_init(ndev, mcli, adap);
822 rc = mctp_register_netdev(ndev, &mctp_i2c_mctp_ops);
824 dev_err(&mcli->client->dev,
825 "register netdev \"%s\" failed %d\n",
830 spin_lock_irqsave(&midev->lock, flags);
831 midev->allow_rx = false;
832 spin_unlock_irqrestore(&midev->lock, flags);
837 mctp_i2c_midev_free(midev);
843 /* Removes any netdev for adap. mcli is the parent root i2c client */
844 static void mctp_i2c_remove_netdev(struct mctp_i2c_client *mcli,
845 struct i2c_adapter *adap)
847 struct mctp_i2c_dev *midev = NULL, *m = NULL;
850 WARN_ON(!mutex_is_locked(&driver_clients_lock));
851 spin_lock_irqsave(&mcli->sel_lock, flags);
852 /* List size is limited by number of MCTP netdevs on a single hardware bus */
853 list_for_each_entry(m, &mcli->devs, list)
854 if (m->adapter == adap) {
858 spin_unlock_irqrestore(&mcli->sel_lock, flags);
861 mctp_i2c_unregister(midev);
864 /* Determines whether a device is an i2c adapter.
865 * Optionally returns the root i2c_adapter
867 static struct i2c_adapter *mctp_i2c_get_adapter(struct device *dev,
868 struct i2c_adapter **ret_root)
870 struct i2c_adapter *root, *adap;
872 if (dev->type != &i2c_adapter_type)
874 adap = to_i2c_adapter(dev);
875 root = mux_root_adapter(adap);
876 WARN_ONCE(!root, "MCTP I2C failed to find root adapter for %s\n",
885 /* Determines whether a device is an i2c adapter with the "mctp-controller"
886 * devicetree property set. If adap is not an OF node, returns match_no_of
888 static bool mctp_i2c_adapter_match(struct i2c_adapter *adap, bool match_no_of)
890 if (!adap->dev.of_node)
892 return of_property_read_bool(adap->dev.of_node, MCTP_I2C_OF_PROP);
895 /* Called for each existing i2c device (adapter or client) when a
896 * new mctp-i2c client is probed.
898 static int mctp_i2c_client_try_attach(struct device *dev, void *data)
900 struct i2c_adapter *adap = NULL, *root = NULL;
901 struct mctp_i2c_client *mcli = data;
903 adap = mctp_i2c_get_adapter(dev, &root);
906 if (mcli->client->adapter != root)
908 /* Must either have mctp-controller property on the adapter, or
909 * be a root adapter if it's non-devicetree
911 if (!mctp_i2c_adapter_match(adap, adap == root))
914 return mctp_i2c_add_netdev(mcli, adap);
917 static void mctp_i2c_notify_add(struct device *dev)
919 struct mctp_i2c_client *mcli = NULL, *m = NULL;
920 struct i2c_adapter *root = NULL, *adap = NULL;
923 adap = mctp_i2c_get_adapter(dev, &root);
926 /* Check for mctp-controller property on the adapter */
927 if (!mctp_i2c_adapter_match(adap, false))
930 /* Find an existing mcli for adap's root */
931 mutex_lock(&driver_clients_lock);
932 list_for_each_entry(m, &driver_clients, list) {
933 if (m->client->adapter == root) {
940 rc = mctp_i2c_add_netdev(mcli, adap);
942 dev_warn(dev, "Failed adding mctp-i2c net device\n");
944 mutex_unlock(&driver_clients_lock);
947 static void mctp_i2c_notify_del(struct device *dev)
949 struct i2c_adapter *root = NULL, *adap = NULL;
950 struct mctp_i2c_client *mcli = NULL;
952 adap = mctp_i2c_get_adapter(dev, &root);
956 mutex_lock(&driver_clients_lock);
957 list_for_each_entry(mcli, &driver_clients, list) {
958 if (mcli->client->adapter == root) {
959 mctp_i2c_remove_netdev(mcli, adap);
963 mutex_unlock(&driver_clients_lock);
966 static int mctp_i2c_probe(struct i2c_client *client)
968 struct mctp_i2c_client *mcli = NULL;
971 mutex_lock(&driver_clients_lock);
972 mcli = mctp_i2c_new_client(client);
978 list_add(&mcli->list, &driver_clients);
981 /* Add a netdev for adapters that have a 'mctp-controller' property */
982 i2c_for_each_dev(mcli, mctp_i2c_client_try_attach);
985 mutex_unlock(&driver_clients_lock);
989 static int mctp_i2c_remove(struct i2c_client *client)
991 struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
992 struct mctp_i2c_dev *midev = NULL, *tmp = NULL;
994 mutex_lock(&driver_clients_lock);
995 list_del(&mcli->list);
996 /* Remove all child adapter netdevs */
997 list_for_each_entry_safe(midev, tmp, &mcli->devs, list)
998 mctp_i2c_unregister(midev);
1000 mctp_i2c_free_client(mcli);
1001 mutex_unlock(&driver_clients_lock);
1002 /* Callers ignore return code */
1006 /* We look for a 'mctp-controller' property on I2C busses as they are
1007 * added/deleted, creating/removing netdevs as required.
1009 static int mctp_i2c_notifier_call(struct notifier_block *nb,
1010 unsigned long action, void *data)
1012 struct device *dev = data;
1015 case BUS_NOTIFY_ADD_DEVICE:
1016 mctp_i2c_notify_add(dev);
1018 case BUS_NOTIFY_DEL_DEVICE:
1019 mctp_i2c_notify_del(dev);
1025 static struct notifier_block mctp_i2c_notifier = {
1026 .notifier_call = mctp_i2c_notifier_call,
1029 static const struct i2c_device_id mctp_i2c_id[] = {
1030 { "mctp-i2c-interface", 0 },
1033 MODULE_DEVICE_TABLE(i2c, mctp_i2c_id);
1035 static const struct of_device_id mctp_i2c_of_match[] = {
1036 { .compatible = "mctp-i2c-controller" },
1039 MODULE_DEVICE_TABLE(of, mctp_i2c_of_match);
1041 static struct i2c_driver mctp_i2c_driver = {
1043 .name = "mctp-i2c-interface",
1044 .of_match_table = mctp_i2c_of_match,
1046 .probe_new = mctp_i2c_probe,
1047 .remove = mctp_i2c_remove,
1048 .id_table = mctp_i2c_id,
1051 static __init int mctp_i2c_mod_init(void)
1055 pr_info("MCTP I2C interface driver\n");
1056 rc = i2c_add_driver(&mctp_i2c_driver);
1059 rc = bus_register_notifier(&i2c_bus_type, &mctp_i2c_notifier);
1061 i2c_del_driver(&mctp_i2c_driver);
1067 static __exit void mctp_i2c_mod_exit(void)
1071 rc = bus_unregister_notifier(&i2c_bus_type, &mctp_i2c_notifier);
1073 pr_warn("MCTP I2C could not unregister notifier, %d\n", rc);
1074 i2c_del_driver(&mctp_i2c_driver);
1077 module_init(mctp_i2c_mod_init);
1078 module_exit(mctp_i2c_mod_exit);
1080 MODULE_DESCRIPTION("MCTP I2C device");
1081 MODULE_LICENSE("GPL v2");