Merge branch 'pci/misc' into next
* pci/misc: PCI: pciehp: Drop suspend/resume ENTRY messages PCI: Document MPS parameters pci=pcie_bus_safe, pci=pcie_bus_perf, etc PCI: Document hpiosize= and hpmemsize= resource reservation parameters PCI: Use PCI Express Capability accessor PCI: Introduce accessor to retrieve PCIe Capabilities Register PCI: Kill pci_is_reassigndev()
This commit is contained in:
commit
f2dfcde4cc
@ -2227,6 +2227,21 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
This sorting is done to get a device
|
This sorting is done to get a device
|
||||||
order compatible with older (<= 2.4) kernels.
|
order compatible with older (<= 2.4) kernels.
|
||||||
nobfsort Don't sort PCI devices into breadth-first order.
|
nobfsort Don't sort PCI devices into breadth-first order.
|
||||||
|
pcie_bus_tune_off Disable PCIe MPS (Max Payload Size)
|
||||||
|
tuning and use the BIOS-configured MPS defaults.
|
||||||
|
pcie_bus_safe Set every device's MPS to the largest value
|
||||||
|
supported by all devices below the root complex.
|
||||||
|
pcie_bus_perf Set device MPS to the largest allowable MPS
|
||||||
|
based on its parent bus. Also set MRRS (Max
|
||||||
|
Read Request Size) to the largest supported
|
||||||
|
value (no larger than the MPS that the device
|
||||||
|
or bus can support) for best performance.
|
||||||
|
pcie_bus_peer2peer Set every device's MPS to 128B, which
|
||||||
|
every device is guaranteed to support. This
|
||||||
|
configuration allows peer-to-peer DMA between
|
||||||
|
any pair of devices, possibly at the cost of
|
||||||
|
reduced performance. This also guarantees
|
||||||
|
that hot-added devices will work.
|
||||||
cbiosize=nn[KMG] The fixed amount of bus space which is
|
cbiosize=nn[KMG] The fixed amount of bus space which is
|
||||||
reserved for the CardBus bridge's IO window.
|
reserved for the CardBus bridge's IO window.
|
||||||
The default value is 256 bytes.
|
The default value is 256 bytes.
|
||||||
@ -2248,6 +2263,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
the default.
|
the default.
|
||||||
off: Turn ECRC off
|
off: Turn ECRC off
|
||||||
on: Turn ECRC on.
|
on: Turn ECRC on.
|
||||||
|
hpiosize=nn[KMG] The fixed amount of bus space which is
|
||||||
|
reserved for hotplug bridge's IO window.
|
||||||
|
Default size is 256 bytes.
|
||||||
|
hpmemsize=nn[KMG] The fixed amount of bus space which is
|
||||||
|
reserved for hotplug bridge's memory window.
|
||||||
|
Default size is 2 megabytes.
|
||||||
realloc= Enable/disable reallocating PCI bridge resources
|
realloc= Enable/disable reallocating PCI bridge resources
|
||||||
if allocations done by BIOS are too small to
|
if allocations done by BIOS are too small to
|
||||||
accommodate resources required by all child
|
accommodate resources required by all child
|
||||||
|
@ -472,7 +472,7 @@ EXPORT_SYMBOL_GPL(pci_cfg_access_unlock);
|
|||||||
|
|
||||||
static inline int pcie_cap_version(const struct pci_dev *dev)
|
static inline int pcie_cap_version(const struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
return dev->pcie_flags_reg & PCI_EXP_FLAGS_VERS;
|
return pcie_caps_reg(dev) & PCI_EXP_FLAGS_VERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool pcie_cap_has_devctl(const struct pci_dev *dev)
|
static inline bool pcie_cap_has_devctl(const struct pci_dev *dev)
|
||||||
@ -497,7 +497,7 @@ static inline bool pcie_cap_has_sltctl(const struct pci_dev *dev)
|
|||||||
return pcie_cap_version(dev) > 1 ||
|
return pcie_cap_version(dev) > 1 ||
|
||||||
type == PCI_EXP_TYPE_ROOT_PORT ||
|
type == PCI_EXP_TYPE_ROOT_PORT ||
|
||||||
(type == PCI_EXP_TYPE_DOWNSTREAM &&
|
(type == PCI_EXP_TYPE_DOWNSTREAM &&
|
||||||
dev->pcie_flags_reg & PCI_EXP_FLAGS_SLOT);
|
pcie_caps_reg(dev) & PCI_EXP_FLAGS_SLOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool pcie_cap_has_rtctl(const struct pci_dev *dev)
|
static inline bool pcie_cap_has_rtctl(const struct pci_dev *dev)
|
||||||
|
@ -294,7 +294,6 @@ static void pciehp_remove(struct pcie_device *dev)
|
|||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static int pciehp_suspend (struct pcie_device *dev)
|
static int pciehp_suspend (struct pcie_device *dev)
|
||||||
{
|
{
|
||||||
dev_info(&dev->device, "%s ENTRY\n", __func__);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,7 +303,6 @@ static int pciehp_resume (struct pcie_device *dev)
|
|||||||
struct slot *slot;
|
struct slot *slot;
|
||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
dev_info(&dev->device, "%s ENTRY\n", __func__);
|
|
||||||
ctrl = get_service_data(dev);
|
ctrl = get_service_data(dev);
|
||||||
|
|
||||||
/* reinitialize the chipset's event detection logic */
|
/* reinitialize the chipset's event detection logic */
|
||||||
|
@ -3748,18 +3748,6 @@ resource_size_t pci_specified_resource_alignment(struct pci_dev *dev)
|
|||||||
return align;
|
return align;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* pci_is_reassigndev - check if specified PCI is target device to reassign
|
|
||||||
* @dev: the PCI device to check
|
|
||||||
*
|
|
||||||
* RETURNS: non-zero for PCI device is a target device to reassign,
|
|
||||||
* or zero is not.
|
|
||||||
*/
|
|
||||||
int pci_is_reassigndev(struct pci_dev *dev)
|
|
||||||
{
|
|
||||||
return (pci_specified_resource_alignment(dev) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function disables memory decoding and releases memory resources
|
* This function disables memory decoding and releases memory resources
|
||||||
* of the device specified by kernel's boot parameter 'pci=resource_alignment='.
|
* of the device specified by kernel's boot parameter 'pci=resource_alignment='.
|
||||||
@ -3774,7 +3762,9 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev)
|
|||||||
resource_size_t align, size;
|
resource_size_t align, size;
|
||||||
u16 command;
|
u16 command;
|
||||||
|
|
||||||
if (!pci_is_reassigndev(dev))
|
/* check if specified PCI is target device to reassign */
|
||||||
|
align = pci_specified_resource_alignment(dev);
|
||||||
|
if (!align)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
|
if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
|
||||||
@ -3790,7 +3780,6 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev)
|
|||||||
command &= ~PCI_COMMAND_MEMORY;
|
command &= ~PCI_COMMAND_MEMORY;
|
||||||
pci_write_config_word(dev, PCI_COMMAND, command);
|
pci_write_config_word(dev, PCI_COMMAND, command);
|
||||||
|
|
||||||
align = pci_specified_resource_alignment(dev);
|
|
||||||
for (i = 0; i < PCI_BRIDGE_RESOURCES; i++) {
|
for (i = 0; i < PCI_BRIDGE_RESOURCES; i++) {
|
||||||
r = &dev->resource[i];
|
r = &dev->resource[i];
|
||||||
if (!(r->flags & IORESOURCE_MEM))
|
if (!(r->flags & IORESOURCE_MEM))
|
||||||
|
@ -272,7 +272,7 @@ static int get_port_device_capability(struct pci_dev *dev)
|
|||||||
|
|
||||||
/* Hot-Plug Capable */
|
/* Hot-Plug Capable */
|
||||||
if ((cap_mask & PCIE_PORT_SERVICE_HP) &&
|
if ((cap_mask & PCIE_PORT_SERVICE_HP) &&
|
||||||
dev->pcie_flags_reg & PCI_EXP_FLAGS_SLOT) {
|
pcie_caps_reg(dev) & PCI_EXP_FLAGS_SLOT) {
|
||||||
pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, ®32);
|
pcie_capability_read_dword(dev, PCI_EXP_SLTCAP, ®32);
|
||||||
if (reg32 & PCI_EXP_SLTCAP_HPC) {
|
if (reg32 & PCI_EXP_SLTCAP_HPC) {
|
||||||
services |= PCIE_PORT_SERVICE_HP;
|
services |= PCIE_PORT_SERVICE_HP;
|
||||||
|
@ -1696,13 +1696,22 @@ static inline bool pci_is_pcie(struct pci_dev *dev)
|
|||||||
return !!pci_pcie_cap(dev);
|
return !!pci_pcie_cap(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pcie_caps_reg - get the PCIe Capabilities Register
|
||||||
|
* @dev: PCI device
|
||||||
|
*/
|
||||||
|
static inline u16 pcie_caps_reg(const struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
return dev->pcie_flags_reg;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pci_pcie_type - get the PCIe device/port type
|
* pci_pcie_type - get the PCIe device/port type
|
||||||
* @dev: PCI device
|
* @dev: PCI device
|
||||||
*/
|
*/
|
||||||
static inline int pci_pcie_type(const struct pci_dev *dev)
|
static inline int pci_pcie_type(const struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
return (dev->pcie_flags_reg & PCI_EXP_FLAGS_TYPE) >> 4;
|
return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pci_request_acs(void);
|
void pci_request_acs(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user