hpsa: dont meddle with hw which isn't ours (cciss)
The hpsa driver touches the hardware before checking the pci-id table. This way, especially in kdump, it may confuse the proper driver (cciss). Signed-off-by: Tomas Henzl <thenzl@redhat.com> Acked-by: Don Brace <Don.Brace@pmcs.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
b9ea9dcdb9
commit
6b6c1cd7da
|
@ -5733,7 +5733,7 @@ static int controller_reset_failed(struct CfgTable __iomem *cfgtable)
|
||||||
/* This does a hard reset of the controller using PCI power management
|
/* This does a hard reset of the controller using PCI power management
|
||||||
* states or the using the doorbell register.
|
* states or the using the doorbell register.
|
||||||
*/
|
*/
|
||||||
static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev)
|
static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev, u32 board_id)
|
||||||
{
|
{
|
||||||
u64 cfg_offset;
|
u64 cfg_offset;
|
||||||
u32 cfg_base_addr;
|
u32 cfg_base_addr;
|
||||||
|
@ -5744,7 +5744,6 @@ static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev)
|
||||||
int rc;
|
int rc;
|
||||||
struct CfgTable __iomem *cfgtable;
|
struct CfgTable __iomem *cfgtable;
|
||||||
u32 use_doorbell;
|
u32 use_doorbell;
|
||||||
u32 board_id;
|
|
||||||
u16 command_register;
|
u16 command_register;
|
||||||
|
|
||||||
/* For controllers as old as the P600, this is very nearly
|
/* For controllers as old as the P600, this is very nearly
|
||||||
|
@ -5760,11 +5759,6 @@ static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev)
|
||||||
* using the doorbell register.
|
* using the doorbell register.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rc = hpsa_lookup_board_id(pdev, &board_id);
|
|
||||||
if (rc < 0) {
|
|
||||||
dev_warn(&pdev->dev, "Board ID not found\n");
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
if (!ctlr_is_resettable(board_id)) {
|
if (!ctlr_is_resettable(board_id)) {
|
||||||
dev_warn(&pdev->dev, "Controller not resettable\n");
|
dev_warn(&pdev->dev, "Controller not resettable\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -6346,7 +6340,7 @@ static void hpsa_hba_inquiry(struct ctlr_info *h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hpsa_init_reset_devices(struct pci_dev *pdev)
|
static int hpsa_init_reset_devices(struct pci_dev *pdev, u32 board_id)
|
||||||
{
|
{
|
||||||
int rc, i;
|
int rc, i;
|
||||||
void __iomem *vaddr;
|
void __iomem *vaddr;
|
||||||
|
@ -6382,7 +6376,7 @@ static int hpsa_init_reset_devices(struct pci_dev *pdev)
|
||||||
iounmap(vaddr);
|
iounmap(vaddr);
|
||||||
|
|
||||||
/* Reset the controller with a PCI power-cycle or via doorbell */
|
/* Reset the controller with a PCI power-cycle or via doorbell */
|
||||||
rc = hpsa_kdump_hard_reset_controller(pdev);
|
rc = hpsa_kdump_hard_reset_controller(pdev, board_id);
|
||||||
|
|
||||||
/* -ENOTSUPP here means we cannot reset the controller
|
/* -ENOTSUPP here means we cannot reset the controller
|
||||||
* but it's already (and still) up and running in
|
* but it's already (and still) up and running in
|
||||||
|
@ -6843,11 +6837,18 @@ static int hpsa_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
struct ctlr_info *h;
|
struct ctlr_info *h;
|
||||||
int try_soft_reset = 0;
|
int try_soft_reset = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
u32 board_id;
|
||||||
|
|
||||||
if (number_of_controllers == 0)
|
if (number_of_controllers == 0)
|
||||||
printk(KERN_INFO DRIVER_NAME "\n");
|
printk(KERN_INFO DRIVER_NAME "\n");
|
||||||
|
|
||||||
rc = hpsa_init_reset_devices(pdev);
|
rc = hpsa_lookup_board_id(pdev, &board_id);
|
||||||
|
if (rc < 0) {
|
||||||
|
dev_warn(&pdev->dev, "Board ID not found\n");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = hpsa_init_reset_devices(pdev, board_id);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
if (rc != -ENOTSUPP)
|
if (rc != -ENOTSUPP)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
Loading…
Reference in New Issue