From: Yinghai Lu <yinghai@kernel.org>
To: Bjorn Helgaas <bhelgaas@google.com>,
David Miller <davem@davemloft.net>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Wei Yang <weiyang@linux.vnet.ibm.com>, TJ <linux@iam.tj>,
Yijing Wang <wangyijing@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH v4 50/52] PCI, x86: Add pci=assign_pref_bars to reallocate pref BARs
Date: Thu, 20 Aug 2015 23:21:05 -0700 [thread overview]
Message-ID: <1440138067-4314-51-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1440138067-4314-1-git-send-email-yinghai@kernel.org>
Now some BIOS tend to allocate pref MMIO under non-pref MMIO, or allocate
64bit pref MMIO under 4G.
Add pci=assign_pref_bars to clear and allocate resource to pref BARS.
So could reallocate pref mmio64 above 4G and pref under bridges pref BARs.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
arch/x86/include/asm/pci_x86.h | 1 +
arch/x86/pci/common.c | 3 +++
arch/x86/pci/i386.c | 56 ++++++++++++++++++++++++++----------------
3 files changed, 39 insertions(+), 21 deletions(-)
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
index ddac225..7b634b8 100644
--- a/arch/x86/include/asm/pci_x86.h
+++ b/arch/x86/include/asm/pci_x86.h
@@ -34,6 +34,7 @@ do { \
#define PCI_NOASSIGN_ROMS 0x80000
#define PCI_ROOT_NO_CRS 0x100000
#define PCI_NOASSIGN_BARS 0x200000
+#define PCI_ASSIGN_PREF_BARS 0x400000
extern unsigned int pci_probe;
extern unsigned long pirq_table_addr;
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index e8df922..dcc7c48 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -606,6 +606,9 @@ char *__init pcibios_setup(char *str)
} else if (!strcmp(str, "assign-busses")) {
pci_probe |= PCI_ASSIGN_ALL_BUSSES;
return NULL;
+ } else if (!strcmp(str, "assign_pref_bars")) {
+ pci_probe |= PCI_ASSIGN_PREF_BARS;
+ return NULL;
} else if (!strcmp(str, "use_crs")) {
pci_probe |= PCI_USE__CRS;
return NULL;
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 3f17726..0b74efe 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -208,16 +208,25 @@ static void pcibios_allocate_bridge_resources(struct pci_dev *dev)
continue;
if (r->parent) /* Already allocated */
continue;
- if (!r->start || pci_claim_bridge_resource(dev, idx) < 0) {
- /*
- * Something is wrong with the region.
- * Invalidate the resource to prevent
- * child resource allocations in this
- * range.
- */
- r->start = r->end = 0;
- r->flags = 0;
- }
+
+ if ((r->flags & IORESOURCE_PREFETCH) &&
+ (pci_probe & PCI_ASSIGN_PREF_BARS))
+ goto clear;
+
+ if (!r->start)
+ goto clear;
+
+ if (pci_claim_bridge_resource(dev, idx) == 0)
+ continue;
+
+clear:
+ /*
+ * Something is wrong with the region.
+ * Invalidate the resource to prevent
+ * child resource allocations in this range.
+ */
+ r->start = r->end = 0;
+ r->flags = 0;
}
}
@@ -263,21 +272,26 @@ static void pcibios_allocate_dev_resources(struct pci_dev *dev, int pass)
else
disabled = !(command & PCI_COMMAND_MEMORY);
if (pass == disabled) {
+ if ((r->flags & IORESOURCE_PREFETCH) &&
+ (pci_probe & PCI_ASSIGN_PREF_BARS))
+ goto clear;
+
dev_dbg(&dev->dev,
"BAR %d: reserving %pr (d=%d, p=%d)\n",
idx, r, disabled, pass);
- if (pci_claim_resource(dev, idx) < 0) {
- if (r->flags & IORESOURCE_PCI_FIXED) {
- dev_info(&dev->dev, "BAR %d %pR is immovable\n",
- idx, r);
- } else {
- /* We'll assign a new address later */
- pcibios_save_fw_addr(dev,
- idx, r->start);
- r->end -= r->start;
- r->start = 0;
- }
+ if (pci_claim_resource(dev, idx) == 0)
+ continue;
+ if (r->flags & IORESOURCE_PCI_FIXED) {
+ dev_info(&dev->dev, "BAR %d %pR is immovable\n",
+ idx, r);
+ continue;
}
+
+clear:
+ /* We'll assign a new address later */
+ pcibios_save_fw_addr(dev, idx, r->start);
+ r->end -= r->start;
+ r->start = 0;
}
}
if (!pass) {
--
1.8.4.5
next prev parent reply other threads:[~2015-08-21 6:24 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-21 6:20 [PATCH v4 00/52] PCI: Resource allocation cleanup for v4.3 Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 01/52] PCI: Cleanup res_to_dev_res() printout Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 02/52] PCI: Reuse res_to_dev_res() in reassign_resources_sorted() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 03/52] PCI: Use correct align for optional only resources during sorting Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 04/52] PCI: Optimize bus min_align/size calculation during sizing Yinghai Lu
2015-09-14 20:21 ` Bjorn Helgaas
2015-09-14 21:37 ` Yinghai Lu
2015-09-15 14:57 ` Bjorn Helgaas
2015-09-16 19:33 ` Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 05/52] PCI: Optimize bus align/size calculation for optional " Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 06/52] PCI: Don't add too much optional size for hotplug bridge MMIO Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 07/52] PCI: Reorder resources list for required/optional resources Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 08/52] PCI: Remove duplicated code for resource sorting Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 09/52] PCI: Rename pdev_sort_resources() to pdev_assign_resources_prepare() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 10/52] PCI: Treat ROM resource as optional during realloc Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 11/52] PCI: Add debug printout during releasing partial assigned resources Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 12/52] PCI: Simplify res reference using in __assign_resources_sorted() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 13/52] PCI, acpiphp: Add missing realloc list checking after resource allocation Yinghai Lu
2015-08-24 22:09 ` Rafael J. Wysocki
2015-08-24 22:14 ` Yinghai Lu
2015-08-25 0:37 ` Rafael J. Wysocki
2015-08-25 0:14 ` Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 14/52] PCI: Add __add_to_list() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 15/52] PCI: Cache window alignment value during bus sizing Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 16/52] PCI: Check if resource is allocated before trying to assign one Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 17/52] PCI: Separate out save_resources()/restore_resources() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 18/52] PCI: Move comment to pci_need_to_release() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 19/52] PCI: Separate required+optional assigning to another function Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 20/52] PCI: Skip required+optional if there is no optional Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 21/52] PCI: Move saved required resource list out of required+optional assigning Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 22/52] PCI: Add alt_size ressource allocation support Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 23/52] PCI: Add support for more than two alt_size under same bridge Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 24/52] PCI: Better support for two alt_size Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 25/52] PCI: Fix size calculation with old_size on rescan path Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 26/52] PCI: Don't add too much optional size for hotplug bridge io Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 27/52] PCI: Move ISA io port align out of calculate_iosize() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 28/52] PCI: Don't add too much io port for hotplug bridge with old size Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 29/52] PCI: Unify calculate_size() for io port and MMIO Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 30/52] PCI: Allow bridge optional only io port resource required size to be 0 Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 31/52] PCI: Unify skip_ioresource_align() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 32/52] PCI: Kill macro checking for bus io port sizing Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 33/52] resources: Split out __allocate_resource() Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 34/52] resources: Make allocate_resource() return best fit resource Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 35/52] PCI: Check pref compatible bit for mem64 resource of PCIe device Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 36/52] PCI: Only treat non-pref mmio64 as pref if all bridges have MEM_64 Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 37/52] PCI: Add has_mem64 for struct host_bridge Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 38/52] PCI: Only treat non-pref mmio64 as pref if host bridge has mmio64 Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 39/52] PCI: Restore pref MMIO allocation logic for host bridge without mmio64 Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 40/52] sparc/PCI: Add mem64 resource parsing for root bus Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 41/52] sparc/PCI: Add IORESOURCE_MEM_64 for 64-bit resource in OF parsing Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 42/52] powerpc/PCI: " Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 43/52] OF/PCI: Add IORESOURCE_MEM_64 for 64-bit resource Yinghai Lu
2015-08-21 18:18 ` Rob Herring
2015-08-21 18:24 ` Yinghai Lu
2015-08-21 6:20 ` [PATCH v4 44/52] PCI: Treat optional as required in first try for bridge rescan Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 45/52] PCI: Get new realloc size for bridge for last try Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 46/52] PCI: Don't release sibling bridge resources during hotplug Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 47/52] PCI: Don't release fixed resource for realloc Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 48/52] PCI: Claim fixed resource during remove/rescan path Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 49/52] PCI: Set resource to FIXED for LSI devices Yinghai Lu
2015-08-21 6:21 ` Yinghai Lu [this message]
2015-08-21 6:21 ` [PATCH v4 51/52] PCI: Introduce resource_disabled() Yinghai Lu
2015-08-21 6:21 ` [PATCH v4 52/52] PCI: Don't set flags to 0 when assign resource fail Yinghai Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1440138067-4314-51-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@iam.tj \
--cc=wangyijing@huawei.com \
--cc=weiyang@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).