1/* 2 * PCI Express PCI Hot Plug Driver 3 * 4 * Copyright (C) 1995,2001 Compaq Computer Corporation 5 * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) 6 * Copyright (C) 2001 IBM Corp. 7 * Copyright (C) 2003-2004 Intel Corporation 8 * 9 * All rights reserved. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or (at 14 * your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 19 * NON INFRINGEMENT. See the GNU General Public License for more 20 * details. 21 * 22 * You should have received a copy of the GNU General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 * 26 * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> 27 * 28 */ 29 30#include <linux/kernel.h> 31#include <linux/module.h> 32#include <linux/types.h> 33#include <linux/signal.h> 34#include <linux/jiffies.h> 35#include <linux/timer.h> 36#include <linux/pci.h> 37#include <linux/interrupt.h> 38#include <linux/time.h> 39#include <linux/slab.h> 40 41#include "../pci.h" 42#include "pciehp.h" 43 44static inline struct pci_dev *ctrl_dev(struct controller *ctrl) 45{ 46 return ctrl->pcie->port; 47} 48 49static irqreturn_t pcie_isr(int irq, void *dev_id); 50static void start_int_poll_timer(struct controller *ctrl, int sec); 51 52/* This is the interrupt polling timeout function. */ 53static void int_poll_timeout(unsigned long data) 54{ 55 struct controller *ctrl = (struct controller *)data; 56 57 /* Poll for interrupt events. regs == NULL => polling */ 58 pcie_isr(0, ctrl); 59 60 init_timer(&ctrl->poll_timer); 61 if (!pciehp_poll_time) 62 pciehp_poll_time = 2; /* default polling interval is 2 sec */ 63 64 start_int_poll_timer(ctrl, pciehp_poll_time); 65} 66 67/* This function starts the interrupt polling timer. */ 68static void start_int_poll_timer(struct controller *ctrl, int sec) 69{ 70 /* Clamp to sane value */ 71 if ((sec <= 0) || (sec > 60)) 72 sec = 2; 73 74 ctrl->poll_timer.function = &int_poll_timeout; 75 ctrl->poll_timer.data = (unsigned long)ctrl; 76 ctrl->poll_timer.expires = jiffies + sec * HZ; 77 add_timer(&ctrl->poll_timer); 78} 79 80static inline int pciehp_request_irq(struct controller *ctrl) 81{ 82 int retval, irq = ctrl->pcie->irq; 83 84 /* Install interrupt polling timer. Start with 10 sec delay */ 85 if (pciehp_poll_mode) { 86 init_timer(&ctrl->poll_timer); 87 start_int_poll_timer(ctrl, 10); 88 return 0; 89 } 90 91 /* Installs the interrupt handler */ 92 retval = request_irq(irq, pcie_isr, IRQF_SHARED, MY_NAME, ctrl); 93 if (retval) 94 ctrl_err(ctrl, "Cannot get irq %d for the hotplug controller\n", 95 irq); 96 return retval; 97} 98 99static inline void pciehp_free_irq(struct controller *ctrl) 100{ 101 if (pciehp_poll_mode) 102 del_timer_sync(&ctrl->poll_timer); 103 else 104 free_irq(ctrl->pcie->irq, ctrl); 105} 106 107static int pcie_poll_cmd(struct controller *ctrl, int timeout) 108{ 109 struct pci_dev *pdev = ctrl_dev(ctrl); 110 u16 slot_status; 111 112 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 113 if (slot_status & PCI_EXP_SLTSTA_CC) { 114 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 115 PCI_EXP_SLTSTA_CC); 116 return 1; 117 } 118 while (timeout > 0) { 119 msleep(10); 120 timeout -= 10; 121 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 122 if (slot_status & PCI_EXP_SLTSTA_CC) { 123 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 124 PCI_EXP_SLTSTA_CC); 125 return 1; 126 } 127 } 128 return 0; /* timeout */ 129} 130 131static void pcie_wait_cmd(struct controller *ctrl) 132{ 133 unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; 134 unsigned long duration = msecs_to_jiffies(msecs); 135 unsigned long cmd_timeout = ctrl->cmd_started + duration; 136 unsigned long now, timeout; 137 int rc; 138 139 /* 140 * If the controller does not generate notifications for command 141 * completions, we never need to wait between writes. 142 */ 143 if (NO_CMD_CMPL(ctrl)) 144 return; 145 146 if (!ctrl->cmd_busy) 147 return; 148 149 /* 150 * Even if the command has already timed out, we want to call 151 * pcie_poll_cmd() so it can clear PCI_EXP_SLTSTA_CC. 152 */ 153 now = jiffies; 154 if (time_before_eq(cmd_timeout, now)) 155 timeout = 1; 156 else 157 timeout = cmd_timeout - now; 158 159 if (ctrl->slot_ctrl & PCI_EXP_SLTCTL_HPIE && 160 ctrl->slot_ctrl & PCI_EXP_SLTCTL_CCIE) 161 rc = wait_event_timeout(ctrl->queue, !ctrl->cmd_busy, timeout); 162 else 163 rc = pcie_poll_cmd(ctrl, jiffies_to_msecs(timeout)); 164 165 /* 166 * Controllers with errata like Intel CF118 don't generate 167 * completion notifications unless the power/indicator/interlock 168 * control bits are changed. On such controllers, we'll emit this 169 * timeout message when we wait for completion of commands that 170 * don't change those bits, e.g., commands that merely enable 171 * interrupts. 172 */ 173 if (!rc) 174 ctrl_info(ctrl, "Timeout on hotplug command %#06x (issued %u msec ago)\n", 175 ctrl->slot_ctrl, 176 jiffies_to_msecs(jiffies - ctrl->cmd_started)); 177} 178 179/** 180 * pcie_write_cmd - Issue controller command 181 * @ctrl: controller to which the command is issued 182 * @cmd: command value written to slot control register 183 * @mask: bitmask of slot control register to be modified 184 */ 185static void pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) 186{ 187 struct pci_dev *pdev = ctrl_dev(ctrl); 188 u16 slot_ctrl; 189 190 mutex_lock(&ctrl->ctrl_lock); 191 192 /* Wait for any previous command that might still be in progress */ 193 pcie_wait_cmd(ctrl); 194 195 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &slot_ctrl); 196 slot_ctrl &= ~mask; 197 slot_ctrl |= (cmd & mask); 198 ctrl->cmd_busy = 1; 199 smp_mb(); 200 pcie_capability_write_word(pdev, PCI_EXP_SLTCTL, slot_ctrl); 201 ctrl->cmd_started = jiffies; 202 ctrl->slot_ctrl = slot_ctrl; 203 204 mutex_unlock(&ctrl->ctrl_lock); 205} 206 207bool pciehp_check_link_active(struct controller *ctrl) 208{ 209 struct pci_dev *pdev = ctrl_dev(ctrl); 210 u16 lnk_status; 211 bool ret; 212 213 pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnk_status); 214 ret = !!(lnk_status & PCI_EXP_LNKSTA_DLLLA); 215 216 if (ret) 217 ctrl_dbg(ctrl, "%s: lnk_status = %x\n", __func__, lnk_status); 218 219 return ret; 220} 221 222static void __pcie_wait_link_active(struct controller *ctrl, bool active) 223{ 224 int timeout = 1000; 225 226 if (pciehp_check_link_active(ctrl) == active) 227 return; 228 while (timeout > 0) { 229 msleep(10); 230 timeout -= 10; 231 if (pciehp_check_link_active(ctrl) == active) 232 return; 233 } 234 ctrl_dbg(ctrl, "Data Link Layer Link Active not %s in 1000 msec\n", 235 active ? "set" : "cleared"); 236} 237 238static void pcie_wait_link_active(struct controller *ctrl) 239{ 240 __pcie_wait_link_active(ctrl, true); 241} 242 243static bool pci_bus_check_dev(struct pci_bus *bus, int devfn) 244{ 245 u32 l; 246 int count = 0; 247 int delay = 1000, step = 20; 248 bool found = false; 249 250 do { 251 found = pci_bus_read_dev_vendor_id(bus, devfn, &l, 0); 252 count++; 253 254 if (found) 255 break; 256 257 msleep(step); 258 delay -= step; 259 } while (delay > 0); 260 261 if (count > 1 && pciehp_debug) 262 printk(KERN_DEBUG "pci %04x:%02x:%02x.%d id reading try %d times with interval %d ms to get %08x\n", 263 pci_domain_nr(bus), bus->number, PCI_SLOT(devfn), 264 PCI_FUNC(devfn), count, step, l); 265 266 return found; 267} 268 269int pciehp_check_link_status(struct controller *ctrl) 270{ 271 struct pci_dev *pdev = ctrl_dev(ctrl); 272 bool found; 273 u16 lnk_status; 274 275 /* 276 * Data Link Layer Link Active Reporting must be capable for 277 * hot-plug capable downstream port. But old controller might 278 * not implement it. In this case, we wait for 1000 ms. 279 */ 280 if (ctrl->link_active_reporting) 281 pcie_wait_link_active(ctrl); 282 else 283 msleep(1000); 284 285 /* wait 100ms before read pci conf, and try in 1s */ 286 msleep(100); 287 found = pci_bus_check_dev(ctrl->pcie->port->subordinate, 288 PCI_DEVFN(0, 0)); 289 290 pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnk_status); 291 ctrl_dbg(ctrl, "%s: lnk_status = %x\n", __func__, lnk_status); 292 if ((lnk_status & PCI_EXP_LNKSTA_LT) || 293 !(lnk_status & PCI_EXP_LNKSTA_NLW)) { 294 ctrl_err(ctrl, "Link Training Error occurs\n"); 295 return -1; 296 } 297 298 pcie_update_link_speed(ctrl->pcie->port->subordinate, lnk_status); 299 300 if (!found) 301 return -1; 302 303 return 0; 304} 305 306static int __pciehp_link_set(struct controller *ctrl, bool enable) 307{ 308 struct pci_dev *pdev = ctrl_dev(ctrl); 309 u16 lnk_ctrl; 310 311 pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &lnk_ctrl); 312 313 if (enable) 314 lnk_ctrl &= ~PCI_EXP_LNKCTL_LD; 315 else 316 lnk_ctrl |= PCI_EXP_LNKCTL_LD; 317 318 pcie_capability_write_word(pdev, PCI_EXP_LNKCTL, lnk_ctrl); 319 ctrl_dbg(ctrl, "%s: lnk_ctrl = %x\n", __func__, lnk_ctrl); 320 return 0; 321} 322 323static int pciehp_link_enable(struct controller *ctrl) 324{ 325 return __pciehp_link_set(ctrl, true); 326} 327 328void pciehp_get_attention_status(struct slot *slot, u8 *status) 329{ 330 struct controller *ctrl = slot->ctrl; 331 struct pci_dev *pdev = ctrl_dev(ctrl); 332 u16 slot_ctrl; 333 334 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &slot_ctrl); 335 ctrl_dbg(ctrl, "%s: SLOTCTRL %x, value read %x\n", __func__, 336 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, slot_ctrl); 337 338 switch (slot_ctrl & PCI_EXP_SLTCTL_AIC) { 339 case PCI_EXP_SLTCTL_ATTN_IND_ON: 340 *status = 1; /* On */ 341 break; 342 case PCI_EXP_SLTCTL_ATTN_IND_BLINK: 343 *status = 2; /* Blink */ 344 break; 345 case PCI_EXP_SLTCTL_ATTN_IND_OFF: 346 *status = 0; /* Off */ 347 break; 348 default: 349 *status = 0xFF; 350 break; 351 } 352} 353 354void pciehp_get_power_status(struct slot *slot, u8 *status) 355{ 356 struct controller *ctrl = slot->ctrl; 357 struct pci_dev *pdev = ctrl_dev(ctrl); 358 u16 slot_ctrl; 359 360 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &slot_ctrl); 361 ctrl_dbg(ctrl, "%s: SLOTCTRL %x value read %x\n", __func__, 362 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, slot_ctrl); 363 364 switch (slot_ctrl & PCI_EXP_SLTCTL_PCC) { 365 case PCI_EXP_SLTCTL_PWR_ON: 366 *status = 1; /* On */ 367 break; 368 case PCI_EXP_SLTCTL_PWR_OFF: 369 *status = 0; /* Off */ 370 break; 371 default: 372 *status = 0xFF; 373 break; 374 } 375} 376 377void pciehp_get_latch_status(struct slot *slot, u8 *status) 378{ 379 struct pci_dev *pdev = ctrl_dev(slot->ctrl); 380 u16 slot_status; 381 382 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 383 *status = !!(slot_status & PCI_EXP_SLTSTA_MRLSS); 384} 385 386void pciehp_get_adapter_status(struct slot *slot, u8 *status) 387{ 388 struct pci_dev *pdev = ctrl_dev(slot->ctrl); 389 u16 slot_status; 390 391 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 392 *status = !!(slot_status & PCI_EXP_SLTSTA_PDS); 393} 394 395int pciehp_query_power_fault(struct slot *slot) 396{ 397 struct pci_dev *pdev = ctrl_dev(slot->ctrl); 398 u16 slot_status; 399 400 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 401 return !!(slot_status & PCI_EXP_SLTSTA_PFD); 402} 403 404void pciehp_set_attention_status(struct slot *slot, u8 value) 405{ 406 struct controller *ctrl = slot->ctrl; 407 u16 slot_cmd; 408 409 if (!ATTN_LED(ctrl)) 410 return; 411 412 switch (value) { 413 case 0: /* turn off */ 414 slot_cmd = PCI_EXP_SLTCTL_ATTN_IND_OFF; 415 break; 416 case 1: /* turn on */ 417 slot_cmd = PCI_EXP_SLTCTL_ATTN_IND_ON; 418 break; 419 case 2: /* turn blink */ 420 slot_cmd = PCI_EXP_SLTCTL_ATTN_IND_BLINK; 421 break; 422 default: 423 return; 424 } 425 pcie_write_cmd(ctrl, slot_cmd, PCI_EXP_SLTCTL_AIC); 426 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 427 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, slot_cmd); 428} 429 430void pciehp_green_led_on(struct slot *slot) 431{ 432 struct controller *ctrl = slot->ctrl; 433 434 if (!PWR_LED(ctrl)) 435 return; 436 437 pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_ON, PCI_EXP_SLTCTL_PIC); 438 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 439 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 440 PCI_EXP_SLTCTL_PWR_IND_ON); 441} 442 443void pciehp_green_led_off(struct slot *slot) 444{ 445 struct controller *ctrl = slot->ctrl; 446 447 if (!PWR_LED(ctrl)) 448 return; 449 450 pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_OFF, PCI_EXP_SLTCTL_PIC); 451 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 452 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 453 PCI_EXP_SLTCTL_PWR_IND_OFF); 454} 455 456void pciehp_green_led_blink(struct slot *slot) 457{ 458 struct controller *ctrl = slot->ctrl; 459 460 if (!PWR_LED(ctrl)) 461 return; 462 463 pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_IND_BLINK, PCI_EXP_SLTCTL_PIC); 464 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 465 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 466 PCI_EXP_SLTCTL_PWR_IND_BLINK); 467} 468 469int pciehp_power_on_slot(struct slot *slot) 470{ 471 struct controller *ctrl = slot->ctrl; 472 struct pci_dev *pdev = ctrl_dev(ctrl); 473 u16 slot_status; 474 int retval; 475 476 /* Clear sticky power-fault bit from previous power failures */ 477 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); 478 if (slot_status & PCI_EXP_SLTSTA_PFD) 479 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 480 PCI_EXP_SLTSTA_PFD); 481 ctrl->power_fault_detected = 0; 482 483 pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_ON, PCI_EXP_SLTCTL_PCC); 484 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 485 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 486 PCI_EXP_SLTCTL_PWR_ON); 487 488 retval = pciehp_link_enable(ctrl); 489 if (retval) 490 ctrl_err(ctrl, "%s: Can not enable the link!\n", __func__); 491 492 return retval; 493} 494 495void pciehp_power_off_slot(struct slot *slot) 496{ 497 struct controller *ctrl = slot->ctrl; 498 499 pcie_write_cmd(ctrl, PCI_EXP_SLTCTL_PWR_OFF, PCI_EXP_SLTCTL_PCC); 500 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 501 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 502 PCI_EXP_SLTCTL_PWR_OFF); 503} 504 505static irqreturn_t pcie_isr(int irq, void *dev_id) 506{ 507 struct controller *ctrl = (struct controller *)dev_id; 508 struct pci_dev *pdev = ctrl_dev(ctrl); 509 struct pci_bus *subordinate = pdev->subordinate; 510 struct pci_dev *dev; 511 struct slot *slot = ctrl->slot; 512 u16 detected, intr_loc; 513 514 /* 515 * In order to guarantee that all interrupt events are 516 * serviced, we need to re-inspect Slot Status register after 517 * clearing what is presumed to be the last pending interrupt. 518 */ 519 intr_loc = 0; 520 do { 521 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &detected); 522 523 detected &= (PCI_EXP_SLTSTA_ABP | PCI_EXP_SLTSTA_PFD | 524 PCI_EXP_SLTSTA_MRLSC | PCI_EXP_SLTSTA_PDC | 525 PCI_EXP_SLTSTA_CC | PCI_EXP_SLTSTA_DLLSC); 526 detected &= ~intr_loc; 527 intr_loc |= detected; 528 if (!intr_loc) 529 return IRQ_NONE; 530 if (detected) 531 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 532 intr_loc); 533 } while (detected); 534 535 ctrl_dbg(ctrl, "%s: intr_loc %x\n", __func__, intr_loc); 536 537 /* Check Command Complete Interrupt Pending */ 538 if (intr_loc & PCI_EXP_SLTSTA_CC) { 539 ctrl->cmd_busy = 0; 540 smp_mb(); 541 wake_up(&ctrl->queue); 542 } 543 544 if (subordinate) { 545 list_for_each_entry(dev, &subordinate->devices, bus_list) { 546 if (dev->ignore_hotplug) { 547 ctrl_dbg(ctrl, "ignoring hotplug event %#06x (%s requested no hotplug)\n", 548 intr_loc, pci_name(dev)); 549 return IRQ_HANDLED; 550 } 551 } 552 } 553 554 if (!(intr_loc & ~PCI_EXP_SLTSTA_CC)) 555 return IRQ_HANDLED; 556 557 /* Check MRL Sensor Changed */ 558 if (intr_loc & PCI_EXP_SLTSTA_MRLSC) 559 pciehp_handle_switch_change(slot); 560 561 /* Check Attention Button Pressed */ 562 if (intr_loc & PCI_EXP_SLTSTA_ABP) 563 pciehp_handle_attention_button(slot); 564 565 /* Check Presence Detect Changed */ 566 if (intr_loc & PCI_EXP_SLTSTA_PDC) 567 pciehp_handle_presence_change(slot); 568 569 /* Check Power Fault Detected */ 570 if ((intr_loc & PCI_EXP_SLTSTA_PFD) && !ctrl->power_fault_detected) { 571 ctrl->power_fault_detected = 1; 572 pciehp_handle_power_fault(slot); 573 } 574 575 if (intr_loc & PCI_EXP_SLTSTA_DLLSC) 576 pciehp_handle_linkstate_change(slot); 577 578 return IRQ_HANDLED; 579} 580 581void pcie_enable_notification(struct controller *ctrl) 582{ 583 u16 cmd, mask; 584 585 /* 586 * TBD: Power fault detected software notification support. 587 * 588 * Power fault detected software notification is not enabled 589 * now, because it caused power fault detected interrupt storm 590 * on some machines. On those machines, power fault detected 591 * bit in the slot status register was set again immediately 592 * when it is cleared in the interrupt service routine, and 593 * next power fault detected interrupt was notified again. 594 */ 595 596 /* 597 * Always enable link events: thus link-up and link-down shall 598 * always be treated as hotplug and unplug respectively. Enable 599 * presence detect only if Attention Button is not present. 600 */ 601 cmd = PCI_EXP_SLTCTL_DLLSCE; 602 if (ATTN_BUTTN(ctrl)) 603 cmd |= PCI_EXP_SLTCTL_ABPE; 604 else 605 cmd |= PCI_EXP_SLTCTL_PDCE; 606 if (MRL_SENS(ctrl)) 607 cmd |= PCI_EXP_SLTCTL_MRLSCE; 608 if (!pciehp_poll_mode) 609 cmd |= PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE; 610 611 mask = (PCI_EXP_SLTCTL_PDCE | PCI_EXP_SLTCTL_ABPE | 612 PCI_EXP_SLTCTL_MRLSCE | PCI_EXP_SLTCTL_PFDE | 613 PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE | 614 PCI_EXP_SLTCTL_DLLSCE); 615 616 pcie_write_cmd(ctrl, cmd, mask); 617 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 618 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, cmd); 619} 620 621static void pcie_disable_notification(struct controller *ctrl) 622{ 623 u16 mask; 624 625 mask = (PCI_EXP_SLTCTL_PDCE | PCI_EXP_SLTCTL_ABPE | 626 PCI_EXP_SLTCTL_MRLSCE | PCI_EXP_SLTCTL_PFDE | 627 PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_CCIE | 628 PCI_EXP_SLTCTL_DLLSCE); 629 pcie_write_cmd(ctrl, 0, mask); 630 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 631 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 0); 632} 633 634/* 635 * pciehp has a 1:1 bus:slot relationship so we ultimately want a secondary 636 * bus reset of the bridge, but at the same time we want to ensure that it is 637 * not seen as a hot-unplug, followed by the hot-plug of the device. Thus, 638 * disable link state notification and presence detection change notification 639 * momentarily, if we see that they could interfere. Also, clear any spurious 640 * events after. 641 */ 642int pciehp_reset_slot(struct slot *slot, int probe) 643{ 644 struct controller *ctrl = slot->ctrl; 645 struct pci_dev *pdev = ctrl_dev(ctrl); 646 u16 stat_mask = 0, ctrl_mask = 0; 647 648 if (probe) 649 return 0; 650 651 if (!ATTN_BUTTN(ctrl)) { 652 ctrl_mask |= PCI_EXP_SLTCTL_PDCE; 653 stat_mask |= PCI_EXP_SLTSTA_PDC; 654 } 655 ctrl_mask |= PCI_EXP_SLTCTL_DLLSCE; 656 stat_mask |= PCI_EXP_SLTSTA_DLLSC; 657 658 pcie_write_cmd(ctrl, 0, ctrl_mask); 659 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 660 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, 0); 661 if (pciehp_poll_mode) 662 del_timer_sync(&ctrl->poll_timer); 663 664 pci_reset_bridge_secondary_bus(ctrl->pcie->port); 665 666 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, stat_mask); 667 pcie_write_cmd(ctrl, ctrl_mask, ctrl_mask); 668 ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n", __func__, 669 pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, ctrl_mask); 670 if (pciehp_poll_mode) 671 int_poll_timeout(ctrl->poll_timer.data); 672 673 return 0; 674} 675 676int pcie_init_notification(struct controller *ctrl) 677{ 678 if (pciehp_request_irq(ctrl)) 679 return -1; 680 pcie_enable_notification(ctrl); 681 ctrl->notification_enabled = 1; 682 return 0; 683} 684 685static void pcie_shutdown_notification(struct controller *ctrl) 686{ 687 if (ctrl->notification_enabled) { 688 pcie_disable_notification(ctrl); 689 pciehp_free_irq(ctrl); 690 ctrl->notification_enabled = 0; 691 } 692} 693 694static int pcie_init_slot(struct controller *ctrl) 695{ 696 struct slot *slot; 697 698 slot = kzalloc(sizeof(*slot), GFP_KERNEL); 699 if (!slot) 700 return -ENOMEM; 701 702 slot->wq = alloc_workqueue("pciehp-%u", 0, 0, PSN(ctrl)); 703 if (!slot->wq) 704 goto abort; 705 706 slot->ctrl = ctrl; 707 mutex_init(&slot->lock); 708 mutex_init(&slot->hotplug_lock); 709 INIT_DELAYED_WORK(&slot->work, pciehp_queue_pushbutton_work); 710 ctrl->slot = slot; 711 return 0; 712abort: 713 kfree(slot); 714 return -ENOMEM; 715} 716 717static void pcie_cleanup_slot(struct controller *ctrl) 718{ 719 struct slot *slot = ctrl->slot; 720 cancel_delayed_work(&slot->work); 721 destroy_workqueue(slot->wq); 722 kfree(slot); 723} 724 725static inline void dbg_ctrl(struct controller *ctrl) 726{ 727 int i; 728 u16 reg16; 729 struct pci_dev *pdev = ctrl->pcie->port; 730 731 if (!pciehp_debug) 732 return; 733 734 ctrl_info(ctrl, "Hotplug Controller:\n"); 735 ctrl_info(ctrl, " Seg/Bus/Dev/Func/IRQ : %s IRQ %d\n", 736 pci_name(pdev), pdev->irq); 737 ctrl_info(ctrl, " Vendor ID : 0x%04x\n", pdev->vendor); 738 ctrl_info(ctrl, " Device ID : 0x%04x\n", pdev->device); 739 ctrl_info(ctrl, " Subsystem ID : 0x%04x\n", 740 pdev->subsystem_device); 741 ctrl_info(ctrl, " Subsystem Vendor ID : 0x%04x\n", 742 pdev->subsystem_vendor); 743 ctrl_info(ctrl, " PCIe Cap offset : 0x%02x\n", 744 pci_pcie_cap(pdev)); 745 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { 746 if (!pci_resource_len(pdev, i)) 747 continue; 748 ctrl_info(ctrl, " PCI resource [%d] : %pR\n", 749 i, &pdev->resource[i]); 750 } 751 ctrl_info(ctrl, "Slot Capabilities : 0x%08x\n", ctrl->slot_cap); 752 ctrl_info(ctrl, " Physical Slot Number : %d\n", PSN(ctrl)); 753 ctrl_info(ctrl, " Attention Button : %3s\n", 754 ATTN_BUTTN(ctrl) ? "yes" : "no"); 755 ctrl_info(ctrl, " Power Controller : %3s\n", 756 POWER_CTRL(ctrl) ? "yes" : "no"); 757 ctrl_info(ctrl, " MRL Sensor : %3s\n", 758 MRL_SENS(ctrl) ? "yes" : "no"); 759 ctrl_info(ctrl, " Attention Indicator : %3s\n", 760 ATTN_LED(ctrl) ? "yes" : "no"); 761 ctrl_info(ctrl, " Power Indicator : %3s\n", 762 PWR_LED(ctrl) ? "yes" : "no"); 763 ctrl_info(ctrl, " Hot-Plug Surprise : %3s\n", 764 HP_SUPR_RM(ctrl) ? "yes" : "no"); 765 ctrl_info(ctrl, " EMI Present : %3s\n", 766 EMI(ctrl) ? "yes" : "no"); 767 ctrl_info(ctrl, " Command Completed : %3s\n", 768 NO_CMD_CMPL(ctrl) ? "no" : "yes"); 769 pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, ®16); 770 ctrl_info(ctrl, "Slot Status : 0x%04x\n", reg16); 771 pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, ®16); 772 ctrl_info(ctrl, "Slot Control : 0x%04x\n", reg16); 773} 774 775#define FLAG(x, y) (((x) & (y)) ? '+' : '-') 776 777struct controller *pcie_init(struct pcie_device *dev) 778{ 779 struct controller *ctrl; 780 u32 slot_cap, link_cap; 781 struct pci_dev *pdev = dev->port; 782 783 ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL); 784 if (!ctrl) { 785 dev_err(&dev->device, "%s: Out of memory\n", __func__); 786 goto abort; 787 } 788 ctrl->pcie = dev; 789 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &slot_cap); 790 ctrl->slot_cap = slot_cap; 791 mutex_init(&ctrl->ctrl_lock); 792 init_waitqueue_head(&ctrl->queue); 793 dbg_ctrl(ctrl); 794 795 /* Check if Data Link Layer Link Active Reporting is implemented */ 796 pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &link_cap); 797 if (link_cap & PCI_EXP_LNKCAP_DLLLARC) { 798 ctrl_dbg(ctrl, "Link Active Reporting supported\n"); 799 ctrl->link_active_reporting = 1; 800 } 801 802 /* Clear all remaining event bits in Slot Status register */ 803 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, 804 PCI_EXP_SLTSTA_ABP | PCI_EXP_SLTSTA_PFD | 805 PCI_EXP_SLTSTA_MRLSC | PCI_EXP_SLTSTA_PDC | 806 PCI_EXP_SLTSTA_CC | PCI_EXP_SLTSTA_DLLSC); 807 808 ctrl_info(ctrl, "Slot #%d AttnBtn%c AttnInd%c PwrInd%c PwrCtrl%c MRL%c Interlock%c NoCompl%c LLActRep%c\n", 809 (slot_cap & PCI_EXP_SLTCAP_PSN) >> 19, 810 FLAG(slot_cap, PCI_EXP_SLTCAP_ABP), 811 FLAG(slot_cap, PCI_EXP_SLTCAP_AIP), 812 FLAG(slot_cap, PCI_EXP_SLTCAP_PIP), 813 FLAG(slot_cap, PCI_EXP_SLTCAP_PCP), 814 FLAG(slot_cap, PCI_EXP_SLTCAP_MRLSP), 815 FLAG(slot_cap, PCI_EXP_SLTCAP_EIP), 816 FLAG(slot_cap, PCI_EXP_SLTCAP_NCCS), 817 FLAG(link_cap, PCI_EXP_LNKCAP_DLLLARC)); 818 819 if (pcie_init_slot(ctrl)) 820 goto abort_ctrl; 821 822 return ctrl; 823 824abort_ctrl: 825 kfree(ctrl); 826abort: 827 return NULL; 828} 829 830void pciehp_release_ctrl(struct controller *ctrl) 831{ 832 pcie_shutdown_notification(ctrl); 833 pcie_cleanup_slot(ctrl); 834 kfree(ctrl); 835} 836