2 * Standard PCI Hot Plug Driver
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
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.
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
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.
26 * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com>
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/types.h>
33 #include <linux/pci.h>
34 #include <linux/interrupt.h>
38 /* Slot Available Register I field definition */
39 #define SLOT_33MHZ 0x0000001f
40 #define SLOT_66MHZ_PCIX 0x00001f00
41 #define SLOT_100MHZ_PCIX 0x001f0000
42 #define SLOT_133MHZ_PCIX 0x1f000000
44 /* Slot Available Register II field definition */
45 #define SLOT_66MHZ 0x0000001f
46 #define SLOT_66MHZ_PCIX_266 0x00000f00
47 #define SLOT_100MHZ_PCIX_266 0x0000f000
48 #define SLOT_133MHZ_PCIX_266 0x000f0000
49 #define SLOT_66MHZ_PCIX_533 0x00f00000
50 #define SLOT_100MHZ_PCIX_533 0x0f000000
51 #define SLOT_133MHZ_PCIX_533 0xf0000000
53 /* Slot Configuration */
54 #define SLOT_NUM 0x0000001F
55 #define FIRST_DEV_NUM 0x00001F00
56 #define PSN 0x07FF0000
57 #define UPDOWN 0x20000000
58 #define MRLSENSOR 0x40000000
59 #define ATTN_BUTTON 0x80000000
62 * Interrupt Locator Register definitions
64 #define CMD_INTR_PENDING (1 << 0)
65 #define SLOT_INTR_PENDING(i) (1 << (i + 1))
68 * Controller SERR-INT Register
70 #define GLOBAL_INTR_MASK (1 << 0)
71 #define GLOBAL_SERR_MASK (1 << 1)
72 #define COMMAND_INTR_MASK (1 << 2)
73 #define ARBITER_SERR_MASK (1 << 3)
74 #define COMMAND_DETECTED (1 << 16)
75 #define ARBITER_DETECTED (1 << 17)
76 #define SERR_INTR_RSVDZ_MASK 0xfffc0000
79 * Logical Slot Register definitions
81 #define SLOT_REG(i) (SLOT1 + (4 * i))
83 #define SLOT_STATE_SHIFT (0)
84 #define SLOT_STATE_MASK (3 << 0)
85 #define SLOT_STATE_PWRONLY (1)
86 #define SLOT_STATE_ENABLED (2)
87 #define SLOT_STATE_DISABLED (3)
88 #define PWR_LED_STATE_SHIFT (2)
89 #define PWR_LED_STATE_MASK (3 << 2)
90 #define ATN_LED_STATE_SHIFT (4)
91 #define ATN_LED_STATE_MASK (3 << 4)
92 #define ATN_LED_STATE_ON (1)
93 #define ATN_LED_STATE_BLINK (2)
94 #define ATN_LED_STATE_OFF (3)
95 #define POWER_FAULT (1 << 6)
96 #define ATN_BUTTON (1 << 7)
97 #define MRL_SENSOR (1 << 8)
98 #define MHZ66_CAP (1 << 9)
99 #define PRSNT_SHIFT (10)
100 #define PRSNT_MASK (3 << 10)
101 #define PCIX_CAP_SHIFT (12)
102 #define PCIX_CAP_MASK_PI1 (3 << 12)
103 #define PCIX_CAP_MASK_PI2 (7 << 12)
104 #define PRSNT_CHANGE_DETECTED (1 << 16)
105 #define ISO_PFAULT_DETECTED (1 << 17)
106 #define BUTTON_PRESS_DETECTED (1 << 18)
107 #define MRL_CHANGE_DETECTED (1 << 19)
108 #define CON_PFAULT_DETECTED (1 << 20)
109 #define PRSNT_CHANGE_INTR_MASK (1 << 24)
110 #define ISO_PFAULT_INTR_MASK (1 << 25)
111 #define BUTTON_PRESS_INTR_MASK (1 << 26)
112 #define MRL_CHANGE_INTR_MASK (1 << 27)
113 #define CON_PFAULT_INTR_MASK (1 << 28)
114 #define MRL_CHANGE_SERR_MASK (1 << 29)
115 #define CON_PFAULT_SERR_MASK (1 << 30)
116 #define SLOT_REG_RSVDZ_MASK (1 << 15) | (7 << 21)
119 * SHPC Command Code definitnions
121 * Slot Operation 00h - 3Fh
122 * Set Bus Segment Speed/Mode A 40h - 47h
123 * Power-Only All Slots 48h
124 * Enable All Slots 49h
125 * Set Bus Segment Speed/Mode B (PI=2) 50h - 5Fh
126 * Reserved Command Codes 60h - BFh
127 * Vendor Specific Commands C0h - FFh
129 #define SET_SLOT_PWR 0x01 /* Slot Operation */
130 #define SET_SLOT_ENABLE 0x02
131 #define SET_SLOT_DISABLE 0x03
132 #define SET_PWR_ON 0x04
133 #define SET_PWR_BLINK 0x08
134 #define SET_PWR_OFF 0x0c
135 #define SET_ATTN_ON 0x10
136 #define SET_ATTN_BLINK 0x20
137 #define SET_ATTN_OFF 0x30
138 #define SETA_PCI_33MHZ 0x40 /* Set Bus Segment Speed/Mode A */
139 #define SETA_PCI_66MHZ 0x41
140 #define SETA_PCIX_66MHZ 0x42
141 #define SETA_PCIX_100MHZ 0x43
142 #define SETA_PCIX_133MHZ 0x44
143 #define SETA_RESERVED1 0x45
144 #define SETA_RESERVED2 0x46
145 #define SETA_RESERVED3 0x47
146 #define SET_PWR_ONLY_ALL 0x48 /* Power-Only All Slots */
147 #define SET_ENABLE_ALL 0x49 /* Enable All Slots */
148 #define SETB_PCI_33MHZ 0x50 /* Set Bus Segment Speed/Mode B */
149 #define SETB_PCI_66MHZ 0x51
150 #define SETB_PCIX_66MHZ_PM 0x52
151 #define SETB_PCIX_100MHZ_PM 0x53
152 #define SETB_PCIX_133MHZ_PM 0x54
153 #define SETB_PCIX_66MHZ_EM 0x55
154 #define SETB_PCIX_100MHZ_EM 0x56
155 #define SETB_PCIX_133MHZ_EM 0x57
156 #define SETB_PCIX_66MHZ_266 0x58
157 #define SETB_PCIX_100MHZ_266 0x59
158 #define SETB_PCIX_133MHZ_266 0x5a
159 #define SETB_PCIX_66MHZ_533 0x5b
160 #define SETB_PCIX_100MHZ_533 0x5c
161 #define SETB_PCIX_133MHZ_533 0x5d
162 #define SETB_RESERVED1 0x5e
163 #define SETB_RESERVED2 0x5f
166 * SHPC controller command error code
168 #define SWITCH_OPEN 0x1
169 #define INVALID_CMD 0x2
170 #define INVALID_SPEED_MODE 0x4
173 * For accessing SHPC Working Register Set via PCI Configuration Space
175 #define DWORD_SELECT 0x2
176 #define DWORD_DATA 0x4
178 /* Field Offset in Logical Slot Register - byte boundary */
179 #define SLOT_EVENT_LATCH 0x2
180 #define SLOT_SERR_INT_MASK 0x3
182 static atomic_t shpchp_num_controllers
= ATOMIC_INIT(0);
184 static irqreturn_t
shpc_isr(int irq
, void *dev_id
);
185 static void start_int_poll_timer(struct controller
*ctrl
, int sec
);
186 static int hpc_check_cmd_status(struct controller
*ctrl
);
188 static inline u8
shpc_readb(struct controller
*ctrl
, int reg
)
190 return readb(ctrl
->creg
+ reg
);
193 static inline void shpc_writeb(struct controller
*ctrl
, int reg
, u8 val
)
195 writeb(val
, ctrl
->creg
+ reg
);
198 static inline u16
shpc_readw(struct controller
*ctrl
, int reg
)
200 return readw(ctrl
->creg
+ reg
);
203 static inline void shpc_writew(struct controller
*ctrl
, int reg
, u16 val
)
205 writew(val
, ctrl
->creg
+ reg
);
208 static inline u32
shpc_readl(struct controller
*ctrl
, int reg
)
210 return readl(ctrl
->creg
+ reg
);
213 static inline void shpc_writel(struct controller
*ctrl
, int reg
, u32 val
)
215 writel(val
, ctrl
->creg
+ reg
);
218 static inline int shpc_indirect_read(struct controller
*ctrl
, int index
,
222 u32 cap_offset
= ctrl
->cap_offset
;
223 struct pci_dev
*pdev
= ctrl
->pci_dev
;
225 rc
= pci_write_config_byte(pdev
, cap_offset
+ DWORD_SELECT
, index
);
228 return pci_read_config_dword(pdev
, cap_offset
+ DWORD_DATA
, value
);
232 * This is the interrupt polling timeout function.
234 static void int_poll_timeout(unsigned long data
)
236 struct controller
*ctrl
= (struct controller
*)data
;
238 /* Poll for interrupt events. regs == NULL => polling */
241 init_timer(&ctrl
->poll_timer
);
242 if (!shpchp_poll_time
)
243 shpchp_poll_time
= 2; /* default polling interval is 2 sec */
245 start_int_poll_timer(ctrl
, shpchp_poll_time
);
249 * This function starts the interrupt polling timer.
251 static void start_int_poll_timer(struct controller
*ctrl
, int sec
)
253 /* Clamp to sane value */
254 if ((sec
<= 0) || (sec
> 60))
257 ctrl
->poll_timer
.function
= &int_poll_timeout
;
258 ctrl
->poll_timer
.data
= (unsigned long)ctrl
;
259 ctrl
->poll_timer
.expires
= jiffies
+ sec
* HZ
;
260 add_timer(&ctrl
->poll_timer
);
263 static inline int is_ctrl_busy(struct controller
*ctrl
)
265 u16 cmd_status
= shpc_readw(ctrl
, CMD_STATUS
);
266 return cmd_status
& 0x1;
270 * Returns 1 if SHPC finishes executing a command within 1 sec,
271 * otherwise returns 0.
273 static inline int shpc_poll_ctrl_busy(struct controller
*ctrl
)
277 if (!is_ctrl_busy(ctrl
))
280 /* Check every 0.1 sec for a total of 1 sec */
281 for (i
= 0; i
< 10; i
++) {
283 if (!is_ctrl_busy(ctrl
))
290 static inline int shpc_wait_cmd(struct controller
*ctrl
)
293 unsigned long timeout
= msecs_to_jiffies(1000);
296 if (shpchp_poll_mode
)
297 rc
= shpc_poll_ctrl_busy(ctrl
);
299 rc
= wait_event_interruptible_timeout(ctrl
->queue
,
300 !is_ctrl_busy(ctrl
), timeout
);
301 if (!rc
&& is_ctrl_busy(ctrl
)) {
303 ctrl_err(ctrl
, "Command not completed in 1000 msec\n");
306 ctrl_info(ctrl
, "Command was interrupted by a signal\n");
312 static int shpc_write_cmd(struct slot
*slot
, u8 t_slot
, u8 cmd
)
314 struct controller
*ctrl
= slot
->ctrl
;
319 mutex_lock(&slot
->ctrl
->cmd_lock
);
321 if (!shpc_poll_ctrl_busy(ctrl
)) {
322 /* After 1 sec and and the controller is still busy */
323 ctrl_err(ctrl
, "Controller is still busy after 1 sec\n");
329 temp_word
= (t_slot
<< 8) | (cmd
& 0xFF);
330 ctrl_dbg(ctrl
, "%s: t_slot %x cmd %x\n", __func__
, t_slot
, cmd
);
332 /* To make sure the Controller Busy bit is 0 before we send out the
335 shpc_writew(ctrl
, CMD
, temp_word
);
338 * Wait for command completion.
340 retval
= shpc_wait_cmd(slot
->ctrl
);
344 cmd_status
= hpc_check_cmd_status(slot
->ctrl
);
347 "Failed to issued command 0x%x (error code = %d)\n",
352 mutex_unlock(&slot
->ctrl
->cmd_lock
);
356 static int hpc_check_cmd_status(struct controller
*ctrl
)
359 u16 cmd_status
= shpc_readw(ctrl
, CMD_STATUS
) & 0x000F;
361 switch (cmd_status
>> 1) {
366 retval
= SWITCH_OPEN
;
367 ctrl_err(ctrl
, "Switch opened!\n");
370 retval
= INVALID_CMD
;
371 ctrl_err(ctrl
, "Invalid HPC command!\n");
374 retval
= INVALID_SPEED_MODE
;
375 ctrl_err(ctrl
, "Invalid bus speed/mode!\n");
385 static int hpc_get_attention_status(struct slot
*slot
, u8
*status
)
387 struct controller
*ctrl
= slot
->ctrl
;
388 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
389 u8 state
= (slot_reg
& ATN_LED_STATE_MASK
) >> ATN_LED_STATE_SHIFT
;
392 case ATN_LED_STATE_ON
:
393 *status
= 1; /* On */
395 case ATN_LED_STATE_BLINK
:
396 *status
= 2; /* Blink */
398 case ATN_LED_STATE_OFF
:
399 *status
= 0; /* Off */
402 *status
= 0xFF; /* Reserved */
409 static int hpc_get_power_status(struct slot
* slot
, u8
*status
)
411 struct controller
*ctrl
= slot
->ctrl
;
412 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
413 u8 state
= (slot_reg
& SLOT_STATE_MASK
) >> SLOT_STATE_SHIFT
;
416 case SLOT_STATE_PWRONLY
:
417 *status
= 2; /* Powered only */
419 case SLOT_STATE_ENABLED
:
420 *status
= 1; /* Enabled */
422 case SLOT_STATE_DISABLED
:
423 *status
= 0; /* Disabled */
426 *status
= 0xFF; /* Reserved */
434 static int hpc_get_latch_status(struct slot
*slot
, u8
*status
)
436 struct controller
*ctrl
= slot
->ctrl
;
437 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
439 *status
= !!(slot_reg
& MRL_SENSOR
); /* 0 -> close; 1 -> open */
444 static int hpc_get_adapter_status(struct slot
*slot
, u8
*status
)
446 struct controller
*ctrl
= slot
->ctrl
;
447 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
448 u8 state
= (slot_reg
& PRSNT_MASK
) >> PRSNT_SHIFT
;
450 *status
= (state
!= 0x3) ? 1 : 0;
455 static int hpc_get_prog_int(struct slot
*slot
, u8
*prog_int
)
457 struct controller
*ctrl
= slot
->ctrl
;
459 *prog_int
= shpc_readb(ctrl
, PROG_INTERFACE
);
464 static int hpc_get_adapter_speed(struct slot
*slot
, enum pci_bus_speed
*value
)
467 struct controller
*ctrl
= slot
->ctrl
;
468 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
469 u8 m66_cap
= !!(slot_reg
& MHZ66_CAP
);
472 if ((retval
= hpc_get_prog_int(slot
, &pi
)))
477 pcix_cap
= (slot_reg
& PCIX_CAP_MASK_PI1
) >> PCIX_CAP_SHIFT
;
480 pcix_cap
= (slot_reg
& PCIX_CAP_MASK_PI2
) >> PCIX_CAP_SHIFT
;
486 ctrl_dbg(ctrl
, "%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n",
487 __func__
, slot_reg
, pcix_cap
, m66_cap
);
491 *value
= m66_cap
? PCI_SPEED_66MHz
: PCI_SPEED_33MHz
;
494 *value
= PCI_SPEED_66MHz_PCIX
;
497 *value
= PCI_SPEED_133MHz_PCIX
;
500 *value
= PCI_SPEED_133MHz_PCIX_266
;
503 *value
= PCI_SPEED_133MHz_PCIX_533
;
507 *value
= PCI_SPEED_UNKNOWN
;
512 ctrl_dbg(ctrl
, "Adapter speed = %d\n", *value
);
516 static int hpc_get_mode1_ECC_cap(struct slot
*slot
, u8
*mode
)
519 struct controller
*ctrl
= slot
->ctrl
;
520 u16 sec_bus_status
= shpc_readw(ctrl
, SEC_BUS_CONFIG
);
521 u8 pi
= shpc_readb(ctrl
, PROG_INTERFACE
);
524 *mode
= (sec_bus_status
& 0x0100) >> 8;
529 ctrl_dbg(ctrl
, "Mode 1 ECC cap = %d\n", *mode
);
533 static int hpc_query_power_fault(struct slot
* slot
)
535 struct controller
*ctrl
= slot
->ctrl
;
536 u32 slot_reg
= shpc_readl(ctrl
, SLOT_REG(slot
->hp_slot
));
538 /* Note: Logic 0 => fault */
539 return !(slot_reg
& POWER_FAULT
);
542 static int hpc_set_attention_status(struct slot
*slot
, u8 value
)
548 slot_cmd
= SET_ATTN_OFF
; /* OFF */
551 slot_cmd
= SET_ATTN_ON
; /* ON */
554 slot_cmd
= SET_ATTN_BLINK
; /* BLINK */
560 return shpc_write_cmd(slot
, slot
->hp_slot
, slot_cmd
);
564 static void hpc_set_green_led_on(struct slot
*slot
)
566 shpc_write_cmd(slot
, slot
->hp_slot
, SET_PWR_ON
);
569 static void hpc_set_green_led_off(struct slot
*slot
)
571 shpc_write_cmd(slot
, slot
->hp_slot
, SET_PWR_OFF
);
574 static void hpc_set_green_led_blink(struct slot
*slot
)
576 shpc_write_cmd(slot
, slot
->hp_slot
, SET_PWR_BLINK
);
579 static void hpc_release_ctlr(struct controller
*ctrl
)
582 u32 slot_reg
, serr_int
;
585 * Mask event interrupts and SERRs of all slots
587 for (i
= 0; i
< ctrl
->num_slots
; i
++) {
588 slot_reg
= shpc_readl(ctrl
, SLOT_REG(i
));
589 slot_reg
|= (PRSNT_CHANGE_INTR_MASK
| ISO_PFAULT_INTR_MASK
|
590 BUTTON_PRESS_INTR_MASK
| MRL_CHANGE_INTR_MASK
|
591 CON_PFAULT_INTR_MASK
| MRL_CHANGE_SERR_MASK
|
592 CON_PFAULT_SERR_MASK
);
593 slot_reg
&= ~SLOT_REG_RSVDZ_MASK
;
594 shpc_writel(ctrl
, SLOT_REG(i
), slot_reg
);
600 * Mask SERR and System Interrupt generation
602 serr_int
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
603 serr_int
|= (GLOBAL_INTR_MASK
| GLOBAL_SERR_MASK
|
604 COMMAND_INTR_MASK
| ARBITER_SERR_MASK
);
605 serr_int
&= ~SERR_INTR_RSVDZ_MASK
;
606 shpc_writel(ctrl
, SERR_INTR_ENABLE
, serr_int
);
608 if (shpchp_poll_mode
)
609 del_timer(&ctrl
->poll_timer
);
611 free_irq(ctrl
->pci_dev
->irq
, ctrl
);
612 pci_disable_msi(ctrl
->pci_dev
);
616 release_mem_region(ctrl
->mmio_base
, ctrl
->mmio_size
);
619 * If this is the last controller to be released, destroy the
622 if (atomic_dec_and_test(&shpchp_num_controllers
))
623 destroy_workqueue(shpchp_wq
);
626 static int hpc_power_on_slot(struct slot
* slot
)
630 retval
= shpc_write_cmd(slot
, slot
->hp_slot
, SET_SLOT_PWR
);
632 ctrl_err(slot
->ctrl
, "%s: Write command failed!\n", __func__
);
637 static int hpc_slot_enable(struct slot
* slot
)
641 /* Slot - Enable, Power Indicator - Blink, Attention Indicator - Off */
642 retval
= shpc_write_cmd(slot
, slot
->hp_slot
,
643 SET_SLOT_ENABLE
| SET_PWR_BLINK
| SET_ATTN_OFF
);
645 ctrl_err(slot
->ctrl
, "%s: Write command failed!\n", __func__
);
650 static int hpc_slot_disable(struct slot
* slot
)
654 /* Slot - Disable, Power Indicator - Off, Attention Indicator - On */
655 retval
= shpc_write_cmd(slot
, slot
->hp_slot
,
656 SET_SLOT_DISABLE
| SET_PWR_OFF
| SET_ATTN_ON
);
658 ctrl_err(slot
->ctrl
, "%s: Write command failed!\n", __func__
);
663 static int hpc_set_bus_speed_mode(struct slot
* slot
, enum pci_bus_speed value
)
666 struct controller
*ctrl
= slot
->ctrl
;
669 pi
= shpc_readb(ctrl
, PROG_INTERFACE
);
670 if ((pi
== 1) && (value
> PCI_SPEED_133MHz_PCIX
))
674 case PCI_SPEED_33MHz
:
675 cmd
= SETA_PCI_33MHZ
;
677 case PCI_SPEED_66MHz
:
678 cmd
= SETA_PCI_66MHZ
;
680 case PCI_SPEED_66MHz_PCIX
:
681 cmd
= SETA_PCIX_66MHZ
;
683 case PCI_SPEED_100MHz_PCIX
:
684 cmd
= SETA_PCIX_100MHZ
;
686 case PCI_SPEED_133MHz_PCIX
:
687 cmd
= SETA_PCIX_133MHZ
;
689 case PCI_SPEED_66MHz_PCIX_ECC
:
690 cmd
= SETB_PCIX_66MHZ_EM
;
692 case PCI_SPEED_100MHz_PCIX_ECC
:
693 cmd
= SETB_PCIX_100MHZ_EM
;
695 case PCI_SPEED_133MHz_PCIX_ECC
:
696 cmd
= SETB_PCIX_133MHZ_EM
;
698 case PCI_SPEED_66MHz_PCIX_266
:
699 cmd
= SETB_PCIX_66MHZ_266
;
701 case PCI_SPEED_100MHz_PCIX_266
:
702 cmd
= SETB_PCIX_100MHZ_266
;
704 case PCI_SPEED_133MHz_PCIX_266
:
705 cmd
= SETB_PCIX_133MHZ_266
;
707 case PCI_SPEED_66MHz_PCIX_533
:
708 cmd
= SETB_PCIX_66MHZ_533
;
710 case PCI_SPEED_100MHz_PCIX_533
:
711 cmd
= SETB_PCIX_100MHZ_533
;
713 case PCI_SPEED_133MHz_PCIX_533
:
714 cmd
= SETB_PCIX_133MHZ_533
;
720 retval
= shpc_write_cmd(slot
, 0, cmd
);
722 ctrl_err(ctrl
, "%s: Write command failed!\n", __func__
);
727 static irqreturn_t
shpc_isr(int irq
, void *dev_id
)
729 struct controller
*ctrl
= (struct controller
*)dev_id
;
730 u32 serr_int
, slot_reg
, intr_loc
, intr_loc2
;
733 /* Check to see if it was our interrupt */
734 intr_loc
= shpc_readl(ctrl
, INTR_LOC
);
738 ctrl_dbg(ctrl
, "%s: intr_loc = %x\n", __func__
, intr_loc
);
740 if(!shpchp_poll_mode
) {
742 * Mask Global Interrupt Mask - see implementation
743 * note on p. 139 of SHPC spec rev 1.0
745 serr_int
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
746 serr_int
|= GLOBAL_INTR_MASK
;
747 serr_int
&= ~SERR_INTR_RSVDZ_MASK
;
748 shpc_writel(ctrl
, SERR_INTR_ENABLE
, serr_int
);
750 intr_loc2
= shpc_readl(ctrl
, INTR_LOC
);
751 ctrl_dbg(ctrl
, "%s: intr_loc2 = %x\n", __func__
, intr_loc2
);
754 if (intr_loc
& CMD_INTR_PENDING
) {
756 * Command Complete Interrupt Pending
757 * RO only - clear by writing 1 to the Command Completion
758 * Detect bit in Controller SERR-INT register
760 serr_int
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
761 serr_int
&= ~SERR_INTR_RSVDZ_MASK
;
762 shpc_writel(ctrl
, SERR_INTR_ENABLE
, serr_int
);
764 wake_up_interruptible(&ctrl
->queue
);
767 if (!(intr_loc
& ~CMD_INTR_PENDING
))
770 for (hp_slot
= 0; hp_slot
< ctrl
->num_slots
; hp_slot
++) {
771 /* To find out which slot has interrupt pending */
772 if (!(intr_loc
& SLOT_INTR_PENDING(hp_slot
)))
775 slot_reg
= shpc_readl(ctrl
, SLOT_REG(hp_slot
));
776 ctrl_dbg(ctrl
, "Slot %x with intr, slot register = %x\n",
779 if (slot_reg
& MRL_CHANGE_DETECTED
)
780 shpchp_handle_switch_change(hp_slot
, ctrl
);
782 if (slot_reg
& BUTTON_PRESS_DETECTED
)
783 shpchp_handle_attention_button(hp_slot
, ctrl
);
785 if (slot_reg
& PRSNT_CHANGE_DETECTED
)
786 shpchp_handle_presence_change(hp_slot
, ctrl
);
788 if (slot_reg
& (ISO_PFAULT_DETECTED
| CON_PFAULT_DETECTED
))
789 shpchp_handle_power_fault(hp_slot
, ctrl
);
791 /* Clear all slot events */
792 slot_reg
&= ~SLOT_REG_RSVDZ_MASK
;
793 shpc_writel(ctrl
, SLOT_REG(hp_slot
), slot_reg
);
796 if (!shpchp_poll_mode
) {
797 /* Unmask Global Interrupt Mask */
798 serr_int
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
799 serr_int
&= ~(GLOBAL_INTR_MASK
| SERR_INTR_RSVDZ_MASK
);
800 shpc_writel(ctrl
, SERR_INTR_ENABLE
, serr_int
);
806 static int hpc_get_max_bus_speed (struct slot
*slot
, enum pci_bus_speed
*value
)
809 struct controller
*ctrl
= slot
->ctrl
;
810 enum pci_bus_speed bus_speed
= PCI_SPEED_UNKNOWN
;
811 u8 pi
= shpc_readb(ctrl
, PROG_INTERFACE
);
812 u32 slot_avail1
= shpc_readl(ctrl
, SLOT_AVAIL1
);
813 u32 slot_avail2
= shpc_readl(ctrl
, SLOT_AVAIL2
);
816 if (slot_avail2
& SLOT_133MHZ_PCIX_533
)
817 bus_speed
= PCI_SPEED_133MHz_PCIX_533
;
818 else if (slot_avail2
& SLOT_100MHZ_PCIX_533
)
819 bus_speed
= PCI_SPEED_100MHz_PCIX_533
;
820 else if (slot_avail2
& SLOT_66MHZ_PCIX_533
)
821 bus_speed
= PCI_SPEED_66MHz_PCIX_533
;
822 else if (slot_avail2
& SLOT_133MHZ_PCIX_266
)
823 bus_speed
= PCI_SPEED_133MHz_PCIX_266
;
824 else if (slot_avail2
& SLOT_100MHZ_PCIX_266
)
825 bus_speed
= PCI_SPEED_100MHz_PCIX_266
;
826 else if (slot_avail2
& SLOT_66MHZ_PCIX_266
)
827 bus_speed
= PCI_SPEED_66MHz_PCIX_266
;
830 if (bus_speed
== PCI_SPEED_UNKNOWN
) {
831 if (slot_avail1
& SLOT_133MHZ_PCIX
)
832 bus_speed
= PCI_SPEED_133MHz_PCIX
;
833 else if (slot_avail1
& SLOT_100MHZ_PCIX
)
834 bus_speed
= PCI_SPEED_100MHz_PCIX
;
835 else if (slot_avail1
& SLOT_66MHZ_PCIX
)
836 bus_speed
= PCI_SPEED_66MHz_PCIX
;
837 else if (slot_avail2
& SLOT_66MHZ
)
838 bus_speed
= PCI_SPEED_66MHz
;
839 else if (slot_avail1
& SLOT_33MHZ
)
840 bus_speed
= PCI_SPEED_33MHz
;
846 ctrl_dbg(ctrl
, "Max bus speed = %d\n", bus_speed
);
851 static int hpc_get_cur_bus_speed (struct slot
*slot
, enum pci_bus_speed
*value
)
854 struct controller
*ctrl
= slot
->ctrl
;
855 enum pci_bus_speed bus_speed
= PCI_SPEED_UNKNOWN
;
856 u16 sec_bus_reg
= shpc_readw(ctrl
, SEC_BUS_CONFIG
);
857 u8 pi
= shpc_readb(ctrl
, PROG_INTERFACE
);
858 u8 speed_mode
= (pi
== 2) ? (sec_bus_reg
& 0xF) : (sec_bus_reg
& 0x7);
860 if ((pi
== 1) && (speed_mode
> 4)) {
861 *value
= PCI_SPEED_UNKNOWN
;
865 switch (speed_mode
) {
867 *value
= PCI_SPEED_33MHz
;
870 *value
= PCI_SPEED_66MHz
;
873 *value
= PCI_SPEED_66MHz_PCIX
;
876 *value
= PCI_SPEED_100MHz_PCIX
;
879 *value
= PCI_SPEED_133MHz_PCIX
;
882 *value
= PCI_SPEED_66MHz_PCIX_ECC
;
885 *value
= PCI_SPEED_100MHz_PCIX_ECC
;
888 *value
= PCI_SPEED_133MHz_PCIX_ECC
;
891 *value
= PCI_SPEED_66MHz_PCIX_266
;
894 *value
= PCI_SPEED_100MHz_PCIX_266
;
897 *value
= PCI_SPEED_133MHz_PCIX_266
;
900 *value
= PCI_SPEED_66MHz_PCIX_533
;
903 *value
= PCI_SPEED_100MHz_PCIX_533
;
906 *value
= PCI_SPEED_133MHz_PCIX_533
;
909 *value
= PCI_SPEED_UNKNOWN
;
914 ctrl_dbg(ctrl
, "Current bus speed = %d\n", bus_speed
);
918 static struct hpc_ops shpchp_hpc_ops
= {
919 .power_on_slot
= hpc_power_on_slot
,
920 .slot_enable
= hpc_slot_enable
,
921 .slot_disable
= hpc_slot_disable
,
922 .set_bus_speed_mode
= hpc_set_bus_speed_mode
,
923 .set_attention_status
= hpc_set_attention_status
,
924 .get_power_status
= hpc_get_power_status
,
925 .get_attention_status
= hpc_get_attention_status
,
926 .get_latch_status
= hpc_get_latch_status
,
927 .get_adapter_status
= hpc_get_adapter_status
,
929 .get_max_bus_speed
= hpc_get_max_bus_speed
,
930 .get_cur_bus_speed
= hpc_get_cur_bus_speed
,
931 .get_adapter_speed
= hpc_get_adapter_speed
,
932 .get_mode1_ECC_cap
= hpc_get_mode1_ECC_cap
,
933 .get_prog_int
= hpc_get_prog_int
,
935 .query_power_fault
= hpc_query_power_fault
,
936 .green_led_on
= hpc_set_green_led_on
,
937 .green_led_off
= hpc_set_green_led_off
,
938 .green_led_blink
= hpc_set_green_led_blink
,
940 .release_ctlr
= hpc_release_ctlr
,
943 int shpc_init(struct controller
*ctrl
, struct pci_dev
*pdev
)
945 int rc
= -1, num_slots
= 0;
947 u32 shpc_base_offset
;
948 u32 tempdword
, slot_reg
, slot_config
;
951 ctrl
->pci_dev
= pdev
; /* pci_dev of the P2P bridge */
952 ctrl_dbg(ctrl
, "Hotplug Controller:\n");
954 if ((pdev
->vendor
== PCI_VENDOR_ID_AMD
) || (pdev
->device
==
955 PCI_DEVICE_ID_AMD_GOLAM_7450
)) {
956 /* amd shpc driver doesn't use Base Offset; assume 0 */
957 ctrl
->mmio_base
= pci_resource_start(pdev
, 0);
958 ctrl
->mmio_size
= pci_resource_len(pdev
, 0);
960 ctrl
->cap_offset
= pci_find_capability(pdev
, PCI_CAP_ID_SHPC
);
961 if (!ctrl
->cap_offset
) {
962 ctrl_err(ctrl
, "Cannot find PCI capability\n");
965 ctrl_dbg(ctrl
, " cap_offset = %x\n", ctrl
->cap_offset
);
967 rc
= shpc_indirect_read(ctrl
, 0, &shpc_base_offset
);
969 ctrl_err(ctrl
, "Cannot read base_offset\n");
973 rc
= shpc_indirect_read(ctrl
, 3, &tempdword
);
975 ctrl_err(ctrl
, "Cannot read slot config\n");
978 num_slots
= tempdword
& SLOT_NUM
;
979 ctrl_dbg(ctrl
, " num_slots (indirect) %x\n", num_slots
);
981 for (i
= 0; i
< 9 + num_slots
; i
++) {
982 rc
= shpc_indirect_read(ctrl
, i
, &tempdword
);
985 "Cannot read creg (index = %d)\n", i
);
988 ctrl_dbg(ctrl
, " offset %d: value %x\n", i
, tempdword
);
992 pci_resource_start(pdev
, 0) + shpc_base_offset
;
993 ctrl
->mmio_size
= 0x24 + 0x4 * num_slots
;
996 ctrl_info(ctrl
, "HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n",
997 pdev
->vendor
, pdev
->device
, pdev
->subsystem_vendor
,
998 pdev
->subsystem_device
);
1000 rc
= pci_enable_device(pdev
);
1002 ctrl_err(ctrl
, "pci_enable_device failed\n");
1006 if (!request_mem_region(ctrl
->mmio_base
, ctrl
->mmio_size
, MY_NAME
)) {
1007 ctrl_err(ctrl
, "Cannot reserve MMIO region\n");
1012 ctrl
->creg
= ioremap(ctrl
->mmio_base
, ctrl
->mmio_size
);
1014 ctrl_err(ctrl
, "Cannot remap MMIO region %lx @ %lx\n",
1015 ctrl
->mmio_size
, ctrl
->mmio_base
);
1016 release_mem_region(ctrl
->mmio_base
, ctrl
->mmio_size
);
1020 ctrl_dbg(ctrl
, "ctrl->creg %p\n", ctrl
->creg
);
1022 mutex_init(&ctrl
->crit_sect
);
1023 mutex_init(&ctrl
->cmd_lock
);
1025 /* Setup wait queue */
1026 init_waitqueue_head(&ctrl
->queue
);
1028 ctrl
->hpc_ops
= &shpchp_hpc_ops
;
1030 /* Return PCI Controller Info */
1031 slot_config
= shpc_readl(ctrl
, SLOT_CONFIG
);
1032 ctrl
->slot_device_offset
= (slot_config
& FIRST_DEV_NUM
) >> 8;
1033 ctrl
->num_slots
= slot_config
& SLOT_NUM
;
1034 ctrl
->first_slot
= (slot_config
& PSN
) >> 16;
1035 ctrl
->slot_num_inc
= ((slot_config
& UPDOWN
) >> 29) ? 1 : -1;
1037 /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */
1038 tempdword
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
1039 ctrl_dbg(ctrl
, "SERR_INTR_ENABLE = %x\n", tempdword
);
1040 tempdword
|= (GLOBAL_INTR_MASK
| GLOBAL_SERR_MASK
|
1041 COMMAND_INTR_MASK
| ARBITER_SERR_MASK
);
1042 tempdword
&= ~SERR_INTR_RSVDZ_MASK
;
1043 shpc_writel(ctrl
, SERR_INTR_ENABLE
, tempdword
);
1044 tempdword
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
1045 ctrl_dbg(ctrl
, "SERR_INTR_ENABLE = %x\n", tempdword
);
1047 /* Mask the MRL sensor SERR Mask of individual slot in
1048 * Slot SERR-INT Mask & clear all the existing event if any
1050 for (hp_slot
= 0; hp_slot
< ctrl
->num_slots
; hp_slot
++) {
1051 slot_reg
= shpc_readl(ctrl
, SLOT_REG(hp_slot
));
1052 ctrl_dbg(ctrl
, "Default Logical Slot Register %d value %x\n",
1054 slot_reg
|= (PRSNT_CHANGE_INTR_MASK
| ISO_PFAULT_INTR_MASK
|
1055 BUTTON_PRESS_INTR_MASK
| MRL_CHANGE_INTR_MASK
|
1056 CON_PFAULT_INTR_MASK
| MRL_CHANGE_SERR_MASK
|
1057 CON_PFAULT_SERR_MASK
);
1058 slot_reg
&= ~SLOT_REG_RSVDZ_MASK
;
1059 shpc_writel(ctrl
, SLOT_REG(hp_slot
), slot_reg
);
1062 if (shpchp_poll_mode
) {
1063 /* Install interrupt polling timer. Start with 10 sec delay */
1064 init_timer(&ctrl
->poll_timer
);
1065 start_int_poll_timer(ctrl
, 10);
1067 /* Installs the interrupt handler */
1068 rc
= pci_enable_msi(pdev
);
1071 "Can't get msi for the hotplug controller\n");
1073 "Use INTx for the hotplug controller\n");
1076 rc
= request_irq(ctrl
->pci_dev
->irq
, shpc_isr
, IRQF_SHARED
,
1077 MY_NAME
, (void *)ctrl
);
1078 ctrl_dbg(ctrl
, "request_irq %d for hpc%d (returns %d)\n",
1080 atomic_read(&shpchp_num_controllers
), rc
);
1082 ctrl_err(ctrl
, "Can't get irq %d for the hotplug "
1083 "controller\n", ctrl
->pci_dev
->irq
);
1087 ctrl_dbg(ctrl
, "HPC at %s irq=%x\n", pci_name(pdev
), pdev
->irq
);
1090 * If this is the first controller to be initialized,
1091 * initialize the shpchpd work queue
1093 if (atomic_add_return(1, &shpchp_num_controllers
) == 1) {
1094 shpchp_wq
= create_singlethread_workqueue("shpchpd");
1102 * Unmask all event interrupts of all slots
1104 for (hp_slot
= 0; hp_slot
< ctrl
->num_slots
; hp_slot
++) {
1105 slot_reg
= shpc_readl(ctrl
, SLOT_REG(hp_slot
));
1106 ctrl_dbg(ctrl
, "Default Logical Slot Register %d value %x\n",
1108 slot_reg
&= ~(PRSNT_CHANGE_INTR_MASK
| ISO_PFAULT_INTR_MASK
|
1109 BUTTON_PRESS_INTR_MASK
| MRL_CHANGE_INTR_MASK
|
1110 CON_PFAULT_INTR_MASK
| SLOT_REG_RSVDZ_MASK
);
1111 shpc_writel(ctrl
, SLOT_REG(hp_slot
), slot_reg
);
1113 if (!shpchp_poll_mode
) {
1114 /* Unmask all general input interrupts and SERR */
1115 tempdword
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
1116 tempdword
&= ~(GLOBAL_INTR_MASK
| COMMAND_INTR_MASK
|
1117 SERR_INTR_RSVDZ_MASK
);
1118 shpc_writel(ctrl
, SERR_INTR_ENABLE
, tempdword
);
1119 tempdword
= shpc_readl(ctrl
, SERR_INTR_ENABLE
);
1120 ctrl_dbg(ctrl
, "SERR_INTR_ENABLE = %x\n", tempdword
);
1125 /* We end up here for the many possible ways to fail this API. */
1127 iounmap(ctrl
->creg
);