Browse Source

[PATCH] shpchp: Mask Global SERR and Intr at controller release time

Global SERR and Interrupt should be masked at shpchp driver unload time.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Cc: Kristen Accardi <kristen.c.accardi@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Kenji Kaneshige 19 years ago
parent
commit
d49f2c49c3
1 changed files with 10 additions and 1 deletions
  1. 10 1
      drivers/pci/hotplug/shpchp_hpc.c

+ 10 - 1
drivers/pci/hotplug/shpchp_hpc.c

@@ -798,7 +798,7 @@ static void hpc_release_ctlr(struct controller *ctrl)
 	struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
 	struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
 	struct php_ctlr_state_s *p, *p_prev;
 	struct php_ctlr_state_s *p, *p_prev;
 	int i;
 	int i;
-	u32 slot_reg;
+	u32 slot_reg, serr_int;
 
 
 	DBG_ENTER_ROUTINE 
 	DBG_ENTER_ROUTINE 
 
 
@@ -822,6 +822,15 @@ static void hpc_release_ctlr(struct controller *ctrl)
 
 
 	cleanup_slots(ctrl);
 	cleanup_slots(ctrl);
 
 
+	/*
+	 * Mask SERR and System Interrut generation
+	 */
+	serr_int = shpc_readl(ctrl, SERR_INTR_ENABLE);
+	serr_int |= (GLOBAL_INTR_MASK  | GLOBAL_SERR_MASK |
+		     COMMAND_INTR_MASK | ARBITER_SERR_MASK);
+	serr_int &= ~SERR_INTR_RSVDZ_MASK;
+	shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
+
 	if (shpchp_poll_mode) {
 	if (shpchp_poll_mode) {
 	    del_timer(&php_ctlr->int_poll_timer);
 	    del_timer(&php_ctlr->int_poll_timer);
 	} else {	
 	} else {