]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Oct 2008 02:31:34 +0000 (19:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Oct 2008 02:31:34 +0000 (19:31 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
  PCI: remove unused resource assignment in pci_read_bridge_bases()
  PCI hotplug: shpchp: message refinement
  PCI hotplug: shpchp: replace printk with dev_printk
  PCI: add routines for debugging and handling lost interrupts
  PCI hotplug: pciehp: message refinement
  PCI: fix ARI code to be compatible with mixed ARI/non-ARI systems
  PCI hotplug: cpqphp: fix kernel NULL pointer dereference

16 files changed:
drivers/pci/Makefile
drivers/pci/hotplug/cpqphp_core.c
drivers/pci/hotplug/pciehp.h
drivers/pci/hotplug/pciehp_core.c
drivers/pci/hotplug/pciehp_ctrl.c
drivers/pci/hotplug/pciehp_hpc.c
drivers/pci/hotplug/pciehp_pci.c
drivers/pci/hotplug/shpchp.h
drivers/pci/hotplug/shpchp_core.c
drivers/pci/hotplug/shpchp_ctrl.c
drivers/pci/hotplug/shpchp_hpc.c
drivers/pci/hotplug/shpchp_pci.c
drivers/pci/irq.c [new file with mode: 0644]
drivers/pci/pci.c
drivers/pci/probe.c
include/linux/pci.h

index 4b47f4ece5b70904c9ef68c06f468489ec70939a..af3bfe22847bf00fdd5eec95ffb44ad8e8738c26 100644 (file)
@@ -3,7 +3,8 @@
 #
 
 obj-y          += access.o bus.o probe.o remove.o pci.o quirks.o slot.o \
-                       pci-driver.o search.o pci-sysfs.o rom.o setup-res.o
+                       pci-driver.o search.o pci-sysfs.o rom.o setup-res.o \
+                       irq.o
 obj-$(CONFIG_PROC_FS) += proc.o
 
 # Build PCI Express stuff if needed
index 724d42c4adbcbcd1b80edf6614d6df377ccbe8df..8514c3a1746a6c15e4ff3db1dd43b7c1dcefdee2 100644 (file)
@@ -433,7 +433,7 @@ static int ctrl_slot_setup(struct controller *ctrl,
                                slot->number, ctrl->slot_device_offset,
                                slot_number);
                result = pci_hp_register(hotplug_slot,
-                                        ctrl->pci_dev->subordinate,
+                                        ctrl->pci_dev->bus,
                                         slot->device,
                                         name);
                if (result) {
index a4817a841faea5f6c3e148fd1991d50fa77b5aa0..b2801a7ee37f8d14864f6275181f2616bd8e7fd1 100644 (file)
@@ -188,7 +188,7 @@ static inline struct slot *pciehp_find_slot(struct controller *ctrl, u8 device)
                        return slot;
        }
 
-       ctrl_err(ctrl, "%s: slot (device=0x%x) not found\n", __func__, device);
+       ctrl_err(ctrl, "Slot (device=0x%02x) not found\n", device);
        return NULL;
 }
 
index 62be1b59c74b0843ed0c9c599e145a0b51dedba8..4b23bc39b11e513be82a54df9f01db2b268b5bb4 100644 (file)
@@ -184,7 +184,7 @@ static void release_slot(struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = hotplug_slot->private;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, hotplug_slot_name(hotplug_slot));
 
        kfree(hotplug_slot->info);
@@ -216,9 +216,11 @@ static int init_slots(struct controller *ctrl)
                slot->hotplug_slot = hotplug_slot;
                snprintf(name, SLOT_NAME_SIZE, "%u", slot->number);
 
-               ctrl_dbg(ctrl, "Registering bus=%x dev=%x hp_slot=%x sun=%x "
-                        "slot_device_offset=%x\n", slot->bus, slot->device,
-                        slot->hp_slot, slot->number, ctrl->slot_device_offset);
+               ctrl_dbg(ctrl, "Registering domain:bus:dev=%04x:%02x:%02x "
+                        "hp_slot=%x sun=%x slot_device_offset=%x\n",
+                        pci_domain_nr(ctrl->pci_dev->subordinate),
+                        slot->bus, slot->device, slot->hp_slot, slot->number,
+                        ctrl->slot_device_offset);
                retval = pci_hp_register(hotplug_slot,
                                         ctrl->pci_dev->subordinate,
                                         slot->device,
@@ -238,7 +240,7 @@ static int init_slots(struct controller *ctrl)
                                &hotplug_slot_attr_lock.attr);
                        if (retval) {
                                pci_hp_deregister(hotplug_slot);
-                               ctrl_err(ctrl, "cannot create additional sysfs "
+                               ctrl_err(ctrl, "Cannot create additional sysfs "
                                         "entries\n");
                                goto error_info;
                        }
@@ -273,7 +275,7 @@ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
 {
        struct slot *slot = hotplug_slot->private;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                  __func__, slot_name(slot));
 
        hotplug_slot->info->attention_status = status;
@@ -289,7 +291,7 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = hotplug_slot->private;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, slot_name(slot));
 
        return pciehp_sysfs_enable_slot(slot);
@@ -300,7 +302,7 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = hotplug_slot->private;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                  __func__, slot_name(slot));
 
        return pciehp_sysfs_disable_slot(slot);
@@ -311,7 +313,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                  __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_power_status(slot, value);
@@ -326,7 +328,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                  __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_attention_status(slot, value);
@@ -341,7 +343,7 @@ static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_latch_status(slot, value);
@@ -356,7 +358,7 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_adapter_status(slot, value);
@@ -372,7 +374,7 @@ static int get_max_bus_speed(struct hotplug_slot *hotplug_slot,
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_max_bus_speed(slot, value);
@@ -387,7 +389,7 @@ static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_spe
        struct slot *slot = hotplug_slot->private;
        int retval;
 
-       ctrl_dbg(slot->ctrl, "%s - physical_slot = %s\n",
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
                 __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_cur_bus_speed(slot, value);
@@ -414,7 +416,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
 
        ctrl = pcie_init(dev);
        if (!ctrl) {
-               dev_err(&dev->device, "controller initialization failed\n");
+               dev_err(&dev->device, "Controller initialization failed\n");
                goto err_out_none;
        }
        set_service_data(dev, ctrl);
@@ -423,10 +425,10 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
        rc = init_slots(ctrl);
        if (rc) {
                if (rc == -EBUSY)
-                       ctrl_warn(ctrl, "slot already registered by another "
+                       ctrl_warn(ctrl, "Slot already registered by another "
                                  "hotplug driver\n");
                else
-                       ctrl_err(ctrl, "slot initialization failed\n");
+                       ctrl_err(ctrl, "Slot initialization failed\n");
                goto err_out_release_ctlr;
        }
 
@@ -523,7 +525,7 @@ static int __init pcied_init(void)
        dbg("pcie_port_service_register = %d\n", retval);
        info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
        if (retval)
-               dbg("%s: Failure to register service\n", __func__);
+               dbg("Failure to register service\n");
        return retval;
 }
 
index d6c5eb2977530f34e18b51001f4fa3285353f641..fead63c6b49ec676fda835c2fa04b2b6fd348d22 100644 (file)
@@ -61,7 +61,7 @@ u8 pciehp_handle_attention_button(struct slot *p_slot)
        struct controller *ctrl = p_slot->ctrl;
 
        /* Attention Button Change */
-       ctrl_dbg(ctrl, "Attention button interrupt received.\n");
+       ctrl_dbg(ctrl, "Attention button interrupt received\n");
 
        /*
         *  Button pressed - See if need to TAKE ACTION!!!
@@ -81,7 +81,7 @@ u8 pciehp_handle_switch_change(struct slot *p_slot)
        struct controller *ctrl = p_slot->ctrl;
 
        /* Switch Change */
-       ctrl_dbg(ctrl, "Switch interrupt received.\n");
+       ctrl_dbg(ctrl, "Switch interrupt received\n");
 
        p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
        if (getstatus) {
@@ -110,7 +110,7 @@ u8 pciehp_handle_presence_change(struct slot *p_slot)
        struct controller *ctrl = p_slot->ctrl;
 
        /* Presence Change */
-       ctrl_dbg(ctrl, "Presence/Notify input change.\n");
+       ctrl_dbg(ctrl, "Presence/Notify input change\n");
 
        /* Switch is open, assume a presence change
         * Save the presence state
@@ -142,7 +142,7 @@ u8 pciehp_handle_power_fault(struct slot *p_slot)
        struct controller *ctrl = p_slot->ctrl;
 
        /* power fault */
-       ctrl_dbg(ctrl, "Power fault interrupt received.\n");
+       ctrl_dbg(ctrl, "Power fault interrupt received\n");
 
        if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) {
                /*
@@ -157,7 +157,7 @@ u8 pciehp_handle_power_fault(struct slot *p_slot)
                 */
                ctrl_info(ctrl, "Power fault on Slot(%s)\n", slot_name(p_slot));
                event_type = INT_POWER_FAULT;
-               ctrl_info(ctrl, "power fault bit %x set\n", 0);
+               ctrl_info(ctrl, "Power fault bit %x set\n", 0);
        }
 
        queue_interrupt_event(p_slot, event_type);
@@ -175,8 +175,7 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot)
        if (POWER_CTRL(ctrl)) {
                if (pslot->hpc_ops->power_off_slot(pslot)) {
                        ctrl_err(ctrl,
-                                "%s: Issue of Slot Power Off command failed\n",
-                                __func__);
+                                "Issue of Slot Power Off command failed\n");
                        return;
                }
        }
