cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mctp-i2c.c (27425B)


      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
     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>
     25#include <net/mctp.h>
     26#include <net/mctpdevice.h>
     27
     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
     40
     41#define MCTP_I2C_OF_PROP "mctp-controller"
     42
     43enum {
     44	MCTP_I2C_FLOW_STATE_NEW = 0,
     45	MCTP_I2C_FLOW_STATE_ACTIVE,
     46};
     47
     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.
     51 */
     52static DEFINE_MUTEX(driver_clients_lock);
     53static LIST_HEAD(driver_clients);
     54
     55struct mctp_i2c_client;
     56
     57/* The netdev structure. One of these per I2C adapter. */
     58struct mctp_i2c_dev {
     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 */
     63
     64	size_t rx_pos;
     65	u8 rx_buffer[MCTP_I2C_BUFSZ];
     66	struct completion rx_done;
     67
     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];
     72
     73	/* A fake entry in our tx queue to perform an unlock operation */
     74	struct sk_buff unlock_marker;
     75
     76	/* Spinlock protects i2c_lock_count, release_count, allow_rx */
     77	spinlock_t lock;
     78	int i2c_lock_count;
     79	int release_count;
     80	/* Indicates that the netif is ready to receive incoming packets */
     81	bool allow_rx;
     82
     83};
     84
     85/* The i2c client structure. One per hardware i2c bus at the top of the
     86 * mux tree, shared by multiple netdevs
     87 */
     88struct mctp_i2c_client {
     89	struct i2c_client *client;
     90	u8 lladdr;
     91
     92	struct mctp_i2c_dev *sel;
     93	struct list_head devs;
     94	spinlock_t sel_lock; /* Protects sel and devs */
     95
     96	struct list_head list; /* For driver_clients */
     97};
     98
     99/* Header on the wire. */
    100struct mctp_i2c_hdr {
    101	u8 dest_slave;
    102	u8 command;
    103	/* Count of bytes following byte_count, excluding PEC */
    104	u8 byte_count;
    105	u8 source_slave;
    106};
    107
    108static int mctp_i2c_recv(struct mctp_i2c_dev *midev);
    109static int mctp_i2c_slave_cb(struct i2c_client *client,
    110			     enum i2c_slave_event event, u8 *val);
    111static void mctp_i2c_ndo_uninit(struct net_device *dev);
    112static int mctp_i2c_ndo_open(struct net_device *dev);
    113
    114static struct i2c_adapter *mux_root_adapter(struct i2c_adapter *adap)
    115{
    116#if IS_ENABLED(CONFIG_I2C_MUX)
    117	return i2c_root_adapter(&adap->dev);
    118#else
    119	/* In non-mux config all i2c adapters are root adapters */
    120	return adap;
    121#endif
    122}
    123
    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.
    127 */
    128static struct mctp_i2c_client *mctp_i2c_new_client(struct i2c_client *client)
    129{
    130	struct mctp_i2c_client *mcli = NULL;
    131	struct i2c_adapter *root = NULL;
    132	int rc;
    133
    134	if (client->flags & I2C_CLIENT_TEN) {
    135		dev_err(&client->dev, "failed, MCTP requires a 7-bit I2C address, addr=0x%x\n",
    136			client->addr);
    137		rc = -EINVAL;
    138		goto err;
    139	}
    140
    141	root = mux_root_adapter(client->adapter);
    142	if (!root) {
    143		dev_err(&client->dev, "failed to find root adapter\n");
    144		rc = -ENOENT;
    145		goto err;
    146	}
    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");
    152		rc = -EINVAL;
    153		goto err;
    154	}
    155
    156	mcli = kzalloc(sizeof(*mcli), GFP_KERNEL);
    157	if (!mcli) {
    158		rc = -ENOMEM;
    159		goto err;
    160	}
    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);
    167
    168	rc = i2c_slave_register(mcli->client, mctp_i2c_slave_cb);
    169	if (rc < 0) {
    170		dev_err(&client->dev, "i2c register failed %d\n", rc);
    171		mcli->client = NULL;
    172		i2c_set_clientdata(client, NULL);
    173		goto err;
    174	}
    175
    176	return mcli;
    177err:
    178	if (mcli) {
    179		if (mcli->client)
    180			i2c_unregister_device(mcli->client);
    181		kfree(mcli);
    182	}
    183	return ERR_PTR(rc);
    184}
    185
    186static void mctp_i2c_free_client(struct mctp_i2c_client *mcli)
    187{
    188	int rc;
    189
    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 */
    193
    194	rc = i2c_slave_unregister(mcli->client);
    195	/* Leak if it fails, we can't propagate errors upwards */
    196	if (rc < 0)
    197		dev_err(&mcli->client->dev, "i2c unregister failed %d\n", rc);
    198	else
    199		kfree(mcli);
    200}
    201
    202/* Switch the mctp i2c device to receive responses.
    203 * Call with sel_lock held
    204 */
    205static void __mctp_i2c_device_select(struct mctp_i2c_client *mcli,
    206				     struct mctp_i2c_dev *midev)
    207{
    208	assert_spin_locked(&mcli->sel_lock);
    209	if (midev)
    210		dev_hold(midev->ndev);
    211	if (mcli->sel)
    212		dev_put(mcli->sel->ndev);
    213	mcli->sel = midev;
    214}
    215
    216/* Switch the mctp i2c device to receive responses */
    217static void mctp_i2c_device_select(struct mctp_i2c_client *mcli,
    218				   struct mctp_i2c_dev *midev)
    219{
    220	unsigned long flags;
    221
    222	spin_lock_irqsave(&mcli->sel_lock, flags);
    223	__mctp_i2c_device_select(mcli, midev);
    224	spin_unlock_irqrestore(&mcli->sel_lock, flags);
    225}
    226
    227static int mctp_i2c_slave_cb(struct i2c_client *client,
    228			     enum i2c_slave_event event, u8 *val)
    229{
    230	struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
    231	struct mctp_i2c_dev *midev = NULL;
    232	unsigned long flags;
    233	int rc = 0;
    234
    235	spin_lock_irqsave(&mcli->sel_lock, flags);
    236	midev = mcli->sel;
    237	if (midev)
    238		dev_hold(midev->ndev);
    239	spin_unlock_irqrestore(&mcli->sel_lock, flags);
    240
    241	if (!midev)
    242		return 0;
    243
    244	switch (event) {
    245	case I2C_SLAVE_WRITE_RECEIVED:
    246		if (midev->rx_pos < MCTP_I2C_BUFSZ) {
    247			midev->rx_buffer[midev->rx_pos] = *val;
    248			midev->rx_pos++;
    249		} else {
    250			midev->ndev->stats.rx_over_errors++;
    251		}
    252
    253		break;
    254	case I2C_SLAVE_WRITE_REQUESTED:
    255		/* dest_slave as first byte */
    256		midev->rx_buffer[0] = mcli->lladdr << 1;
    257		midev->rx_pos = 1;
    258		break;
    259	case I2C_SLAVE_STOP:
    260		rc = mctp_i2c_recv(midev);
    261		break;
    262	default:
    263		break;
    264	}
    265
    266	dev_put(midev->ndev);
    267	return rc;
    268}
    269
    270/* Processes incoming data that has been accumulated by the slave cb */
    271static int mctp_i2c_recv(struct mctp_i2c_dev *midev)
    272{
    273	struct net_device *ndev = midev->ndev;
    274	struct mctp_i2c_hdr *hdr;
    275	struct mctp_skb_cb *cb;
    276	struct sk_buff *skb;
    277	unsigned long flags;
    278	u8 pec, calc_pec;
    279	size_t recvlen;
    280	int status;
    281
    282	/* + 1 for the PEC */
    283	if (midev->rx_pos < MCTP_I2C_MINLEN + 1) {
    284		ndev->stats.rx_length_errors++;
    285		return -EINVAL;
    286	}
    287	/* recvlen excludes PEC */
    288	recvlen = midev->rx_pos - 1;
    289
    290	hdr = (void *)midev->rx_buffer;
    291	if (hdr->command != MCTP_I2C_COMMANDCODE) {
    292		ndev->stats.rx_dropped++;
    293		return -EINVAL;
    294	}
    295
    296	if (hdr->byte_count + offsetof(struct mctp_i2c_hdr, source_slave) != recvlen) {
    297		ndev->stats.rx_length_errors++;
    298		return -EINVAL;
    299	}
    300
    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++;
    305		return -EINVAL;
    306	}
    307
    308	skb = netdev_alloc_skb(ndev, recvlen);
    309	if (!skb) {
    310		ndev->stats.rx_dropped++;
    311		return -ENOMEM;
    312	}
    313
    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);
    319
    320	cb = __mctp_cb(skb);
    321	cb->halen = 1;
    322	cb->haddr[0] = hdr->source_slave >> 1;
    323
    324	/* We need to ensure that the netif is not used once netdev
    325	 * unregister occurs
    326	 */
    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);
    331
    332		status = netif_rx(skb);
    333		complete(&midev->rx_done);
    334	} else {
    335		status = NET_RX_DROP;
    336		spin_unlock_irqrestore(&midev->lock, flags);
    337	}
    338
    339	if (status == NET_RX_SUCCESS) {
    340		ndev->stats.rx_packets++;
    341		ndev->stats.rx_bytes += recvlen;
    342	} else {
    343		ndev->stats.rx_dropped++;
    344	}
    345	return 0;
    346}
    347
    348enum 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,
    353};
    354
    355static enum mctp_i2c_flow_state
    356mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb)
    357{
    358	enum mctp_i2c_flow_state state;
    359	struct mctp_sk_key *key;
    360	struct mctp_flow *flow;
    361	unsigned long flags;
    362
    363	flow = skb_ext_find(skb, SKB_EXT_MCTP);
    364	if (!flow)
    365		return MCTP_I2C_TX_FLOW_NONE;
    366
    367	key = flow->key;
    368	if (!key)
    369		return MCTP_I2C_TX_FLOW_NONE;
    370
    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
    374	 */
    375	if (!key->valid) {
    376		state = MCTP_I2C_TX_FLOW_INVALID;
    377
    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;
    381	} else {
    382		state = MCTP_I2C_TX_FLOW_EXISTING;
    383	}
    384
    385	spin_unlock_irqrestore(&key->lock, flags);
    386
    387	return state;
    388}
    389
    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
    392 * recursive locking.
    393 */
    394static void mctp_i2c_lock_nest(struct mctp_i2c_dev *midev)
    395{
    396	unsigned long flags;
    397	bool lock;
    398
    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);
    403
    404	if (lock)
    405		i2c_lock_bus(midev->adapter, I2C_LOCK_SEGMENT);
    406}
    407
    408static void mctp_i2c_unlock_nest(struct mctp_i2c_dev *midev)
    409{
    410	unsigned long flags;
    411	bool unlock;
    412
    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);
    418
    419	if (unlock)
    420		i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
    421}
    422
    423/* Unlocks the bus if was previously locked, used for cleanup */
    424static void mctp_i2c_unlock_reset(struct mctp_i2c_dev *midev)
    425{
    426	unsigned long flags;
    427	bool unlock;
    428
    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);
    433
    434	if (unlock)
    435		i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
    436}
    437
    438static void mctp_i2c_xmit(struct mctp_i2c_dev *midev, struct sk_buff *skb)
    439{
    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};
    444	u8 *pecp;
    445	int rc;
    446
    447	fs = mctp_i2c_get_tx_flow_state(midev, skb);
    448
    449	hdr = (void *)skb_mac_header(skb);
    450	/* Sanity check that packet contents matches skb length,
    451	 * and can't exceed MCTP_I2C_BUFSZ
    452	 */
    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);
    457		return;
    458	}
    459
    460	if (skb_tailroom(skb) >= 1) {
    461		/* Linear case with space, we can just append the PEC */
    462		skb_put(skb, 1);
    463	} else {
    464		/* Otherwise need to copy the buffer */
    465		skb_copy_bits(skb, 0, midev->tx_scratch, skb->len);
    466		hdr = (void *)midev->tx_scratch;
    467	}
    468
    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;
    475
    476	switch (fs) {
    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);
    483		break;
    484
    485	case MCTP_I2C_TX_FLOW_NEW:
    486		/* new flow: lock, tx, but don't unlock; that will happen
    487		 * on flow release
    488		 */
    489		mctp_i2c_lock_nest(midev);
    490		mctp_i2c_device_select(midev->client, midev);
    491		fallthrough;
    492
    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);
    496		break;
    497
    498	case MCTP_I2C_TX_FLOW_INVALID:
    499		return;
    500	}
    501
    502	if (rc < 0) {
    503		dev_warn_ratelimited(&midev->adapter->dev,
    504				     "__i2c_transfer failed %d\n", rc);
    505		stats->tx_errors++;
    506	} else {
    507		stats->tx_bytes += skb->len;
    508		stats->tx_packets++;
    509	}
    510}
    511
    512static void mctp_i2c_flow_release(struct mctp_i2c_dev *midev)
    513{
    514	unsigned long flags;
    515	bool unlock;
    516
    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;
    521	}
    522
    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);
    527
    528	if (unlock)
    529		i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
    530}
    531
    532static 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)
    535{
    536	struct mctp_i2c_hdr *hdr;
    537	struct mctp_hdr *mhdr;
    538	u8 lldst, llsrc;
    539
    540	if (len > MCTP_I2C_MAXMTU)
    541		return -EMSGSIZE;
    542
    543	lldst = *((u8 *)daddr);
    544	llsrc = *((u8 *)saddr);
    545
    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;
    554	mhdr->ver = 0x01;
    555
    556	return sizeof(struct mctp_i2c_hdr);
    557}
    558
    559static int mctp_i2c_tx_thread(void *data)
    560{
    561	struct mctp_i2c_dev *midev = data;
    562	struct sk_buff *skb;
    563	unsigned long flags;
    564
    565	for (;;) {
    566		if (kthread_should_stop())
    567			break;
    568
    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);
    574
    575		if (skb == &midev->unlock_marker) {
    576			mctp_i2c_flow_release(midev);
    577
    578		} else if (skb) {
    579			mctp_i2c_xmit(midev, skb);
    580			kfree_skb(skb);
    581
    582		} else {
    583			wait_event_idle(midev->tx_wq,
    584					!skb_queue_empty(&midev->tx_queue) ||
    585				   kthread_should_stop());
    586		}
    587	}
    588
    589	return 0;
    590}
    591
    592static netdev_tx_t mctp_i2c_start_xmit(struct sk_buff *skb,
    593				       struct net_device *dev)
    594{
    595	struct mctp_i2c_dev *midev = netdev_priv(dev);
    596	unsigned long flags;
    597
    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;
    604	}
    605
    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);
    610
    611	wake_up(&midev->tx_wq);
    612	return NETDEV_TX_OK;
    613}
    614
    615static void mctp_i2c_release_flow(struct mctp_dev *mdev,
    616				  struct mctp_sk_key *key)
    617
    618{
    619	struct mctp_i2c_dev *midev = netdev_priv(mdev->dev);
    620	unsigned long flags;
    621
    622	spin_lock_irqsave(&midev->lock, flags);
    623	midev->release_count++;
    624	spin_unlock_irqrestore(&midev->lock, flags);
    625
    626	/* Ensure we have a release operation queued, through the fake
    627	 * marker skb
    628	 */
    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);
    633
    634	wake_up(&midev->tx_wq);
    635}
    636
    637static 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,
    641};
    642
    643static const struct header_ops mctp_i2c_headops = {
    644	.create = mctp_i2c_header_create,
    645};
    646
    647static const struct mctp_netdev_ops mctp_i2c_mctp_ops = {
    648	.release_flow = mctp_i2c_release_flow,
    649};
    650
    651static void mctp_i2c_net_setup(struct net_device *dev)
    652{
    653	dev->type = ARPHRD_MCTP;
    654
    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;
    659
    660	dev->hard_header_len = sizeof(struct mctp_i2c_hdr);
    661	dev->addr_len = 1;
    662
    663	dev->netdev_ops		= &mctp_i2c_ops;
    664	dev->header_ops		= &mctp_i2c_headops;
    665}
    666
    667/* Populates the mctp_i2c_dev priv struct for a netdev.
    668 * Returns an error pointer on failure.
    669 */
    670static struct mctp_i2c_dev *mctp_i2c_midev_init(struct net_device *dev,
    671						struct mctp_i2c_client *mcli,
    672						struct i2c_adapter *adap)
    673{
    674	struct mctp_i2c_dev *midev = netdev_priv(dev);
    675	unsigned long flags;
    676
    677	midev->tx_thread = kthread_create(mctp_i2c_tx_thread, midev,
    678					  "%s/tx", dev->name);
    679	if (IS_ERR(midev->tx_thread))
    680		return ERR_CAST(midev->tx_thread);
    681
    682	midev->ndev = dev;
    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);
    695
    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 */
    700	if (!mcli->sel)
    701		__mctp_i2c_device_select(mcli, midev);
    702	spin_unlock_irqrestore(&mcli->sel_lock, flags);
    703
    704	/* Start the worker thread */
    705	wake_up_process(midev->tx_thread);
    706
    707	return midev;
    708}
    709
    710/* Counterpart of mctp_i2c_midev_init */
    711static void mctp_i2c_midev_free(struct mctp_i2c_dev *midev)
    712{
    713	struct mctp_i2c_client *mcli = midev->client;
    714	unsigned long flags;
    715
    716	if (midev->tx_thread) {
    717		kthread_stop(midev->tx_thread);
    718		midev->tx_thread = NULL;
    719	}
    720
    721	/* Unconditionally unlock on close */
    722	mctp_i2c_unlock_reset(midev);
    723
    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;
    729
    730		first = list_first_entry_or_null(&mcli->devs, struct mctp_i2c_dev, list);
    731		__mctp_i2c_device_select(mcli, first);
    732	}
    733	spin_unlock_irqrestore(&mcli->sel_lock, flags);
    734
    735	skb_queue_purge(&midev->tx_queue);
    736	put_device(&midev->adapter->dev);
    737	put_device(&mcli->client->dev);
    738}
    739
    740/* Stops, unregisters, and frees midev */
    741static void mctp_i2c_unregister(struct mctp_i2c_dev *midev)
    742{
    743	unsigned long flags;
    744
    745	/* Stop tx thread prior to unregister, it uses netif_() functions */
    746	kthread_stop(midev->tx_thread);
    747	midev->tx_thread = NULL;
    748
    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);
    754
    755	mctp_unregister_netdev(midev->ndev);
    756	/* midev has been freed now by mctp_i2c_ndo_uninit callback */
    757
    758	free_netdev(midev->ndev);
    759}
    760
    761static void mctp_i2c_ndo_uninit(struct net_device *dev)
    762{
    763	struct mctp_i2c_dev *midev = netdev_priv(dev);
    764
    765	/* Perform cleanup here to ensure that mcli->sel isn't holding
    766	 * a reference that would prevent unregister_netdevice()
    767	 * from completing.
    768	 */
    769	mctp_i2c_midev_free(midev);
    770}
    771
    772static int mctp_i2c_ndo_open(struct net_device *dev)
    773{
    774	struct mctp_i2c_dev *midev = netdev_priv(dev);
    775	unsigned long flags;
    776
    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);
    781
    782	return 0;
    783}
    784
    785static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli,
    786			       struct i2c_adapter *adap)
    787{
    788	struct mctp_i2c_dev *midev = NULL;
    789	struct net_device *ndev = NULL;
    790	struct i2c_adapter *root;
    791	unsigned long flags;
    792	char namebuf[30];
    793	int rc;
    794
    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);
    800		return -EINVAL;
    801	}
    802
    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);
    806	if (!ndev) {
    807		dev_err(&mcli->client->dev, "alloc netdev failed\n");
    808		rc = -ENOMEM;
    809		goto err;
    810	}
    811	dev_net_set(ndev, current->nsproxy->net_ns);
    812	SET_NETDEV_DEV(ndev, &adap->dev);
    813	dev_addr_set(ndev, &mcli->lladdr);
    814
    815	midev = mctp_i2c_midev_init(ndev, mcli, adap);
    816	if (IS_ERR(midev)) {
    817		rc = PTR_ERR(midev);
    818		midev = NULL;
    819		goto err;
    820	}
    821
    822	rc = mctp_register_netdev(ndev, &mctp_i2c_mctp_ops);
    823	if (rc < 0) {
    824		dev_err(&mcli->client->dev,
    825			"register netdev \"%s\" failed %d\n",
    826			ndev->name, rc);
    827		goto err;
    828	}
    829
    830	spin_lock_irqsave(&midev->lock, flags);
    831	midev->allow_rx = false;
    832	spin_unlock_irqrestore(&midev->lock, flags);
    833
    834	return 0;
    835err:
    836	if (midev)
    837		mctp_i2c_midev_free(midev);
    838	if (ndev)
    839		free_netdev(ndev);
    840	return rc;
    841}
    842
    843/* Removes any netdev for adap. mcli is the parent root i2c client */
    844static void mctp_i2c_remove_netdev(struct mctp_i2c_client *mcli,
    845				   struct i2c_adapter *adap)
    846{
    847	struct mctp_i2c_dev *midev = NULL, *m = NULL;
    848	unsigned long flags;
    849
    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) {
    855			midev = m;
    856			break;
    857		}
    858	spin_unlock_irqrestore(&mcli->sel_lock, flags);
    859
    860	if (midev)
    861		mctp_i2c_unregister(midev);
    862}
    863
    864/* Determines whether a device is an i2c adapter.
    865 * Optionally returns the root i2c_adapter
    866 */
    867static struct i2c_adapter *mctp_i2c_get_adapter(struct device *dev,
    868						struct i2c_adapter **ret_root)
    869{
    870	struct i2c_adapter *root, *adap;
    871
    872	if (dev->type != &i2c_adapter_type)
    873		return NULL;
    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",
    877		  dev_name(dev));
    878	if (!root)
    879		return NULL;
    880	if (ret_root)
    881		*ret_root = root;
    882	return adap;
    883}
    884
    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
    887 */
    888static bool mctp_i2c_adapter_match(struct i2c_adapter *adap, bool match_no_of)
    889{
    890	if (!adap->dev.of_node)
    891		return match_no_of;
    892	return of_property_read_bool(adap->dev.of_node, MCTP_I2C_OF_PROP);
    893}
    894
    895/* Called for each existing i2c device (adapter or client) when a
    896 * new mctp-i2c client is probed.
    897 */
    898static int mctp_i2c_client_try_attach(struct device *dev, void *data)
    899{
    900	struct i2c_adapter *adap = NULL, *root = NULL;
    901	struct mctp_i2c_client *mcli = data;
    902
    903	adap = mctp_i2c_get_adapter(dev, &root);
    904	if (!adap)
    905		return 0;
    906	if (mcli->client->adapter != root)
    907		return 0;
    908	/* Must either have mctp-controller property on the adapter, or
    909	 * be a root adapter if it's non-devicetree
    910	 */
    911	if (!mctp_i2c_adapter_match(adap, adap == root))
    912		return 0;
    913
    914	return mctp_i2c_add_netdev(mcli, adap);
    915}
    916
    917static void mctp_i2c_notify_add(struct device *dev)
    918{
    919	struct mctp_i2c_client *mcli = NULL, *m = NULL;
    920	struct i2c_adapter *root = NULL, *adap = NULL;
    921	int rc;
    922
    923	adap = mctp_i2c_get_adapter(dev, &root);
    924	if (!adap)
    925		return;
    926	/* Check for mctp-controller property on the adapter */
    927	if (!mctp_i2c_adapter_match(adap, false))
    928		return;
    929
    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) {
    934			mcli = m;
    935			break;
    936		}
    937	}
    938
    939	if (mcli) {
    940		rc = mctp_i2c_add_netdev(mcli, adap);
    941		if (rc < 0)
    942			dev_warn(dev, "Failed adding mctp-i2c net device\n");
    943	}
    944	mutex_unlock(&driver_clients_lock);
    945}
    946
    947static void mctp_i2c_notify_del(struct device *dev)
    948{
    949	struct i2c_adapter *root = NULL, *adap = NULL;
    950	struct mctp_i2c_client *mcli = NULL;
    951
    952	adap = mctp_i2c_get_adapter(dev, &root);
    953	if (!adap)
    954		return;
    955
    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);
    960			break;
    961		}
    962	}
    963	mutex_unlock(&driver_clients_lock);
    964}
    965
    966static int mctp_i2c_probe(struct i2c_client *client)
    967{
    968	struct mctp_i2c_client *mcli = NULL;
    969	int rc;
    970
    971	mutex_lock(&driver_clients_lock);
    972	mcli = mctp_i2c_new_client(client);
    973	if (IS_ERR(mcli)) {
    974		rc = PTR_ERR(mcli);
    975		mcli = NULL;
    976		goto out;
    977	} else {
    978		list_add(&mcli->list, &driver_clients);
    979	}
    980
    981	/* Add a netdev for adapters that have a 'mctp-controller' property */
    982	i2c_for_each_dev(mcli, mctp_i2c_client_try_attach);
    983	rc = 0;
    984out:
    985	mutex_unlock(&driver_clients_lock);
    986	return rc;
    987}
    988
    989static int mctp_i2c_remove(struct i2c_client *client)
    990{
    991	struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
    992	struct mctp_i2c_dev *midev = NULL, *tmp = NULL;
    993
    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);
    999
   1000	mctp_i2c_free_client(mcli);
   1001	mutex_unlock(&driver_clients_lock);
   1002	/* Callers ignore return code */
   1003	return 0;
   1004}
   1005
   1006/* We look for a 'mctp-controller' property on I2C busses as they are
   1007 * added/deleted, creating/removing netdevs as required.
   1008 */
   1009static int mctp_i2c_notifier_call(struct notifier_block *nb,
   1010				  unsigned long action, void *data)
   1011{
   1012	struct device *dev = data;
   1013
   1014	switch (action) {
   1015	case BUS_NOTIFY_ADD_DEVICE:
   1016		mctp_i2c_notify_add(dev);
   1017		break;
   1018	case BUS_NOTIFY_DEL_DEVICE:
   1019		mctp_i2c_notify_del(dev);
   1020		break;
   1021	}
   1022	return NOTIFY_DONE;
   1023}
   1024
   1025static struct notifier_block mctp_i2c_notifier = {
   1026	.notifier_call = mctp_i2c_notifier_call,
   1027};
   1028
   1029static const struct i2c_device_id mctp_i2c_id[] = {
   1030	{ "mctp-i2c-interface", 0 },
   1031	{},
   1032};
   1033MODULE_DEVICE_TABLE(i2c, mctp_i2c_id);
   1034
   1035static const struct of_device_id mctp_i2c_of_match[] = {
   1036	{ .compatible = "mctp-i2c-controller" },
   1037	{},
   1038};
   1039MODULE_DEVICE_TABLE(of, mctp_i2c_of_match);
   1040
   1041static struct i2c_driver mctp_i2c_driver = {
   1042	.driver = {
   1043		.name = "mctp-i2c-interface",
   1044		.of_match_table = mctp_i2c_of_match,
   1045	},
   1046	.probe_new = mctp_i2c_probe,
   1047	.remove = mctp_i2c_remove,
   1048	.id_table = mctp_i2c_id,
   1049};
   1050
   1051static __init int mctp_i2c_mod_init(void)
   1052{
   1053	int rc;
   1054
   1055	pr_info("MCTP I2C interface driver\n");
   1056	rc = i2c_add_driver(&mctp_i2c_driver);
   1057	if (rc < 0)
   1058		return rc;
   1059	rc = bus_register_notifier(&i2c_bus_type, &mctp_i2c_notifier);
   1060	if (rc < 0) {
   1061		i2c_del_driver(&mctp_i2c_driver);
   1062		return rc;
   1063	}
   1064	return 0;
   1065}
   1066
   1067static __exit void mctp_i2c_mod_exit(void)
   1068{
   1069	int rc;
   1070
   1071	rc = bus_unregister_notifier(&i2c_bus_type, &mctp_i2c_notifier);
   1072	if (rc < 0)
   1073		pr_warn("MCTP I2C could not unregister notifier, %d\n", rc);
   1074	i2c_del_driver(&mctp_i2c_driver);
   1075}
   1076
   1077module_init(mctp_i2c_mod_init);
   1078module_exit(mctp_i2c_mod_exit);
   1079
   1080MODULE_DESCRIPTION("MCTP I2C device");
   1081MODULE_LICENSE("GPL v2");
   1082MODULE_AUTHOR("Matt Johnston <matt@codeconstruct.com.au>");