[PATCH] shpchp: Mask Global SERR and Intr at controller release time
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Wed, 3 May 2006 14:34:17 +0000 (23:34 +0900)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 19 Jun 2006 21:13:23 +0000 (14:13 -0700)
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>
drivers/pci/hotplug/shpchp_hpc.c

index e2a8671..8b63f77 100644 (file)
@@ -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 *p, *p_prev;
        int i;
-       u32 slot_reg;
+       u32 slot_reg, serr_int;
 
        DBG_ENTER_ROUTINE 
 
@@ -822,6 +822,15 @@ static void hpc_release_ctlr(struct controller *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) {
            del_timer(&php_ctlr->int_poll_timer);
        } else {