@@ -193,8 +192,8 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot)
 
        if (ATTN_LED(ctrl)) {
                if (pslot->hpc_ops->set_attention_status(pslot, 1)) {
-                       ctrl_err(ctrl, "%s: Issue of Set Attention "
-                                "Led command failed\n", __func__);
+                       ctrl_err(ctrl,
+                                "Issue of Set Attention Led command failed\n");
                        return;
                }
        }
@@ -211,8 +210,9 @@ static int board_added(struct slot *p_slot)
 {
        int retval = 0;
        struct controller *ctrl = p_slot->ctrl;
+       struct pci_bus *parent = ctrl->pci_dev->subordinate;
 
-       ctrl_dbg(ctrl, "%s: slot device, slot offset, hp slot = %d, %d ,%d\n",
+       ctrl_dbg(ctrl, "%s: slot device, slot offset, hp slot = %d, %d%d\n",
                 __func__, p_slot->device, ctrl->slot_device_offset,
                 p_slot->hp_slot);
 
@@ -229,22 +229,22 @@ static int board_added(struct slot *p_slot)
        /* Check link training status */
        retval = p_slot->hpc_ops->check_lnk_status(ctrl);
        if (retval) {
-               ctrl_err(ctrl, "%s: Failed to check link status\n", __func__);
+               ctrl_err(ctrl, "Failed to check link status\n");
                set_slot_off(ctrl, p_slot);
                return retval;
        }
 
        /* Check for a power fault */
        if (p_slot->hpc_ops->query_power_fault(p_slot)) {
-               ctrl_dbg(ctrl, "%s: power fault detected\n", __func__);
+               ctrl_dbg(ctrl, "Power fault detected\n");
                retval = POWER_FAILURE;
                goto err_exit;
        }
 
        retval = pciehp_configure_device(p_slot);
        if (retval) {
-               ctrl_err(ctrl, "Cannot add device 0x%x:%x\n",
-                        p_slot->bus, p_slot->device);
+               ctrl_err(ctrl, "Cannot add device at %04x:%02x:%02x\n",
+                        pci_domain_nr(parent), p_slot->bus, p_slot->device);
                goto err_exit;
        }
 
@@ -276,14 +276,14 @@ static int remove_board(struct slot *p_slot)
        if (retval)
                return retval;
 
-       ctrl_dbg(ctrl, "In %s, hp_slot = %d\n", __func__, p_slot->hp_slot);
+       ctrl_dbg(ctrl, "%s: hp_slot = %d\n", __func__, p_slot->hp_slot);
 
        if (POWER_CTRL(ctrl)) {
                /* power off slot */
                retval = p_slot->hpc_ops->power_off_slot(p_slot);
                if (retval) {
-                       ctrl_err(ctrl, "%s: Issue of Slot Disable command "
-                                "failed\n", __func__);
+                       ctrl_err(ctrl,
+                                "Issue of Slot Disable command failed\n");
                        return retval;
                }
        }
@@ -324,8 +324,10 @@ static void pciehp_power_thread(struct work_struct *work)
        switch (p_slot->state) {
        case POWEROFF_STATE:
                mutex_unlock(&p_slot->lock);
-               ctrl_dbg(p_slot->ctrl, "%s: disabling bus:device(%x:%x)\n",
-                        __func__, p_slot->bus, p_slot->device);
+               ctrl_dbg(p_slot->ctrl,
+                        "Disabling domain:bus:device=%04x:%02x:%02x\n",
+                        pci_domain_nr(p_slot->ctrl->pci_dev->subordinate),
+                        p_slot->bus, p_slot->device);
                pciehp_disable_slot(p_slot);
                mutex_lock(&p_slot->lock);
                p_slot->state = STATIC_STATE;
@@ -433,7 +435,6 @@ static void handle_button_press_event(struct slot *p_slot)
                 * expires to cancel hot-add or hot-remove
                 */
                ctrl_info(ctrl, "Button cancel on Slot(%s)\n", slot_name(p_slot));
-               ctrl_dbg(ctrl, "%s: button cancel\n", __func__);
                cancel_delayed_work(&p_slot->work);
                if (p_slot->state == BLINKINGOFF_STATE) {
                        if (PWR_LED(ctrl))
@@ -537,16 +538,15 @@ int pciehp_enable_slot(struct slot *p_slot)
 
        rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
        if (rc || !getstatus) {
-               ctrl_info(ctrl, "%s: no adapter on slot(%s)\n",
-                         __func__, slot_name(p_slot));
+               ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot));
                mutex_unlock(&p_slot->ctrl->crit_sect);
                return -ENODEV;
        }
        if (MRL_SENS(p_slot->ctrl)) {
                rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
                if (rc || getstatus) {
-                       ctrl_info(ctrl, "%s: latch open on slot(%s)\n",
-                                 __func__, slot_name(p_slot));
+                       ctrl_info(ctrl, "Latch open on slot(%s)\n",
+                                 slot_name(p_slot));
                        mutex_unlock(&p_slot->ctrl->crit_sect);
                        return -ENODEV;
                }
@@ -555,8 +555,8 @@ int pciehp_enable_slot(struct slot *p_slot)
        if (POWER_CTRL(p_slot->ctrl)) {
                rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
                if (rc || getstatus) {
-                       ctrl_info(ctrl, "%s: already enabled on slot(%s)\n",
-                                 __func__, slot_name(p_slot));
+                       ctrl_info(ctrl, "Already enabled on slot(%s)\n",
+                                 slot_name(p_slot));
                        mutex_unlock(&p_slot->ctrl->crit_sect);
                        return -EINVAL;
                }
@@ -591,8 +591,8 @@ int pciehp_disable_slot(struct slot *p_slot)
        if (!HP_SUPR_RM(p_slot->ctrl)) {
                ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
                if (ret || !getstatus) {
-                       ctrl_info(ctrl, "%s: no adapter on slot(%s)\n",
-                                 __func__, slot_name(p_slot));
+                       ctrl_info(ctrl, "No adapter on slot(%s)\n",
+                                 slot_name(p_slot));
                        mutex_unlock(&p_slot->ctrl->crit_sect);
                        return -ENODEV;
                }
@@ -601,8 +601,8 @@ int pciehp_disable_slot(struct slot *p_slot)
        if (MRL_SENS(p_slot->ctrl)) {
                ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
                if (ret || getstatus) {
-                       ctrl_info(ctrl, "%s: latch open on slot(%s)\n",
-                                 __func__, slot_name(p_slot));
+                       ctrl_info(ctrl, "Latch open on slot(%s)\n",
+                                 slot_name(p_slot));
                        mutex_unlock(&p_slot->ctrl->crit_sect);
                        return -ENODEV;
                }
@@ -611,8 +611,8 @@ int pciehp_disable_slot(struct slot *p_slot)
        if (POWER_CTRL(p_slot->ctrl)) {
                ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
                if (ret || !getstatus) {
-                       ctrl_info(ctrl, "%s: already disabled slot(%s)\n",
-                                 __func__, slot_name(p_slot));
+                       ctrl_info(ctrl, "Already disabled on slot(%s)\n",
+                                 slot_name(p_slot));
                        mutex_unlock(&p_slot->ctrl->crit_sect);
                        return -EINVAL;
                }
index 58c72d2cc2179b4039911050158cc5a5074c4a8f..b643ca13e4f128b14ad8fe1eea1cff90506bf47c 100644 (file)
@@ -316,22 +316,19 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
                         * proceed forward to issue the next command according
                         * to spec. Just print out the error message.
                         */
-                       ctrl_dbg(ctrl,
-                                "%s: CMD_COMPLETED not clear after 1 sec.\n",
-                                __func__);
+                       ctrl_dbg(ctrl, "CMD_COMPLETED not clear after 1 sec\n");
                } else if (!NO_CMD_CMPL(ctrl)) {
                        /*
                         * This controller semms to notify of command completed
                         * event even though it supports none of power
                         * controller, attention led, power led and EMI.
                         */
-                       ctrl_dbg(ctrl, "%s: Unexpected CMD_COMPLETED. Need to "
-                                "wait for command completed event.\n",
-                                __func__);
+                       ctrl_dbg(ctrl, "Unexpected CMD_COMPLETED. Need to "
+                                "wait for command completed event.\n");
                        ctrl->no_cmd_complete = 0;
                } else {
-                       ctrl_dbg(ctrl, "%s: Unexpected CMD_COMPLETED. Maybe "
-                                "the controller is broken.\n", __func__);
+                       ctrl_dbg(ctrl, "Unexpected CMD_COMPLETED. Maybe "
+                                "the controller is broken.\n");
                }
        }
 
@@ -347,8 +344,7 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
        smp_mb();
        retval = pciehp_writew(ctrl, SLOTCTRL, slot_ctrl);
        if (retval)
-               ctrl_err(ctrl, "%s: Cannot write to SLOTCTRL register\n",
-                        __func__);
+               ctrl_err(ctrl, "Cannot write to SLOTCTRL register\n");
 
        /*
         * Wait for command completion.
@@ -418,15 +414,14 @@ static int hpc_check_lnk_status(struct controller *ctrl)
 
        retval = pciehp_readw(ctrl, LNKSTATUS, &lnk_status);
        if (retval) {
-               ctrl_err(ctrl, "%s: Cannot read LNKSTATUS register\n",
-                        __func__);
+               ctrl_err(ctrl, "Cannot read LNKSTATUS register\n");
                return retval;
        }
 
        ctrl_dbg(ctrl, "%s: lnk_status = %x\n", __func__, lnk_status);
        if ( (lnk_status & LNK_TRN) || (lnk_status & LNK_TRN_ERR) ||
                !(lnk_status & NEG_LINK_WD)) {
-               ctrl_err(ctrl, "%s : Link Training Error occurs \n", __func__);
+               ctrl_err(ctrl, "Link Training Error occurs \n");
                retval = -1;
                return retval;
        }
@@ -551,7 +546,7 @@ static int hpc_query_power_fault(struct slot *slot)
 
        retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
        if (retval) {
-               ctrl_err(ctrl, "%s: Cannot check for power fault\n", __func__);
+               ctrl_err(ctrl, "Cannot check for power fault\n");
                return retval;
        }
        pwr_fault = (u8)((slot_status & PWR_FAULT_DETECTED) >> 1);
@@ -567,7 +562,7 @@ static int hpc_get_emi_status(struct slot *slot, u8 *status)
 
        retval = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);
        if (retval) {
-               ctrl_err(ctrl, "%s : Cannot check EMI status\n", __func__);
+               ctrl_err(ctrl, "Cannot check EMI status\n");
                return retval;
        }
        *status = (slot_status & EMI_STATE) >> EMI_STATUS_BIT;
@@ -697,8 +692,7 @@ static int hpc_power_on_slot(struct slot * slot)
        retval = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
 
        if (retval) {
-               ctrl_err(ctrl, "%s: Write %x command failed!\n",
-                        __func__, slot_cmd);
+               ctrl_err(ctrl, "Write %x command failed!\n", slot_cmd);
                return -1;
        }
        ctrl_dbg(ctrl, "%s: SLOTCTRL %x write cmd %x\n",
@@ -776,7 +770,7 @@ static int hpc_power_off_slot(struct slot * slot)
 
        retval = pcie_write_cmd(ctrl, slot_cmd, cmd_mask);
        if (retval) {
-               ctrl_err(ctrl, "%s: Write command failed!\n", __func__);
+               ctrl_err(ctrl, "Write command failed!\n");
                retval = -1;
                goto out;
        }
@@ -1056,8 +1050,7 @@ int pcie_enable_notification(struct controller *ctrl)
               PWR_FAULT_DETECT_ENABLE | HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE;
 
        if (pcie_write_cmd(ctrl, cmd, mask)) {
-               ctrl_err(ctrl, "%s: Cannot enable software notification\n",
-                        __func__);
+               ctrl_err(ctrl, "Cannot enable software notification\n");
                return -1;
        }
        return 0;
@@ -1069,8 +1062,7 @@ static void pcie_disable_notification(struct controller *ctrl)
        mask = PRSN_DETECT_ENABLE | ATTN_BUTTN_ENABLE | MRL_DETECT_ENABLE |
               PWR_FAULT_DETECT_ENABLE | HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE;
        if (pcie_write_cmd(ctrl, 0, mask))
-               ctrl_warn(ctrl, "%s: Cannot disable software notification\n",
-                         __func__);
+               ctrl_warn(ctrl, "Cannot disable software notification\n");
 }
 
 static int pcie_init_notification(struct controller *ctrl)
@@ -1179,7 +1171,7 @@ struct controller *pcie_init(struct pcie_device *dev)
 
        ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
        if (!ctrl) {
-               dev_err(&dev->device, "%s : out of memory\n", __func__);
+               dev_err(&dev->device, "%s: Out of memory\n", __func__);
                goto abort;
        }
        INIT_LIST_HEAD(&ctrl->slot_list);
@@ -1188,12 +1180,11 @@ struct controller *pcie_init(struct pcie_device *dev)
        ctrl->pci_dev = pdev;
        ctrl->cap_base = pci_find_capability(pdev, PCI_CAP_ID_EXP);
        if (!ctrl->cap_base) {
-               ctrl_err(ctrl, "%s: Cannot find PCI Express capability\n",
-                        __func__);
+               ctrl_err(ctrl, "Cannot find PCI Express capability\n");
                goto abort_ctrl;
        }
        if (pciehp_readl(ctrl, SLOTCAP, &slot_cap)) {
-               ctrl_err(ctrl, "%s: Cannot read SLOTCAP register\n", __func__);
+               ctrl_err(ctrl, "Cannot read SLOTCAP register\n");
                goto abort_ctrl;
        }
 
index ffd11148fbe21416149b5e600834f4ff5f8c054b..10f9566cceeb662dd8db9abfef7abdbd4d67ba8d 100644 (file)
@@ -39,8 +39,7 @@ static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
        u16 pci_cmd, pci_bctl;
 
        if (hpp->revision > 1) {
-               printk(KERN_WARNING "%s: Rev.%d type0 record not supported\n",
-                      __func__, hpp->revision);
+               warn("Rev.%d type0 record not supported\n", hpp->revision);
                return;
        }
 
@@ -81,8 +80,7 @@ static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
        u32 reg32;
 
        if (hpp->revision > 1) {
-               printk(KERN_WARNING "%s: Rev.%d type2 record not supported\n",
-                      __func__, hpp->revision);
+               warn("Rev.%d type2 record not supported\n", hpp->revision);
                return;
        }
 
@@ -149,8 +147,7 @@ static void program_fw_provided_values(struct pci_dev *dev)
                return;
 
        if (pciehp_get_hp_params_from_firmware(dev, &hpp)) {
-               printk(KERN_WARNING "%s: Could not get hotplug parameters\n",
-                      __func__);
+               warn("Could not get hotplug parameters\n");
                return;
        }
 
@@ -202,9 +199,9 @@ int pciehp_configure_device(struct slot *p_slot)
 
        dev = pci_get_slot(parent, PCI_DEVFN(p_slot->device, 0));
        if (dev) {
-               ctrl_err(ctrl,
-                        "Device %s already exists at %x:%x, cannot hot-add\n",
-                        pci_name(dev), p_slot->bus, p_slot->device);
+               ctrl_err(ctrl, "Device %s already exists "
+                        "at %04x:%02x:%02x, cannot hot-add\n", pci_name(dev),
+                        pci_domain_nr(parent), p_slot->bus, p_slot->device);
                pci_dev_put(dev);
                return -EINVAL;
        }
@@ -248,8 +245,8 @@ int pciehp_unconfigure_device(struct slot *p_slot)
        u16 command;
        struct controller *ctrl = p_slot->ctrl;
 
-       ctrl_dbg(ctrl, "%s: bus/dev = %x/%x\n", __func__,
-                p_slot->bus, p_slot->device);
+       ctrl_dbg(ctrl, "%s: domain:bus:dev = %04x:%02x:%02x\n",
+                __func__, pci_domain_nr(parent), p_slot->bus, p_slot->device);
        ret = p_slot->hpc_ops->get_adapter_status(p_slot, &presence);
        if (ret)
                presence = 0;
index 4d9fed00e1d0ecd671af290015566e8d82e23b9e..6aba0b6cf2e0769fa25787e55e84beccbf9a0a21 100644 (file)
@@ -59,6 +59,20 @@ extern struct workqueue_struct *shpchp_wq;
 #define warn(format, arg...)                                           \
        printk(KERN_WARNING "%s: " format, MY_NAME , ## arg)
 
+#define ctrl_dbg(ctrl, format, arg...)                                 \
+       do {                                                            \
+               if (shpchp_debug)                                       \
+                       dev_printk(, &ctrl->pci_dev->dev,               \
+                                       format, ## arg);                \
+       } while (0)
+#define ctrl_err(ctrl, format, arg...)                                 \
+       dev_err(&ctrl->pci_dev->dev, format, ## arg)
+#define ctrl_info(ctrl, format, arg...)                                        \
+       dev_info(&ctrl->pci_dev->dev, format, ## arg)
+#define ctrl_warn(ctrl, format, arg...)                                        \
+       dev_warn(&ctrl->pci_dev->dev, format, ## arg)
+
+
 #define SLOT_NAME_SIZE 10
 struct slot {
        u8 bus;
@@ -239,7 +253,7 @@ static inline struct slot *shpchp_find_slot(struct controller *ctrl, u8 device)
                        return slot;
        }
 
-       err("%s: slot (device=0x%x) not found\n", __func__, device);
+       ctrl_err(ctrl, "Slot (device=0x%02x) not found\n", device);
        return NULL;
 }
 
@@ -273,7 +287,9 @@ static inline void amd_pogo_errata_restore_misc_reg(struct slot *p_slot)
        pci_read_config_dword(p_slot->ctrl->pci_dev, PCIX_MISC_BRIDGE_ERRORS_OFFSET, &pcix_bridge_errors_reg);
        perr_set = pcix_bridge_errors_reg & PERR_OBSERVED_MASK;
        if (perr_set) {
-               dbg ("%s  W1C: Bridge_Errors[ PERR_OBSERVED = %08X]\n",__func__ , perr_set);
+               ctrl_dbg(p_slot->ctrl,
+                        "Bridge_Errors[ PERR_OBSERVED = %08X] (W1C)\n",
+                        perr_set);
 
                pci_write_config_dword(p_slot->ctrl->pci_dev, PCIX_MISC_BRIDGE_ERRORS_OFFSET, perr_set);
        }
@@ -282,7 +298,7 @@ static inline void amd_pogo_errata_restore_misc_reg(struct slot *p_slot)
        pci_read_config_dword(p_slot->ctrl->pci_dev, PCIX_MEM_BASE_LIMIT_OFFSET, &pcix_mem_base_reg);
        rse_set = pcix_mem_base_reg & RSE_MASK;
        if (rse_set) {
-               dbg ("%s  W1C: Memory_Base_Limit[ RSE ]\n",__func__ );
+               ctrl_dbg(p_slot->ctrl, "Memory_Base_Limit[ RSE ] (W1C)\n");
 
                pci_write_config_dword(p_slot->ctrl->pci_dev, PCIX_MEM_BASE_LIMIT_OFFSET, rse_set);
        }
index 7af9191df4d6dd0947d816492edea5a5d61b1ccc..fe8d149c2293572a2d9e9b0afa68c6959aa43a55 100644 (file)
@@ -89,7 +89,8 @@ static void release_slot(struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = hotplug_slot->private;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        kfree(slot->hotplug_slot->info);
        kfree(slot->hotplug_slot);
@@ -135,13 +136,16 @@ static int init_slots(struct controller *ctrl)
                snprintf(name, SLOT_NAME_SIZE, "%d", slot->number);
                hotplug_slot->ops = &shpchp_hotplug_slot_ops;
 
-               dbg("Registering bus=%x dev=%x hp_slot=%x sun=%x "
-                   "slot_device_offset=%x\n", slot->bus, slot->device,
-                   slot->hp_slot, slot->number, ctrl->slot_device_offset);
+               ctrl_dbg(ctrl, "Registering domain:bus:dev=%04x:%02x:%02x "
+                        "hp_slot=%x sun=%x slot_device_offset=%x\n",
+                        pci_domain_nr(ctrl->pci_dev->subordinate),
+                        slot->bus, slot->device, slot->hp_slot, slot->number,
+                        ctrl->slot_device_offset);
                retval = pci_hp_register(slot->hotplug_slot,
                                ctrl->pci_dev->subordinate, slot->device, name);
                if (retval) {
-                       err("pci_hp_register failed with error %d\n", retval);
+                       ctrl_err(ctrl, "pci_hp_register failed with error %d\n",
+                                retval);
                        goto error_info;
                }
 
@@ -187,7 +191,8 @@ static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status)
 {
        struct slot *slot = get_slot(hotplug_slot);
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        hotplug_slot->info->attention_status = status;
        slot->hpc_ops->set_attention_status(slot, status);
@@ -199,7 +204,8 @@ static int enable_slot (struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = get_slot(hotplug_slot);
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        return shpchp_sysfs_enable_slot(slot);
 }
@@ -208,7 +214,8 @@ static int disable_slot (struct hotplug_slot *hotplug_slot)
 {
        struct slot *slot = get_slot(hotplug_slot);
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        return shpchp_sysfs_disable_slot(slot);
 }
@@ -218,7 +225,8 @@ static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_power_status(slot, value);
        if (retval < 0)
@@ -232,7 +240,8 @@ static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_attention_status(slot, value);
        if (retval < 0)
@@ -246,7 +255,8 @@ static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_latch_status(slot, value);
        if (retval < 0)
@@ -260,7 +270,8 @@ static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value)
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_adapter_status(slot, value);
        if (retval < 0)
@@ -275,7 +286,8 @@ static int get_max_bus_speed(struct hotplug_slot *hotplug_slot,
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_max_bus_speed(slot, value);
        if (retval < 0)
@@ -289,7 +301,8 @@ static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_sp
        struct slot *slot = get_slot(hotplug_slot);
        int retval;
 
-       dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
+       ctrl_dbg(slot->ctrl, "%s: physical_slot = %s\n",
+                __func__, slot_name(slot));
 
        retval = slot->hpc_ops->get_cur_bus_speed(slot, value);
        if (retval < 0)
@@ -320,15 +333,14 @@ static int shpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
        if (!ctrl) {
-               err("%s : out of memory\n", __func__);
+               dev_err(&pdev->dev, "%s: Out of memory\n", __func__);
                goto err_out_none;
        }
        INIT_LIST_HEAD(&ctrl->slot_list);
 
        rc = shpc_init(ctrl, pdev);
        if (rc) {
-               dbg("%s: controller initialization failed\n",
-                   SHPC_MODULE_NAME);
+               ctrl_dbg(ctrl, "Controller initialization failed\n");
                goto err_out_free_ctrl;
        }
 
@@ -337,7 +349,7 @@ static int shpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* Setup the slot information structures */
        rc = init_slots(ctrl);
        if (rc) {
-               err("%s: slot initialization failed\n", SHPC_MODULE_NAME);
+               ctrl_err(ctrl, "Slot initialization failed\n");
                goto err_out_release_ctlr;
        }
 
index 919b1ee4431305a886c8a8e9c63d5d7442a1390a..b8ab2796e66af83d42dc3f2112f7bd3ca6a651bf 100644 (file)
@@ -62,7 +62,7 @@ u8 shpchp_handle_attention_button(u8 hp_slot, struct controller *ctrl)
        u32 event_type;
 
        /* Attention Button Change */
-       dbg("shpchp:  Attention button interrupt received.\n");
+       ctrl_dbg(ctrl, "Attention button interrupt received\n");
 
        p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset);
        p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save));
@@ -70,7 +70,7 @@ u8 shpchp_handle_attention_button(u8 hp_slot, struct controller *ctrl)
        /*
         *  Button pressed - See if need to TAKE ACTION!!!
         */
-       info("Button pressed on Slot(%s)\n", slot_name(p_slot));
+       ctrl_info(ctrl, "Button pressed on Slot(%s)\n", slot_name(p_slot));
        event_type = INT_BUTTON_PRESS;
 
        queue_interrupt_event(p_slot, event_type);
@@ -86,29 +86,29 @@ u8 shpchp_handle_switch_change(u8 hp_slot, struct controller *ctrl)
        u32 event_type;
 
        /* Switch Change */
-       dbg("shpchp:  Switch interrupt received.\n");
+       ctrl_dbg(ctrl, "Switch interrupt received\n");
 
        p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset);
        p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save));
        p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
