mirror of https://gitee.com/openkylin/linux.git
Merge branches 'pci/misc' and 'pci/msi' into next
* pci/misc: r8169: use PCI define for Max_Read_Request_Size [SCSI] esas2r: use PCI define for Max_Read_Request_Size tile: use PCI define for Max_Read_Request_Size rapidio/tsi721: use PCI define for Max_Read_Request_Size PCI: Add defines for PCIe Max_Read_Request_Size PCI/ASPM: Use standard parsing functions for sysfs setters * pci/msi: PCI: Fail MSI-X mappings if there's no space assigned to MSI-X BAR
This commit is contained in:
commit
66e5bde9e5
|
@ -245,7 +245,7 @@ static void fixup_read_and_payload_sizes(void)
|
|||
{
|
||||
struct pci_dev *dev = NULL;
|
||||
int smallest_max_payload = 0x1; /* Tile maxes out at 256 bytes. */
|
||||
int max_read_size = 0x2; /* Limit to 512 byte reads. */
|
||||
int max_read_size = PCI_EXP_DEVCTL_READRQ_512B;
|
||||
u16 new_values;
|
||||
|
||||
/* Scan for the smallest maximum payload size. */
|
||||
|
@ -258,7 +258,7 @@ static void fixup_read_and_payload_sizes(void)
|
|||
}
|
||||
|
||||
/* Now, set the max_payload_size for all devices to that value. */
|
||||
new_values = (max_read_size << 12) | (smallest_max_payload << 5);
|
||||
new_values = max_read_size | (smallest_max_payload << 5);
|
||||
for_each_pci_dev(dev)
|
||||
pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
|
||||
PCI_EXP_DEVCTL_PAYLOAD | PCI_EXP_DEVCTL_READRQ,
|
||||
|
|
|
@ -298,12 +298,16 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
|
|||
map_irq.entry_nr = nvec;
|
||||
} else if (type == PCI_CAP_ID_MSIX) {
|
||||
int pos;
|
||||
unsigned long flags;
|
||||
u32 table_offset, bir;
|
||||
|
||||
pos = dev->msix_cap;
|
||||
pci_read_config_dword(dev, pos + PCI_MSIX_TABLE,
|
||||
&table_offset);
|
||||
bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
|
||||
flags = pci_resource_flags(dev, bir);
|
||||
if (!flags || (flags & IORESOURCE_UNSET))
|
||||
return -EINVAL;
|
||||
|
||||
map_irq.table_base = pci_resource_start(dev, bir);
|
||||
map_irq.entry_nr = msidesc->msi_attrib.entry_nr;
|
||||
|
|
|
@ -4915,7 +4915,7 @@ static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
|
|||
|
||||
RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0);
|
||||
RTL_W8(Config4, RTL_R8(Config4) | Jumbo_En1);
|
||||
rtl_tx_performance_tweak(tp->pci_dev, 0x2 << MAX_READ_REQUEST_SHIFT);
|
||||
rtl_tx_performance_tweak(tp->pci_dev, PCI_EXP_DEVCTL_READRQ_512B);
|
||||
}
|
||||
|
||||
static void r8168c_hw_jumbo_disable(struct rtl8169_private *tp)
|
||||
|
@ -4948,7 +4948,7 @@ static void r8168e_hw_jumbo_enable(struct rtl8169_private *tp)
|
|||
RTL_W8(MaxTxPacketSize, 0x3f);
|
||||
RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0);
|
||||
RTL_W8(Config4, RTL_R8(Config4) | 0x01);
|
||||
rtl_tx_performance_tweak(tp->pci_dev, 0x2 << MAX_READ_REQUEST_SHIFT);
|
||||
rtl_tx_performance_tweak(tp->pci_dev, PCI_EXP_DEVCTL_READRQ_512B);
|
||||
}
|
||||
|
||||
static void r8168e_hw_jumbo_disable(struct rtl8169_private *tp)
|
||||
|
@ -4964,7 +4964,7 @@ static void r8168e_hw_jumbo_disable(struct rtl8169_private *tp)
|
|||
static void r8168b_0_hw_jumbo_enable(struct rtl8169_private *tp)
|
||||
{
|
||||
rtl_tx_performance_tweak(tp->pci_dev,
|
||||
(0x2 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
|
||||
PCI_EXP_DEVCTL_READRQ_512B | PCI_EXP_DEVCTL_NOSNOOP_EN);
|
||||
}
|
||||
|
||||
static void r8168b_0_hw_jumbo_disable(struct rtl8169_private *tp)
|
||||
|
|
|
@ -694,11 +694,16 @@ static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries)
|
|||
{
|
||||
resource_size_t phys_addr;
|
||||
u32 table_offset;
|
||||
unsigned long flags;
|
||||
u8 bir;
|
||||
|
||||
pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
|
||||
&table_offset);
|
||||
bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
|
||||
flags = pci_resource_flags(dev, bir);
|
||||
if (!flags || (flags & IORESOURCE_UNSET))
|
||||
return NULL;
|
||||
|
||||
table_offset &= PCI_MSIX_TABLE_OFFSET;
|
||||
phys_addr = pci_resource_start(dev, bir) + table_offset;
|
||||
|
||||
|
|
|
@ -859,7 +859,10 @@ static ssize_t link_state_store(struct device *dev,
|
|||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct pcie_link_state *link, *root = pdev->link_state->root;
|
||||
u32 val = buf[0] - '0', state = 0;
|
||||
u32 val, state = 0;
|
||||
|
||||
if (kstrtouint(buf, 10, &val))
|
||||
return -EINVAL;
|
||||
|
||||
if (aspm_disabled)
|
||||
return -EPERM;
|
||||
|
@ -900,15 +903,14 @@ static ssize_t clk_ctl_store(struct device *dev,
|
|||
size_t n)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
int state;
|
||||
bool state;
|
||||
|
||||
if (n < 1)
|
||||
if (strtobool(buf, &state))
|
||||
return -EINVAL;
|
||||
state = buf[0]-'0';
|
||||
|
||||
down_read(&pci_bus_sem);
|
||||
mutex_lock(&aspm_lock);
|
||||
pcie_set_clkpm_nocheck(pdev->link_state, !!state);
|
||||
pcie_set_clkpm_nocheck(pdev->link_state, state);
|
||||
mutex_unlock(&aspm_lock);
|
||||
up_read(&pci_bus_sem);
|
||||
|
||||
|
|
|
@ -2430,7 +2430,7 @@ static int tsi721_probe(struct pci_dev *pdev,
|
|||
pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL,
|
||||
PCI_EXP_DEVCTL_READRQ | PCI_EXP_DEVCTL_RELAX_EN |
|
||||
PCI_EXP_DEVCTL_NOSNOOP_EN,
|
||||
0x2 << MAX_READ_REQUEST_SZ_SHIFT);
|
||||
PCI_EXP_DEVCTL_READRQ_512B);
|
||||
|
||||
/* Adjust PCIe completion timeout. */
|
||||
pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL2, 0xf, 0x2);
|
||||
|
|
|
@ -72,8 +72,6 @@
|
|||
#define TSI721_MSIXPBA_OFFSET 0x2a000
|
||||
#define TSI721_PCIECFG_EPCTL 0x400
|
||||
|
||||
#define MAX_READ_REQUEST_SZ_SHIFT 12
|
||||
|
||||
/*
|
||||
* Event Management Registers
|
||||
*/
|
||||
|
|
|
@ -813,12 +813,13 @@ static void esas2r_init_pci_cfg_space(struct esas2r_adapter *a)
|
|||
pci_read_config_word(a->pcid, pcie_cap_reg + PCI_EXP_DEVCTL,
|
||||
&devcontrol);
|
||||
|
||||
if ((devcontrol & PCI_EXP_DEVCTL_READRQ) > 0x2000) {
|
||||
if ((devcontrol & PCI_EXP_DEVCTL_READRQ) >
|
||||
PCI_EXP_DEVCTL_READRQ_512B) {
|
||||
esas2r_log(ESAS2R_LOG_INFO,
|
||||
"max read request size > 512B");
|
||||
|
||||
devcontrol &= ~PCI_EXP_DEVCTL_READRQ;
|
||||
devcontrol |= 0x2000;
|
||||
devcontrol |= PCI_EXP_DEVCTL_READRQ_512B;
|
||||
pci_write_config_word(a->pcid,
|
||||
pcie_cap_reg + PCI_EXP_DEVCTL,
|
||||
devcontrol);
|
||||
|
|
|
@ -451,6 +451,10 @@
|
|||
#define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
|
||||
#define PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
|
||||
#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */
|
||||
#define PCI_EXP_DEVCTL_READRQ_128B 0x0000 /* 128 Bytes */
|
||||
#define PCI_EXP_DEVCTL_READRQ_256B 0x1000 /* 256 Bytes */
|
||||
#define PCI_EXP_DEVCTL_READRQ_512B 0x2000 /* 512 Bytes */
|
||||
#define PCI_EXP_DEVCTL_READRQ_1024B 0x3000 /* 1024 Bytes */
|
||||
#define PCI_EXP_DEVCTL_BCR_FLR 0x8000 /* Bridge Configuration Retry / FLR */
|
||||
#define PCI_EXP_DEVSTA 10 /* Device Status */
|
||||
#define PCI_EXP_DEVSTA_CED 0x0001 /* Correctable Error Detected */
|
||||
|
|
Loading…
Reference in New Issue