From 3e9f4f0c1ec4be2d76113f911813d9433731dbff Mon Sep 17 00:00:00 2001 From: adam radford Date: Tue, 14 Dec 2010 18:56:07 -0800 Subject: [PATCH] --- yaml --- r: 226863 b: refs/heads/master c: b6d5d8808b4c563a56414a4c4c6d652b5f87c088 h: refs/heads/master i: 226861: 6816404949718f46c76f11dba20dbc9fc6b72ede 226859: 3af95becbe5b31debb4b839383d0eb9866efbb4c 226855: 7310c365b1c8c249936b33208a3bdadbd178a0f6 226847: 43016eeae3eca92ea68d129168841cc0ba0384ae v: v3 --- [refs] | 2 +- trunk/drivers/scsi/megaraid/megaraid_sas.h | 1 + .../drivers/scsi/megaraid/megaraid_sas_base.c | 29 +++++++------------ 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index 76ac3c3b0c82..d200b801690e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 80d9da98b4034edd31f6bacdb96c7489c4460173 +refs/heads/master: b6d5d8808b4c563a56414a4c4c6d652b5f87c088 diff --git a/trunk/drivers/scsi/megaraid/megaraid_sas.h b/trunk/drivers/scsi/megaraid/megaraid_sas.h index ff9845c72a67..0e09a0ff479d 100644 --- a/trunk/drivers/scsi/megaraid/megaraid_sas.h +++ b/trunk/drivers/scsi/megaraid/megaraid_sas.h @@ -1338,6 +1338,7 @@ struct megasas_instance { u8 msi_flag; struct msix_entry msixentry; + unsigned long bar; }; enum { diff --git a/trunk/drivers/scsi/megaraid/megaraid_sas_base.c b/trunk/drivers/scsi/megaraid/megaraid_sas_base.c index 2318183f9a67..6e7bb7ca9869 100644 --- a/trunk/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/trunk/drivers/scsi/megaraid/megaraid_sas_base.c @@ -3236,21 +3236,14 @@ static int megasas_init_mfi(struct megasas_instance *instance) u32 tmp_sectors; struct megasas_register_set __iomem *reg_set; struct megasas_ctrl_info *ctrl_info; - /* - * Map the message registers - */ - if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1078GEN2) || - (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY) || - (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) || - (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0079GEN2)) { - instance->base_addr = pci_resource_start(instance->pdev, 1); - } else { - instance->base_addr = pci_resource_start(instance->pdev, 0); - } - - if (pci_request_selected_regions(instance->pdev, - pci_select_bars(instance->pdev, IORESOURCE_MEM), - "megasas: LSI")) { + unsigned long bar_list; + + /* Find first memory bar */ + bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM); + instance->bar = find_first_bit(&bar_list, sizeof(unsigned long)); + instance->base_addr = pci_resource_start(instance->pdev, instance->bar); + if (pci_request_selected_regions(instance->pdev, instance->bar, + "megasas: LSI")) { printk(KERN_DEBUG "megasas: IO memory region busy!\n"); return -EBUSY; } @@ -3411,8 +3404,7 @@ static int megasas_init_mfi(struct megasas_instance *instance) iounmap(instance->reg_set); fail_ioremap: - pci_release_selected_regions(instance->pdev, - pci_select_bars(instance->pdev, IORESOURCE_MEM)); + pci_release_selected_regions(instance->pdev, instance->bar); return -EINVAL; } @@ -3432,8 +3424,7 @@ static void megasas_release_mfi(struct megasas_instance *instance) iounmap(instance->reg_set); - pci_release_selected_regions(instance->pdev, - pci_select_bars(instance->pdev, IORESOURCE_MEM)); + pci_release_selected_regions(instance->pdev, instance->bar); } /**