-       dbg("%s: Card present %x Power status %x\n", __func__,
-               p_slot->presence_save, p_slot->pwr_save);
+       ctrl_dbg(ctrl, "Card present %x Power status %x\n",
+                p_slot->presence_save, p_slot->pwr_save);
 
        if (getstatus) {
                /*
                 * Switch opened
                 */
-               info("Latch open on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Latch open on Slot(%s)\n", slot_name(p_slot));
                event_type = INT_SWITCH_OPEN;
                if (p_slot->pwr_save && p_slot->presence_save) {
                        event_type = INT_POWER_FAULT;
-                       err("Surprise Removal of card\n");
+                       ctrl_err(ctrl, "Surprise Removal of card\n");
                }
        } else {
                /*
                 *  Switch closed
                 */
-               info("Latch close on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Latch close on Slot(%s)\n", slot_name(p_slot));
                event_type = INT_SWITCH_CLOSE;
        }
 
@@ -123,7 +123,7 @@ u8 shpchp_handle_presence_change(u8 hp_slot, struct controller *ctrl)
        u32 event_type;
 
        /* Presence Change */
-       dbg("shpchp:  Presence/Notify input change.\n");
+       ctrl_dbg(ctrl, "Presence/Notify input change\n");
 
        p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset);
 
@@ -135,13 +135,15 @@ u8 shpchp_handle_presence_change(u8 hp_slot, struct controller *ctrl)
                /*
                 * Card Present
                 */
-               info("Card present on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Card present on Slot(%s)\n",
+                         slot_name(p_slot));
                event_type = INT_PRESENCE_ON;
        } else {
                /*
                 * Not Present
                 */
-               info("Card not present on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Card not present on Slot(%s)\n",
+                         slot_name(p_slot));
                event_type = INT_PRESENCE_OFF;
        }
 
@@ -156,7 +158,7 @@ u8 shpchp_handle_power_fault(u8 hp_slot, struct controller *ctrl)
        u32 event_type;
 
        /* Power fault */
-       dbg("shpchp:  Power fault interrupt received.\n");
+       ctrl_dbg(ctrl, "Power fault interrupt received\n");
 
        p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset);
 
@@ -164,18 +166,19 @@ u8 shpchp_handle_power_fault(u8 hp_slot, struct controller *ctrl)
                /*
                 * Power fault Cleared
                 */
-               info("Power fault cleared on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Power fault cleared on Slot(%s)\n",
+                         slot_name(p_slot));
                p_slot->status = 0x00;
                event_type = INT_POWER_FAULT_CLEAR;
        } else {
                /*
                 *   Power fault
                 */
-               info("Power fault on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Power fault on Slot(%s)\n", slot_name(p_slot));
                event_type = INT_POWER_FAULT;
                /* set power fault status for this board */
                p_slot->status = 0xFF;
-               info("power fault bit %x set\n", hp_slot);
+               ctrl_info(ctrl, "Power fault bit %x set\n", hp_slot);
        }
 
        queue_interrupt_event(p_slot, event_type);
@@ -191,10 +194,10 @@ static int change_bus_speed(struct controller *ctrl, struct slot *p_slot,
 {
        int rc = 0;
 
-       dbg("%s: change to speed %d\n", __func__, speed);
+       ctrl_dbg(ctrl, "Change speed to %d\n", speed);
        if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, speed))) {
-               err("%s: Issue of set bus speed mode command failed\n",
-                   __func__);
+               ctrl_err(ctrl, "%s: Issue of set bus speed mode command "
+                        "failed\n", __func__);
                return WRONG_BUS_FREQUENCY;
        }
        return rc;
