[SCSI] lpfc 8.3.9: PCI Changes to lpfc driver

- Call pci_save_state() after pci_restore_state() call to cope
  with kernel change.
- Add support for PCI BAR region 0 if BAR0 is a 64 bit register.

Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
James Smart 2010-02-12 14:40:50 -05:00 committed by James Bottomley
parent f98c96b0b6
commit 1dfb5a47bc
2 changed files with 32 additions and 12 deletions

View File

@ -77,10 +77,6 @@ struct lpfc_sli_intf {
#define LPFC_SLI_INTF_VALID 6 #define LPFC_SLI_INTF_VALID 6
}; };
#define LPFC_SLI4_BAR0 1
#define LPFC_SLI4_BAR1 2
#define LPFC_SLI4_BAR2 4
#define LPFC_SLI4_MBX_EMBED true #define LPFC_SLI4_MBX_EMBED true
#define LPFC_SLI4_MBX_NEMBED false #define LPFC_SLI4_MBX_NEMBED false

View File

@ -6079,16 +6079,20 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba)
/* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the /* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the
* number of bytes required by each mapping. They are actually * number of bytes required by each mapping. They are actually
* mapping to the PCI BAR regions 1, 2, and 4 by the SLI4 device. * mapping to the PCI BAR regions 0 or 1, 2, and 4 by the SLI4 device.
*/ */
phba->pci_bar0_map = pci_resource_start(pdev, LPFC_SLI4_BAR0); if (pci_resource_start(pdev, 0)) {
bar0map_len = pci_resource_len(pdev, LPFC_SLI4_BAR0); phba->pci_bar0_map = pci_resource_start(pdev, 0);
bar0map_len = pci_resource_len(pdev, 0);
} else {
phba->pci_bar0_map = pci_resource_start(pdev, 1);
bar0map_len = pci_resource_len(pdev, 1);
}
phba->pci_bar1_map = pci_resource_start(pdev, 2);
bar1map_len = pci_resource_len(pdev, 2);
phba->pci_bar1_map = pci_resource_start(pdev, LPFC_SLI4_BAR1); phba->pci_bar2_map = pci_resource_start(pdev, 4);
bar1map_len = pci_resource_len(pdev, LPFC_SLI4_BAR1); bar2map_len = pci_resource_len(pdev, 4);
phba->pci_bar2_map = pci_resource_start(pdev, LPFC_SLI4_BAR2);
bar2map_len = pci_resource_len(pdev, LPFC_SLI4_BAR2);
/* Map SLI4 PCI Config Space Register base to a kernel virtual addr */ /* Map SLI4 PCI Config Space Register base to a kernel virtual addr */
phba->sli4_hba.conf_regs_memmap_p = phba->sli4_hba.conf_regs_memmap_p =
@ -7174,6 +7178,12 @@ lpfc_pci_resume_one_s3(struct pci_dev *pdev)
pci_set_power_state(pdev, PCI_D0); pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev); pci_restore_state(pdev);
/*
* As the new kernel behavior of pci_restore_state() API call clears
* device saved_state flag, need to save the restored state again.
*/
pci_save_state(pdev);
if (pdev->is_busmaster) if (pdev->is_busmaster)
pci_set_master(pdev); pci_set_master(pdev);
@ -7357,6 +7367,13 @@ lpfc_io_slot_reset_s3(struct pci_dev *pdev)
} }
pci_restore_state(pdev); pci_restore_state(pdev);
/*
* As the new kernel behavior of pci_restore_state() API call clears
* device saved_state flag, need to save the restored state again.
*/
pci_save_state(pdev);
if (pdev->is_busmaster) if (pdev->is_busmaster)
pci_set_master(pdev); pci_set_master(pdev);
@ -7766,6 +7783,13 @@ lpfc_pci_resume_one_s4(struct pci_dev *pdev)
/* Restore device state from PCI config space */ /* Restore device state from PCI config space */
pci_set_power_state(pdev, PCI_D0); pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev); pci_restore_state(pdev);
/*
* As the new kernel behavior of pci_restore_state() API call clears
* device saved_state flag, need to save the restored state again.
*/
pci_save_state(pdev);
if (pdev->is_busmaster) if (pdev->is_busmaster)
pci_set_master(pdev); pci_set_master(pdev);