aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/hotplug/shpchp_hpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/hotplug/shpchp_hpc.c')
-rw-r--r--drivers/pci/hotplug/shpchp_hpc.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pci/hotplug/shpchp_hpc.c b/drivers/pci/hotplug/shpchp_hpc.c
index 943ed2b4dabe..b392606a905a 100644
--- a/drivers/pci/hotplug/shpchp_hpc.c
+++ b/drivers/pci/hotplug/shpchp_hpc.c
@@ -813,6 +813,7 @@ static void hpc_release_ctlr(struct controller *ctrl)
813{ 813{
814 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; 814 struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
815 struct php_ctlr_state_s *p, *p_prev; 815 struct php_ctlr_state_s *p, *p_prev;
816 int i;
816 817
817 DBG_ENTER_ROUTINE 818 DBG_ENTER_ROUTINE
818 819
@@ -821,6 +822,14 @@ static void hpc_release_ctlr(struct controller *ctrl)
821 return ; 822 return ;
822 } 823 }
823 824
825 /*
826 * Mask all slot event interrupts
827 */
828 for (i = 0; i < ctrl->num_slots; i++)
829 writel(0xffff3fff, php_ctlr->creg + SLOT1 + (4 * i));
830
831 cleanup_slots(ctrl);
832
824 if (shpchp_poll_mode) { 833 if (shpchp_poll_mode) {
825 del_timer(&php_ctlr->int_poll_timer); 834 del_timer(&php_ctlr->int_poll_timer);
826 } else { 835 } else {
@@ -830,6 +839,7 @@ static void hpc_release_ctlr(struct controller *ctrl)
830 pci_disable_msi(php_ctlr->pci_dev); 839 pci_disable_msi(php_ctlr->pci_dev);
831 } 840 }
832 } 841 }
842
833 if (php_ctlr->pci_dev) { 843 if (php_ctlr->pci_dev) {
834 iounmap(php_ctlr->creg); 844 iounmap(php_ctlr->creg);
835 release_mem_region(ctrl->mmio_base, ctrl->mmio_size); 845 release_mem_region(ctrl->mmio_base, ctrl->mmio_size);