@@ -212,8 +215,8 @@ static int fix_bus_speed(struct controller *ctrl, struct slot *pslot,
         */
        if (flag) {
                if (asp < bsp) {
-                       err("%s: speed of bus %x and adapter %x mismatch\n",
-                           __func__, bsp, asp);
+                       ctrl_err(ctrl, "Speed of bus %x and adapter %x "
+                                "mismatch\n", bsp, asp);
                        rc = WRONG_BUS_FREQUENCY;
                }
                return rc;
@@ -243,17 +246,18 @@ static int board_added(struct slot *p_slot)
        int rc = 0;
        enum pci_bus_speed asp, bsp, msp;
        struct controller *ctrl = p_slot->ctrl;
+       struct pci_bus *parent = ctrl->pci_dev->subordinate;
 
        hp_slot = p_slot->device - ctrl->slot_device_offset;
 
-       dbg("%s: p_slot->device, slot_offset, hp_slot = %d, %d ,%d\n",
-                       __func__, p_slot->device,
-                       ctrl->slot_device_offset, hp_slot);
+       ctrl_dbg(ctrl,
+                "%s: p_slot->device, slot_offset, hp_slot = %d, %d ,%d\n",
+                __func__, p_slot->device, ctrl->slot_device_offset, hp_slot);
 
        /* Power on slot without connecting to bus */
        rc = p_slot->hpc_ops->power_on_slot(p_slot);
        if (rc) {
-               err("%s: Failed to power on slot\n", __func__);
+               ctrl_err(ctrl, "Failed to power on slot\n");
                return -1;
        }
 
@@ -262,33 +266,34 @@ static int board_added(struct slot *p_slot)
                        return WRONG_BUS_FREQUENCY;
 
                if ((rc = p_slot->hpc_ops->set_bus_speed_mode(p_slot, PCI_SPEED_33MHz))) {
-                       err("%s: Issue of set bus speed mode command failed\n", __func__);
+                       ctrl_err(ctrl, "%s: Issue of set bus speed mode command"
+                                " failed\n", __func__);
                        return WRONG_BUS_FREQUENCY;
                }
 
                /* turn on board, blink green LED, turn off Amber LED */
                if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) {
-                       err("%s: Issue of Slot Enable command failed\n", __func__);
+                       ctrl_err(ctrl, "Issue of Slot Enable command failed\n");
                        return rc;
                }
        }
 
        rc = p_slot->hpc_ops->get_adapter_speed(p_slot, &asp);
        if (rc) {
-               err("%s: Can't get adapter speed or bus mode mismatch\n",
-                   __func__);
+               ctrl_err(ctrl, "Can't get adapter speed or "
+                        "bus mode mismatch\n");
                return WRONG_BUS_FREQUENCY;
        }
 
        rc = p_slot->hpc_ops->get_cur_bus_speed(p_slot, &bsp);
        if (rc) {
-               err("%s: Can't get bus operation speed\n", __func__);
+               ctrl_err(ctrl, "Can't get bus operation speed\n");
                return WRONG_BUS_FREQUENCY;
        }
 
        rc = p_slot->hpc_ops->get_max_bus_speed(p_slot, &msp);
        if (rc) {
-               err("%s: Can't get max bus operation speed\n", __func__);
+               ctrl_err(ctrl, "Can't get max bus operation speed\n");
                msp = bsp;
        }
 
@@ -296,9 +301,9 @@ static int board_added(struct slot *p_slot)
        if (!list_empty(&ctrl->pci_dev->subordinate->devices))
                slots_not_empty = 1;
 
-       dbg("%s: slots_not_empty %d, adapter_speed %d, bus_speed %d, "
-           "max_bus_speed %d\n", __func__, slots_not_empty, asp,
-           bsp, msp);
+       ctrl_dbg(ctrl, "%s: slots_not_empty %d, adapter_speed %d, bus_speed %d,"
+                " max_bus_speed %d\n", __func__, slots_not_empty, asp,
+                bsp, msp);
 
        rc = fix_bus_speed(ctrl, p_slot, slots_not_empty, asp, bsp, msp);
        if (rc)
@@ -306,26 +311,26 @@ static int board_added(struct slot *p_slot)
 
        /* turn on board, blink green LED, turn off Amber LED */
        if ((rc = p_slot->hpc_ops->slot_enable(p_slot))) {
-               err("%s: Issue of Slot Enable command failed\n", __func__);
+               ctrl_err(ctrl, "Issue of Slot Enable command failed\n");
                return rc;
        }
 
        /* Wait for ~1 second */
        msleep(1000);
 
-       dbg("%s: slot status = %x\n", __func__, p_slot->status);
+       ctrl_dbg(ctrl, "%s: slot status = %x\n", __func__, p_slot->status);
        /* Check for a power fault */
        if (p_slot->status == 0xFF) {
                /* power fault occurred, but it was benign */
-               dbg("%s: power fault\n", __func__);
+               ctrl_dbg(ctrl, "%s: Power fault\n", __func__);
                rc = POWER_FAILURE;
                p_slot->status = 0;
                goto err_exit;
        }
 
        if (shpchp_configure_device(p_slot)) {
-               err("Cannot add device at 0x%x:0x%x\n", p_slot->bus,
-                               p_slot->device);
+               ctrl_err(ctrl, "Cannot add device at %04x:%02x:%02x\n",
+                        pci_domain_nr(parent), p_slot->bus, p_slot->device);
                goto err_exit;
        }
 
@@ -341,7 +346,8 @@ err_exit:
        /* turn off slot, turn on Amber LED, turn off Green LED */
        rc = p_slot->hpc_ops->slot_disable(p_slot);
        if (rc) {
-               err("%s: Issue of Slot Disable command failed\n", __func__);
+               ctrl_err(ctrl, "%s: Issue of Slot Disable command failed\n",
+                        __func__);
                return rc;
        }
 
@@ -365,7 +371,7 @@ static int remove_board(struct slot *p_slot)
        hp_slot = p_slot->device - ctrl->slot_device_offset;
        p_slot = shpchp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset);
 
-       dbg("In %s, hp_slot = %d\n", __func__, hp_slot);
+       ctrl_dbg(ctrl, "%s: hp_slot = %d\n", __func__, hp_slot);
 
        /* Change status to shutdown */
        if (p_slot->is_a_board)
@@ -374,13 +380,14 @@ static int remove_board(struct slot *p_slot)
        /* turn off slot, turn on Amber LED, turn off Green LED */
        rc = p_slot->hpc_ops->slot_disable(p_slot);
        if (rc) {
-               err("%s: Issue of Slot Disable command failed\n", __func__);
+               ctrl_err(ctrl, "%s: Issue of Slot Disable command failed\n",
+                        __func__);
                return rc;
        }
 
        rc = p_slot->hpc_ops->set_attention_status(p_slot, 0);
        if (rc) {
-               err("%s: Issue of Set Attention command failed\n", __func__);
+               ctrl_err(ctrl, "Issue of Set Attention command failed\n");
                return rc;
        }
 
@@ -439,7 +446,8 @@ void shpchp_queue_pushbutton_work(struct work_struct *work)
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
        if (!info) {
-               err("%s: Cannot allocate memory\n", __func__);
+               ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n",
+                        __func__);
                return;
        }
        info->p_slot = p_slot;
@@ -486,18 +494,19 @@ static int update_slot_info (struct slot *slot)
 static void handle_button_press_event(struct slot *p_slot)
 {
        u8 getstatus;
+       struct controller *ctrl = p_slot->ctrl;
 
        switch (p_slot->state) {
        case STATIC_STATE:
                p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
                if (getstatus) {
                        p_slot->state = BLINKINGOFF_STATE;
-                       info("PCI slot #%s - powering off due to button "
-                            "press.\n", slot_name(p_slot));
+                       ctrl_info(ctrl, "PCI slot #%s - powering off due to "
+                                 "button press.\n", slot_name(p_slot));
                } else {
                        p_slot->state = BLINKINGON_STATE;
-                       info("PCI slot #%s - powering on due to button "
-                            "press.\n", slot_name(p_slot));
+                       ctrl_info(ctrl, "PCI slot #%s - powering on due to "
+                                 "button press.\n", slot_name(p_slot));
                }
                /* blink green LED and turn off amber */
                p_slot->hpc_ops->green_led_blink(p_slot);
@@ -512,16 +521,16 @@ static void handle_button_press_event(struct slot *p_slot)
                 * press the attention again before the 5 sec. limit
                 * expires to cancel hot-add or hot-remove
                 */
-               info("Button cancel on Slot(%s)\n", slot_name(p_slot));
-               dbg("%s: button cancel\n", __func__);
+               ctrl_info(ctrl, "Button cancel on Slot(%s)\n",
+                         slot_name(p_slot));
                cancel_delayed_work(&p_slot->work);
                if (p_slot->state == BLINKINGOFF_STATE)
                        p_slot->hpc_ops->green_led_on(p_slot);
                else
                        p_slot->hpc_ops->green_led_off(p_slot);
                p_slot->hpc_ops->set_attention_status(p_slot, 0);
-               info("PCI slot #%s - action canceled due to button press\n",
-                    slot_name(p_slot));
+               ctrl_info(ctrl, "PCI slot #%s - action canceled due to "
+                         "button press\n", slot_name(p_slot));
                p_slot->state = STATIC_STATE;
                break;
        case POWEROFF_STATE:
@@ -531,11 +540,12 @@ static void handle_button_press_event(struct slot *p_slot)
                 * this means that the previous attention button action
                 * to hot-add or hot-remove is undergoing
                 */
-               info("Button ignore on Slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Button ignore on Slot(%s)\n",
+                         slot_name(p_slot));
                update_slot_info(p_slot);
                break;
        default:
-               warn("Not a valid state\n");
+               ctrl_warn(ctrl, "Not a valid state\n");
                break;
        }
 }
@@ -551,7 +561,7 @@ static void interrupt_event_handler(struct work_struct *work)
                handle_button_press_event(p_slot);
                break;
        case INT_POWER_FAULT:
-               dbg("%s: power fault\n", __func__);
+               ctrl_dbg(p_slot->ctrl, "%s: Power fault\n", __func__);
                p_slot->hpc_ops->set_attention_status(p_slot, 1);
                p_slot->hpc_ops->green_led_off(p_slot);
                break;
