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