From: David Daney <hidden> Date: 2015-10-20 23:04:54
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
The original patches are from Sean O. Stalley. I made a few tweaks,
but feel that it is substancially Sean's work, so I am keeping the
patch set version numbering scheme going.
Tested on Cavium ThunderX system with 4 Root Complexes containing 50
devices/bridges provisioned with EA.
Here is Sean's description of the patches:
PCI Enhanced Allocation is a new method of allocating MMIO & IO
resources for PCI devices & bridges. It can be used instead
of the traditional PCI method of using BARs.
EA entries are hardware-initialized to a fixed address.
Unlike BARs, regions described by EA are cannot be moved.
Because of this, only devices which are permanently connected to
the PCI bus can use EA. A removable PCI card must not use EA.
This patchset adds support for using EA entries instead of BARs
on Root Complex Integrated Endpoints.
The Enhanced Allocation ECN is publicly available here:
https://www.pcisig.com/specifications/conventional/ECN_Enhanced_Allocation_23_Oct_2014_Final.pdf
Changes from V1:
- Use generic PCI resource claim functions (instead of EA-specific functions)
- Only add support for RCiEPs (instead of all devices).
- Removed some debugging messages leftover from early testing.
Changes from V2 (By David Daney):
- Add ea_cap to struct pci_device, to aid in finding the EA capability.
- Factored EA entity decoding into a separate function.
- Add functions to find EA entities by BEI or Property.
- Add handling of EA provisioned bridges.
- Add handling of EA SRIOV BARs.
- Try to assign proper resource parent so that SRIOV device creation can occur.
Changes from V3 (By David Daney):
- Discarded V3 changes and started over fresh based on Sean's V2.
- Add more support/checking for Entry Properties.
- Allow EA behind bridges.
- Rewrite some error messages.
- Add patch 3/5 to prevent resizing, and better handle
assigning, of fixed EA resources.
- Add patch 4/5 to handle EA provisioned SRIOV devices.
- Add patch 5/5 to handle EA provisioned bridges.
Changes from V4 (By David Daney):
- Drop patch 5/5 to handle EA provisioned bridges.
- Drop cases for bridge resources in 2/5.
- Drop unnecessary fallback resource parent handling in 3/5
- Small code formatting improvements.
Changes from V5: (By David Daney) cosmetic only, as requested by Bjorn Helgaas:
- Split previous 3/4 into two patches, which are now 1/5 and 2/5
- Improve indentation of register definitions.
- Renamed PCI_EA_P_VIRT_MEM* to PCI_EA_P_VF_MEM*
- Remove use of BIT() macro from register definitions.
- Changed debug messages when probing EA entries to be like this:
.
.
.
pci 0002:01:00.0: [177d:a01e] type 00 class 0x020000
pci 0002:01:00.0: EA - BEI 0, Prop 0x00: [mem 0x843000000000-0x84303fffffff 64bit]
pci 0002:01:00.0: EA - BEI 4, Prop 0x00: [mem 0x843060000000-0x8430600fffff 64bit]
pci 0002:01:00.0: EA - BEI 9, Prop 0x04: [mem 0x8430a0000000-0x8430a01fffff 64bit]
pci 0002:01:00.0: EA - BEI 13, Prop 0x04: [mem 0x8430e0000000-0x8430e01fffff 64bit]
pci 0002:01:00.0: VF(n) BAR0 space: [mem 0x8430a0000000-0x8430afffffff 64bit] (contains BAR0 for 128 VFs)
pci 0002:01:00.0: VF(n) BAR4 space: [mem 0x8430e0000000-0x8430efffffff 64bit] (contains BAR4 for 128 VFs)
.
.
.
pci 0004:21:00.0: [1a03:2000] type 00 class 0x030000
pci 0004:21:00.0: reg 0x10: [mem 0x881010000000-0x881010ffffff]
pci 0004:21:00.0: reg 0x14: [mem 0x881011000000-0x88101101ffff]
pci 0004:21:00.0: reg 0x18: [io 0x0000-0x007f]
pci 0004:21:00.0: supports D1 D2
.
.
.
BEI and Prop values are represented as decimal and hexadecimal
respectively to match the EA specification.
David Daney (3):
PCI: Handle IORESOURCE_PCI_FIXED when sizing resources.
PCI: Handle IORESOURCE_PCI_FIXED when assigning resources.
PCI: Handle Enhanced Allocation (EA) capability for SRIOV devices.
Sean O. Stalley (2):
PCI: Add Enhanced Allocation register entries
PCI: Add support for Enhanced Allocation devices
drivers/pci/iov.c | 11 ++-
drivers/pci/pci.c | 183 ++++++++++++++++++++++++++++++++++++++++++
drivers/pci/pci.h | 1 +
drivers/pci/probe.c | 3 +
drivers/pci/setup-bus.c | 50 +++++++++++-
include/uapi/linux/pci_regs.h | 44 +++++++++-
6 files changed, 286 insertions(+), 6 deletions(-)
--
1.9.1
From: David Daney <hidden> Date: 2015-10-20 23:05:09
From: "Sean O. Stalley" <redacted>
Add support for devices using Enhanced Allocation entries instead of BARs.
This patch allows the kernel to parse the EA Extended Capability structure
in PCI configspace and claim the BAR-equivalent resources.
Signed-off-by: Sean O. Stalley <redacted>
[david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org: Add more support/checking for Entry Properties,
allow EA behind bridges, rewrite some error messages.]
Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
---
drivers/pci/pci.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/pci/pci.h | 1 +
drivers/pci/probe.c | 3 +
3 files changed, 181 insertions(+)
@@ -2148,6 +2148,183 @@ void pci_pm_init(struct pci_dev *dev)}}+staticunsignedlongpci_ea_set_flags(structpci_dev*dev,u8prop)+{+unsignedlongflags=IORESOURCE_PCI_FIXED;++switch(prop){+casePCI_EA_P_MEM:+casePCI_EA_P_VF_MEM:+flags|=IORESOURCE_MEM;+break;+casePCI_EA_P_MEM_PREFETCH:+casePCI_EA_P_VF_MEM_PREFETCH:+flags|=IORESOURCE_MEM|IORESOURCE_PREFETCH;+break;+casePCI_EA_P_IO:+flags|=IORESOURCE_IO;+break;+default:+return0;+}++returnflags;+}++staticstructresource*pci_ea_get_resource(structpci_dev*dev,u8bei,+u8prop)+{+if(bei<=PCI_EA_BEI_BAR5&&prop<=PCI_EA_P_IO)+return&dev->resource[bei];+elseif(bei==PCI_EA_BEI_ROM)+return&dev->resource[PCI_ROM_RESOURCE];+else+returnNULL;+}++/* Read an Enhanced Allocation (EA) entry */+staticintpci_ea_read(structpci_dev*dev,intoffset)+{+structresource*res;+intent_offset=offset;+intent_size;+resource_size_tstart;+resource_size_tend;+unsignedlongflags;+u32dw0;+u32base;+u32max_offset;+u8prop;+boolsupport_64=(sizeof(resource_size_t)>=8);++pci_read_config_dword(dev,ent_offset,&dw0);+ent_offset+=4;++/* Entry size field indicates DWORDs after 1st */+ent_size=((dw0&PCI_EA_ES)+1)<<2;++if(!(dw0&PCI_EA_ENABLE))/* Entry not enabled */+gotoout;++prop=PCI_EA_PP(dw0);+/*+*IfthePropertyisinthereservedrange,trytheSecondary+*Propertyinstead.+*/+if(prop>PCI_EA_P_BRIDGE_IO&&prop<PCI_EA_P_MEM_RESERVED)+prop=PCI_EA_SP(dw0);+if(prop>PCI_EA_P_BRIDGE_IO)+gotoout;++res=pci_ea_get_resource(dev,PCI_EA_BEI(dw0),prop);+if(!res){+dev_err(&dev->dev,"Unsupported EA entry BEI: %u\n",+PCI_EA_BEI(dw0));+gotoout;+}++flags=pci_ea_set_flags(dev,prop);+if(!flags){+dev_err(&dev->dev,"Unsupported EA properties: %u\n",prop);+gotoout;+}++/* Read Base */+pci_read_config_dword(dev,ent_offset,&base);+start=(base&PCI_EA_FIELD_MASK);+ent_offset+=4;++/* Read MaxOffset */+pci_read_config_dword(dev,ent_offset,&max_offset);+ent_offset+=4;++/* Read Base MSBs (if 64-bit entry) */+if(base&PCI_EA_IS_64){+u32base_upper;++pci_read_config_dword(dev,ent_offset,&base_upper);+ent_offset+=4;++flags|=IORESOURCE_MEM_64;++/* entry starts above 32-bit boundary, can't use */+if(!support_64&&base_upper)+gotoout;++if(support_64)+start|=((u64)base_upper<<32);+}++end=start+(max_offset|0x03);++/* Read MaxOffset MSBs (if 64-bit entry) */+if(max_offset&PCI_EA_IS_64){+u32max_offset_upper;++pci_read_config_dword(dev,ent_offset,&max_offset_upper);+ent_offset+=4;++flags|=IORESOURCE_MEM_64;++/* entry too big, can't use */+if(!support_64&&max_offset_upper)+gotoout;++if(support_64)+end+=((u64)max_offset_upper<<32);+}++if(end<start){+dev_err(&dev->dev,"EA Entry crosses address boundary\n");+gotoout;+}++if(ent_size!=ent_offset-offset){+dev_err(&dev->dev,+"EA Entry Size (%d) does not match length read (%d)\n",+ent_size,ent_offset-offset);+gotoout;+}++res->name=pci_name(dev);+res->start=start;+res->end=end;+res->flags=flags;+dev_printk(KERN_DEBUG,&dev->dev,"EA - BEI %2u, Prop 0x%02x: %pR\n",+PCI_EA_BEI(dw0),prop,res);+out:+returnoffset+ent_size;+}++/* Enhanced Allocation Initalization */+voidpci_ea_init(structpci_dev*dev)+{+intea;+u8num_ent;+intoffset;+inti;++/* find PCI EA capability in list */+ea=pci_find_capability(dev,PCI_CAP_ID_EA);+if(!ea)+return;++/* determine the number of entries */+pci_bus_read_config_byte(dev->bus,dev->devfn,ea+PCI_EA_NUM_ENT,+&num_ent);+num_ent&=PCI_EA_NUM_ENT_MASK;++offset=ea+PCI_EA_FIRST_ENT;++/* Skip DWORD 2 for type 1 functions */+if(dev->hdr_type==PCI_HEADER_TYPE_BRIDGE)+offset+=4;++/* parse each EA entry */+for(i=0;i<num_ent;++i)+offset=pci_ea_read(dev,offset);+}+staticvoidpci_add_saved_cap(structpci_dev*pci_dev,structpci_cap_saved_state*new_cap){
From: David Daney <hidden> Date: 2015-10-20 23:05:13
From: David Daney <redacted>
SRIOV BARs can be specified via EA entries. Extend the EA parser to
extract the SRIOV BAR resources, and modify sriov_init() to use
resources previously obtained via EA.
Acked-by: Sean O. Stalley <redacted>
Signed-off-by: David Daney <redacted>
---
drivers/pci/iov.c | 11 +++++++++--
drivers/pci/pci.c | 6 ++++++
2 files changed, 15 insertions(+), 2 deletions(-)
From: David Daney <hidden> Date: 2015-10-20 23:07:33
From: David Daney <redacted>
The new Enhanced Allocation (EA) capability support (patches to
follow) creates resources with the IORESOURCE_PCI_FIXED set. During
resource assignment in pci_bus_assign_resources(),
IORESOURCE_PCI_FIXED resources are not given a parent. This, in turn,
causes pci_enable_resources() to fail with a "not claimed" error.
So, In __pci_bus_assign_resources(), for IORESOURCE_PCI_FIXED resources,
try to request the resource from a parent bus.
Acked-by: Sean O. Stalley <redacted>
Signed-off-by: David Daney <redacted>
---
drivers/pci/setup-bus.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
From: David Daney <hidden> Date: 2015-10-20 23:07:38
From: David Daney <redacted>
The new Enhanced Allocation (EA) capability support (patches to
follow) creates resources with the IORESOURCE_PCI_FIXED set. Since
these resources cannot be relocated or resized, their alignment is not
really defined, and it is therefore not specified. This causes a
problem in pbus_size_mem() where resources with unspecified alignment
are disabled.
So, in pbus_size_mem() skip IORESOURCE_PCI_FIXED resources, instead of
disabling them.
Acked-by: Sean O. Stalley <redacted>
Signed-off-by: David Daney <redacted>
---
drivers/pci/setup-bus.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
On Tue, Oct 20, 2015 at 04:04:37PM -0700, David Daney wrote:
From: David Daney <redacted>
The original patches are from Sean O. Stalley. I made a few tweaks,
but feel that it is substancially Sean's work, so I am keeping the
patch set version numbering scheme going.
Tested on Cavium ThunderX system with 4 Root Complexes containing 50
devices/bridges provisioned with EA.
Here is Sean's description of the patches:
PCI Enhanced Allocation is a new method of allocating MMIO & IO
resources for PCI devices & bridges. It can be used instead
of the traditional PCI method of using BARs.
EA entries are hardware-initialized to a fixed address.
Unlike BARs, regions described by EA are cannot be moved.
Because of this, only devices which are permanently connected to
the PCI bus can use EA. A removable PCI card must not use EA.
This patchset adds support for using EA entries instead of BARs
on Root Complex Integrated Endpoints.
The Enhanced Allocation ECN is publicly available here:
https://www.pcisig.com/specifications/conventional/ECN_Enhanced_Allocation_23_Oct_2014_Final.pdf
Changes from V1:
- Use generic PCI resource claim functions (instead of EA-specific functions)
- Only add support for RCiEPs (instead of all devices).
- Removed some debugging messages leftover from early testing.
Changes from V2 (By David Daney):
- Add ea_cap to struct pci_device, to aid in finding the EA capability.
- Factored EA entity decoding into a separate function.
- Add functions to find EA entities by BEI or Property.
- Add handling of EA provisioned bridges.
- Add handling of EA SRIOV BARs.
- Try to assign proper resource parent so that SRIOV device creation can occur.
Changes from V3 (By David Daney):
- Discarded V3 changes and started over fresh based on Sean's V2.
- Add more support/checking for Entry Properties.
- Allow EA behind bridges.
- Rewrite some error messages.
- Add patch 3/5 to prevent resizing, and better handle
assigning, of fixed EA resources.
- Add patch 4/5 to handle EA provisioned SRIOV devices.
- Add patch 5/5 to handle EA provisioned bridges.
Changes from V4 (By David Daney):
- Drop patch 5/5 to handle EA provisioned bridges.
- Drop cases for bridge resources in 2/5.
- Drop unnecessary fallback resource parent handling in 3/5
- Small code formatting improvements.
Changes from V5: (By David Daney) cosmetic only, as requested by Bjorn Helgaas:
- Split previous 3/4 into two patches, which are now 1/5 and 2/5
- Improve indentation of register definitions.
- Renamed PCI_EA_P_VIRT_MEM* to PCI_EA_P_VF_MEM*
- Remove use of BIT() macro from register definitions.
- Changed debug messages when probing EA entries to be like this:
.
.
.
pci 0002:01:00.0: [177d:a01e] type 00 class 0x020000
pci 0002:01:00.0: EA - BEI 0, Prop 0x00: [mem 0x843000000000-0x84303fffffff 64bit]
pci 0002:01:00.0: EA - BEI 4, Prop 0x00: [mem 0x843060000000-0x8430600fffff 64bit]
pci 0002:01:00.0: EA - BEI 9, Prop 0x04: [mem 0x8430a0000000-0x8430a01fffff 64bit]
pci 0002:01:00.0: EA - BEI 13, Prop 0x04: [mem 0x8430e0000000-0x8430e01fffff 64bit]
pci 0002:01:00.0: VF(n) BAR0 space: [mem 0x8430a0000000-0x8430afffffff 64bit] (contains BAR0 for 128 VFs)
pci 0002:01:00.0: VF(n) BAR4 space: [mem 0x8430e0000000-0x8430efffffff 64bit] (contains BAR4 for 128 VFs)
.
.
.
pci 0004:21:00.0: [1a03:2000] type 00 class 0x030000
pci 0004:21:00.0: reg 0x10: [mem 0x881010000000-0x881010ffffff]
pci 0004:21:00.0: reg 0x14: [mem 0x881011000000-0x88101101ffff]
pci 0004:21:00.0: reg 0x18: [io 0x0000-0x007f]
pci 0004:21:00.0: supports D1 D2
.
.
.
BEI and Prop values are represented as decimal and hexadecimal
respectively to match the EA specification.
David Daney (3):
PCI: Handle IORESOURCE_PCI_FIXED when sizing resources.
PCI: Handle IORESOURCE_PCI_FIXED when assigning resources.
PCI: Handle Enhanced Allocation (EA) capability for SRIOV devices.
Sean O. Stalley (2):
PCI: Add Enhanced Allocation register entries
PCI: Add support for Enhanced Allocation devices
drivers/pci/iov.c | 11 ++-
drivers/pci/pci.c | 183 ++++++++++++++++++++++++++++++++++++++++++
drivers/pci/pci.h | 1 +
drivers/pci/probe.c | 3 +
drivers/pci/setup-bus.c | 50 +++++++++++-
include/uapi/linux/pci_regs.h | 44 +++++++++-
6 files changed, 286 insertions(+), 6 deletions(-)
Applied to pci/enhanced-allocation for v4.4, thanks, David!
I tweaked a couple trivial things and added a couple almost trivial patches
on top. Here are the additions; let me know if you see anything wrong.
Bjorn
commit 6457d085fade7d96a3aa6c5dca848fd82b4a4fa4
Author: Bjorn Helgaas [off-list ref]
Date: Wed Oct 21 09:34:15 2015 -0500
PCI: Make Enhanced Allocation bitmasks more obvious
Expand bitmask #defines completely. This puts the shift in the code
instead of in the #define, but it makes it more obvious in the header file
how fields in the register are laid out.
No functional change.
Signed-off-by: Bjorn Helgaas [off-list ref]
@@ -2195,7 +2195,7 @@ static int pci_ea_read(struct pci_dev *dev, int offset)intent_size,ent_offset=offset;resource_size_tstart,end;unsignedlongflags;-u32dw0,base,max_offset;+u32dw0,bei,base,max_offset;u8prop;boolsupport_64=(sizeof(resource_size_t)>=8);
@@ -2208,20 +2208,21 @@ static int pci_ea_read(struct pci_dev *dev, int offset)if(!(dw0&PCI_EA_ENABLE))/* Entry not enabled */gotoout;-prop=PCI_EA_PP(dw0);+bei=(dw0&PCI_EA_BEI)>>4;+prop=(dw0&PCI_EA_PP)>>8;+/**IfthePropertyisinthereservedrange,trytheSecondary*Propertyinstead.*/if(prop>PCI_EA_P_BRIDGE_IO&&prop<PCI_EA_P_MEM_RESERVED)-prop=PCI_EA_SP(dw0);+prop=(dw0&PCI_EA_SP)>>16;if(prop>PCI_EA_P_BRIDGE_IO)gotoout;-res=pci_ea_get_resource(dev,PCI_EA_BEI(dw0),prop);+res=pci_ea_get_resource(dev,bei,prop);if(!res){-dev_err(&dev->dev,"Unsupported EA entry BEI: %u\n",-PCI_EA_BEI(dw0));+dev_err(&dev->dev,"Unsupported EA entry BEI: %u\n",bei);gotoout;}
@@ -2293,7 +2294,7 @@ static int pci_ea_read(struct pci_dev *dev, int offset)res->end=end;res->flags=flags;dev_printk(KERN_DEBUG,&dev->dev,"EA - BEI %2u, Prop 0x%02x: %pR\n",-PCI_EA_BEI(dw0),prop,res);+bei,prop,res);out:returnoffset+ent_size;}
commit 6985dcc83d70f019523ba9ff499898261f33c937
Author: Bjorn Helgaas [off-list ref]
Date: Wed Oct 21 09:53:39 2015 -0500
PCI: Expand Enhanced Allocation BAR output
An Enhanced Allocation Capability entry with BEI 0 fills in
dev->resource[0] just like a real BAR 0 would, but non-EA experts might not
connect "EA - BEI 0" with BAR 0.
Decode the EA jargon a little bit, e.g., change this:
pci 0002:01:00.0: EA - BEI 0, Prop 0x00: [mem 0x84300000-0x84303fff]
to this:
pci 0002:01:00.0: BAR 0: [mem 0x84300000-0x84303fff] (from Enhanced Allocation, properties 0x00)
Signed-off-by: Bjorn Helgaas [off-list ref]
From: David Daney <hidden> Date: 2015-10-21 15:40:12
On 10/21/2015 08:14 AM, Bjorn Helgaas wrote:
[...]
Applied to pci/enhanced-allocation for v4.4, thanks, David!
I tweaked a couple trivial things and added a couple almost trivial patches
on top. Here are the additions; let me know if you see anything wrong.
Thanks for working with us on this.
Your additional changes look to be correct to me, I will give them a
test within the next few days.
David Daney
quoted hunk
Bjorn
commit 6457d085fade7d96a3aa6c5dca848fd82b4a4fa4
Author: Bjorn Helgaas [off-list ref]
Date: Wed Oct 21 09:34:15 2015 -0500
PCI: Make Enhanced Allocation bitmasks more obvious
Expand bitmask #defines completely. This puts the shift in the code
instead of in the #define, but it makes it more obvious in the header file
how fields in the register are laid out.
No functional change.
Signed-off-by: Bjorn Helgaas [off-list ref]
@@ -2195,7 +2195,7 @@ static int pci_ea_read(struct pci_dev *dev, int offset)intent_size,ent_offset=offset;resource_size_tstart,end;unsignedlongflags;-u32dw0,base,max_offset;+u32dw0,bei,base,max_offset;u8prop;boolsupport_64=(sizeof(resource_size_t)>=8);
@@ -2208,20 +2208,21 @@ static int pci_ea_read(struct pci_dev *dev, int offset)if(!(dw0&PCI_EA_ENABLE))/* Entry not enabled */gotoout;-prop=PCI_EA_PP(dw0);+bei=(dw0&PCI_EA_BEI)>>4;+prop=(dw0&PCI_EA_PP)>>8;+/**IfthePropertyisinthereservedrange,trytheSecondary*Propertyinstead.*/if(prop>PCI_EA_P_BRIDGE_IO&&prop<PCI_EA_P_MEM_RESERVED)-prop=PCI_EA_SP(dw0);+prop=(dw0&PCI_EA_SP)>>16;if(prop>PCI_EA_P_BRIDGE_IO)gotoout;-res=pci_ea_get_resource(dev,PCI_EA_BEI(dw0),prop);+res=pci_ea_get_resource(dev,bei,prop);if(!res){-dev_err(&dev->dev,"Unsupported EA entry BEI: %u\n",-PCI_EA_BEI(dw0));+dev_err(&dev->dev,"Unsupported EA entry BEI: %u\n",bei);gotoout;}
@@ -2293,7 +2294,7 @@ static int pci_ea_read(struct pci_dev *dev, int offset)res->end=end;res->flags=flags;dev_printk(KERN_DEBUG,&dev->dev,"EA - BEI %2u, Prop 0x%02x: %pR\n",-PCI_EA_BEI(dw0),prop,res);+bei,prop,res);out:returnoffset+ent_size;}
commit 6985dcc83d70f019523ba9ff499898261f33c937
Author: Bjorn Helgaas [off-list ref]
Date: Wed Oct 21 09:53:39 2015 -0500
PCI: Expand Enhanced Allocation BAR output
An Enhanced Allocation Capability entry with BEI 0 fills in
dev->resource[0] just like a real BAR 0 would, but non-EA experts might not
connect "EA - BEI 0" with BAR 0.
Decode the EA jargon a little bit, e.g., change this:
pci 0002:01:00.0: EA - BEI 0, Prop 0x00: [mem 0x84300000-0x84303fff]
to this:
pci 0002:01:00.0: BAR 0: [mem 0x84300000-0x84303fff] (from Enhanced Allocation, properties 0x00)
Signed-off-by: Bjorn Helgaas [off-list ref]
From: Sean O. Stalley <hidden> Date: 2015-10-21 17:32:45
On Wed, Oct 21, 2015 at 10:14:59AM -0500, Bjorn Helgaas wrote:
Applied to pci/enhanced-allocation for v4.4, thanks, David!
I tweaked a couple trivial things and added a couple almost trivial patches
on top. Here are the additions; let me know if you see anything wrong.
Bjorn
Thanks Bjorn,
I tested out your additions. They worked for me.
-Sean
From: David Daney <hidden> Date: 2015-10-29 20:57:22
Bjorn,
A small snafu...
On 10/20/2015 04:04 PM, David Daney wrote:
quoted hunk
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
The new Enhanced Allocation (EA) capability support (patches to
follow) creates resources with the IORESOURCE_PCI_FIXED set. Since
these resources cannot be relocated or resized, their alignment is not
really defined, and it is therefore not specified. This causes a
problem in pbus_size_mem() where resources with unspecified alignment
are disabled.
So, in pbus_size_mem() skip IORESOURCE_PCI_FIXED resources, instead of
disabling them.
Acked-by: Sean O. Stalley <redacted>
Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
---
drivers/pci/setup-bus.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
@@ -1037,9 +1037,10 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,structresource*r=&dev->resource[i];resource_size_tr_size;-if(r->parent||((r->flags&mask)!=type&&-(r->flags&mask)!=type2&&-(r->flags&mask)!=type3))+if(r->parent||(r->flags|IORESOURCE_PCI_FIXED)||
Should be:
r->flags & IORESOURCE_PCI_FIXED
With the erroneous '|', sizing of bridge resources can break.
Q: How to fix this.
A) Replace this patch entirely?
B) A patch on top of this one?
On Thu, Oct 29, 2015 at 01:57:10PM -0700, David Daney wrote:
Bjorn,
A small snafu...
On 10/20/2015 04:04 PM, David Daney wrote:
quoted
From: David Daney <redacted>
The new Enhanced Allocation (EA) capability support (patches to
follow) creates resources with the IORESOURCE_PCI_FIXED set. Since
these resources cannot be relocated or resized, their alignment is not
really defined, and it is therefore not specified. This causes a
problem in pbus_size_mem() where resources with unspecified alignment
are disabled.
So, in pbus_size_mem() skip IORESOURCE_PCI_FIXED resources, instead of
disabling them.
Acked-by: Sean O. Stalley <redacted>
Signed-off-by: David Daney <redacted>
---
drivers/pci/setup-bus.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
@@ -1037,9 +1037,10 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,structresource*r=&dev->resource[i];resource_size_tr_size;-if(r->parent||((r->flags&mask)!=type&&-(r->flags&mask)!=type2&&-(r->flags&mask)!=type3))+if(r->parent||(r->flags|IORESOURCE_PCI_FIXED)||
Should be:
r->flags & IORESOURCE_PCI_FIXED
With the erroneous '|', sizing of bridge resources can break.
Q: How to fix this.
A) Replace this patch entirely?
B) A patch on top of this one?