@@ -569,22 +579,24 @@ static int shpchp_enable_slot (struct slot *p_slot)
 {
        u8 getstatus = 0;
        int rc, retval = -ENODEV;
+       struct controller *ctrl = p_slot->ctrl;
 
        /* Check to see if (latch closed, card present, power off) */
        mutex_lock(&p_slot->ctrl->crit_sect);
        rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
        if (rc || !getstatus) {
-               info("No adapter on slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot));
                goto out;
        }
        rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
        if (rc || getstatus) {
-               info("Latch open on slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Latch open on slot(%s)\n", slot_name(p_slot));
                goto out;
        }
        rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
        if (rc || getstatus) {
-               info("Already enabled on slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Already enabled on slot(%s)\n",
+                         slot_name(p_slot));
                goto out;
        }
 
@@ -593,7 +605,7 @@ static int shpchp_enable_slot (struct slot *p_slot)
        /* We have to save the presence info for these slots */
        p_slot->hpc_ops->get_adapter_status(p_slot, &(p_slot->presence_save));
        p_slot->hpc_ops->get_power_status(p_slot, &(p_slot->pwr_save));
-       dbg("%s: p_slot->pwr_save %x\n", __func__, p_slot->pwr_save);
+       ctrl_dbg(ctrl, "%s: p_slot->pwr_save %x\n", __func__, p_slot->pwr_save);
        p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
 
        if(((p_slot->ctrl->pci_dev->vendor == PCI_VENDOR_ID_AMD) ||
@@ -624,6 +636,7 @@ static int shpchp_disable_slot (struct slot *p_slot)
 {
        u8 getstatus = 0;
        int rc, retval = -ENODEV;
+       struct controller *ctrl = p_slot->ctrl;
 
        if (!p_slot->ctrl)
                return -ENODEV;
@@ -633,17 +646,18 @@ static int shpchp_disable_slot (struct slot *p_slot)
 
        rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
        if (rc || !getstatus) {
-               info("No adapter on slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "No adapter on slot(%s)\n", slot_name(p_slot));
                goto out;
        }
        rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
        if (rc || getstatus) {
-               info("Latch open on slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Latch open on slot(%s)\n", slot_name(p_slot));
                goto out;
        }
        rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
        if (rc || !getstatus) {
-               info("Already disabled slot(%s)\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Already disabled on slot(%s)\n",
+                         slot_name(p_slot));
                goto out;
        }
 
@@ -657,6 +671,7 @@ static int shpchp_disable_slot (struct slot *p_slot)
 int shpchp_sysfs_enable_slot(struct slot *p_slot)
 {
        int retval = -ENODEV;
+       struct controller *ctrl = p_slot->ctrl;
 
        mutex_lock(&p_slot->lock);
        switch (p_slot->state) {
@@ -670,15 +685,17 @@ int shpchp_sysfs_enable_slot(struct slot *p_slot)
                p_slot->state = STATIC_STATE;
                break;
        case POWERON_STATE:
-               info("Slot %s is already in powering on state\n",
-                    slot_name(p_slot));
+               ctrl_info(ctrl, "Slot %s is already in powering on state\n",
+                         slot_name(p_slot));
                break;
        case BLINKINGOFF_STATE:
        case POWEROFF_STATE:
-               info("Already enabled on slot %s\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Already enabled on slot %s\n",
+                         slot_name(p_slot));
                break;
        default:
-               err("Not a valid state on slot %s\n", slot_name(p_slot));
+               ctrl_err(ctrl, "Not a valid state on slot %s\n",
+                        slot_name(p_slot));
                break;
        }
        mutex_unlock(&p_slot->lock);
@@ -689,6 +706,7 @@ int shpchp_sysfs_enable_slot(struct slot *p_slot)
 int shpchp_sysfs_disable_slot(struct slot *p_slot)
 {
        int retval = -ENODEV;
+       struct controller *ctrl = p_slot->ctrl;
 
        mutex_lock(&p_slot->lock);
        switch (p_slot->state) {
@@ -702,15 +720,17 @@ int shpchp_sysfs_disable_slot(struct slot *p_slot)
                p_slot->state = STATIC_STATE;
                break;
        case POWEROFF_STATE:
-               info("Slot %s is already in powering off state\n",
-                    slot_name(p_slot));
+               ctrl_info(ctrl, "Slot %s is already in powering off state\n",
+                         slot_name(p_slot));
                break;
        case BLINKINGON_STATE:
        case POWERON_STATE:
-               info("Already disabled on slot %s\n", slot_name(p_slot));
+               ctrl_info(ctrl, "Already disabled on slot %s\n",
+                         slot_name(p_slot));
                break;
        default:
-               err("Not a valid state on slot %s\n", slot_name(p_slot));
+               ctrl_err(ctrl, "Not a valid state on slot %s\n",
+                        slot_name(p_slot));
                break;
        }
        mutex_unlock(&p_slot->lock);
index 7a0bff364cd4f816cf6475b0c80237f53b73f805..86dc398477692d61a46eed4828c142de6ea2aeaa 100644 (file)
@@ -300,10 +300,10 @@ static inline int shpc_wait_cmd(struct controller *ctrl)
                                                !is_ctrl_busy(ctrl), timeout);
        if (!rc && is_ctrl_busy(ctrl)) {
                retval = -EIO;
-               err("Command not completed in 1000 msec\n");
+               ctrl_err(ctrl, "Command not completed in 1000 msec\n");
        } else if (rc < 0) {
                retval = -EINTR;
-               info("Command was interrupted by a signal\n");
+               ctrl_info(ctrl, "Command was interrupted by a signal\n");
        }
 
        return retval;
@@ -320,15 +320,14 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
 
        if (!shpc_poll_ctrl_busy(ctrl)) {
                /* After 1 sec and and the controller is still busy */
-               err("%s : Controller is still busy after 1 sec.\n",
-                   __func__);
+               ctrl_err(ctrl, "Controller is still busy after 1 sec\n");
                retval = -EBUSY;
                goto out;
        }
 
        ++t_slot;
        temp_word =  (t_slot << 8) | (cmd & 0xFF);
-       dbg("%s: t_slot %x cmd %x\n", __func__, t_slot, cmd);
+       ctrl_dbg(ctrl, "%s: t_slot %x cmd %x\n", __func__, t_slot, cmd);
 
        /* To make sure the Controller Busy bit is 0 before we send out the
         * command.
@@ -344,8 +343,9 @@ static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
 
        cmd_status = hpc_check_cmd_status(slot->ctrl);
        if (cmd_status) {
-               err("%s: Failed to issued command 0x%x (error code = %d)\n",
-                   __func__, cmd, cmd_status);
+               ctrl_err(ctrl,
+                        "Failed to issued command 0x%x (error code = %d)\n",
+                        cmd, cmd_status);
                retval = -EIO;
        }
  out:
@@ -364,15 +364,15 @@ static int hpc_check_cmd_status(struct controller *ctrl)
                break;
        case 1:
                retval = SWITCH_OPEN;
-               err("%s: Switch opened!\n", __func__);
+               ctrl_err(ctrl, "Switch opened!\n");
                break;
        case 2:
                retval = INVALID_CMD;
-               err("%s: Invalid HPC command!\n", __func__);
+               ctrl_err(ctrl, "Invalid HPC command!\n");
                break;
        case 4:
                retval = INVALID_SPEED_MODE;
-               err("%s: Invalid bus speed/mode!\n", __func__);
+               ctrl_err(ctrl, "Invalid bus speed/mode!\n");
                break;
        default:
                retval = cmd_status;
@@ -483,8 +483,8 @@ static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
                return -ENODEV;
        }
 
-       dbg("%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n",
-           __func__, slot_reg, pcix_cap, m66_cap);
+       ctrl_dbg(ctrl, "%s: slot_reg = %x, pcix_cap = %x, m66_cap = %x\n",
+                __func__, slot_reg, pcix_cap, m66_cap);
 
        switch (pcix_cap) {
        case 0x0:
@@ -509,7 +509,7 @@ static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
                break;
        }
 
-       dbg("Adapter speed = %d\n", *value);
+       ctrl_dbg(ctrl, "Adapter speed = %d\n", *value);
        return retval;
 }
 
@@ -526,7 +526,7 @@ static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode)
                retval = -1;
        }
 
-       dbg("Mode 1 ECC cap = %d\n", *mode);
+       ctrl_dbg(ctrl, "Mode 1 ECC cap = %d\n", *mode);
        return retval;
 }
 
@@ -629,7 +629,7 @@ static int hpc_power_on_slot(struct slot * slot)
 
        retval = shpc_write_cmd(slot, slot->hp_slot, SET_SLOT_PWR);
        if (retval)
-               err("%s: Write command failed!\n", __func__);
+               ctrl_err(slot->ctrl, "%s: Write command failed!\n", __func__);
 
        return retval;
 }
@@ -642,7 +642,7 @@ static int hpc_slot_enable(struct slot * slot)
        retval = shpc_write_cmd(slot, slot->hp_slot,
                        SET_SLOT_ENABLE | SET_PWR_BLINK | SET_ATTN_OFF);
        if (retval)
-               err("%s: Write command failed!\n", __func__);
+               ctrl_err(slot->ctrl, "%s: Write command failed!\n", __func__);
 
        return retval;
 }
@@ -655,7 +655,7 @@ static int hpc_slot_disable(struct slot * slot)
        retval = shpc_write_cmd(slot, slot->hp_slot,
                        SET_SLOT_DISABLE | SET_PWR_OFF | SET_ATTN_ON);
        if (retval)
-               err("%s: Write command failed!\n", __func__);
+               ctrl_err(slot->ctrl, "%s: Write command failed!\n", __func__);
 
        return retval;
 }
@@ -719,7 +719,7 @@ static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
 
        retval = shpc_write_cmd(slot, 0, cmd);
        if (retval)
-               err("%s: Write command failed!\n", __func__);
+               ctrl_err(ctrl, "%s: Write command failed!\n", __func__);
 
        return retval;
 }
@@ -735,7 +735,7 @@ static irqreturn_t shpc_isr(int irq, void *dev_id)
        if (!intr_loc)
                return IRQ_NONE;
 
-       dbg("%s: intr_loc = %x\n",__func__, intr_loc);
+       ctrl_dbg(ctrl, "%s: intr_loc = %x\n", __func__, intr_loc);
 
        if(!shpchp_poll_mode) {
                /*
@@ -748,7 +748,7 @@ static irqreturn_t shpc_isr(int irq, void *dev_id)
                shpc_writel(ctrl, SERR_INTR_ENABLE, serr_int);
 
                intr_loc2 = shpc_readl(ctrl, INTR_LOC);
-               dbg("%s: intr_loc2 = %x\n",__func__, intr_loc2);
+               ctrl_dbg(ctrl, "%s: intr_loc2 = %x\n", __func__, intr_loc2);
        }
 
        if (intr_loc & CMD_INTR_PENDING) {
@@ -773,8 +773,8 @@ static irqreturn_t shpc_isr(int irq, void *dev_id)
                        continue;
 
                slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
-               dbg("%s: Slot %x with intr, slot register = %x\n",
-                   __func__, hp_slot, slot_reg);
+               ctrl_dbg(ctrl, "Slot %x with intr, slot register = %x\n",
+                        hp_slot, slot_reg);
 
                if (slot_reg & MRL_CHANGE_DETECTED)
                        shpchp_handle_switch_change(hp_slot, ctrl);
@@ -843,7 +843,7 @@ static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value)
        }
 
        *value = bus_speed;
-       dbg("Max bus speed = %d\n", bus_speed);
+       ctrl_dbg(ctrl, "Max bus speed = %d\n", bus_speed);
 
        return retval;
 }
@@ -911,7 +911,7 @@ static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value)
                break;
        }
 
-       dbg("Current bus speed = %d\n", bus_speed);
+       ctrl_dbg(ctrl, "Current bus speed = %d\n", bus_speed);
        return retval;
 }
 
@@ -949,6 +949,7 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
        u8 i;
 
        ctrl->pci_dev = pdev;  /* pci_dev of the P2P bridge */
+       ctrl_dbg(ctrl, "Hotplug Controller:\n");
 
        if ((pdev->vendor == PCI_VENDOR_ID_AMD) || (pdev->device ==
                                PCI_DEVICE_ID_AMD_GOLAM_7450)) {
@@ -958,34 +959,33 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
        } else {
                ctrl->cap_offset = pci_find_capability(pdev, PCI_CAP_ID_SHPC);
                if (!ctrl->cap_offset) {
-                       err("%s : cap_offset == 0\n", __func__);
+                       ctrl_err(ctrl, "Cannot find PCI capability\n");
                        goto abort;
                }
-               dbg("%s: cap_offset = %x\n", __func__, ctrl->cap_offset);
+               ctrl_dbg(ctrl, " cap_offset = %x\n", ctrl->cap_offset);
 
                rc = shpc_indirect_read(ctrl, 0, &shpc_base_offset);
                if (rc) {
-                       err("%s: cannot read base_offset\n", __func__);
+                       ctrl_err(ctrl, "Cannot read base_offset\n");
                        goto abort;
                }
 
                rc = shpc_indirect_read(ctrl, 3, &tempdword);
                if (rc) {
-                       err("%s: cannot read slot config\n", __func__);
+                       ctrl_err(ctrl, "Cannot read slot config\n");
                        goto abort;
                }
                num_slots = tempdword & SLOT_NUM;
-               dbg("%s: num_slots (indirect) %x\n", __func__, num_slots);
+               ctrl_dbg(ctrl, " num_slots (indirect) %x\n", num_slots);
 
                for (i = 0; i < 9 + num_slots; i++) {
                        rc = shpc_indirect_read(ctrl, i, &tempdword);
                        if (rc) {
-                               err("%s: cannot read creg (index = %d)\n",
-                                   __func__, i);
+                               ctrl_err(ctrl,
+                                        "Cannot read creg (index = %d)\n", i);
                                goto abort;
                        }
-                       dbg("%s: offset %d: value %x\n", __func__,i,
-                                       tempdword);
+                       ctrl_dbg(ctrl, " offset %d: value %x\n", i, tempdword);
                }
 
                ctrl->mmio_base =
@@ -993,30 +993,31 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
                ctrl->mmio_size = 0x24 + 0x4 * num_slots;
        }
 
-       info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", pdev->vendor, pdev->device, pdev->subsystem_vendor,
-               pdev->subsystem_device);
+       ctrl_info(ctrl, "HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n",
+                 pdev->vendor, pdev->device, pdev->subsystem_vendor,
+                 pdev->subsystem_device);
 
        rc = pci_enable_device(pdev);
        if (rc) {
-               err("%s: pci_enable_device failed\n", __func__);
+               ctrl_err(ctrl, "pci_enable_device failed\n");
                goto abort;
        }
 
        if (!request_mem_region(ctrl->mmio_base, ctrl->mmio_size, MY_NAME)) {
-               err("%s: cannot reserve MMIO region\n", __func__);
+               ctrl_err(ctrl, "Cannot reserve MMIO region\n");
                rc = -1;
                goto abort;
        }
 
        ctrl->creg = ioremap(ctrl->mmio_base, ctrl->mmio_size);
        if (!ctrl->creg) {
-               err("%s: cannot remap MMIO region %lx @ %lx\n", __func__,
-                   ctrl->mmio_size, ctrl->mmio_base);
+               ctrl_err(ctrl, "Cannot remap MMIO region %lx @ %lx\n",
+                        ctrl->mmio_size, ctrl->mmio_base);
                release_mem_region(ctrl->mmio_base, ctrl->mmio_size);
                rc = -1;
                goto abort;
        }
-       dbg("%s: ctrl->creg %p\n", __func__, ctrl->creg);
+       ctrl_dbg(ctrl, "ctrl->creg %p\n", ctrl->creg);
 
        mutex_init(&ctrl->crit_sect);
        mutex_init(&ctrl->cmd_lock);
@@ -1035,21 +1036,21 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
 
        /* Mask Global Interrupt Mask & Command Complete Interrupt Mask */
        tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-       dbg("%s: SERR_INTR_ENABLE = %x\n", __func__, tempdword);
+       ctrl_dbg(ctrl, "SERR_INTR_ENABLE = %x\n", tempdword);
        tempdword |= (GLOBAL_INTR_MASK  | GLOBAL_SERR_MASK |
                      COMMAND_INTR_MASK | ARBITER_SERR_MASK);
        tempdword &= ~SERR_INTR_RSVDZ_MASK;
        shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
        tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-       dbg("%s: SERR_INTR_ENABLE = %x\n", __func__, tempdword);
+       ctrl_dbg(ctrl, "SERR_INTR_ENABLE = %x\n", tempdword);
 
        /* Mask the MRL sensor SERR Mask of individual slot in
         * Slot SERR-INT Mask & clear all the existing event if any
         */
        for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
                slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
-               dbg("%s: Default Logical Slot Register %d value %x\n", __func__,
-                       hp_slot, slot_reg);
+               ctrl_dbg(ctrl, "Default Logical Slot Register %d value %x\n",
+                        hp_slot, slot_reg);
                slot_reg |= (PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
                             BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
                             CON_PFAULT_INTR_MASK   | MRL_CHANGE_SERR_MASK |
@@ -1066,24 +1067,24 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
                /* Installs the interrupt handler */
                rc = pci_enable_msi(pdev);
                if (rc) {
-                       info("Can't get msi for the hotplug controller\n");
-                       info("Use INTx for the hotplug controller\n");
+                       ctrl_info(ctrl,
+                                 "Can't get msi for the hotplug controller\n");
+                       ctrl_info(ctrl,
+                                 "Use INTx for the hotplug controller\n");
                }
 
                rc = request_irq(ctrl->pci_dev->irq, shpc_isr, IRQF_SHARED,
                                 MY_NAME, (void *)ctrl);
-               dbg("%s: request_irq %d for hpc%d (returns %d)\n",
-                   __func__, ctrl->pci_dev->irq,
+               ctrl_dbg(ctrl, "request_irq %d for hpc%d (returns %d)\n",
+                        ctrl->pci_dev->irq,
                    atomic_read(&shpchp_num_controllers), rc);
                if (rc) {
-                       err("Can't get irq %d for the hotplug controller\n",
-                           ctrl->pci_dev->irq);
+                       ctrl_err(ctrl, "Can't get irq %d for the hotplug "
+                                "controller\n", ctrl->pci_dev->irq);
                        goto abort_iounmap;
                }
        }
-       dbg("%s: HPC at b:d:f:irq=0x%x:%x:%x:%x\n", __func__,
-                       pdev->bus->number, PCI_SLOT(pdev->devfn),
-                       PCI_FUNC(pdev->devfn), pdev->irq);
+       ctrl_dbg(ctrl, "HPC at %s irq=%x\n", pci_name(pdev), pdev->irq);
 
        /*
         * If this is the first controller to be initialized,
@@ -1102,8 +1103,8 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
         */
        for (hp_slot = 0; hp_slot < ctrl->num_slots; hp_slot++) {
                slot_reg = shpc_readl(ctrl, SLOT_REG(hp_slot));
-               dbg("%s: Default Logical Slot Register %d value %x\n", __func__,
-                       hp_slot, slot_reg);
+               ctrl_dbg(ctrl, "Default Logical Slot Register %d value %x\n",
+                        hp_slot, slot_reg);
                slot_reg &= ~(PRSNT_CHANGE_INTR_MASK | ISO_PFAULT_INTR_MASK |
                              BUTTON_PRESS_INTR_MASK | MRL_CHANGE_INTR_MASK |
                              CON_PFAULT_INTR_MASK | SLOT_REG_RSVDZ_MASK);
@@ -1116,7 +1117,7 @@ int shpc_init(struct controller *ctrl, struct pci_dev *pdev)
                               SERR_INTR_RSVDZ_MASK);
                shpc_writel(ctrl, SERR_INTR_ENABLE, tempdword);
                tempdword = shpc_readl(ctrl, SERR_INTR_ENABLE);
-               dbg("%s: SERR_INTR_ENABLE = %x\n", __func__, tempdword);
+               ctrl_dbg(ctrl, "SERR_INTR_ENABLE = %x\n", tempdword);
        }
 
        return 0;
index 3fc4ec0eea0b16942e4168c1393bacf85aee35e2..138f161becc0758ef36121896b71f17ecc769c8c 100644 (file)
@@ -49,9 +49,7 @@ static void program_fw_provided_values(struct pci_dev *dev)
        /* use default values if we can't get them from firmware */
        if (get_hp_params_from_firmware(dev, &hpp) ||
            !hpp.t0 || (hpp.t0->revision > 1)) {
-               printk(KERN_WARNING
-                      "%s: Could not get hotplug parameters. Use defaults\n",
-                      __func__);
+               warn("Could not get hotplug parameters. Use defaults\n");
                hpp.t0 = &hpp.type0_data;
                hpp.t0->revision = 0;
                hpp.t0->cache_line_size = 8;
@@ -101,18 +99,20 @@ int __ref shpchp_configure_device(struct slot *p_slot)
        struct pci_dev *dev;
        struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
        int num, fn;
+       struct controller *ctrl = p_slot->ctrl;
 
        dev = pci_get_slot(parent, PCI_DEVFN(p_slot->device, 0));
        if (dev) {
-               err("Device %s already exists at %x:%x, cannot hot-add\n",
-                               pci_name(dev), p_slot->bus, p_slot->device);
+               ctrl_err(ctrl, "Device %s already exists "
+                        "at %04x:%02x:%02x, cannot hot-add\n", pci_name(dev),
+                        pci_domain_nr(parent), p_slot->bus, p_slot->device);
                pci_dev_put(dev);
                return -EINVAL;
        }
 
        num = pci_scan_slot(parent, PCI_DEVFN(p_slot->device, 0));
        if (num == 0) {
-               err("No new device found\n");
+               ctrl_err(ctrl, "No new device found\n");
                return -ENODEV;
        }
 
@@ -121,8 +121,8 @@ int __ref shpchp_configure_device(struct slot *p_slot)
                if (!dev)
                        continue;
                if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
-                       err("Cannot hot-add display device %s\n",
-                                       pci_name(dev));
+                       ctrl_err(ctrl, "Cannot hot-add display device %s\n",
+                                pci_name(dev));
                        pci_dev_put(dev);
                        continue;
                }
@@ -138,14 +138,15 @@ int __ref shpchp_configure_device(struct slot *p_slot)
                                        break;
                        }
                        if (busnr >= end) {
-                               err("No free bus for hot-added bridge\n");
+                               ctrl_err(ctrl,
+                                        "No free bus for hot-added bridge\n");
                                pci_dev_put(dev);
                                continue;
                        }
                        child = pci_add_new_bus(parent, dev, busnr);
                        if (!child) {
-                               err("Cannot add new bus for %s\n",
-                                               pci_name(dev));
+                               ctrl_err(ctrl, "Cannot add new bus for %s\n",
+                                        pci_name(dev));
                                pci_dev_put(dev);
                                continue;
                        }
@@ -168,8 +169,10 @@ int shpchp_unconfigure_device(struct slot *p_slot)
        int j;
        u8 bctl = 0;
        struct pci_bus *parent = p_slot->ctrl->pci_dev->subordinate;
+       struct controller *ctrl = p_slot->ctrl;
 
-       dbg("%s: bus/dev = %x/%x\n", __func__, p_slot->bus, p_slot->device);
+       ctrl_dbg(ctrl, "%s: domain:bus:dev = %04x:%02x:%02x\n",
+                __func__, pci_domain_nr(parent), p_slot->bus, p_slot->device);
 
        for (j=0; j<8 ; j++) {
                struct pci_dev* temp = pci_get_slot(parent,
@@ -177,16 +180,17 @@ int shpchp_unconfigure_device(struct slot *p_slot)
                if (!temp)
                        continue;
                if ((temp->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
-                       err("Cannot remove display device %s\n",
-                                       pci_name(temp));
+                       ctrl_err(ctrl, "Cannot remove display device %s\n",
+                                pci_name(temp));
                        pci_dev_put(temp);
                        continue;
                }
                if (temp->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
                        pci_read_config_byte(temp, PCI_BRIDGE_CONTROL, &bctl);
                        if (bctl & PCI_BRIDGE_CTL_VGA) {
-                               err("Cannot remove display device %s\n",
-                                               pci_name(temp));
+                               ctrl_err(ctrl,
+                                        "Cannot remove display device %s\n",
+                                        pci_name(temp));
                                pci_dev_put(temp);
                                continue;
                        }
diff --git a/drivers/pci/irq.c b/drivers/pci/irq.c
new file mode 100644 (file)
index 0000000..6441dfa
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * PCI IRQ failure handing code
+ *
+ * Copyright (c) 2008 James Bottomley <James.Bottomley@HansenPartnership.com>
+ */
+
+#include <linux/acpi.h>
+#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+
+static void pci_note_irq_problem(struct pci_dev *pdev, const char *reason)
+{
+       struct pci_dev *parent = to_pci_dev(pdev->dev.parent);
+
+       dev_printk(KERN_ERR, &pdev->dev,
+                  "Potentially misrouted IRQ (Bridge %s %04x:%04x)\n",
+                  parent->dev.bus_id, parent->vendor, parent->device);
+       dev_printk(KERN_ERR, &pdev->dev, "%s\n", reason);
+       dev_printk(KERN_ERR, &pdev->dev, "Please report to linux-kernel@vger.kernel.org\n");
+       WARN_ON(1);
+}
+
+/**
+ * pci_lost_interrupt - reports a lost PCI interrupt
+ * @pdev:      device whose interrupt is lost
+ * 
+ * The primary function of this routine is to report a lost interrupt
+ * in a standard way which users can recognise (instead of blaming the
+ * driver).
+ *
+ * Returns:
+ *  a suggestion for fixing it (although the driver is not required to
+ * act on this).
+ */
+enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *pdev)
+{
+       if (pdev->msi_enabled || pdev->msix_enabled) {
+               enum pci_lost_interrupt_reason ret;
+
+               if (pdev->msix_enabled) {
+                       pci_note_irq_problem(pdev, "MSIX routing failure");
+                       ret = PCI_LOST_IRQ_DISABLE_MSIX;
+               } else {
+                       pci_note_irq_problem(pdev, "MSI routing failure");
+                       ret = PCI_LOST_IRQ_DISABLE_MSI;
+               }
+               return ret;
+       }
+#ifdef CONFIG_ACPI
+       if (!(acpi_disabled || acpi_noirq)) {
+               pci_note_irq_problem(pdev, "Potential ACPI misrouting please reboot with acpi=noirq");
+               /* currently no way to fix acpi on the fly */
+               return PCI_LOST_IRQ_DISABLE_ACPI;
+       }
+#endif
+       pci_note_irq_problem(pdev, "unknown cause (not MSI or ACPI)");
+       return PCI_LOST_IRQ_NO_INFORMATION;
+}
+EXPORT_SYMBOL(pci_lost_interrupt);
index 533aeb5fcbe4512cb97c6244e7d41ba35cc9c4ed..21f2ac639cab2f31937971113fe9872275cfd9a0 100644 (file)
@@ -1309,27 +1309,32 @@ void pci_enable_ari(struct pci_dev *dev)
        int pos;
        u32 cap;
        u16 ctrl;
+       struct pci_dev *bridge;
 
-       if (!dev->is_pcie)
+       if (!dev->is_pcie || dev->devfn)
                return;
 
-       if (dev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
-           dev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
+       pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
+       if (!pos)
                return;
 
-       pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
+       bridge = dev->bus->self;
+       if (!bridge || !bridge->is_pcie)
+               return;
+
+       pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
        if (!pos)
                return;
 
-       pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap);
+       pci_read_config_dword(bridge, pos + PCI_EXP_DEVCAP2, &cap);
        if (!(cap & PCI_EXP_DEVCAP2_ARI))
                return;
 
-       pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
+       pci_read_config_word(bridge, pos + PCI_EXP_DEVCTL2, &ctrl);
        ctrl |= PCI_EXP_DEVCTL2_ARI;
-       pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
+       pci_write_config_word(bridge, pos + PCI_EXP_DEVCTL2, ctrl);
 
-       dev->ari_enabled = 1;
+       bridge->ari_enabled = 1;
 }
 
 int
index 6f1e51d77bce010b53ec7a4f55069fe6302ebf78..003a9b3c293fd6937682d061f2b4e242ab673adc 100644 (file)
@@ -298,9 +298,6 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
                        child->resource[i] = child->parent->resource[i - 3];
        }
 
-       for(i=0; i<3; i++)
-               child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
-
        res = child->resource[0];
        pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
        pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
index 752def8a2ef4211c3486fa19e61b8f148f7d92cb..c75b82bda327723998eb6c3148ac8c0b1a061a7d 100644 (file)
@@ -546,6 +546,13 @@ struct pci_dev __deprecated *pci_find_slot(unsigned int bus,
                                           unsigned int devfn);
 #endif /* CONFIG_PCI_LEGACY */
 
+enum pci_lost_interrupt_reason {
+       PCI_LOST_IRQ_NO_INFORMATION = 0,
+       PCI_LOST_IRQ_DISABLE_MSI,
+       PCI_LOST_IRQ_DISABLE_MSIX,
+       PCI_LOST_IRQ_DISABLE_ACPI,
+};
+enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
 int pci_find_capability(struct pci_dev *dev, int cap);
 int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
 int pci_find_ext_capability(struct pci_dev *dev, int cap);