Commit e4705596 authored by Dely Sy's avatar Dely Sy Committed by Greg Kroah-Hartman

[PATCH] PCI Hotplug: Fix interpretation of 0/1 for MRL in SHPC & PCI-E hot-plug

This patch contains fixes for interpretation of 0/1 for MRL
to match pcihpview, bus speed definition in shpchp_hpc.c etc.
parent 6e302b79
...@@ -43,7 +43,7 @@ enum pci_bus_speed { ...@@ -43,7 +43,7 @@ enum pci_bus_speed {
PCI_SPEED_100MHz_PCIX_266 = 0x0a, PCI_SPEED_100MHz_PCIX_266 = 0x0a,
PCI_SPEED_133MHz_PCIX_266 = 0x0b, PCI_SPEED_133MHz_PCIX_266 = 0x0b,
PCI_SPEED_66MHz_PCIX_533 = 0x11, PCI_SPEED_66MHz_PCIX_533 = 0x11,
PCI_SPEED_100MHz_PCIX_533 = 0X12, PCI_SPEED_100MHz_PCIX_533 = 0x12,
PCI_SPEED_133MHz_PCIX_533 = 0x13, PCI_SPEED_133MHz_PCIX_533 = 0x13,
PCI_SPEED_UNKNOWN = 0xff, PCI_SPEED_UNKNOWN = 0xff,
}; };
......
...@@ -135,7 +135,7 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id) ...@@ -135,7 +135,7 @@ u8 pciehp_handle_switch_change(u8 hp_slot, void *inst_id)
p_slot->hpc_ops->get_adapter_status(p_slot, &(func->presence_save)); p_slot->hpc_ops->get_adapter_status(p_slot, &(func->presence_save));
p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (!getstatus) { if (getstatus) {
/* /*
* Switch opened * Switch opened
*/ */
...@@ -1705,7 +1705,7 @@ int pciehp_enable_slot (struct slot *p_slot) ...@@ -1705,7 +1705,7 @@ int pciehp_enable_slot (struct slot *p_slot)
} }
rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (rc || !getstatus) { if (rc || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); up(&p_slot->ctrl->crit_sect);
return (0); return (0);
...@@ -1792,7 +1792,7 @@ int pciehp_disable_slot (struct slot *p_slot) ...@@ -1792,7 +1792,7 @@ int pciehp_disable_slot (struct slot *p_slot)
} }
ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (ret || !getstatus) { if (ret || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); up(&p_slot->ctrl->crit_sect);
return (0); return (0);
......
...@@ -138,7 +138,7 @@ u8 shpchp_handle_switch_change(u8 hp_slot, void *inst_id) ...@@ -138,7 +138,7 @@ u8 shpchp_handle_switch_change(u8 hp_slot, void *inst_id)
p_slot->hpc_ops->get_adapter_status(p_slot, &(func->presence_save)); p_slot->hpc_ops->get_adapter_status(p_slot, &(func->presence_save));
p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (!getstatus) { if (getstatus) {
/* /*
* Switch opened * Switch opened
*/ */
...@@ -1219,7 +1219,7 @@ static u32 board_added(struct pci_func * func, struct controller * ctrl) ...@@ -1219,7 +1219,7 @@ static u32 board_added(struct pci_func * func, struct controller * ctrl)
up(&ctrl->crit_sect); up(&ctrl->crit_sect);
} }
} else { } else {
if ((bus_speed > 0x4) || (max_bus_speed > 0x4)) { if (bus_speed > 0x4) {
err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed); err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed);
return WRONG_BUS_FREQUENCY; return WRONG_BUS_FREQUENCY;
} }
...@@ -1302,7 +1302,7 @@ static u32 board_added(struct pci_func * func, struct controller * ctrl) ...@@ -1302,7 +1302,7 @@ static u32 board_added(struct pci_func * func, struct controller * ctrl)
up(&ctrl->crit_sect); up(&ctrl->crit_sect);
} }
} else { } else {
if ((bus_speed > 0x2) || (max_bus_speed > 0x2)) { if (bus_speed > 0x2) {
err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed); err("%s: speed of bus %x and adapter %x mismatch\n", __FUNCTION__, bus_speed, adapter_speed);
return WRONG_BUS_FREQUENCY; return WRONG_BUS_FREQUENCY;
} }
...@@ -2107,7 +2107,7 @@ int shpchp_enable_slot (struct slot *p_slot) ...@@ -2107,7 +2107,7 @@ int shpchp_enable_slot (struct slot *p_slot)
return (0); return (0);
} }
rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (rc || !getstatus) { if (rc || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); up(&p_slot->ctrl->crit_sect);
return (0); return (0);
...@@ -2192,7 +2192,7 @@ int shpchp_disable_slot (struct slot *p_slot) ...@@ -2192,7 +2192,7 @@ int shpchp_disable_slot (struct slot *p_slot)
return (0); return (0);
} }
ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (ret || !getstatus) { if (ret || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); up(&p_slot->ctrl->crit_sect);
return (0); return (0);
......
...@@ -104,12 +104,12 @@ ...@@ -104,12 +104,12 @@
#define PCIX_66MHZ_ECC 0x5 #define PCIX_66MHZ_ECC 0x5
#define PCIX_100MHZ_ECC 0x6 #define PCIX_100MHZ_ECC 0x6
#define PCIX_133MHZ_ECC 0x7 #define PCIX_133MHZ_ECC 0x7
#define PCIX_66MHZ_266 0x8 #define PCIX_66MHZ_266 0x9
#define PCIX_100MHZ_266 0x9 #define PCIX_100MHZ_266 0xa
#define PCIX_133MHZ_266 0x0a #define PCIX_133MHZ_266 0xb
#define PCIX_66MHZ_533 0x0b #define PCIX_66MHZ_533 0x11
#define PCIX_100MHZ_533 0x0c #define PCIX_100MHZ_533 0x12
#define PCIX_133MHZ_533 0x0d #define PCIX_133MHZ_533 0x13
/* Slot Configuration */ /* Slot Configuration */
#define SLOT_NUM 0x0000001F #define SLOT_NUM 0x0000001F
...@@ -464,7 +464,8 @@ static int hpc_get_latch_status(struct slot *slot, u8 *status) ...@@ -464,7 +464,8 @@ static int hpc_get_latch_status(struct slot *slot, u8 *status)
slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot)); slot_reg = readl(php_ctlr->creg + SLOT1 + 4*(slot->hp_slot));
slot_status = (u16)slot_reg; slot_status = (u16)slot_reg;
*status = ((slot_status & 0x0100) == 0) ? 1 : 0; *status = ((slot_status & 0x0100) == 0) ? 0 : 1; /* 0 -> close; 1 -> open */
DBG_LEAVE_ROUTINE DBG_LEAVE_ROUTINE
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment