Merge branch 'pci/enumeration'
- Support BAR sizes up to 8TB (Dongdong Liu) - Reduce warnings on hardware that doesn't support 8- or 16-bit PCI writes and hence may corrupt RW1C bits (Mark Tomlinson) * pci/enumeration: PCI: Reduce warnings on possible RW1C corruption PCI: Support BAR sizes up to 8TB
This commit is contained in:
commit
a9af571b35
@ -159,9 +159,12 @@ int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn,
|
|||||||
* write happen to have any RW1C (write-one-to-clear) bits set, we
|
* write happen to have any RW1C (write-one-to-clear) bits set, we
|
||||||
* just inadvertently cleared something we shouldn't have.
|
* just inadvertently cleared something we shouldn't have.
|
||||||
*/
|
*/
|
||||||
dev_warn_ratelimited(&bus->dev, "%d-byte config write to %04x:%02x:%02x.%d offset %#x may corrupt adjacent RW1C bits\n",
|
if (!bus->unsafe_warn) {
|
||||||
size, pci_domain_nr(bus), bus->number,
|
dev_warn(&bus->dev, "%d-byte config write to %04x:%02x:%02x.%d offset %#x may corrupt adjacent RW1C bits\n",
|
||||||
PCI_SLOT(devfn), PCI_FUNC(devfn), where);
|
size, pci_domain_nr(bus), bus->number,
|
||||||
|
PCI_SLOT(devfn), PCI_FUNC(devfn), where);
|
||||||
|
bus->unsafe_warn = 1;
|
||||||
|
}
|
||||||
|
|
||||||
mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
|
mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
|
||||||
tmp = readl(addr) & mask;
|
tmp = readl(addr) & mask;
|
||||||
|
@ -994,7 +994,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
|
|||||||
{
|
{
|
||||||
struct pci_dev *dev;
|
struct pci_dev *dev;
|
||||||
resource_size_t min_align, align, size, size0, size1;
|
resource_size_t min_align, align, size, size0, size1;
|
||||||
resource_size_t aligns[18]; /* Alignments from 1MB to 128GB */
|
resource_size_t aligns[24]; /* Alignments from 1MB to 8TB */
|
||||||
int order, max_order;
|
int order, max_order;
|
||||||
struct resource *b_res = find_bus_resource_of_type(bus,
|
struct resource *b_res = find_bus_resource_of_type(bus,
|
||||||
mask | IORESOURCE_PREFETCH, type);
|
mask | IORESOURCE_PREFETCH, type);
|
||||||
|
@ -668,6 +668,7 @@ struct pci_bus {
|
|||||||
struct bin_attribute *legacy_io; /* Legacy I/O for this bus */
|
struct bin_attribute *legacy_io; /* Legacy I/O for this bus */
|
||||||
struct bin_attribute *legacy_mem; /* Legacy mem */
|
struct bin_attribute *legacy_mem; /* Legacy mem */
|
||||||
unsigned int is_added:1;
|
unsigned int is_added:1;
|
||||||
|
unsigned int unsafe_warn:1; /* warned about RW1C config write */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
|
#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user