1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Microsemi Switchtec(tm) PCIe Management Driver 4 * Copyright (c) 2017, Microsemi Corporation 5 */ 6 7 #include <linux/switchtec.h> 8 #include <linux/switchtec_ioctl.h> 9 10 #include <linux/interrupt.h> 11 #include <linux/module.h> 12 #include <linux/fs.h> 13 #include <linux/uaccess.h> 14 #include <linux/poll.h> 15 #include <linux/wait.h> 16 17 MODULE_DESCRIPTION("Microsemi Switchtec(tm) PCIe Management Driver"); 18 MODULE_VERSION("0.1"); 19 MODULE_LICENSE("GPL"); 20 MODULE_AUTHOR("Microsemi Corporation"); 21 22 static int max_devices = 16; 23 module_param(max_devices, int, 0644); 24 MODULE_PARM_DESC(max_devices, "max number of switchtec device instances"); 25 26 static dev_t switchtec_devt; 27 static DEFINE_IDA(switchtec_minor_ida); 28 29 struct class *switchtec_class; 30 EXPORT_SYMBOL_GPL(switchtec_class); 31 32 enum mrpc_state { 33 MRPC_IDLE = 0, 34 MRPC_QUEUED, 35 MRPC_RUNNING, 36 MRPC_DONE, 37 }; 38 39 struct switchtec_user { 40 struct switchtec_dev *stdev; 41 42 enum mrpc_state state; 43 44 struct completion comp; 45 struct kref kref; 46 struct list_head list; 47 48 u32 cmd; 49 u32 status; 50 u32 return_code; 51 size_t data_len; 52 size_t read_len; 53 unsigned char data[SWITCHTEC_MRPC_PAYLOAD_SIZE]; 54 int event_cnt; 55 }; 56 57 static struct switchtec_user *stuser_create(struct switchtec_dev *stdev) 58 { 59 struct switchtec_user *stuser; 60 61 stuser = kzalloc(sizeof(*stuser), GFP_KERNEL); 62 if (!stuser) 63 return ERR_PTR(-ENOMEM); 64 65 get_device(&stdev->dev); 66 stuser->stdev = stdev; 67 kref_init(&stuser->kref); 68 INIT_LIST_HEAD(&stuser->list); 69 init_completion(&stuser->comp); 70 stuser->event_cnt = atomic_read(&stdev->event_cnt); 71 72 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); 73 74 return stuser; 75 } 76 77 static void stuser_free(struct kref *kref) 78 { 79 struct switchtec_user *stuser; 80 81 stuser = container_of(kref, struct switchtec_user, kref); 82 83 dev_dbg(&stuser->stdev->dev, "%s: %p\n", __func__, stuser); 84 85 put_device(&stuser->stdev->dev); 86 kfree(stuser); 87 } 88 89 static void stuser_put(struct switchtec_user *stuser) 90 { 91 kref_put(&stuser->kref, stuser_free); 92 } 93 94 static void stuser_set_state(struct switchtec_user *stuser, 95 enum mrpc_state state) 96 { 97 /* requires the mrpc_mutex to already be held when called */ 98 99 const char * const state_names[] = { 100 [MRPC_IDLE] = "IDLE", 101 [MRPC_QUEUED] = "QUEUED", 102 [MRPC_RUNNING] = "RUNNING", 103 [MRPC_DONE] = "DONE", 104 }; 105 106 stuser->state = state; 107 108 dev_dbg(&stuser->stdev->dev, "stuser state %p -> %s", 109 stuser, state_names[state]); 110 } 111 112 static void mrpc_complete_cmd(struct switchtec_dev *stdev); 113 114 static void mrpc_cmd_submit(struct switchtec_dev *stdev) 115 { 116 /* requires the mrpc_mutex to already be held when called */ 117 118 struct switchtec_user *stuser; 119 120 if (stdev->mrpc_busy) 121 return; 122 123 if (list_empty(&stdev->mrpc_queue)) 124 return; 125 126 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, 127 list); 128 129 stuser_set_state(stuser, MRPC_RUNNING); 130 stdev->mrpc_busy = 1; 131 memcpy_toio(&stdev->mmio_mrpc->input_data, 132 stuser->data, stuser->data_len); 133 iowrite32(stuser->cmd, &stdev->mmio_mrpc->cmd); 134 135 stuser->status = ioread32(&stdev->mmio_mrpc->status); 136 if (stuser->status != SWITCHTEC_MRPC_STATUS_INPROGRESS) 137 mrpc_complete_cmd(stdev); 138 139 schedule_delayed_work(&stdev->mrpc_timeout, 140 msecs_to_jiffies(500)); 141 } 142 143 static int mrpc_queue_cmd(struct switchtec_user *stuser) 144 { 145 /* requires the mrpc_mutex to already be held when called */ 146 147 struct switchtec_dev *stdev = stuser->stdev; 148 149 kref_get(&stuser->kref); 150 stuser->read_len = sizeof(stuser->data); 151 stuser_set_state(stuser, MRPC_QUEUED); 152 init_completion(&stuser->comp); 153 list_add_tail(&stuser->list, &stdev->mrpc_queue); 154 155 mrpc_cmd_submit(stdev); 156 157 return 0; 158 } 159 160 static void mrpc_complete_cmd(struct switchtec_dev *stdev) 161 { 162 /* requires the mrpc_mutex to already be held when called */ 163 struct switchtec_user *stuser; 164 165 if (list_empty(&stdev->mrpc_queue)) 166 return; 167 168 stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, 169 list); 170 171 stuser->status = ioread32(&stdev->mmio_mrpc->status); 172 if (stuser->status == SWITCHTEC_MRPC_STATUS_INPROGRESS) 173 return; 174 175 stuser_set_state(stuser, MRPC_DONE); 176 stuser->return_code = 0; 177 178 if (stuser->status != SWITCHTEC_MRPC_STATUS_DONE) 179 goto out; 180 181 stuser->return_code = ioread32(&stdev->mmio_mrpc->ret_value); 182 if (stuser->return_code != 0) 183 goto out; 184 185 memcpy_fromio(stuser->data, &stdev->mmio_mrpc->output_data, 186 stuser->read_len); 187 188 out: 189 complete_all(&stuser->comp); 190 list_del_init(&stuser->list); 191 stuser_put(stuser); 192 stdev->mrpc_busy = 0; 193 194 mrpc_cmd_submit(stdev); 195 } 196 197 static void mrpc_event_work(struct work_struct *work) 198 { 199 struct switchtec_dev *stdev; 200 201 stdev = container_of(work, struct switchtec_dev, mrpc_work); 202 203 dev_dbg(&stdev->dev, "%s\n", __func__); 204 205 mutex_lock(&stdev->mrpc_mutex); 206 cancel_delayed_work(&stdev->mrpc_timeout); 207 mrpc_complete_cmd(stdev); 208 mutex_unlock(&stdev->mrpc_mutex); 209 } 210 211 static void mrpc_timeout_work(struct work_struct *work) 212 { 213 struct switchtec_dev *stdev; 214 u32 status; 215 216 stdev = container_of(work, struct switchtec_dev, mrpc_timeout.work); 217 218 dev_dbg(&stdev->dev, "%s\n", __func__); 219 220 mutex_lock(&stdev->mrpc_mutex); 221 222 status = ioread32(&stdev->mmio_mrpc->status); 223 if (status == SWITCHTEC_MRPC_STATUS_INPROGRESS) { 224 schedule_delayed_work(&stdev->mrpc_timeout, 225 msecs_to_jiffies(500)); 226 goto out; 227 } 228 229 mrpc_complete_cmd(stdev); 230 231 out: 232 mutex_unlock(&stdev->mrpc_mutex); 233 } 234 235 static ssize_t device_version_show(struct device *dev, 236 struct device_attribute *attr, char *buf) 237 { 238 struct switchtec_dev *stdev = to_stdev(dev); 239 u32 ver; 240 241 ver = ioread32(&stdev->mmio_sys_info->device_version); 242 243 return sprintf(buf, "%x\n", ver); 244 } 245 static DEVICE_ATTR_RO(device_version); 246 247 static ssize_t fw_version_show(struct device *dev, 248 struct device_attribute *attr, char *buf) 249 { 250 struct switchtec_dev *stdev = to_stdev(dev); 251 u32 ver; 252 253 ver = ioread32(&stdev->mmio_sys_info->firmware_version); 254 255 return sprintf(buf, "%08x\n", ver); 256 } 257 static DEVICE_ATTR_RO(fw_version); 258 259 static ssize_t io_string_show(char *buf, void __iomem *attr, size_t len) 260 { 261 int i; 262 263 memcpy_fromio(buf, attr, len); 264 buf[len] = '\n'; 265 buf[len + 1] = 0; 266 267 for (i = len - 1; i > 0; i--) { 268 if (buf[i] != ' ') 269 break; 270 buf[i] = '\n'; 271 buf[i + 1] = 0; 272 } 273 274 return strlen(buf); 275 } 276 277 #define DEVICE_ATTR_SYS_INFO_STR(field) \ 278 static ssize_t field ## _show(struct device *dev, \ 279 struct device_attribute *attr, char *buf) \ 280 { \ 281 struct switchtec_dev *stdev = to_stdev(dev); \ 282 return io_string_show(buf, &stdev->mmio_sys_info->field, \ 283 sizeof(stdev->mmio_sys_info->field)); \ 284 } \ 285 \ 286 static DEVICE_ATTR_RO(field) 287 288 DEVICE_ATTR_SYS_INFO_STR(vendor_id); 289 DEVICE_ATTR_SYS_INFO_STR(product_id); 290 DEVICE_ATTR_SYS_INFO_STR(product_revision); 291 DEVICE_ATTR_SYS_INFO_STR(component_vendor); 292 293 static ssize_t component_id_show(struct device *dev, 294 struct device_attribute *attr, char *buf) 295 { 296 struct switchtec_dev *stdev = to_stdev(dev); 297 int id = ioread16(&stdev->mmio_sys_info->component_id); 298 299 return sprintf(buf, "PM%04X\n", id); 300 } 301 static DEVICE_ATTR_RO(component_id); 302 303 static ssize_t component_revision_show(struct device *dev, 304 struct device_attribute *attr, char *buf) 305 { 306 struct switchtec_dev *stdev = to_stdev(dev); 307 int rev = ioread8(&stdev->mmio_sys_info->component_revision); 308 309 return sprintf(buf, "%d\n", rev); 310 } 311 static DEVICE_ATTR_RO(component_revision); 312 313 static ssize_t partition_show(struct device *dev, 314 struct device_attribute *attr, char *buf) 315 { 316 struct switchtec_dev *stdev = to_stdev(dev); 317 318 return sprintf(buf, "%d\n", stdev->partition); 319 } 320 static DEVICE_ATTR_RO(partition); 321 322 static ssize_t partition_count_show(struct device *dev, 323 struct device_attribute *attr, char *buf) 324 { 325 struct switchtec_dev *stdev = to_stdev(dev); 326 327 return sprintf(buf, "%d\n", stdev->partition_count); 328 } 329 static DEVICE_ATTR_RO(partition_count); 330 331 static struct attribute *switchtec_device_attrs[] = { 332 &dev_attr_device_version.attr, 333 &dev_attr_fw_version.attr, 334 &dev_attr_vendor_id.attr, 335 &dev_attr_product_id.attr, 336 &dev_attr_product_revision.attr, 337 &dev_attr_component_vendor.attr, 338 &dev_attr_component_id.attr, 339 &dev_attr_component_revision.attr, 340 &dev_attr_partition.attr, 341 &dev_attr_partition_count.attr, 342 NULL, 343 }; 344 345 ATTRIBUTE_GROUPS(switchtec_device); 346 347 static int switchtec_dev_open(struct inode *inode, struct file *filp) 348 { 349 struct switchtec_dev *stdev; 350 struct switchtec_user *stuser; 351 352 stdev = container_of(inode->i_cdev, struct switchtec_dev, cdev); 353 354 stuser = stuser_create(stdev); 355 if (IS_ERR(stuser)) 356 return PTR_ERR(stuser); 357 358 filp->private_data = stuser; 359 nonseekable_open(inode, filp); 360 361 dev_dbg(&stdev->dev, "%s: %p\n", __func__, stuser); 362 363 return 0; 364 } 365 366 static int switchtec_dev_release(struct inode *inode, struct file *filp) 367 { 368 struct switchtec_user *stuser = filp->private_data; 369 370 stuser_put(stuser); 371 372 return 0; 373 } 374 375 static int lock_mutex_and_test_alive(struct switchtec_dev *stdev) 376 { 377 if (mutex_lock_interruptible(&stdev->mrpc_mutex)) 378 return -EINTR; 379 380 if (!stdev->alive) { 381 mutex_unlock(&stdev->mrpc_mutex); 382 return -ENODEV; 383 } 384 385 return 0; 386 } 387 388 static ssize_t switchtec_dev_write(struct file *filp, const char __user *data, 389 size_t size, loff_t *off) 390 { 391 struct switchtec_user *stuser = filp->private_data; 392 struct switchtec_dev *stdev = stuser->stdev; 393 int rc; 394 395 if (size < sizeof(stuser->cmd) || 396 size > sizeof(stuser->cmd) + sizeof(stuser->data)) 397 return -EINVAL; 398 399 stuser->data_len = size - sizeof(stuser->cmd); 400 401 rc = lock_mutex_and_test_alive(stdev); 402 if (rc) 403 return rc; 404 405 if (stuser->state != MRPC_IDLE) { 406 rc = -EBADE; 407 goto out; 408 } 409 410 rc = copy_from_user(&stuser->cmd, data, sizeof(stuser->cmd)); 411 if (rc) { 412 rc = -EFAULT; 413 goto out; 414 } 415 416 data += sizeof(stuser->cmd); 417 rc = copy_from_user(&stuser->data, data, size - sizeof(stuser->cmd)); 418 if (rc) { 419 rc = -EFAULT; 420 goto out; 421 } 422 423 rc = mrpc_queue_cmd(stuser); 424 425 out: 426 mutex_unlock(&stdev->mrpc_mutex); 427 428 if (rc) 429 return rc; 430 431 return size; 432 } 433 434 static ssize_t switchtec_dev_read(struct file *filp, char __user *data, 435 size_t size, loff_t *off) 436 { 437 struct switchtec_user *stuser = filp->private_data; 438 struct switchtec_dev *stdev = stuser->stdev; 439 int rc; 440 441 if (size < sizeof(stuser->cmd) || 442 size > sizeof(stuser->cmd) + sizeof(stuser->data)) 443 return -EINVAL; 444 445 rc = lock_mutex_and_test_alive(stdev); 446 if (rc) 447 return rc; 448 449 if (stuser->state == MRPC_IDLE) { 450 mutex_unlock(&stdev->mrpc_mutex); 451 return -EBADE; 452 } 453 454 stuser->read_len = size - sizeof(stuser->return_code); 455 456 mutex_unlock(&stdev->mrpc_mutex); 457 458 if (filp->f_flags & O_NONBLOCK) { 459 if (!try_wait_for_completion(&stuser->comp)) 460 return -EAGAIN; 461 } else { 462 rc = wait_for_completion_interruptible(&stuser->comp); 463 if (rc < 0) 464 return rc; 465 } 466 467 rc = lock_mutex_and_test_alive(stdev); 468 if (rc) 469 return rc; 470 471 if (stuser->state != MRPC_DONE) { 472 mutex_unlock(&stdev->mrpc_mutex); 473 return -EBADE; 474 } 475 476 rc = copy_to_user(data, &stuser->return_code, 477 sizeof(stuser->return_code)); 478 if (rc) { 479 rc = -EFAULT; 480 goto out; 481 } 482 483 data += sizeof(stuser->return_code); 484 rc = copy_to_user(data, &stuser->data, 485 size - sizeof(stuser->return_code)); 486 if (rc) { 487 rc = -EFAULT; 488 goto out; 489 } 490 491 stuser_set_state(stuser, MRPC_IDLE); 492 493 out: 494 mutex_unlock(&stdev->mrpc_mutex); 495 496 if (stuser->status == SWITCHTEC_MRPC_STATUS_DONE) 497 return size; 498 else if (stuser->status == SWITCHTEC_MRPC_STATUS_INTERRUPTED) 499 return -ENXIO; 500 else 501 return -EBADMSG; 502 } 503 504 static __poll_t switchtec_dev_poll(struct file *filp, poll_table *wait) 505 { 506 struct switchtec_user *stuser = filp->private_data; 507 struct switchtec_dev *stdev = stuser->stdev; 508 __poll_t ret = 0; 509 510 poll_wait(filp, &stuser->comp.wait, wait); 511 poll_wait(filp, &stdev->event_wq, wait); 512 513 if (lock_mutex_and_test_alive(stdev)) 514 return EPOLLIN | EPOLLRDHUP | EPOLLOUT | EPOLLERR | EPOLLHUP; 515 516 mutex_unlock(&stdev->mrpc_mutex); 517 518 if (try_wait_for_completion(&stuser->comp)) 519 ret |= EPOLLIN | EPOLLRDNORM; 520 521 if (stuser->event_cnt != atomic_read(&stdev->event_cnt)) 522 ret |= EPOLLPRI | EPOLLRDBAND; 523 524 return ret; 525 } 526 527 static int ioctl_flash_info(struct switchtec_dev *stdev, 528 struct switchtec_ioctl_flash_info __user *uinfo) 529 { 530 struct switchtec_ioctl_flash_info info = {0}; 531 struct flash_info_regs __iomem *fi = stdev->mmio_flash_info; 532 533 info.flash_length = ioread32(&fi->flash_length); 534 info.num_partitions = SWITCHTEC_IOCTL_NUM_PARTITIONS; 535 536 if (copy_to_user(uinfo, &info, sizeof(info))) 537 return -EFAULT; 538 539 return 0; 540 } 541 542 static void set_fw_info_part(struct switchtec_ioctl_flash_part_info *info, 543 struct partition_info __iomem *pi) 544 { 545 info->address = ioread32(&pi->address); 546 info->length = ioread32(&pi->length); 547 } 548 549 static int ioctl_flash_part_info(struct switchtec_dev *stdev, 550 struct switchtec_ioctl_flash_part_info __user *uinfo) 551 { 552 struct switchtec_ioctl_flash_part_info info = {0}; 553 struct flash_info_regs __iomem *fi = stdev->mmio_flash_info; 554 struct sys_info_regs __iomem *si = stdev->mmio_sys_info; 555 u32 active_addr = -1; 556 557 if (copy_from_user(&info, uinfo, sizeof(info))) 558 return -EFAULT; 559 560 switch (info.flash_partition) { 561 case SWITCHTEC_IOCTL_PART_CFG0: 562 active_addr = ioread32(&fi->active_cfg); 563 set_fw_info_part(&info, &fi->cfg0); 564 if (ioread16(&si->cfg_running) == SWITCHTEC_CFG0_RUNNING) 565 info.active |= SWITCHTEC_IOCTL_PART_RUNNING; 566 break; 567 case SWITCHTEC_IOCTL_PART_CFG1: 568 active_addr = ioread32(&fi->active_cfg); 569 set_fw_info_part(&info, &fi->cfg1); 570 if (ioread16(&si->cfg_running) == SWITCHTEC_CFG1_RUNNING) 571 info.active |= SWITCHTEC_IOCTL_PART_RUNNING; 572 break; 573 case SWITCHTEC_IOCTL_PART_IMG0: 574 active_addr = ioread32(&fi->active_img); 575 set_fw_info_part(&info, &fi->img0); 576 if (ioread16(&si->img_running) == SWITCHTEC_IMG0_RUNNING) 577 info.active |= SWITCHTEC_IOCTL_PART_RUNNING; 578 break; 579 case SWITCHTEC_IOCTL_PART_IMG1: 580 active_addr = ioread32(&fi->active_img); 581 set_fw_info_part(&info, &fi->img1); 582 if (ioread16(&si->img_running) == SWITCHTEC_IMG1_RUNNING) 583 info.active |= SWITCHTEC_IOCTL_PART_RUNNING; 584 break; 585 case SWITCHTEC_IOCTL_PART_NVLOG: 586 set_fw_info_part(&info, &fi->nvlog); 587 break; 588 case SWITCHTEC_IOCTL_PART_VENDOR0: 589 set_fw_info_part(&info, &fi->vendor[0]); 590 break; 591 case SWITCHTEC_IOCTL_PART_VENDOR1: 592 set_fw_info_part(&info, &fi->vendor[1]); 593 break; 594 case SWITCHTEC_IOCTL_PART_VENDOR2: 595 set_fw_info_part(&info, &fi->vendor[2]); 596 break; 597 case SWITCHTEC_IOCTL_PART_VENDOR3: 598 set_fw_info_part(&info, &fi->vendor[3]); 599 break; 600 case SWITCHTEC_IOCTL_PART_VENDOR4: 601 set_fw_info_part(&info, &fi->vendor[4]); 602 break; 603 case SWITCHTEC_IOCTL_PART_VENDOR5: 604 set_fw_info_part(&info, &fi->vendor[5]); 605 break; 606 case SWITCHTEC_IOCTL_PART_VENDOR6: 607 set_fw_info_part(&info, &fi->vendor[6]); 608 break; 609 case SWITCHTEC_IOCTL_PART_VENDOR7: 610 set_fw_info_part(&info, &fi->vendor[7]); 611 break; 612 default: 613 return -EINVAL; 614 } 615 616 if (info.address == active_addr) 617 info.active |= SWITCHTEC_IOCTL_PART_ACTIVE; 618 619 if (copy_to_user(uinfo, &info, sizeof(info))) 620 return -EFAULT; 621 622 return 0; 623 } 624 625 static int ioctl_event_summary(struct switchtec_dev *stdev, 626 struct switchtec_user *stuser, 627 struct switchtec_ioctl_event_summary __user *usum) 628 { 629 struct switchtec_ioctl_event_summary s = {0}; 630 int i; 631 u32 reg; 632 633 s.global = ioread32(&stdev->mmio_sw_event->global_summary); 634 s.part_bitmap = ioread32(&stdev->mmio_sw_event->part_event_bitmap); 635 s.local_part = ioread32(&stdev->mmio_part_cfg->part_event_summary); 636 637 for (i = 0; i < stdev->partition_count; i++) { 638 reg = ioread32(&stdev->mmio_part_cfg_all[i].part_event_summary); 639 s.part[i] = reg; 640 } 641 642 for (i = 0; i < SWITCHTEC_MAX_PFF_CSR; i++) { 643 reg = ioread16(&stdev->mmio_pff_csr[i].vendor_id); 644 if (reg != PCI_VENDOR_ID_MICROSEMI) 645 break; 646 647 reg = ioread32(&stdev->mmio_pff_csr[i].pff_event_summary); 648 s.pff[i] = reg; 649 } 650 651 if (copy_to_user(usum, &s, sizeof(s))) 652 return -EFAULT; 653 654 stuser->event_cnt = atomic_read(&stdev->event_cnt); 655 656 return 0; 657 } 658 659 static u32 __iomem *global_ev_reg(struct switchtec_dev *stdev, 660 size_t offset, int index) 661 { 662 return (void __iomem *)stdev->mmio_sw_event + offset; 663 } 664 665 static u32 __iomem *part_ev_reg(struct switchtec_dev *stdev, 666 size_t offset, int index) 667 { 668 return (void __iomem *)&stdev->mmio_part_cfg_all[index] + offset; 669 } 670 671 static u32 __iomem *pff_ev_reg(struct switchtec_dev *stdev, 672 size_t offset, int index) 673 { 674 return (void __iomem *)&stdev->mmio_pff_csr[index] + offset; 675 } 676 677 #define EV_GLB(i, r)[i] = {offsetof(struct sw_event_regs, r), global_ev_reg} 678 #define EV_PAR(i, r)[i] = {offsetof(struct part_cfg_regs, r), part_ev_reg} 679 #define EV_PFF(i, r)[i] = {offsetof(struct pff_csr_regs, r), pff_ev_reg} 680 681 static const struct event_reg { 682 size_t offset; 683 u32 __iomem *(*map_reg)(struct switchtec_dev *stdev, 684 size_t offset, int index); 685 } event_regs[] = { 686 EV_GLB(SWITCHTEC_IOCTL_EVENT_STACK_ERROR, stack_error_event_hdr), 687 EV_GLB(SWITCHTEC_IOCTL_EVENT_PPU_ERROR, ppu_error_event_hdr), 688 EV_GLB(SWITCHTEC_IOCTL_EVENT_ISP_ERROR, isp_error_event_hdr), 689 EV_GLB(SWITCHTEC_IOCTL_EVENT_SYS_RESET, sys_reset_event_hdr), 690 EV_GLB(SWITCHTEC_IOCTL_EVENT_FW_EXC, fw_exception_hdr), 691 EV_GLB(SWITCHTEC_IOCTL_EVENT_FW_NMI, fw_nmi_hdr), 692 EV_GLB(SWITCHTEC_IOCTL_EVENT_FW_NON_FATAL, fw_non_fatal_hdr), 693 EV_GLB(SWITCHTEC_IOCTL_EVENT_FW_FATAL, fw_fatal_hdr), 694 EV_GLB(SWITCHTEC_IOCTL_EVENT_TWI_MRPC_COMP, twi_mrpc_comp_hdr), 695 EV_GLB(SWITCHTEC_IOCTL_EVENT_TWI_MRPC_COMP_ASYNC, 696 twi_mrpc_comp_async_hdr), 697 EV_GLB(SWITCHTEC_IOCTL_EVENT_CLI_MRPC_COMP, cli_mrpc_comp_hdr), 698 EV_GLB(SWITCHTEC_IOCTL_EVENT_CLI_MRPC_COMP_ASYNC, 699 cli_mrpc_comp_async_hdr), 700 EV_GLB(SWITCHTEC_IOCTL_EVENT_GPIO_INT, gpio_interrupt_hdr), 701 EV_GLB(SWITCHTEC_IOCTL_EVENT_GFMS, gfms_event_hdr), 702 EV_PAR(SWITCHTEC_IOCTL_EVENT_PART_RESET, part_reset_hdr), 703 EV_PAR(SWITCHTEC_IOCTL_EVENT_MRPC_COMP, mrpc_comp_hdr), 704 EV_PAR(SWITCHTEC_IOCTL_EVENT_MRPC_COMP_ASYNC, mrpc_comp_async_hdr), 705 EV_PAR(SWITCHTEC_IOCTL_EVENT_DYN_PART_BIND_COMP, dyn_binding_hdr), 706 EV_PFF(SWITCHTEC_IOCTL_EVENT_AER_IN_P2P, aer_in_p2p_hdr), 707 EV_PFF(SWITCHTEC_IOCTL_EVENT_AER_IN_VEP, aer_in_vep_hdr), 708 EV_PFF(SWITCHTEC_IOCTL_EVENT_DPC, dpc_hdr), 709 EV_PFF(SWITCHTEC_IOCTL_EVENT_CTS, cts_hdr), 710 EV_PFF(SWITCHTEC_IOCTL_EVENT_HOTPLUG, hotplug_hdr), 711 EV_PFF(SWITCHTEC_IOCTL_EVENT_IER, ier_hdr), 712 EV_PFF(SWITCHTEC_IOCTL_EVENT_THRESH, threshold_hdr), 713 EV_PFF(SWITCHTEC_IOCTL_EVENT_POWER_MGMT, power_mgmt_hdr), 714 EV_PFF(SWITCHTEC_IOCTL_EVENT_TLP_THROTTLING, tlp_throttling_hdr), 715 EV_PFF(SWITCHTEC_IOCTL_EVENT_FORCE_SPEED, force_speed_hdr), 716 EV_PFF(SWITCHTEC_IOCTL_EVENT_CREDIT_TIMEOUT, credit_timeout_hdr), 717 EV_PFF(SWITCHTEC_IOCTL_EVENT_LINK_STATE, link_state_hdr), 718 }; 719 720 static u32 __iomem *event_hdr_addr(struct switchtec_dev *stdev, 721 int event_id, int index) 722 { 723 size_t off; 724 725 if (event_id < 0 || event_id >= SWITCHTEC_IOCTL_MAX_EVENTS) 726 return ERR_PTR(-EINVAL); 727 728 off = event_regs[event_id].offset; 729 730 if (event_regs[event_id].map_reg == part_ev_reg) { 731 if (index == SWITCHTEC_IOCTL_EVENT_LOCAL_PART_IDX) 732 index = stdev->partition; 733 else if (index < 0 || index >= stdev->partition_count) 734 return ERR_PTR(-EINVAL); 735 } else if (event_regs[event_id].map_reg == pff_ev_reg) { 736 if (index < 0 || index >= stdev->pff_csr_count) 737 return ERR_PTR(-EINVAL); 738 } 739 740 return event_regs[event_id].map_reg(stdev, off, index); 741 } 742 743 static int event_ctl(struct switchtec_dev *stdev, 744 struct switchtec_ioctl_event_ctl *ctl) 745 { 746 int i; 747 u32 __iomem *reg; 748 u32 hdr; 749 750 reg = event_hdr_addr(stdev, ctl->event_id, ctl->index); 751 if (IS_ERR(reg)) 752 return PTR_ERR(reg); 753 754 hdr = ioread32(reg); 755 for (i = 0; i < ARRAY_SIZE(ctl->data); i++) 756 ctl->data[i] = ioread32(®[i + 1]); 757 758 ctl->occurred = hdr & SWITCHTEC_EVENT_OCCURRED; 759 ctl->count = (hdr >> 5) & 0xFF; 760 761 if (!(ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_CLEAR)) 762 hdr &= ~SWITCHTEC_EVENT_CLEAR; 763 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_EN_POLL) 764 hdr |= SWITCHTEC_EVENT_EN_IRQ; 765 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_DIS_POLL) 766 hdr &= ~SWITCHTEC_EVENT_EN_IRQ; 767 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_EN_LOG) 768 hdr |= SWITCHTEC_EVENT_EN_LOG; 769 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_DIS_LOG) 770 hdr &= ~SWITCHTEC_EVENT_EN_LOG; 771 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_EN_CLI) 772 hdr |= SWITCHTEC_EVENT_EN_CLI; 773 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_DIS_CLI) 774 hdr &= ~SWITCHTEC_EVENT_EN_CLI; 775 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_EN_FATAL) 776 hdr |= SWITCHTEC_EVENT_FATAL; 777 if (ctl->flags & SWITCHTEC_IOCTL_EVENT_FLAG_DIS_FATAL) 778 hdr &= ~SWITCHTEC_EVENT_FATAL; 779 780 if (ctl->flags) 781 iowrite32(hdr, reg); 782 783 ctl->flags = 0; 784 if (hdr & SWITCHTEC_EVENT_EN_IRQ) 785 ctl->flags |= SWITCHTEC_IOCTL_EVENT_FLAG_EN_POLL; 786 if (hdr & SWITCHTEC_EVENT_EN_LOG) 787 ctl->flags |= SWITCHTEC_IOCTL_EVENT_FLAG_EN_LOG; 788 if (hdr & SWITCHTEC_EVENT_EN_CLI) 789 ctl->flags |= SWITCHTEC_IOCTL_EVENT_FLAG_EN_CLI; 790 if (hdr & SWITCHTEC_EVENT_FATAL) 791 ctl->flags |= SWITCHTEC_IOCTL_EVENT_FLAG_EN_FATAL; 792 793 return 0; 794 } 795 796 static int ioctl_event_ctl(struct switchtec_dev *stdev, 797 struct switchtec_ioctl_event_ctl __user *uctl) 798 { 799 int ret; 800 int nr_idxs; 801 struct switchtec_ioctl_event_ctl ctl; 802 803 if (copy_from_user(&ctl, uctl, sizeof(ctl))) 804 return -EFAULT; 805 806 if (ctl.event_id >= SWITCHTEC_IOCTL_MAX_EVENTS) 807 return -EINVAL; 808 809 if (ctl.flags & SWITCHTEC_IOCTL_EVENT_FLAG_UNUSED) 810 return -EINVAL; 811 812 if (ctl.index == SWITCHTEC_IOCTL_EVENT_IDX_ALL) { 813 if (event_regs[ctl.event_id].map_reg == global_ev_reg) 814 nr_idxs = 1; 815 else if (event_regs[ctl.event_id].map_reg == part_ev_reg) 816 nr_idxs = stdev->partition_count; 817 else if (event_regs[ctl.event_id].map_reg == pff_ev_reg) 818 nr_idxs = stdev->pff_csr_count; 819 else 820 return -EINVAL; 821 822 for (ctl.index = 0; ctl.index < nr_idxs; ctl.index++) { 823 ret = event_ctl(stdev, &ctl); 824 if (ret < 0) 825 return ret; 826 } 827 } else { 828 ret = event_ctl(stdev, &ctl); 829 if (ret < 0) 830 return ret; 831 } 832 833 if (copy_to_user(uctl, &ctl, sizeof(ctl))) 834 return -EFAULT; 835 836 return 0; 837 } 838 839 static int ioctl_pff_to_port(struct switchtec_dev *stdev, 840 struct switchtec_ioctl_pff_port *up) 841 { 842 int i, part; 843 u32 reg; 844 struct part_cfg_regs *pcfg; 845 struct switchtec_ioctl_pff_port p; 846 847 if (copy_from_user(&p, up, sizeof(p))) 848 return -EFAULT; 849 850 p.port = -1; 851 for (part = 0; part < stdev->partition_count; part++) { 852 pcfg = &stdev->mmio_part_cfg_all[part]; 853 p.partition = part; 854 855 reg = ioread32(&pcfg->usp_pff_inst_id); 856 if (reg == p.pff) { 857 p.port = 0; 858 break; 859 } 860 861 reg = ioread32(&pcfg->vep_pff_inst_id); 862 if (reg == p.pff) { 863 p.port = SWITCHTEC_IOCTL_PFF_VEP; 864 break; 865 } 866 867 for (i = 0; i < ARRAY_SIZE(pcfg->dsp_pff_inst_id); i++) { 868 reg = ioread32(&pcfg->dsp_pff_inst_id[i]); 869 if (reg != p.pff) 870 continue; 871 872 p.port = i + 1; 873 break; 874 } 875 876 if (p.port != -1) 877 break; 878 } 879 880 if (copy_to_user(up, &p, sizeof(p))) 881 return -EFAULT; 882 883 return 0; 884 } 885 886 static int ioctl_port_to_pff(struct switchtec_dev *stdev, 887 struct switchtec_ioctl_pff_port *up) 888 { 889 struct switchtec_ioctl_pff_port p; 890 struct part_cfg_regs *pcfg; 891 892 if (copy_from_user(&p, up, sizeof(p))) 893 return -EFAULT; 894 895 if (p.partition == SWITCHTEC_IOCTL_EVENT_LOCAL_PART_IDX) 896 pcfg = stdev->mmio_part_cfg; 897 else if (p.partition < stdev->partition_count) 898 pcfg = &stdev->mmio_part_cfg_all[p.partition]; 899 else 900 return -EINVAL; 901 902 switch (p.port) { 903 case 0: 904 p.pff = ioread32(&pcfg->usp_pff_inst_id); 905 break; 906 case SWITCHTEC_IOCTL_PFF_VEP: 907 p.pff = ioread32(&pcfg->vep_pff_inst_id); 908 break; 909 default: 910 if (p.port > ARRAY_SIZE(pcfg->dsp_pff_inst_id)) 911 return -EINVAL; 912 p.pff = ioread32(&pcfg->dsp_pff_inst_id[p.port - 1]); 913 break; 914 } 915 916 if (copy_to_user(up, &p, sizeof(p))) 917 return -EFAULT; 918 919 return 0; 920 } 921 922 static long switchtec_dev_ioctl(struct file *filp, unsigned int cmd, 923 unsigned long arg) 924 { 925 struct switchtec_user *stuser = filp->private_data; 926 struct switchtec_dev *stdev = stuser->stdev; 927 int rc; 928 void __user *argp = (void __user *)arg; 929 930 rc = lock_mutex_and_test_alive(stdev); 931 if (rc) 932 return rc; 933 934 switch (cmd) { 935 case SWITCHTEC_IOCTL_FLASH_INFO: 936 rc = ioctl_flash_info(stdev, argp); 937 break; 938 case SWITCHTEC_IOCTL_FLASH_PART_INFO: 939 rc = ioctl_flash_part_info(stdev, argp); 940 break; 941 case SWITCHTEC_IOCTL_EVENT_SUMMARY: 942 rc = ioctl_event_summary(stdev, stuser, argp); 943 break; 944 case SWITCHTEC_IOCTL_EVENT_CTL: 945 rc = ioctl_event_ctl(stdev, argp); 946 break; 947 case SWITCHTEC_IOCTL_PFF_TO_PORT: 948 rc = ioctl_pff_to_port(stdev, argp); 949 break; 950 case SWITCHTEC_IOCTL_PORT_TO_PFF: 951 rc = ioctl_port_to_pff(stdev, argp); 952 break; 953 default: 954 rc = -ENOTTY; 955 break; 956 } 957 958 mutex_unlock(&stdev->mrpc_mutex); 959 return rc; 960 } 961 962 static const struct file_operations switchtec_fops = { 963 .owner = THIS_MODULE, 964 .open = switchtec_dev_open, 965 .release = switchtec_dev_release, 966 .write = switchtec_dev_write, 967 .read = switchtec_dev_read, 968 .poll = switchtec_dev_poll, 969 .unlocked_ioctl = switchtec_dev_ioctl, 970 .compat_ioctl = switchtec_dev_ioctl, 971 }; 972 973 static void link_event_work(struct work_struct *work) 974 { 975 struct switchtec_dev *stdev; 976 977 stdev = container_of(work, struct switchtec_dev, link_event_work); 978 979 if (stdev->link_notifier) 980 stdev->link_notifier(stdev); 981 } 982 983 static void check_link_state_events(struct switchtec_dev *stdev) 984 { 985 int idx; 986 u32 reg; 987 int count; 988 int occurred = 0; 989 990 for (idx = 0; idx < stdev->pff_csr_count; idx++) { 991 reg = ioread32(&stdev->mmio_pff_csr[idx].link_state_hdr); 992 dev_dbg(&stdev->dev, "link_state: %d->%08x\n", idx, reg); 993 count = (reg >> 5) & 0xFF; 994 995 if (count != stdev->link_event_count[idx]) { 996 occurred = 1; 997 stdev->link_event_count[idx] = count; 998 } 999 } 1000 1001 if (occurred) 1002 schedule_work(&stdev->link_event_work); 1003 } 1004 1005 static void enable_link_state_events(struct switchtec_dev *stdev) 1006 { 1007 int idx; 1008 1009 for (idx = 0; idx < stdev->pff_csr_count; idx++) { 1010 iowrite32(SWITCHTEC_EVENT_CLEAR | 1011 SWITCHTEC_EVENT_EN_IRQ, 1012 &stdev->mmio_pff_csr[idx].link_state_hdr); 1013 } 1014 } 1015 1016 static void stdev_release(struct device *dev) 1017 { 1018 struct switchtec_dev *stdev = to_stdev(dev); 1019 1020 kfree(stdev); 1021 } 1022 1023 static void stdev_kill(struct switchtec_dev *stdev) 1024 { 1025 struct switchtec_user *stuser, *tmpuser; 1026 1027 pci_clear_master(stdev->pdev); 1028 1029 cancel_delayed_work_sync(&stdev->mrpc_timeout); 1030 1031 /* Mark the hardware as unavailable and complete all completions */ 1032 mutex_lock(&stdev->mrpc_mutex); 1033 stdev->alive = false; 1034 1035 /* Wake up and kill any users waiting on an MRPC request */ 1036 list_for_each_entry_safe(stuser, tmpuser, &stdev->mrpc_queue, list) { 1037 complete_all(&stuser->comp); 1038 list_del_init(&stuser->list); 1039 stuser_put(stuser); 1040 } 1041 1042 mutex_unlock(&stdev->mrpc_mutex); 1043 1044 /* Wake up any users waiting on event_wq */ 1045 wake_up_interruptible(&stdev->event_wq); 1046 } 1047 1048 static struct switchtec_dev *stdev_create(struct pci_dev *pdev) 1049 { 1050 struct switchtec_dev *stdev; 1051 int minor; 1052 struct device *dev; 1053 struct cdev *cdev; 1054 int rc; 1055 1056 stdev = kzalloc_node(sizeof(*stdev), GFP_KERNEL, 1057 dev_to_node(&pdev->dev)); 1058 if (!stdev) 1059 return ERR_PTR(-ENOMEM); 1060 1061 stdev->alive = true; 1062 stdev->pdev = pdev; 1063 INIT_LIST_HEAD(&stdev->mrpc_queue); 1064 mutex_init(&stdev->mrpc_mutex); 1065 stdev->mrpc_busy = 0; 1066 INIT_WORK(&stdev->mrpc_work, mrpc_event_work); 1067 INIT_DELAYED_WORK(&stdev->mrpc_timeout, mrpc_timeout_work); 1068 INIT_WORK(&stdev->link_event_work, link_event_work); 1069 init_waitqueue_head(&stdev->event_wq); 1070 atomic_set(&stdev->event_cnt, 0); 1071 1072 dev = &stdev->dev; 1073 device_initialize(dev); 1074 dev->class = switchtec_class; 1075 dev->parent = &pdev->dev; 1076 dev->groups = switchtec_device_groups; 1077 dev->release = stdev_release; 1078 1079 minor = ida_simple_get(&switchtec_minor_ida, 0, 0, 1080 GFP_KERNEL); 1081 if (minor < 0) { 1082 rc = minor; 1083 goto err_put; 1084 } 1085 1086 dev->devt = MKDEV(MAJOR(switchtec_devt), minor); 1087 dev_set_name(dev, "switchtec%d", minor); 1088 1089 cdev = &stdev->cdev; 1090 cdev_init(cdev, &switchtec_fops); 1091 cdev->owner = THIS_MODULE; 1092 1093 return stdev; 1094 1095 err_put: 1096 put_device(&stdev->dev); 1097 return ERR_PTR(rc); 1098 } 1099 1100 static int mask_event(struct switchtec_dev *stdev, int eid, int idx) 1101 { 1102 size_t off = event_regs[eid].offset; 1103 u32 __iomem *hdr_reg; 1104 u32 hdr; 1105 1106 hdr_reg = event_regs[eid].map_reg(stdev, off, idx); 1107 hdr = ioread32(hdr_reg); 1108 1109 if (!(hdr & SWITCHTEC_EVENT_OCCURRED && hdr & SWITCHTEC_EVENT_EN_IRQ)) 1110 return 0; 1111 1112 if (eid == SWITCHTEC_IOCTL_EVENT_LINK_STATE) 1113 return 0; 1114 1115 dev_dbg(&stdev->dev, "%s: %d %d %x\n", __func__, eid, idx, hdr); 1116 hdr &= ~(SWITCHTEC_EVENT_EN_IRQ | SWITCHTEC_EVENT_OCCURRED); 1117 iowrite32(hdr, hdr_reg); 1118 1119 return 1; 1120 } 1121 1122 static int mask_all_events(struct switchtec_dev *stdev, int eid) 1123 { 1124 int idx; 1125 int count = 0; 1126 1127 if (event_regs[eid].map_reg == part_ev_reg) { 1128 for (idx = 0; idx < stdev->partition_count; idx++) 1129 count += mask_event(stdev, eid, idx); 1130 } else if (event_regs[eid].map_reg == pff_ev_reg) { 1131 for (idx = 0; idx < stdev->pff_csr_count; idx++) { 1132 if (!stdev->pff_local[idx]) 1133 continue; 1134 1135 count += mask_event(stdev, eid, idx); 1136 } 1137 } else { 1138 count += mask_event(stdev, eid, 0); 1139 } 1140 1141 return count; 1142 } 1143 1144 static irqreturn_t switchtec_event_isr(int irq, void *dev) 1145 { 1146 struct switchtec_dev *stdev = dev; 1147 u32 reg; 1148 irqreturn_t ret = IRQ_NONE; 1149 int eid, event_count = 0; 1150 1151 reg = ioread32(&stdev->mmio_part_cfg->mrpc_comp_hdr); 1152 if (reg & SWITCHTEC_EVENT_OCCURRED) { 1153 dev_dbg(&stdev->dev, "%s: mrpc comp\n", __func__); 1154 ret = IRQ_HANDLED; 1155 schedule_work(&stdev->mrpc_work); 1156 iowrite32(reg, &stdev->mmio_part_cfg->mrpc_comp_hdr); 1157 } 1158 1159 check_link_state_events(stdev); 1160 1161 for (eid = 0; eid < SWITCHTEC_IOCTL_MAX_EVENTS; eid++) 1162 event_count += mask_all_events(stdev, eid); 1163 1164 if (event_count) { 1165 atomic_inc(&stdev->event_cnt); 1166 wake_up_interruptible(&stdev->event_wq); 1167 dev_dbg(&stdev->dev, "%s: %d events\n", __func__, 1168 event_count); 1169 return IRQ_HANDLED; 1170 } 1171 1172 return ret; 1173 } 1174 1175 static int switchtec_init_isr(struct switchtec_dev *stdev) 1176 { 1177 int nvecs; 1178 int event_irq; 1179 1180 nvecs = pci_alloc_irq_vectors(stdev->pdev, 1, 4, 1181 PCI_IRQ_MSIX | PCI_IRQ_MSI); 1182 if (nvecs < 0) 1183 return nvecs; 1184 1185 event_irq = ioread32(&stdev->mmio_part_cfg->vep_vector_number); 1186 if (event_irq < 0 || event_irq >= nvecs) 1187 return -EFAULT; 1188 1189 event_irq = pci_irq_vector(stdev->pdev, event_irq); 1190 if (event_irq < 0) 1191 return event_irq; 1192 1193 return devm_request_irq(&stdev->pdev->dev, event_irq, 1194 switchtec_event_isr, 0, 1195 KBUILD_MODNAME, stdev); 1196 } 1197 1198 static void init_pff(struct switchtec_dev *stdev) 1199 { 1200 int i; 1201 u32 reg; 1202 struct part_cfg_regs *pcfg = stdev->mmio_part_cfg; 1203 1204 for (i = 0; i < SWITCHTEC_MAX_PFF_CSR; i++) { 1205 reg = ioread16(&stdev->mmio_pff_csr[i].vendor_id); 1206 if (reg != PCI_VENDOR_ID_MICROSEMI) 1207 break; 1208 } 1209 1210 stdev->pff_csr_count = i; 1211 1212 reg = ioread32(&pcfg->usp_pff_inst_id); 1213 if (reg < SWITCHTEC_MAX_PFF_CSR) 1214 stdev->pff_local[reg] = 1; 1215 1216 reg = ioread32(&pcfg->vep_pff_inst_id); 1217 if (reg < SWITCHTEC_MAX_PFF_CSR) 1218 stdev->pff_local[reg] = 1; 1219 1220 for (i = 0; i < ARRAY_SIZE(pcfg->dsp_pff_inst_id); i++) { 1221 reg = ioread32(&pcfg->dsp_pff_inst_id[i]); 1222 if (reg < SWITCHTEC_MAX_PFF_CSR) 1223 stdev->pff_local[reg] = 1; 1224 } 1225 } 1226 1227 static int switchtec_init_pci(struct switchtec_dev *stdev, 1228 struct pci_dev *pdev) 1229 { 1230 int rc; 1231 1232 rc = pcim_enable_device(pdev); 1233 if (rc) 1234 return rc; 1235 1236 rc = pcim_iomap_regions(pdev, 0x1, KBUILD_MODNAME); 1237 if (rc) 1238 return rc; 1239 1240 pci_set_master(pdev); 1241 1242 stdev->mmio = pcim_iomap_table(pdev)[0]; 1243 stdev->mmio_mrpc = stdev->mmio + SWITCHTEC_GAS_MRPC_OFFSET; 1244 stdev->mmio_sw_event = stdev->mmio + SWITCHTEC_GAS_SW_EVENT_OFFSET; 1245 stdev->mmio_sys_info = stdev->mmio + SWITCHTEC_GAS_SYS_INFO_OFFSET; 1246 stdev->mmio_flash_info = stdev->mmio + SWITCHTEC_GAS_FLASH_INFO_OFFSET; 1247 stdev->mmio_ntb = stdev->mmio + SWITCHTEC_GAS_NTB_OFFSET; 1248 stdev->partition = ioread8(&stdev->mmio_sys_info->partition_id); 1249 stdev->partition_count = ioread8(&stdev->mmio_ntb->partition_count); 1250 stdev->mmio_part_cfg_all = stdev->mmio + SWITCHTEC_GAS_PART_CFG_OFFSET; 1251 stdev->mmio_part_cfg = &stdev->mmio_part_cfg_all[stdev->partition]; 1252 stdev->mmio_pff_csr = stdev->mmio + SWITCHTEC_GAS_PFF_CSR_OFFSET; 1253 1254 if (stdev->partition_count < 1) 1255 stdev->partition_count = 1; 1256 1257 init_pff(stdev); 1258 1259 pci_set_drvdata(pdev, stdev); 1260 1261 return 0; 1262 } 1263 1264 static int switchtec_pci_probe(struct pci_dev *pdev, 1265 const struct pci_device_id *id) 1266 { 1267 struct switchtec_dev *stdev; 1268 int rc; 1269 1270 if (pdev->class == (PCI_CLASS_BRIDGE_OTHER << 8)) 1271 request_module_nowait("ntb_hw_switchtec"); 1272 1273 stdev = stdev_create(pdev); 1274 if (IS_ERR(stdev)) 1275 return PTR_ERR(stdev); 1276 1277 rc = switchtec_init_pci(stdev, pdev); 1278 if (rc) 1279 goto err_put; 1280 1281 rc = switchtec_init_isr(stdev); 1282 if (rc) { 1283 dev_err(&stdev->dev, "failed to init isr.\n"); 1284 goto err_put; 1285 } 1286 1287 iowrite32(SWITCHTEC_EVENT_CLEAR | 1288 SWITCHTEC_EVENT_EN_IRQ, 1289 &stdev->mmio_part_cfg->mrpc_comp_hdr); 1290 enable_link_state_events(stdev); 1291 1292 rc = cdev_device_add(&stdev->cdev, &stdev->dev); 1293 if (rc) 1294 goto err_devadd; 1295 1296 dev_info(&stdev->dev, "Management device registered.\n"); 1297 1298 return 0; 1299 1300 err_devadd: 1301 stdev_kill(stdev); 1302 err_put: 1303 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt)); 1304 put_device(&stdev->dev); 1305 return rc; 1306 } 1307 1308 static void switchtec_pci_remove(struct pci_dev *pdev) 1309 { 1310 struct switchtec_dev *stdev = pci_get_drvdata(pdev); 1311 1312 pci_set_drvdata(pdev, NULL); 1313 1314 cdev_device_del(&stdev->cdev, &stdev->dev); 1315 ida_simple_remove(&switchtec_minor_ida, MINOR(stdev->dev.devt)); 1316 dev_info(&stdev->dev, "unregistered.\n"); 1317 1318 stdev_kill(stdev); 1319 put_device(&stdev->dev); 1320 } 1321 1322 #define SWITCHTEC_PCI_DEVICE(device_id) \ 1323 { \ 1324 .vendor = PCI_VENDOR_ID_MICROSEMI, \ 1325 .device = device_id, \ 1326 .subvendor = PCI_ANY_ID, \ 1327 .subdevice = PCI_ANY_ID, \ 1328 .class = (PCI_CLASS_MEMORY_OTHER << 8), \ 1329 .class_mask = 0xFFFFFFFF, \ 1330 }, \ 1331 { \ 1332 .vendor = PCI_VENDOR_ID_MICROSEMI, \ 1333 .device = device_id, \ 1334 .subvendor = PCI_ANY_ID, \ 1335 .subdevice = PCI_ANY_ID, \ 1336 .class = (PCI_CLASS_BRIDGE_OTHER << 8), \ 1337 .class_mask = 0xFFFFFFFF, \ 1338 } 1339 1340 static const struct pci_device_id switchtec_pci_tbl[] = { 1341 SWITCHTEC_PCI_DEVICE(0x8531), //PFX 24xG3 1342 SWITCHTEC_PCI_DEVICE(0x8532), //PFX 32xG3 1343 SWITCHTEC_PCI_DEVICE(0x8533), //PFX 48xG3 1344 SWITCHTEC_PCI_DEVICE(0x8534), //PFX 64xG3 1345 SWITCHTEC_PCI_DEVICE(0x8535), //PFX 80xG3 1346 SWITCHTEC_PCI_DEVICE(0x8536), //PFX 96xG3 1347 SWITCHTEC_PCI_DEVICE(0x8541), //PSX 24xG3 1348 SWITCHTEC_PCI_DEVICE(0x8542), //PSX 32xG3 1349 SWITCHTEC_PCI_DEVICE(0x8543), //PSX 48xG3 1350 SWITCHTEC_PCI_DEVICE(0x8544), //PSX 64xG3 1351 SWITCHTEC_PCI_DEVICE(0x8545), //PSX 80xG3 1352 SWITCHTEC_PCI_DEVICE(0x8546), //PSX 96xG3 1353 SWITCHTEC_PCI_DEVICE(0x8551), //PAX 24XG3 1354 SWITCHTEC_PCI_DEVICE(0x8552), //PAX 32XG3 1355 SWITCHTEC_PCI_DEVICE(0x8553), //PAX 48XG3 1356 SWITCHTEC_PCI_DEVICE(0x8554), //PAX 64XG3 1357 SWITCHTEC_PCI_DEVICE(0x8555), //PAX 80XG3 1358 SWITCHTEC_PCI_DEVICE(0x8556), //PAX 96XG3 1359 SWITCHTEC_PCI_DEVICE(0x8561), //PFXL 24XG3 1360 SWITCHTEC_PCI_DEVICE(0x8562), //PFXL 32XG3 1361 SWITCHTEC_PCI_DEVICE(0x8563), //PFXL 48XG3 1362 SWITCHTEC_PCI_DEVICE(0x8564), //PFXL 64XG3 1363 SWITCHTEC_PCI_DEVICE(0x8565), //PFXL 80XG3 1364 SWITCHTEC_PCI_DEVICE(0x8566), //PFXL 96XG3 1365 SWITCHTEC_PCI_DEVICE(0x8571), //PFXI 24XG3 1366 SWITCHTEC_PCI_DEVICE(0x8572), //PFXI 32XG3 1367 SWITCHTEC_PCI_DEVICE(0x8573), //PFXI 48XG3 1368 SWITCHTEC_PCI_DEVICE(0x8574), //PFXI 64XG3 1369 SWITCHTEC_PCI_DEVICE(0x8575), //PFXI 80XG3 1370 SWITCHTEC_PCI_DEVICE(0x8576), //PFXI 96XG3 1371 {0} 1372 }; 1373 MODULE_DEVICE_TABLE(pci, switchtec_pci_tbl); 1374 1375 static struct pci_driver switchtec_pci_driver = { 1376 .name = KBUILD_MODNAME, 1377 .id_table = switchtec_pci_tbl, 1378 .probe = switchtec_pci_probe, 1379 .remove = switchtec_pci_remove, 1380 }; 1381 1382 static int __init switchtec_init(void) 1383 { 1384 int rc; 1385 1386 rc = alloc_chrdev_region(&switchtec_devt, 0, max_devices, 1387 "switchtec"); 1388 if (rc) 1389 return rc; 1390 1391 switchtec_class = class_create(THIS_MODULE, "switchtec"); 1392 if (IS_ERR(switchtec_class)) { 1393 rc = PTR_ERR(switchtec_class); 1394 goto err_create_class; 1395 } 1396 1397 rc = pci_register_driver(&switchtec_pci_driver); 1398 if (rc) 1399 goto err_pci_register; 1400 1401 pr_info(KBUILD_MODNAME ": loaded.\n"); 1402 1403 return 0; 1404 1405 err_pci_register: 1406 class_destroy(switchtec_class); 1407 1408 err_create_class: 1409 unregister_chrdev_region(switchtec_devt, max_devices); 1410 1411 return rc; 1412 } 1413 module_init(switchtec_init); 1414 1415 static void __exit switchtec_exit(void) 1416 { 1417 pci_unregister_driver(&switchtec_pci_driver); 1418 class_destroy(switchtec_class); 1419 unregister_chrdev_region(switchtec_devt, max_devices); 1420 ida_destroy(&switchtec_minor_ida); 1421 1422 pr_info(KBUILD_MODNAME ": unloaded.\n"); 1423 } 1424 module_exit(switchtec_exit); 1425