]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/pci/hotplug/pciehp_hpc.c
pciehp: fix slow probing
[linux-2.6-omap-h63xx.git] / drivers / pci / hotplug / pciehp_hpc.c
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
40 #include "../pci.h"
41 #include "pciehp.h"
42
43 static atomic_t pciehp_num_controllers = ATOMIC_INIT(0);
44
45 struct ctrl_reg {
46         u8 cap_id;
47         u8 nxt_ptr;
48         u16 cap_reg;
49         u32 dev_cap;
50         u16 dev_ctrl;
51         u16 dev_status;
52         u32 lnk_cap;
53         u16 lnk_ctrl;
54         u16 lnk_status;
55         u32 slot_cap;
56         u16 slot_ctrl;
57         u16 slot_status;
58         u16 root_ctrl;
59         u16 rsvp;
60         u32 root_status;
61 } __attribute__ ((packed));
62
63 /* offsets to the controller registers based on the above structure layout */
64 enum ctrl_offsets {
65         PCIECAPID       =       offsetof(struct ctrl_reg, cap_id),
66         NXTCAPPTR       =       offsetof(struct ctrl_reg, nxt_ptr),
67         CAPREG          =       offsetof(struct ctrl_reg, cap_reg),
68         DEVCAP          =       offsetof(struct ctrl_reg, dev_cap),
69         DEVCTRL         =       offsetof(struct ctrl_reg, dev_ctrl),
70         DEVSTATUS       =       offsetof(struct ctrl_reg, dev_status),
71         LNKCAP          =       offsetof(struct ctrl_reg, lnk_cap),
72         LNKCTRL         =       offsetof(struct ctrl_reg, lnk_ctrl),
73         LNKSTATUS       =       offsetof(struct ctrl_reg, lnk_status),
74         SLOTCAP         =       offsetof(struct ctrl_reg, slot_cap),
75         SLOTCTRL        =       offsetof(struct ctrl_reg, slot_ctrl),
76         SLOTSTATUS      =       offsetof(struct ctrl_reg, slot_status),
77         ROOTCTRL        =       offsetof(struct ctrl_reg, root_ctrl),
78         ROOTSTATUS      =       offsetof(struct ctrl_reg, root_status),
79 };
80
81 static inline int pciehp_readw(struct controller *ctrl, int reg, u16 *value)
82 {
83         struct pci_dev *dev = ctrl->pci_dev;
84         return pci_read_config_word(dev, ctrl->cap_base + reg, value);
85 }
86
87 static inline int pciehp_readl(struct controller *ctrl, int reg, u32 *value)
88 {
89         struct pci_dev *dev = ctrl->pci_dev;
90         return pci_read_config_dword(dev, ctrl->cap_base + reg, value);
91 }
92
93 static inline int pciehp_writew(struct controller *ctrl, int reg, u16 value)
94 {
95         struct pci_dev *dev = ctrl->pci_dev;
96         return pci_write_config_word(dev, ctrl->cap_base + reg, value);
97 }
98
99 static inline int pciehp_writel(struct controller *ctrl, int reg, u32 value)
100 {
101         struct pci_dev *dev = ctrl->pci_dev;
102         return pci_write_config_dword(dev, ctrl->cap_base + reg, value);
103 }
104
105 /* Field definitions in PCI Express Capabilities Register */
106 #define CAP_VER                 0x000F
107 #define DEV_PORT_TYPE           0x00F0
108 #define SLOT_IMPL               0x0100
109 #define MSG_NUM                 0x3E00
110
111 /* Device or Port Type */
112 #define NAT_ENDPT               0x00
113 #define LEG_ENDPT               0x01
114 #define ROOT_PORT               0x04
115 #define UP_STREAM               0x05
116 #define DN_STREAM               0x06
117 #define PCIE_PCI_BRDG           0x07
118 #define PCI_PCIE_BRDG           0x10
119
120 /* Field definitions in Device Capabilities Register */
121 #define DATTN_BUTTN_PRSN        0x1000
122 #define DATTN_LED_PRSN          0x2000
123 #define DPWR_LED_PRSN           0x4000
124
125 /* Field definitions in Link Capabilities Register */
126 #define MAX_LNK_SPEED           0x000F
127 #define MAX_LNK_WIDTH           0x03F0
128
129 /* Link Width Encoding */
130 #define LNK_X1          0x01
131 #define LNK_X2          0x02
132 #define LNK_X4          0x04
133 #define LNK_X8          0x08
134 #define LNK_X12         0x0C
135 #define LNK_X16         0x10
136 #define LNK_X32         0x20
137
138 /*Field definitions of Link Status Register */
139 #define LNK_SPEED       0x000F
140 #define NEG_LINK_WD     0x03F0
141 #define LNK_TRN_ERR     0x0400
142 #define LNK_TRN         0x0800
143 #define SLOT_CLK_CONF   0x1000
144
145 /* Field definitions in Slot Capabilities Register */
146 #define ATTN_BUTTN_PRSN 0x00000001
147 #define PWR_CTRL_PRSN   0x00000002
148 #define MRL_SENS_PRSN   0x00000004
149 #define ATTN_LED_PRSN   0x00000008
150 #define PWR_LED_PRSN    0x00000010
151 #define HP_SUPR_RM_SUP  0x00000020
152 #define HP_CAP          0x00000040
153 #define SLOT_PWR_VALUE  0x000003F8
154 #define SLOT_PWR_LIMIT  0x00000C00
155 #define PSN             0xFFF80000      /* PSN: Physical Slot Number */
156
157 /* Field definitions in Slot Control Register */
158 #define ATTN_BUTTN_ENABLE               0x0001
159 #define PWR_FAULT_DETECT_ENABLE         0x0002
160 #define MRL_DETECT_ENABLE               0x0004
161 #define PRSN_DETECT_ENABLE              0x0008
162 #define CMD_CMPL_INTR_ENABLE            0x0010
163 #define HP_INTR_ENABLE                  0x0020
164 #define ATTN_LED_CTRL                   0x00C0
165 #define PWR_LED_CTRL                    0x0300
166 #define PWR_CTRL                        0x0400
167 #define EMI_CTRL                        0x0800
168
169 /* Attention indicator and Power indicator states */
170 #define LED_ON          0x01
171 #define LED_BLINK       0x10
172 #define LED_OFF         0x11
173
174 /* Power Control Command */
175 #define POWER_ON        0
176 #define POWER_OFF       0x0400
177
178 /* EMI Status defines */
179 #define EMI_DISENGAGED  0
180 #define EMI_ENGAGED     1
181
182 /* Field definitions in Slot Status Register */
183 #define ATTN_BUTTN_PRESSED      0x0001
184 #define PWR_FAULT_DETECTED      0x0002
185 #define MRL_SENS_CHANGED        0x0004
186 #define PRSN_DETECT_CHANGED     0x0008
187 #define CMD_COMPLETED           0x0010
188 #define MRL_STATE               0x0020
189 #define PRSN_STATE              0x0040
190 #define EMI_STATE               0x0080
191 #define EMI_STATUS_BIT          7
192
193 static irqreturn_t pcie_isr(int irq, void *dev_id);
194 static void start_int_poll_timer(struct controller *ctrl, int sec);
195
196 /* This is the interrupt polling timeout function. */
197 static void int_poll_timeout(unsigned long data)
198 {
199         struct controller *ctrl = (struct controller *)data;
200
201         /* Poll for interrupt events.  regs == NULL => polling */
202         pcie_isr(0, ctrl);
203
204         init_timer(&ctrl->poll_timer);
205         if (!pciehp_poll_time)
206                 pciehp_poll_time = 2; /* default polling interval is 2 sec */
207
208         start_int_poll_timer(ctrl, pciehp_poll_time);
209 }
210
211 /* This function starts the interrupt polling timer. */
212 static void start_int_poll_timer(struct controller *ctrl, int sec)
213 {
214         /* Clamp to sane value */
215         if ((sec <= 0) || (sec > 60))
216                 sec = 2;
217
218         ctrl->poll_timer.function = &int_poll_timeout;
219         ctrl->poll_timer.data = (unsigned long)ctrl;
220         ctrl->poll_timer.expires = jiffies + sec * HZ;
221         add_timer(&ctrl->poll_timer);
222 }
223
224 static inline int pciehp_request_irq(struct controller *ctrl)
225 {
226         int retval, irq = ctrl->pci_dev->irq;
227
228         /* Install interrupt polling timer. Start with 10 sec delay */
229         if (pciehp_poll_mode) {
230                 init_timer(&ctrl->poll_timer);
231                 start_int_poll_timer(ctrl, 10);
232                 return 0;
233         }
234
235         /* Installs the interrupt handler */
236         retval = request_irq(irq, pcie_isr, IRQF_SHARED, MY_NAME, ctrl);
237         if (retval)
238                 err("Cannot get irq %d for the hotplug controller\n", irq);
239         return retval;
240 }
241
242 static inline void pciehp_free_irq(struct controller *ctrl)
243 {
244         if (pciehp_poll_mode)
245                 del_timer_sync(&ctrl->poll_timer);
246         else
247                 free_irq(ctrl->pci_dev->irq, ctrl);
248 }
249
250 static inline int pcie_wait_cmd(struct controller *ctrl)
251 {
252         int retval = 0;
253         unsigned int msecs = pciehp_poll_mode ? 2500 : 1000;
254         unsigned long timeout = msecs_to_jiffies(msecs);
255         int rc;
256
257         rc = wait_event_interruptible_timeout(ctrl->queue,
258                                               !ctrl->cmd_busy, timeout);
259         if (!rc)
260                 dbg("Command not completed in 1000 msec\n");
261         else if (rc < 0) {
262                 retval = -EINTR;
263                 info("Command was interrupted by a signal\n");
264         }
265
266         return retval;
267 }
268
269 /**
270  * pcie_write_cmd - Issue controller command
271  * @ctrl: controller to which the command is issued
272  * @cmd:  command value written to slot control register
273  * @mask: bitmask of slot control register to be modified
274  */
275 static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
276 {
277         int retval = 0;
278         u16 slot_status;
279         u16 slot_ctrl;
280
281         mutex_lock(&ctrl->ctrl_lock);
282
283         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
284         if (retval) {
285                 err("%s: Cannot read SLOTSTATUS register\n", __func__);
286                 goto out;
287         }
288
289         if (slot_status & CMD_COMPLETED) {
290                 if (!ctrl->no_cmd_complete) {
291                         /*
292                          * After 1 sec and CMD_COMPLETED still not set, just
293                          * proceed forward to issue the next command according
294                          * to spec. Just print out the error message.
295                          */
296                         dbg("%s: CMD_COMPLETED not clear after 1 sec.\n",
297                             __func__);
298                 } else if (!NO_CMD_CMPL(ctrl)) {
299                         /*
300                          * This controller semms to notify of command completed
301                          * event even though it supports none of power
302                          * controller, attention led, power led and EMI.
303                          */
304                         dbg("%s: Unexpected CMD_COMPLETED. Need to wait for "
305                             "command completed event.\n", __func__);
306                         ctrl->no_cmd_complete = 0;
307                 } else {
308                         dbg("%s: Unexpected CMD_COMPLETED. Maybe the "
309                             "controller is broken.\n", __func__);
310                 }
311         }
312
313         retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl);
314         if (retval) {
315                 err("%s: Cannot read SLOTCTRL register\n", __func__);
316                 goto out;
317         }
318
319         slot_ctrl &= ~mask;
320         slot_ctrl |= (cmd & mask);
321         /* Don't enable command completed if caller is changing it. */
322         if (!(mask & CMD_CMPL_INTR_ENABLE))
323                 slot_ctrl |= CMD_CMPL_INTR_ENABLE;
324
325         ctrl->cmd_busy = 1;
326         smp_mb();
327         retval = pciehp_writew(ctrl, SLOTCTRL, slot_ctrl);
328         if (retval)
329                 err("%s: Cannot write to SLOTCTRL register\n", __func__);
330
331         /*
332          * Wait for command completion.
333          */
334         if (!retval && !ctrl->no_cmd_complete)
335                 retval = pcie_wait_cmd(ctrl);
336  out:
337         mutex_unlock(&ctrl->ctrl_lock);
338         return retval;
339 }
340
341 static int hpc_check_lnk_status(struct controller *ctrl)
342 {
343         u16 lnk_status;
344         int retval = 0;
345
346         retval = pciehp_readw(ctrl, LNKSTATUS, &lnk_status);
347         if (retval) {
348                 err("%s: Cannot read LNKSTATUS register\n", __func__);
349                 return retval;
350         }
351
352         dbg("%s: lnk_status = %x\n", __func__, lnk_status);
353         if ( (lnk_status & LNK_TRN) || (lnk_status & LNK_TRN_ERR) ||
354                 !(lnk_status & NEG_LINK_WD)) {
355                 err("%s : Link Training Error occurs \n", __func__);
356                 retval = -1;
357                 return retval;
358         }
359
360         return retval;
361 }
362
363 static int hpc_get_attention_status(struct slot *slot, u8 *status)
364 {
365         struct controller *ctrl = slot->ctrl;
366         u16 slot_ctrl;
367         u8 atten_led_state;
368         int retval = 0;
369
370         retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl);
371         if (retval) {
372                 err("%s: Cannot read SLOTCTRL register\n", __func__);
373                 return retval;
374         }
375
376         dbg("%s: SLOTCTRL %x, value read %x\n",
377             __func__, ctrl->cap_base + SLOTCTRL, slot_ctrl);
378
379         atten_led_state = (slot_ctrl & ATTN_LED_CTRL) >> 6;
380
381         switch (atten_led_state) {
382         case 0:
383                 *status = 0xFF; /* Reserved */
384                 break;
385         case 1:
386                 *status = 1;    /* On */
387                 break;
388         case 2:
389                 *status = 2;    /* Blink */
390                 break;
391         case 3:
392                 *status = 0;    /* Off */
393                 break;
394         default:
395                 *status = 0xFF;
396                 break;
397         }
398
399         return 0;
400 }
401
402 static int hpc_get_power_status(struct slot *slot, u8 *status)
403 {
404         struct controller *ctrl = slot->ctrl;
405         u16 slot_ctrl;
406         u8 pwr_state;
407         int     retval = 0;
408
409         retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl);
410         if (retval) {
411                 err("%s: Cannot read SLOTCTRL register\n", __func__);
412                 return retval;
413         }
414         dbg("%s: SLOTCTRL %x value read %x\n",
415             __func__, ctrl->cap_base + SLOTCTRL, slot_ctrl);
416
417         pwr_state = (slot_ctrl & PWR_CTRL) >> 10;
418
419         switch (pwr_state) {
420         case 0:
421                 *status = 1;
422                 break;
423         case 1:
424                 *status = 0;
425                 break;
426         default:
427                 *status = 0xFF;
428                 break;
429         }
430
431         return retval;
432 }
433
434 static int hpc_get_latch_status(struct slot *slot, u8 *status)
435 {
436         struct controller *ctrl = slot->ctrl;
437         u16 slot_status;
438         int retval = 0;
439
440         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
441         if (retval) {
442                 err("%s: Cannot read SLOTSTATUS register\n", __func__);
443                 return retval;
444         }
445
446         *status = (((slot_status & MRL_STATE) >> 5) == 0) ? 0 : 1;
447
448         return 0;
449 }
450
451 static int hpc_get_adapter_status(struct slot *slot, u8 *status)
452 {
453         struct controller *ctrl = slot->ctrl;
454         u16 slot_status;
455         u8 card_state;
456         int retval = 0;
457
458         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
459         if (retval) {
460                 err("%s: Cannot read SLOTSTATUS register\n", __func__);
461                 return retval;
462         }
463         card_state = (u8)((slot_status & PRSN_STATE) >> 6);
464         *status = (card_state == 1) ? 1 : 0;
465
466         return 0;
467 }
468
469 static int hpc_query_power_fault(struct slot *slot)
470 {
471         struct controller *ctrl = slot->ctrl;
472         u16 slot_status;
473         u8 pwr_fault;
474         int retval = 0;
475
476         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
477         if (retval) {
478                 err("%s: Cannot check for power fault\n", __func__);
479                 return retval;
480         }
481         pwr_fault = (u8)((slot_status & PWR_FAULT_DETECTED) >> 1);
482
483         return pwr_fault;
484 }
485
486 static int hpc_get_emi_status(struct slot *slot, u8 *status)
487 {
488         struct controller *ctrl = slot->ctrl;
489         u16 slot_status;
490         int retval = 0;
491
492         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
493         if (retval) {
494                 err("%s : Cannot check EMI status\n", __func__);
495                 return retval;
496         }
497         *status = (slot_status & EMI_STATE) >> EMI_STATUS_BIT;
498
499         return retval;
500 }
501
502 static int hpc_toggle_emi(struct slot *slot)
503 {
504         u16 slot_cmd;
505         u16 cmd_mask;
506         int rc;
507
508         slot_cmd = EMI_CTRL;
509         cmd_mask = EMI_CTRL;
510         rc = pcie_write_cmd(slot->ctrl, slot_cmd, cmd_mask);
511         slot->last_emi_toggle = get_seconds();
512
513         return rc;
514 }
515
516 static int hpc_set_attention_status(struct slot *slot, u8 value)
517 {
518         struct controller *ctrl = slot->ctrl;
519         u16 slot_cmd;
520         u16 cmd_mask;
521         int rc;
522
523         cmd_mask = ATTN_LED_CTRL;
524         switch (value) {
525                 case 0 :        /* turn off */
526                         slot_cmd = 0x00C0;
527                         break;
528                 case 1:         /* turn on */
529                         slot_cmd = 0x0040;
530                         break;
531                 case 2:         /* turn blink */
532                         slot_cmd = 0x0080;
533                         break;
534                 default:
535                         return -1;
536         }
537         rc = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
538         dbg("%s: SLOTCTRL %x write cmd %x\n",
539             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
540
541         return rc;
542 }
543
544 static void hpc_set_green_led_on(struct slot *slot)
545 {
546         struct controller *ctrl = slot->ctrl;
547         u16 slot_cmd;
548         u16 cmd_mask;
549
550         slot_cmd = 0x0100;
551         cmd_mask = PWR_LED_CTRL;
552         pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
553         dbg("%s: SLOTCTRL %x write cmd %x\n",
554             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
555 }
556
557 static void hpc_set_green_led_off(struct slot *slot)
558 {
559         struct controller *ctrl = slot->ctrl;
560         u16 slot_cmd;
561         u16 cmd_mask;
562
563         slot_cmd = 0x0300;
564         cmd_mask = PWR_LED_CTRL;
565         pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
566         dbg("%s: SLOTCTRL %x write cmd %x\n",
567             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
568 }
569
570 static void hpc_set_green_led_blink(struct slot *slot)
571 {
572         struct controller *ctrl = slot->ctrl;
573         u16 slot_cmd;
574         u16 cmd_mask;
575
576         slot_cmd = 0x0200;
577         cmd_mask = PWR_LED_CTRL;
578         pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
579         dbg("%s: SLOTCTRL %x write cmd %x\n",
580             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
581 }
582
583 static void hpc_release_ctlr(struct controller *ctrl)
584 {
585         /* Mask Hot-plug Interrupt Enable */
586         if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE))
587                 err("%s: Cannot mask hotplut interrupt enable\n", __func__);
588
589         /* Free interrupt handler or interrupt polling timer */
590         pciehp_free_irq(ctrl);
591
592         /*
593          * If this is the last controller to be released, destroy the
594          * pciehp work queue
595          */
596         if (atomic_dec_and_test(&pciehp_num_controllers))
597                 destroy_workqueue(pciehp_wq);
598 }
599
600 static int hpc_power_on_slot(struct slot * slot)
601 {
602         struct controller *ctrl = slot->ctrl;
603         u16 slot_cmd;
604         u16 cmd_mask;
605         u16 slot_status;
606         int retval = 0;
607
608         dbg("%s: slot->hp_slot %x\n", __func__, slot->hp_slot);
609
610         /* Clear sticky power-fault bit from previous power failures */
611         retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
612         if (retval) {
613                 err("%s: Cannot read SLOTSTATUS register\n", __func__);
614                 return retval;
615         }
616         slot_status &= PWR_FAULT_DETECTED;
617         if (slot_status) {
618                 retval = pciehp_writew(ctrl, SLOTSTATUS, slot_status);
619                 if (retval) {
620                         err("%s: Cannot write to SLOTSTATUS register\n",
621                             __func__);
622                         return retval;
623                 }
624         }
625
626         slot_cmd = POWER_ON;
627         cmd_mask = PWR_CTRL;
628         /* Enable detection that we turned off at slot power-off time */
629         if (!pciehp_poll_mode) {
630                 slot_cmd |= (PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE |
631                              PRSN_DETECT_ENABLE);
632                 cmd_mask |= (PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE |
633                              PRSN_DETECT_ENABLE);
634         }
635
636         retval = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
637
638         if (retval) {
639                 err("%s: Write %x command failed!\n", __func__, slot_cmd);
640                 return -1;
641         }
642         dbg("%s: SLOTCTRL %x write cmd %x\n",
643             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
644
645         return retval;
646 }
647
648 static inline int pcie_mask_bad_dllp(struct controller *ctrl)
649 {
650         struct pci_dev *dev = ctrl->pci_dev;
651         int pos;
652         u32 reg;
653
654         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
655         if (!pos)
656                 return 0;
657         pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, &reg);
658         if (reg & PCI_ERR_COR_BAD_DLLP)
659                 return 0;
660         reg |= PCI_ERR_COR_BAD_DLLP;
661         pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg);
662         return 1;
663 }
664
665 static inline void pcie_unmask_bad_dllp(struct controller *ctrl)
666 {
667         struct pci_dev *dev = ctrl->pci_dev;
668         u32 reg;
669         int pos;
670
671         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
672         if (!pos)
673                 return;
674         pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, &reg);
675         if (!(reg & PCI_ERR_COR_BAD_DLLP))
676                 return;
677         reg &= ~PCI_ERR_COR_BAD_DLLP;
678         pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg);
679 }
680
681 static int hpc_power_off_slot(struct slot * slot)
682 {
683         struct controller *ctrl = slot->ctrl;
684         u16 slot_cmd;
685         u16 cmd_mask;
686         int retval = 0;
687         int changed;
688
689         dbg("%s: slot->hp_slot %x\n", __func__, slot->hp_slot);
690
691         /*
692          * Set Bad DLLP Mask bit in Correctable Error Mask
693          * Register. This is the workaround against Bad DLLP error
694          * that sometimes happens during turning power off the slot
695          * which conforms to PCI Express 1.0a spec.
696          */
697         changed = pcie_mask_bad_dllp(ctrl);
698
699         slot_cmd = POWER_OFF;
700         cmd_mask = PWR_CTRL;
701         /*
702          * If we get MRL or presence detect interrupts now, the isr
703          * will notice the sticky power-fault bit too and issue power
704          * indicator change commands. This will lead to an endless loop
705          * of command completions, since the power-fault bit remains on
706          * till the slot is powered on again.
707          */
708         if (!pciehp_poll_mode) {
709                 slot_cmd &= ~(PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE |
710                               PRSN_DETECT_ENABLE);
711                 cmd_mask |= (PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE |
712                              PRSN_DETECT_ENABLE);
713         }
714
715         retval = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
716         if (retval) {
717                 err("%s: Write command failed!\n", __func__);
718                 retval = -1;
719                 goto out;
720         }
721         dbg("%s: SLOTCTRL %x write cmd %x\n",
722             __func__, ctrl->cap_base + SLOTCTRL, slot_cmd);
723
724         /*
725          * After turning power off, we must wait for at least 1 second
726          * before taking any action that relies on power having been
727          * removed from the slot/adapter.
728          */
729         msleep(1000);
730  out:
731         if (changed)
732                 pcie_unmask_bad_dllp(ctrl);
733
734         return retval;
735 }
736
737 static irqreturn_t pcie_isr(int irq, void *dev_id)
738 {
739         struct controller *ctrl = (struct controller *)dev_id;
740         u16 detected, intr_loc;
741         struct slot *p_slot;
742
743         /*
744          * In order to guarantee that all interrupt events are
745          * serviced, we need to re-inspect Slot Status register after
746          * clearing what is presumed to be the last pending interrupt.
747          */
748         intr_loc = 0;
749         do {
750                 if (pciehp_readw(ctrl, SLOTSTATUS, &detected)) {
751                         err("%s: Cannot read SLOTSTATUS\n", __func__);
752                         return IRQ_NONE;
753                 }
754
755                 detected &= (ATTN_BUTTN_PRESSED | PWR_FAULT_DETECTED |
756                              MRL_SENS_CHANGED | PRSN_DETECT_CHANGED |
757                              CMD_COMPLETED);
758                 intr_loc |= detected;
759                 if (!intr_loc)
760                         return IRQ_NONE;
761                 if (pciehp_writew(ctrl, SLOTSTATUS, detected)) {
762                         err("%s: Cannot write to SLOTSTATUS\n", __func__);
763                         return IRQ_NONE;
764                 }
765         } while (detected);
766
767         dbg("%s: intr_loc %x\n", __FUNCTION__, intr_loc);
768
769         /* Check Command Complete Interrupt Pending */
770         if (intr_loc & CMD_COMPLETED) {
771                 ctrl->cmd_busy = 0;
772                 smp_mb();
773                 wake_up_interruptible(&ctrl->queue);
774         }
775
776         if (!(intr_loc & ~CMD_COMPLETED))
777                 return IRQ_HANDLED;
778
779         /*
780          * Return without handling events if this handler routine is
781          * called before controller initialization is done. This may
782          * happen if hotplug event or another interrupt that shares
783          * the IRQ with pciehp arrives before slot initialization is
784          * done after interrupt handler is registered.
785          *
786          * FIXME - Need more structural fixes. We need to be ready to
787          * handle the event before installing interrupt handler.
788          */
789         p_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset);
790         if (!p_slot || !p_slot->hpc_ops)
791                 return IRQ_HANDLED;
792
793         /* Check MRL Sensor Changed */
794         if (intr_loc & MRL_SENS_CHANGED)
795                 pciehp_handle_switch_change(p_slot);
796
797         /* Check Attention Button Pressed */
798         if (intr_loc & ATTN_BUTTN_PRESSED)
799                 pciehp_handle_attention_button(p_slot);
800
801         /* Check Presence Detect Changed */
802         if (intr_loc & PRSN_DETECT_CHANGED)
803                 pciehp_handle_presence_change(p_slot);
804
805         /* Check Power Fault Detected */
806         if (intr_loc & PWR_FAULT_DETECTED)
807                 pciehp_handle_power_fault(p_slot);
808
809         return IRQ_HANDLED;
810 }
811
812 static int hpc_get_max_lnk_speed(struct slot *slot, enum pci_bus_speed *value)
813 {
814         struct controller *ctrl = slot->ctrl;
815         enum pcie_link_speed lnk_speed;
816         u32     lnk_cap;
817         int retval = 0;
818
819         retval = pciehp_readl(ctrl, LNKCAP, &lnk_cap);
820         if (retval) {
821                 err("%s: Cannot read LNKCAP register\n", __func__);
822                 return retval;
823         }
824
825         switch (lnk_cap & 0x000F) {
826         case 1:
827                 lnk_speed = PCIE_2PT5GB;
828                 break;
829         default:
830                 lnk_speed = PCIE_LNK_SPEED_UNKNOWN;
831                 break;
832         }
833
834         *value = lnk_speed;
835         dbg("Max link speed = %d\n", lnk_speed);
836
837         return retval;
838 }
839
840 static int hpc_get_max_lnk_width(struct slot *slot,
841                                  enum pcie_link_width *value)
842 {
843         struct controller *ctrl = slot->ctrl;
844         enum pcie_link_width lnk_wdth;
845         u32     lnk_cap;
846         int retval = 0;
847
848         retval = pciehp_readl(ctrl, LNKCAP, &lnk_cap);
849         if (retval) {
850                 err("%s: Cannot read LNKCAP register\n", __func__);
851                 return retval;
852         }
853
854         switch ((lnk_cap & 0x03F0) >> 4){
855         case 0:
856                 lnk_wdth = PCIE_LNK_WIDTH_RESRV;
857                 break;
858         case 1:
859                 lnk_wdth = PCIE_LNK_X1;
860                 break;
861         case 2:
862                 lnk_wdth = PCIE_LNK_X2;
863                 break;
864         case 4:
865                 lnk_wdth = PCIE_LNK_X4;
866                 break;
867         case 8:
868                 lnk_wdth = PCIE_LNK_X8;
869                 break;
870         case 12:
871                 lnk_wdth = PCIE_LNK_X12;
872                 break;
873         case 16:
874                 lnk_wdth = PCIE_LNK_X16;
875                 break;
876         case 32:
877                 lnk_wdth = PCIE_LNK_X32;
878                 break;
879         default:
880                 lnk_wdth = PCIE_LNK_WIDTH_UNKNOWN;
881                 break;
882         }
883
884         *value = lnk_wdth;
885         dbg("Max link width = %d\n", lnk_wdth);
886
887         return retval;
888 }
889
890 static int hpc_get_cur_lnk_speed(struct slot *slot, enum pci_bus_speed *value)
891 {
892         struct controller *ctrl = slot->ctrl;
893         enum pcie_link_speed lnk_speed = PCI_SPEED_UNKNOWN;
894         int retval = 0;
895         u16 lnk_status;
896
897         retval = pciehp_readw(ctrl, LNKSTATUS, &lnk_status);
898         if (retval) {
899                 err("%s: Cannot read LNKSTATUS register\n", __func__);
900                 return retval;
901         }
902
903         switch (lnk_status & 0x0F) {
904         case 1:
905                 lnk_speed = PCIE_2PT5GB;
906                 break;
907         default:
908                 lnk_speed = PCIE_LNK_SPEED_UNKNOWN;
909                 break;
910         }
911
912         *value = lnk_speed;
913         dbg("Current link speed = %d\n", lnk_speed);
914
915         return retval;
916 }
917
918 static int hpc_get_cur_lnk_width(struct slot *slot,
919                                  enum pcie_link_width *value)
920 {
921         struct controller *ctrl = slot->ctrl;
922         enum pcie_link_width lnk_wdth = PCIE_LNK_WIDTH_UNKNOWN;
923         int retval = 0;
924         u16 lnk_status;
925
926         retval = pciehp_readw(ctrl, LNKSTATUS, &lnk_status);
927         if (retval) {
928                 err("%s: Cannot read LNKSTATUS register\n", __func__);
929                 return retval;
930         }
931
932         switch ((lnk_status & 0x03F0) >> 4){
933         case 0:
934                 lnk_wdth = PCIE_LNK_WIDTH_RESRV;
935                 break;
936         case 1:
937                 lnk_wdth = PCIE_LNK_X1;
938                 break;
939         case 2:
940                 lnk_wdth = PCIE_LNK_X2;
941                 break;
942         case 4:
943                 lnk_wdth = PCIE_LNK_X4;
944                 break;
945         case 8:
946                 lnk_wdth = PCIE_LNK_X8;
947                 break;
948         case 12:
949                 lnk_wdth = PCIE_LNK_X12;
950                 break;
951         case 16:
952                 lnk_wdth = PCIE_LNK_X16;
953                 break;
954         case 32:
955                 lnk_wdth = PCIE_LNK_X32;
956                 break;
957         default:
958                 lnk_wdth = PCIE_LNK_WIDTH_UNKNOWN;
959                 break;
960         }
961
962         *value = lnk_wdth;
963         dbg("Current link width = %d\n", lnk_wdth);
964
965         return retval;
966 }
967
968 static struct hpc_ops pciehp_hpc_ops = {
969         .power_on_slot                  = hpc_power_on_slot,
970         .power_off_slot                 = hpc_power_off_slot,
971         .set_attention_status           = hpc_set_attention_status,
972         .get_power_status               = hpc_get_power_status,
973         .get_attention_status           = hpc_get_attention_status,
974         .get_latch_status               = hpc_get_latch_status,
975         .get_adapter_status             = hpc_get_adapter_status,
976         .get_emi_status                 = hpc_get_emi_status,
977         .toggle_emi                     = hpc_toggle_emi,
978
979         .get_max_bus_speed              = hpc_get_max_lnk_speed,
980         .get_cur_bus_speed              = hpc_get_cur_lnk_speed,
981         .get_max_lnk_width              = hpc_get_max_lnk_width,
982         .get_cur_lnk_width              = hpc_get_cur_lnk_width,
983
984         .query_power_fault              = hpc_query_power_fault,
985         .green_led_on                   = hpc_set_green_led_on,
986         .green_led_off                  = hpc_set_green_led_off,
987         .green_led_blink                = hpc_set_green_led_blink,
988
989         .release_ctlr                   = hpc_release_ctlr,
990         .check_lnk_status               = hpc_check_lnk_status,
991 };
992
993 #ifdef CONFIG_ACPI
994 static int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev)
995 {
996         acpi_status status;
997         acpi_handle chandle, handle = DEVICE_ACPI_HANDLE(&(dev->dev));
998         struct pci_dev *pdev = dev;
999         struct pci_bus *parent;
1000         struct acpi_buffer string = { ACPI_ALLOCATE_BUFFER, NULL };
1001
1002         /*
1003          * Per PCI firmware specification, we should run the ACPI _OSC
1004          * method to get control of hotplug hardware before using it.
1005          * If an _OSC is missing, we look for an OSHP to do the same thing.
1006          * To handle different BIOS behavior, we look for _OSC and OSHP
1007          * within the scope of the hotplug controller and its parents, upto
1008          * the host bridge under which this controller exists.
1009          */
1010         while (!handle) {
1011                 /*
1012                  * This hotplug controller was not listed in the ACPI name
1013                  * space at all. Try to get acpi handle of parent pci bus.
1014                  */
1015                 if (!pdev || !pdev->bus->parent)
1016                         break;
1017                 parent = pdev->bus->parent;
1018                 dbg("Could not find %s in acpi namespace, trying parent\n",
1019                                 pci_name(pdev));
1020                 if (!parent->self)
1021                         /* Parent must be a host bridge */
1022                         handle = acpi_get_pci_rootbridge_handle(
1023                                         pci_domain_nr(parent),
1024                                         parent->number);
1025                 else
1026                         handle = DEVICE_ACPI_HANDLE(
1027                                         &(parent->self->dev));
1028                 pdev = parent->self;
1029         }
1030
1031         while (handle) {
1032                 acpi_get_name(handle, ACPI_FULL_PATHNAME, &string);
1033                 dbg("Trying to get hotplug control for %s \n",
1034                         (char *)string.pointer);
1035                 status = pci_osc_control_set(handle,
1036                                 OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL |
1037                                 OSC_PCI_EXPRESS_NATIVE_HP_CONTROL);
1038                 if (status == AE_NOT_FOUND)
1039                         status = acpi_run_oshp(handle);
1040                 if (ACPI_SUCCESS(status)) {
1041                         dbg("Gained control for hotplug HW for pci %s (%s)\n",
1042                                 pci_name(dev), (char *)string.pointer);
1043                         kfree(string.pointer);
1044                         return 0;
1045                 }
1046                 if (acpi_root_bridge(handle))
1047                         break;
1048                 chandle = handle;
1049                 status = acpi_get_parent(chandle, &handle);
1050                 if (ACPI_FAILURE(status))
1051                         break;
1052         }
1053
1054         dbg("Cannot get control of hotplug hardware for pci %s\n",
1055                         pci_name(dev));
1056
1057         kfree(string.pointer);
1058         return -1;
1059 }
1060 #endif
1061
1062 static int pcie_init_hardware_part1(struct controller *ctrl,
1063                                     struct pcie_device *dev)
1064 {
1065         /* Clear all remaining event bits in Slot Status register */
1066         if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) {
1067                 err("%s: Cannot write to SLOTSTATUS register\n", __func__);
1068                 return -1;
1069         }
1070
1071         /* Mask Hot-plug Interrupt Enable */
1072         if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) {
1073                 err("%s: Cannot mask hotplug interrupt enable\n", __func__);
1074                 return -1;
1075         }
1076         return 0;
1077 }
1078
1079 int pcie_init_hardware_part2(struct controller *ctrl, struct pcie_device *dev)
1080 {
1081         u16 cmd, mask;
1082
1083         cmd = PRSN_DETECT_ENABLE;
1084         if (ATTN_BUTTN(ctrl))
1085                 cmd |= ATTN_BUTTN_ENABLE;
1086         if (POWER_CTRL(ctrl))
1087                 cmd |= PWR_FAULT_DETECT_ENABLE;
1088         if (MRL_SENS(ctrl))
1089                 cmd |= MRL_DETECT_ENABLE;
1090         if (!pciehp_poll_mode)
1091                 cmd |= HP_INTR_ENABLE;
1092
1093         mask = PRSN_DETECT_ENABLE | ATTN_BUTTN_ENABLE |
1094                 PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE | HP_INTR_ENABLE;
1095
1096         if (pcie_write_cmd(ctrl, cmd, mask)) {
1097                 err("%s: Cannot enable software notification\n", __func__);
1098                 goto abort;
1099         }
1100
1101         if (pciehp_force)
1102                 dbg("Bypassing BIOS check for pciehp use on %s\n",
1103                                 pci_name(ctrl->pci_dev));
1104         else if (pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev))
1105                 goto abort_disable_intr;
1106
1107         return 0;
1108
1109         /* We end up here for the many possible ways to fail this API. */
1110 abort_disable_intr:
1111         if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE))
1112                 err("%s : disabling interrupts failed\n", __func__);
1113 abort:
1114         return -1;
1115 }
1116
1117 static inline void dbg_ctrl(struct controller *ctrl)
1118 {
1119         int i;
1120         u16 reg16;
1121         struct pci_dev *pdev = ctrl->pci_dev;
1122
1123         if (!pciehp_debug)
1124                 return;
1125
1126         dbg("Hotplug Controller:\n");
1127         dbg("  Seg/Bus/Dev/Func/IRQ : %s IRQ %d\n", pci_name(pdev), pdev->irq);
1128         dbg("  Vendor ID            : 0x%04x\n", pdev->vendor);
1129         dbg("  Device ID            : 0x%04x\n", pdev->device);
1130         dbg("  Subsystem ID         : 0x%04x\n", pdev->subsystem_device);
1131         dbg("  Subsystem Vendor ID  : 0x%04x\n", pdev->subsystem_vendor);
1132         dbg("  PCIe Cap offset      : 0x%02x\n", ctrl->cap_base);
1133         for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
1134                 if (!pci_resource_len(pdev, i))
1135                         continue;
1136                 dbg("  PCI resource [%d]     : 0x%llx@0x%llx\n", i,
1137                     (unsigned long long)pci_resource_len(pdev, i),
1138                     (unsigned long long)pci_resource_start(pdev, i));
1139         }
1140         dbg("Slot Capabilities      : 0x%08x\n", ctrl->slot_cap);
1141         dbg("  Physical Slot Number : %d\n", ctrl->first_slot);
1142         dbg("  Attention Button     : %3s\n", ATTN_BUTTN(ctrl) ? "yes" : "no");
1143         dbg("  Power Controller     : %3s\n", POWER_CTRL(ctrl) ? "yes" : "no");
1144         dbg("  MRL Sensor           : %3s\n", MRL_SENS(ctrl)   ? "yes" : "no");
1145         dbg("  Attention Indicator  : %3s\n", ATTN_LED(ctrl)   ? "yes" : "no");
1146         dbg("  Power Indicator      : %3s\n", PWR_LED(ctrl)    ? "yes" : "no");
1147         dbg("  Hot-Plug Surprise    : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no");
1148         dbg("  EMI Present          : %3s\n", EMI(ctrl)        ? "yes" : "no");
1149         dbg("  Comamnd Completed    : %3s\n", NO_CMD_CMPL(ctrl)? "no" : "yes");
1150         pciehp_readw(ctrl, SLOTSTATUS, &reg16);
1151         dbg("Slot Status            : 0x%04x\n", reg16);
1152         pciehp_readw(ctrl, SLOTSTATUS, &reg16);
1153         dbg("Slot Control           : 0x%04x\n", reg16);
1154 }
1155
1156 int pcie_init(struct controller *ctrl, struct pcie_device *dev)
1157 {
1158         u32 slot_cap;
1159         struct pci_dev *pdev = dev->port;
1160
1161         ctrl->pci_dev = pdev;
1162         ctrl->cap_base = pci_find_capability(pdev, PCI_CAP_ID_EXP);
1163         if (!ctrl->cap_base) {
1164                 err("%s: Cannot find PCI Express capability\n", __func__);
1165                 goto abort;
1166         }
1167         if (pciehp_readl(ctrl, SLOTCAP, &slot_cap)) {
1168                 err("%s: Cannot read SLOTCAP register\n", __func__);
1169                 goto abort;
1170         }
1171
1172         ctrl->slot_cap = slot_cap;
1173         ctrl->first_slot = slot_cap >> 19;
1174         ctrl->slot_device_offset = 0;
1175         ctrl->num_slots = 1;
1176         ctrl->hpc_ops = &pciehp_hpc_ops;
1177         mutex_init(&ctrl->crit_sect);
1178         mutex_init(&ctrl->ctrl_lock);
1179         init_waitqueue_head(&ctrl->queue);
1180         dbg_ctrl(ctrl);
1181         /*
1182          * Controller doesn't notify of command completion if the "No
1183          * Command Completed Support" bit is set in Slot Capability
1184          * register or the controller supports none of power
1185          * controller, attention led, power led and EMI.
1186          */
1187         if (NO_CMD_CMPL(ctrl) ||
1188             !(POWER_CTRL(ctrl) | ATTN_LED(ctrl) | PWR_LED(ctrl) | EMI(ctrl)))
1189             ctrl->no_cmd_complete = 1;
1190
1191         info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n",
1192              pdev->vendor, pdev->device,
1193              pdev->subsystem_vendor, pdev->subsystem_device);
1194
1195         if (pcie_init_hardware_part1(ctrl, dev))
1196                 goto abort;
1197
1198         if (pciehp_request_irq(ctrl))
1199                 goto abort;
1200
1201         /*
1202          * If this is the first controller to be initialized,
1203          * initialize the pciehp work queue
1204          */
1205         if (atomic_add_return(1, &pciehp_num_controllers) == 1) {
1206                 pciehp_wq = create_singlethread_workqueue("pciehpd");
1207                 if (!pciehp_wq) {
1208                         goto abort_free_irq;
1209                 }
1210         }
1211
1212         if (pcie_init_hardware_part2(ctrl, dev))
1213                 goto abort_free_irq;
1214
1215         return 0;
1216
1217 abort_free_irq:
1218         pciehp_free_irq(ctrl);
1219 abort:
1220         return -1;
1221 }