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