Commit 66e5bde9 authored by Bjorn Helgaas's avatar Bjorn Helgaas

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
...@@ -245,7 +245,7 @@ static void fixup_read_and_payload_sizes(void) ...@@ -245,7 +245,7 @@ static void fixup_read_and_payload_sizes(void)
{ {
struct pci_dev *dev = NULL; struct pci_dev *dev = NULL;
int smallest_max_payload = 0x1; /* Tile maxes out at 256 bytes. */ 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; u16 new_values;
/* Scan for the smallest maximum payload size. */ /* Scan for the smallest maximum payload size. */
...@@ -258,7 +258,7 @@ static void fixup_read_and_payload_sizes(void) ...@@ -258,7 +258,7 @@ static void fixup_read_and_payload_sizes(void)
} }
/* Now, set the max_payload_size for all devices to that value. */ /* 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) for_each_pci_dev(dev)
pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL, pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
PCI_EXP_DEVCTL_PAYLOAD | PCI_EXP_DEVCTL_READRQ, 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) ...@@ -298,12 +298,16 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
map_irq.entry_nr = nvec; map_irq.entry_nr = nvec;
} else if (type == PCI_CAP_ID_MSIX) { } else if (type == PCI_CAP_ID_MSIX) {
int pos; int pos;
unsigned long flags;
u32 table_offset, bir; u32 table_offset, bir;
pos = dev->msix_cap; pos = dev->msix_cap;
pci_read_config_dword(dev, pos + PCI_MSIX_TABLE, pci_read_config_dword(dev, pos + PCI_MSIX_TABLE,
&table_offset); &table_offset);
bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR); 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.table_base = pci_resource_start(dev, bir);
map_irq.entry_nr = msidesc->msi_attrib.entry_nr; map_irq.entry_nr = msidesc->msi_attrib.entry_nr;
......
...@@ -4915,7 +4915,7 @@ static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp) ...@@ -4915,7 +4915,7 @@ static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0); RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0);
RTL_W8(Config4, RTL_R8(Config4) | Jumbo_En1); 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) static void r8168c_hw_jumbo_disable(struct rtl8169_private *tp)
...@@ -4948,7 +4948,7 @@ static void r8168e_hw_jumbo_enable(struct rtl8169_private *tp) ...@@ -4948,7 +4948,7 @@ static void r8168e_hw_jumbo_enable(struct rtl8169_private *tp)
RTL_W8(MaxTxPacketSize, 0x3f); RTL_W8(MaxTxPacketSize, 0x3f);
RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0); RTL_W8(Config3, RTL_R8(Config3) | Jumbo_En0);
RTL_W8(Config4, RTL_R8(Config4) | 0x01); 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) static void r8168e_hw_jumbo_disable(struct rtl8169_private *tp)
...@@ -4964,7 +4964,7 @@ 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) static void r8168b_0_hw_jumbo_enable(struct rtl8169_private *tp)
{ {
rtl_tx_performance_tweak(tp->pci_dev, 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) 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) ...@@ -694,11 +694,16 @@ static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries)
{ {
resource_size_t phys_addr; resource_size_t phys_addr;
u32 table_offset; u32 table_offset;
unsigned long flags;
u8 bir; u8 bir;
pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE, pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
&table_offset); &table_offset);
bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR); 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; table_offset &= PCI_MSIX_TABLE_OFFSET;
phys_addr = pci_resource_start(dev, bir) + table_offset; phys_addr = pci_resource_start(dev, bir) + table_offset;
......
...@@ -859,7 +859,10 @@ static ssize_t link_state_store(struct device *dev, ...@@ -859,7 +859,10 @@ static ssize_t link_state_store(struct device *dev,
{ {
struct pci_dev *pdev = to_pci_dev(dev); struct pci_dev *pdev = to_pci_dev(dev);
struct pcie_link_state *link, *root = pdev->link_state->root; 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) if (aspm_disabled)
return -EPERM; return -EPERM;
...@@ -900,15 +903,14 @@ static ssize_t clk_ctl_store(struct device *dev, ...@@ -900,15 +903,14 @@ static ssize_t clk_ctl_store(struct device *dev,
size_t n) size_t n)
{ {
struct pci_dev *pdev = to_pci_dev(dev); struct pci_dev *pdev = to_pci_dev(dev);
int state; bool state;
if (n < 1) if (strtobool(buf, &state))
return -EINVAL; return -EINVAL;
state = buf[0]-'0';
down_read(&pci_bus_sem); down_read(&pci_bus_sem);
mutex_lock(&aspm_lock); mutex_lock(&aspm_lock);
pcie_set_clkpm_nocheck(pdev->link_state, !!state); pcie_set_clkpm_nocheck(pdev->link_state, state);
mutex_unlock(&aspm_lock); mutex_unlock(&aspm_lock);
up_read(&pci_bus_sem); up_read(&pci_bus_sem);
......
...@@ -2430,7 +2430,7 @@ static int tsi721_probe(struct pci_dev *pdev, ...@@ -2430,7 +2430,7 @@ static int tsi721_probe(struct pci_dev *pdev,
pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL, pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL,
PCI_EXP_DEVCTL_READRQ | PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_READRQ | PCI_EXP_DEVCTL_RELAX_EN |
PCI_EXP_DEVCTL_NOSNOOP_EN, PCI_EXP_DEVCTL_NOSNOOP_EN,
0x2 << MAX_READ_REQUEST_SZ_SHIFT); PCI_EXP_DEVCTL_READRQ_512B);
/* Adjust PCIe completion timeout. */ /* Adjust PCIe completion timeout. */
pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL2, 0xf, 0x2); pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL2, 0xf, 0x2);
......
...@@ -72,8 +72,6 @@ ...@@ -72,8 +72,6 @@
#define TSI721_MSIXPBA_OFFSET 0x2a000 #define TSI721_MSIXPBA_OFFSET 0x2a000
#define TSI721_PCIECFG_EPCTL 0x400 #define TSI721_PCIECFG_EPCTL 0x400
#define MAX_READ_REQUEST_SZ_SHIFT 12
/* /*
* Event Management Registers * Event Management Registers
*/ */
......
...@@ -813,12 +813,13 @@ static void esas2r_init_pci_cfg_space(struct esas2r_adapter *a) ...@@ -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, pci_read_config_word(a->pcid, pcie_cap_reg + PCI_EXP_DEVCTL,
&devcontrol); &devcontrol);
if ((devcontrol & PCI_EXP_DEVCTL_READRQ) > 0x2000) { if ((devcontrol & PCI_EXP_DEVCTL_READRQ) >
PCI_EXP_DEVCTL_READRQ_512B) {
esas2r_log(ESAS2R_LOG_INFO, esas2r_log(ESAS2R_LOG_INFO,
"max read request size > 512B"); "max read request size > 512B");
devcontrol &= ~PCI_EXP_DEVCTL_READRQ; devcontrol &= ~PCI_EXP_DEVCTL_READRQ;
devcontrol |= 0x2000; devcontrol |= PCI_EXP_DEVCTL_READRQ_512B;
pci_write_config_word(a->pcid, pci_write_config_word(a->pcid,
pcie_cap_reg + PCI_EXP_DEVCTL, pcie_cap_reg + PCI_EXP_DEVCTL,
devcontrol); devcontrol);
......
...@@ -451,6 +451,10 @@ ...@@ -451,6 +451,10 @@
#define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */ #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_NOSNOOP_EN 0x0800 /* Enable No Snoop */
#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */ #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_DEVCTL_BCR_FLR 0x8000 /* Bridge Configuration Retry / FLR */
#define PCI_EXP_DEVSTA 10 /* Device Status */ #define PCI_EXP_DEVSTA 10 /* Device Status */
#define PCI_EXP_DEVSTA_CED 0x0001 /* Correctable Error Detected */ #define PCI_EXP_DEVSTA_CED 0x0001 /* Correctable Error Detected */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment