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 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 */ 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 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 */ 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 */ 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 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 */ 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 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 */ 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 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 */ 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 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 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 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 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 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 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 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 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 */ 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 */ 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 */ 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 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 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 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 */ 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 */ 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 */ 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 */ 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 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 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 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 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 */ 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 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 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