PCI hotplug: shpchp: replace printk with dev_printk
This patch replaces printks within shpchp module with dev_printks. Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
388c8c16ab
commit
f98ca311f3
5 changed files with 224 additions and 159 deletions
|
@ -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, "%s: slot (device=0x%x) not found\n", __func__, 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,
|
||||
"%s W1C: Bridge_Errors[ PERR_OBSERVED = %08X]\n",
|
||||
__func__ , perr_set);
|
||||
|
||||
pci_write_config_dword(p_slot->ctrl->pci_dev, PCIX_MISC_BRIDGE_ERRORS_OFFSET, perr_set);
|
||||
}
|
||||
|
@ -282,7 +298,8 @@ 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, "%s W1C: Memory_Base_Limit[ RSE ]\n",
|
||||
__func__);
|
||||
|
||||
pci_write_config_dword(p_slot->ctrl->pci_dev, PCIX_MEM_BASE_LIMIT_OFFSET, rse_set);
|
||||
}
|
||||
|
|
|
@ -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,14 @@ 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 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);
|
||||
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 +189,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 +202,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 +212,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 +223,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 +238,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 +253,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 +268,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 +284,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 +299,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 +331,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 +347,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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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, "%s: Card present %x Power status %x\n",
|
||||
__func__, 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, "%s: change to speed %d\n", __func__, 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, "%s: speed of bus %x and adapter %x "
|
||||
"mismatch\n", __func__, bsp, asp);
|
||||
rc = WRONG_BUS_FREQUENCY;
|
||||
}
|
||||
return rc;
|
||||
|
@ -246,14 +249,14 @@ static int board_added(struct slot *p_slot)
|
|||
|
||||
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, "%s: Failed to power on slot\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -262,33 +265,36 @@ 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, "%s: Issue of Slot Enable command"
|
||||
" failed\n", __func__);
|
||||
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, "%s: Can't get adapter speed or bus mode "
|
||||
"mismatch\n", __func__);
|
||||
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, "%s: Can't get bus operation speed\n", __func__);
|
||||
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, "%s: Can't get max bus operation speed\n",
|
||||
__func__);
|
||||
msp = bsp;
|
||||
}
|
||||
|
||||
|
@ -296,9 +302,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 +312,27 @@ 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, "%s: Issue of Slot Enable command failed\n",
|
||||
__func__);
|
||||
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 0x%x:0x%x\n",
|
||||
p_slot->bus, p_slot->device);
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
|
@ -341,7 +348,8 @@ static int board_added(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;
|
||||
}
|
||||
|
||||
|
@ -365,7 +373,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, "In %s, hp_slot = %d\n", __func__, hp_slot);
|
||||
|
||||
/* Change status to shutdown */
|
||||
if (p_slot->is_a_board)
|
||||
|
@ -374,13 +382,15 @@ 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, "%s: Issue of Set Attention command failed\n",
|
||||
__func__);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -439,7 +449,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 +497,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 +524,17 @@ 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));
|
||||
ctrl_dbg(ctrl, "%s: button cancel\n", __func__);
|
||||
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 +544,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 +565,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 +583,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 +609,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 +640,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 +650,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 slot(%s)\n",
|
||||
slot_name(p_slot));
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -657,6 +675,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 +689,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 +710,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 +724,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);
|
||||
|
|
|
@ -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,15 @@ 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, "%s : Controller is still busy after 1 sec.\n",
|
||||
__func__);
|
||||
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 +344,8 @@ 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, "%s: Failed to issued command 0x%x "
|
||||
"(error code = %d)\n", __func__, 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, "%s: Switch opened!\n", __func__);
|
||||
break;
|
||||
case 2:
|
||||
retval = INVALID_CMD;
|
||||
err("%s: Invalid HPC command!\n", __func__);
|
||||
ctrl_err(ctrl, "%s: Invalid HPC command!\n", __func__);
|
||||
break;
|
||||
case 4:
|
||||
retval = INVALID_SPEED_MODE;
|
||||
err("%s: Invalid bus speed/mode!\n", __func__);
|
||||
ctrl_err(ctrl, "%s: Invalid bus speed/mode!\n", __func__);
|
||||
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, "%s: Slot %x with intr, slot register = %x\n",
|
||||
__func__, 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;
|
||||
}
|
||||
|
||||
|
@ -958,34 +958,38 @@ 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, "%s : cap_offset == 0\n", __func__);
|
||||
goto abort;
|
||||
}
|
||||
dbg("%s: cap_offset = %x\n", __func__, ctrl->cap_offset);
|
||||
ctrl_dbg(ctrl, "%s: cap_offset = %x\n", __func__,
|
||||
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, "%s: cannot read base_offset\n",
|
||||
__func__);
|
||||
goto abort;
|
||||
}
|
||||
|
||||
rc = shpc_indirect_read(ctrl, 3, &tempdword);
|
||||
if (rc) {
|
||||
err("%s: cannot read slot config\n", __func__);
|
||||
ctrl_err(ctrl, "%s: cannot read slot config\n",
|
||||
__func__);
|
||||
goto abort;
|
||||
}
|
||||
num_slots = tempdword & SLOT_NUM;
|
||||
dbg("%s: num_slots (indirect) %x\n", __func__, num_slots);
|
||||
ctrl_dbg(ctrl, "%s: num_slots (indirect) %x\n",
|
||||
__func__, 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, "%s: cannot read creg "
|
||||
"(index = %d)\n", __func__, i);
|
||||
goto abort;
|
||||
}
|
||||
dbg("%s: offset %d: value %x\n", __func__,i,
|
||||
tempdword);
|
||||
ctrl_dbg(ctrl, "%s: offset %d: value %x\n",
|
||||
__func__, i, tempdword);
|
||||
}
|
||||
|
||||
ctrl->mmio_base =
|
||||
|
@ -993,30 +997,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, "%s: pci_enable_device failed\n", __func__);
|
||||
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, "%s: cannot reserve MMIO region\n", __func__);
|
||||
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, "%s: cannot remap MMIO region %lx @ %lx\n",
|
||||
__func__, 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, "%s: ctrl->creg %p\n", __func__, ctrl->creg);
|
||||
|
||||
mutex_init(&ctrl->crit_sect);
|
||||
mutex_init(&ctrl->cmd_lock);
|
||||
|
@ -1035,21 +1040,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, "%s: SERR_INTR_ENABLE = %x\n", __func__, 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, "%s: SERR_INTR_ENABLE = %x\n", __func__, 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, "%s: Default Logical Slot Register %d "
|
||||
"value %x\n", __func__, 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 +1071,26 @@ 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, "%s: request_irq %d for hpc%d (returns %d)\n",
|
||||
__func__, 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, "%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);
|
||||
|
||||
/*
|
||||
* If this is the first controller to be initialized,
|
||||
|
@ -1102,8 +1109,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, "%s: Default Logical Slot Register %d "
|
||||
"value %x\n", __func__, 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 +1123,8 @@ 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, "%s: SERR_INTR_ENABLE = %x\n",
|
||||
__func__, tempdword);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -101,18 +101,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 %x:%x, cannot hot-add\n",
|
||||
pci_name(dev), 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 +123,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 +140,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 +171,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: bus/dev = %x/%x\n",
|
||||
__func__, p_slot->bus, p_slot->device);
|
||||
|
||||
for (j=0; j<8 ; j++) {
|
||||
struct pci_dev* temp = pci_get_slot(parent,
|
||||
|
@ -177,16 +182,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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue