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