Merge branch 'pci/field-get'
- Use FIELD_GET()/FIELD_PREP() when possible throughout drivers/pci/ (Ilpo Järvinen, Bjorn Helgaas) - Rework DPC control programming for clarity (Ilpo Järvinen) * pci/field-get: PCI/portdrv: Use FIELD_GET() PCI/VC: Use FIELD_GET() PCI/PTM: Use FIELD_GET() PCI/PME: Use FIELD_GET() PCI/ATS: Use FIELD_GET() PCI/ATS: Show PASID Capability register width in bitmasks PCI: Use FIELD_GET() in Sapphire RX 5600 XT Pulse quirk PCI: Use FIELD_GET() PCI/MSI: Use FIELD_GET/PREP() PCI/DPC: Use defines with DPC reason fields PCI/DPC: Use defined fields with DPC_CTL register PCI/DPC: Use FIELD_GET() PCI: hotplug: Use FIELD_GET/PREP() PCI: dwc: Use FIELD_GET/PREP() PCI: cadence: Use FIELD_GET() PCI: Use FIELD_GET() to extract Link Width PCI: mvebu: Use FIELD_PREP() with Link Width PCI: tegra194: Use FIELD_GET()/FIELD_PREP() with Link Width fields # Conflicts: # drivers/pci/controller/dwc/pcie-tegra194.c
This commit is contained in:
commit
5897c17402
@ -9,6 +9,7 @@
|
||||
* Copyright (C) 2011 Advanced Micro Devices,
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/pci-ats.h>
|
||||
#include <linux/pci.h>
|
||||
@ -480,8 +481,6 @@ int pci_pasid_features(struct pci_dev *pdev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_pasid_features);
|
||||
|
||||
#define PASID_NUMBER_SHIFT 8
|
||||
#define PASID_NUMBER_MASK (0x1f << PASID_NUMBER_SHIFT)
|
||||
/**
|
||||
* pci_max_pasids - Get maximum number of PASIDs supported by device
|
||||
* @pdev: PCI device structure
|
||||
@ -503,9 +502,7 @@ int pci_max_pasids(struct pci_dev *pdev)
|
||||
|
||||
pci_read_config_word(pdev, pasid + PCI_PASID_CAP, &supported);
|
||||
|
||||
supported = (supported & PASID_NUMBER_MASK) >> PASID_NUMBER_SHIFT;
|
||||
|
||||
return (1 << supported);
|
||||
return (1 << FIELD_GET(PCI_PASID_CAP_WIDTH, supported));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_max_pasids);
|
||||
#endif /* CONFIG_PCI_PASID */
|
||||
|
@ -3,6 +3,7 @@
|
||||
// Cadence PCIe endpoint controller driver.
|
||||
// Author: Cyrille Pitchen <cyrille.pitchen@free-electrons.com>
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/of.h>
|
||||
@ -262,7 +263,7 @@ static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn)
|
||||
* Get the Multiple Message Enable bitfield from the Message Control
|
||||
* register.
|
||||
*/
|
||||
mme = (flags & PCI_MSI_FLAGS_QSIZE) >> 4;
|
||||
mme = FIELD_GET(PCI_MSI_FLAGS_QSIZE, flags);
|
||||
|
||||
return mme;
|
||||
}
|
||||
@ -394,7 +395,7 @@ static int cdns_pcie_ep_send_msi_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn,
|
||||
return -EINVAL;
|
||||
|
||||
/* Get the number of enabled MSIs */
|
||||
mme = (flags & PCI_MSI_FLAGS_QSIZE) >> 4;
|
||||
mme = FIELD_GET(PCI_MSI_FLAGS_QSIZE, flags);
|
||||
msi_count = 1 << mme;
|
||||
if (!interrupt_num || interrupt_num > msi_count)
|
||||
return -EINVAL;
|
||||
@ -449,7 +450,7 @@ static int cdns_pcie_ep_map_msi_irq(struct pci_epc *epc, u8 fn, u8 vfn,
|
||||
return -EINVAL;
|
||||
|
||||
/* Get the number of enabled MSIs */
|
||||
mme = (flags & PCI_MSI_FLAGS_QSIZE) >> 4;
|
||||
mme = FIELD_GET(PCI_MSI_FLAGS_QSIZE, flags);
|
||||
msi_count = 1 << mme;
|
||||
if (!interrupt_num || interrupt_num > msi_count)
|
||||
return -EINVAL;
|
||||
@ -506,7 +507,7 @@ static int cdns_pcie_ep_send_msix_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn,
|
||||
|
||||
reg = cap + PCI_MSIX_TABLE;
|
||||
tbl_offset = cdns_pcie_ep_fn_readl(pcie, fn, reg);
|
||||
bir = tbl_offset & PCI_MSIX_TABLE_BIR;
|
||||
bir = FIELD_GET(PCI_MSIX_TABLE_BIR, tbl_offset);
|
||||
tbl_offset &= PCI_MSIX_TABLE_OFFSET;
|
||||
|
||||
msix_tbl = epf->epf_bar[bir]->addr + tbl_offset;
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Author: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
@ -350,7 +351,7 @@ static int dw_pcie_ep_get_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no)
|
||||
if (!(val & PCI_MSI_FLAGS_ENABLE))
|
||||
return -EINVAL;
|
||||
|
||||
val = (val & PCI_MSI_FLAGS_QSIZE) >> 4;
|
||||
val = FIELD_GET(PCI_MSI_FLAGS_QSIZE, val);
|
||||
|
||||
return val;
|
||||
}
|
||||
@ -373,7 +374,7 @@ static int dw_pcie_ep_set_msi(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
|
||||
reg = ep_func->msi_cap + func_offset + PCI_MSI_FLAGS;
|
||||
val = dw_pcie_readw_dbi(pci, reg);
|
||||
val &= ~PCI_MSI_FLAGS_QMASK;
|
||||
val |= (interrupts << 1) & PCI_MSI_FLAGS_QMASK;
|
||||
val |= FIELD_PREP(PCI_MSI_FLAGS_QMASK, interrupts);
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
dw_pcie_writew_dbi(pci, reg, val);
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
@ -600,7 +601,7 @@ int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
|
||||
|
||||
reg = ep_func->msix_cap + func_offset + PCI_MSIX_TABLE;
|
||||
tbl_offset = dw_pcie_readl_dbi(pci, reg);
|
||||
bir = (tbl_offset & PCI_MSIX_TABLE_BIR);
|
||||
bir = FIELD_GET(PCI_MSIX_TABLE_BIR, tbl_offset);
|
||||
tbl_offset &= PCI_MSIX_TABLE_OFFSET;
|
||||
|
||||
msix_tbl = ep->epf_bar[bir]->addr + tbl_offset;
|
||||
|
@ -9,6 +9,7 @@
|
||||
* Author: Vidya Sagar <vidyas@nvidia.com>
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
@ -125,7 +126,7 @@
|
||||
|
||||
#define APPL_LTR_MSG_1 0xC4
|
||||
#define LTR_MSG_REQ BIT(15)
|
||||
#define LTR_MST_NO_SNOOP_SHIFT 16
|
||||
#define LTR_NOSNOOP_MSG_REQ BIT(31)
|
||||
|
||||
#define APPL_LTR_MSG_2 0xC8
|
||||
#define APPL_LTR_MSG_2_LTR_MSG_REQ_STATE BIT(3)
|
||||
@ -346,8 +347,7 @@ static void apply_bad_link_workaround(struct dw_pcie_rp *pp)
|
||||
*/
|
||||
val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA);
|
||||
if (val & PCI_EXP_LNKSTA_LBMS) {
|
||||
current_link_width = (val & PCI_EXP_LNKSTA_NLW) >>
|
||||
PCI_EXP_LNKSTA_NLW_SHIFT;
|
||||
current_link_width = FIELD_GET(PCI_EXP_LNKSTA_NLW, val);
|
||||
if (pcie->init_link_width > current_link_width) {
|
||||
dev_warn(pci->dev, "PCIe link is bad, width reduced\n");
|
||||
val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +
|
||||
@ -496,8 +496,12 @@ static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg)
|
||||
ktime_t timeout;
|
||||
|
||||
/* 110us for both snoop and no-snoop */
|
||||
val = 110 | (2 << PCI_LTR_SCALE_SHIFT) | LTR_MSG_REQ;
|
||||
val |= (val << LTR_MST_NO_SNOOP_SHIFT);
|
||||
val = FIELD_PREP(PCI_LTR_VALUE_MASK, 110) |
|
||||
FIELD_PREP(PCI_LTR_SCALE_MASK, 2) |
|
||||
LTR_MSG_REQ |
|
||||
FIELD_PREP(PCI_LTR_NOSNOOP_VALUE, 110) |
|
||||
FIELD_PREP(PCI_LTR_NOSNOOP_SCALE, 2) |
|
||||
LTR_NOSNOOP_MSG_REQ;
|
||||
appl_writel(pcie, val, APPL_LTR_MSG_1);
|
||||
|
||||
/* Send LTR upstream */
|
||||
@ -760,8 +764,7 @@ static void tegra_pcie_enable_system_interrupts(struct dw_pcie_rp *pp)
|
||||
|
||||
val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base +
|
||||
PCI_EXP_LNKSTA);
|
||||
pcie->init_link_width = (val_w & PCI_EXP_LNKSTA_NLW) >>
|
||||
PCI_EXP_LNKSTA_NLW_SHIFT;
|
||||
pcie->init_link_width = FIELD_GET(PCI_EXP_LNKSTA_NLW, val_w);
|
||||
|
||||
val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base +
|
||||
PCI_EXP_LNKCTL);
|
||||
|
@ -264,7 +264,7 @@ static void mvebu_pcie_setup_hw(struct mvebu_pcie_port *port)
|
||||
*/
|
||||
lnkcap = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCAP);
|
||||
lnkcap &= ~PCI_EXP_LNKCAP_MLW;
|
||||
lnkcap |= (port->is_x4 ? 4 : 1) << 4;
|
||||
lnkcap |= FIELD_PREP(PCI_EXP_LNKCAP_MLW, port->is_x4 ? 4 : 1);
|
||||
mvebu_writel(port, lnkcap, PCIE_CAP_PCIEXP + PCI_EXP_LNKCAP);
|
||||
|
||||
/* Disable Root Bridge I/O space, memory space and bus mastering. */
|
||||
|
@ -20,6 +20,7 @@
|
||||
#define pr_fmt(fmt) "pciehp: " fmt
|
||||
#define dev_fmt pr_fmt
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
@ -103,7 +104,7 @@ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
|
||||
struct pci_dev *pdev = ctrl->pcie->port;
|
||||
|
||||
if (status)
|
||||
status <<= PCI_EXP_SLTCTL_ATTN_IND_SHIFT;
|
||||
status = FIELD_PREP(PCI_EXP_SLTCTL_AIC, status);
|
||||
else
|
||||
status = PCI_EXP_SLTCTL_ATTN_IND_OFF;
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#define dev_fmt(fmt) "pciehp: " fmt
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
@ -484,7 +485,7 @@ int pciehp_set_raw_indicator_status(struct hotplug_slot *hotplug_slot,
|
||||
struct pci_dev *pdev = ctrl_dev(ctrl);
|
||||
|
||||
pci_config_pm_runtime_get(pdev);
|
||||
pcie_write_cmd_nowait(ctrl, status << 6,
|
||||
pcie_write_cmd_nowait(ctrl, FIELD_PREP(PCI_EXP_SLTCTL_AIC, status),
|
||||
PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC);
|
||||
pci_config_pm_runtime_put(pdev);
|
||||
return 0;
|
||||
@ -1028,7 +1029,7 @@ struct controller *pcie_init(struct pcie_device *dev)
|
||||
PCI_EXP_SLTSTA_DLLSC | PCI_EXP_SLTSTA_PDC);
|
||||
|
||||
ctrl_info(ctrl, "Slot #%d AttnBtn%c PwrCtrl%c MRL%c AttnInd%c PwrInd%c HotPlug%c Surprise%c Interlock%c NoCompl%c IbPresDis%c LLActRep%c%s\n",
|
||||
(slot_cap & PCI_EXP_SLTCAP_PSN) >> 19,
|
||||
FIELD_GET(PCI_EXP_SLTCAP_PSN, slot_cap),
|
||||
FLAG(slot_cap, PCI_EXP_SLTCAP_ABP),
|
||||
FLAG(slot_cap, PCI_EXP_SLTCAP_PCP),
|
||||
FLAG(slot_cap, PCI_EXP_SLTCAP_MRLSP),
|
||||
|
@ -5,6 +5,7 @@
|
||||
* Copyright Gavin Shan, IBM Corporation 2016.
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
@ -731,7 +732,7 @@ static int pnv_php_enable_msix(struct pnv_php_slot *php_slot)
|
||||
|
||||
/* Check hotplug MSIx entry is in range */
|
||||
pcie_capability_read_word(pdev, PCI_EXP_FLAGS, &pcie_flag);
|
||||
entry.entry = (pcie_flag & PCI_EXP_FLAGS_IRQ) >> 9;
|
||||
entry.entry = FIELD_GET(PCI_EXP_FLAGS_IRQ, pcie_flag);
|
||||
if (entry.entry >= nr_entries)
|
||||
return -ERANGE;
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
|
||||
* Copyright (C) 2016 Christoph Hellwig.
|
||||
*/
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/irq.h>
|
||||
@ -188,7 +189,7 @@ static inline void pci_write_msg_msi(struct pci_dev *dev, struct msi_desc *desc,
|
||||
|
||||
pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
|
||||
msgctl &= ~PCI_MSI_FLAGS_QSIZE;
|
||||
msgctl |= desc->pci.msi_attrib.multiple << 4;
|
||||
msgctl |= FIELD_PREP(PCI_MSI_FLAGS_QSIZE, desc->pci.msi_attrib.multiple);
|
||||
pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
|
||||
|
||||
pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO, msg->address_lo);
|
||||
@ -299,7 +300,7 @@ static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
|
||||
desc.pci.msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT);
|
||||
desc.pci.msi_attrib.can_mask = !!(control & PCI_MSI_FLAGS_MASKBIT);
|
||||
desc.pci.msi_attrib.default_irq = dev->irq;
|
||||
desc.pci.msi_attrib.multi_cap = (control & PCI_MSI_FLAGS_QMASK) >> 1;
|
||||
desc.pci.msi_attrib.multi_cap = FIELD_GET(PCI_MSI_FLAGS_QMASK, control);
|
||||
desc.pci.msi_attrib.multiple = ilog2(__roundup_pow_of_two(nvec));
|
||||
desc.affinity = masks;
|
||||
|
||||
@ -478,7 +479,7 @@ int pci_msi_vec_count(struct pci_dev *dev)
|
||||
return -EINVAL;
|
||||
|
||||
pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl);
|
||||
ret = 1 << ((msgctl & PCI_MSI_FLAGS_QMASK) >> 1);
|
||||
ret = 1 << FIELD_GET(PCI_MSI_FLAGS_QMASK, msgctl);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -511,7 +512,8 @@ void __pci_restore_msi_state(struct pci_dev *dev)
|
||||
pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
|
||||
pci_msi_update_mask(entry, 0, 0);
|
||||
control &= ~PCI_MSI_FLAGS_QSIZE;
|
||||
control |= (entry->pci.msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
|
||||
control |= PCI_MSI_FLAGS_ENABLE |
|
||||
FIELD_PREP(PCI_MSI_FLAGS_QSIZE, entry->pci.msi_attrib.multiple);
|
||||
pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
* Modeled after usb's driverfs.c
|
||||
*/
|
||||
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pci.h>
|
||||
@ -230,8 +230,7 @@ static ssize_t current_link_width_show(struct device *dev,
|
||||
if (err)
|
||||
return -EINVAL;
|
||||
|
||||
return sysfs_emit(buf, "%u\n",
|
||||
(linkstat & PCI_EXP_LNKSTA_NLW) >> PCI_EXP_LNKSTA_NLW_SHIFT);
|
||||
return sysfs_emit(buf, "%u\n", FIELD_GET(PCI_EXP_LNKSTA_NLW, linkstat));
|
||||
}
|
||||
static DEVICE_ATTR_RO(current_link_width);
|
||||
|
||||
|
@ -1778,8 +1778,7 @@ static void pci_restore_rebar_state(struct pci_dev *pdev)
|
||||
return;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
|
||||
nbars = (ctrl & PCI_REBAR_CTRL_NBAR_MASK) >>
|
||||
PCI_REBAR_CTRL_NBAR_SHIFT;
|
||||
nbars = FIELD_GET(PCI_REBAR_CTRL_NBAR_MASK, ctrl);
|
||||
|
||||
for (i = 0; i < nbars; i++, pos += 8) {
|
||||
struct resource *res;
|
||||
@ -1790,7 +1789,7 @@ static void pci_restore_rebar_state(struct pci_dev *pdev)
|
||||
res = pdev->resource + bar_idx;
|
||||
size = pci_rebar_bytes_to_size(resource_size(res));
|
||||
ctrl &= ~PCI_REBAR_CTRL_BAR_SIZE;
|
||||
ctrl |= size << PCI_REBAR_CTRL_BAR_SHIFT;
|
||||
ctrl |= FIELD_PREP(PCI_REBAR_CTRL_BAR_SIZE, size);
|
||||
pci_write_config_dword(pdev, pos + PCI_REBAR_CTRL, ctrl);
|
||||
}
|
||||
}
|
||||
@ -3231,7 +3230,7 @@ void pci_pm_init(struct pci_dev *dev)
|
||||
(pmc & PCI_PM_CAP_PME_D2) ? " D2" : "",
|
||||
(pmc & PCI_PM_CAP_PME_D3hot) ? " D3hot" : "",
|
||||
(pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : "");
|
||||
dev->pme_support = pmc >> PCI_PM_CAP_PME_SHIFT;
|
||||
dev->pme_support = FIELD_GET(PCI_PM_CAP_PME_MASK, pmc);
|
||||
dev->pme_poll = true;
|
||||
/*
|
||||
* Make device's PM flags reflect the wake-up capability, but
|
||||
@ -3302,20 +3301,20 @@ static int pci_ea_read(struct pci_dev *dev, int offset)
|
||||
ent_offset += 4;
|
||||
|
||||
/* Entry size field indicates DWORDs after 1st */
|
||||
ent_size = ((dw0 & PCI_EA_ES) + 1) << 2;
|
||||
ent_size = (FIELD_GET(PCI_EA_ES, dw0) + 1) << 2;
|
||||
|
||||
if (!(dw0 & PCI_EA_ENABLE)) /* Entry not enabled */
|
||||
goto out;
|
||||
|
||||
bei = (dw0 & PCI_EA_BEI) >> 4;
|
||||
prop = (dw0 & PCI_EA_PP) >> 8;
|
||||
bei = FIELD_GET(PCI_EA_BEI, dw0);
|
||||
prop = FIELD_GET(PCI_EA_PP, dw0);
|
||||
|
||||
/*
|
||||
* If the Property is in the reserved range, try the Secondary
|
||||
* Property instead.
|
||||
*/
|
||||
if (prop > PCI_EA_P_BRIDGE_IO && prop < PCI_EA_P_MEM_RESERVED)
|
||||
prop = (dw0 & PCI_EA_SP) >> 16;
|
||||
prop = FIELD_GET(PCI_EA_SP, dw0);
|
||||
if (prop > PCI_EA_P_BRIDGE_IO)
|
||||
goto out;
|
||||
|
||||
@ -3722,14 +3721,13 @@ static int pci_rebar_find_pos(struct pci_dev *pdev, int bar)
|
||||
return -ENOTSUPP;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
|
||||
nbars = (ctrl & PCI_REBAR_CTRL_NBAR_MASK) >>
|
||||
PCI_REBAR_CTRL_NBAR_SHIFT;
|
||||
nbars = FIELD_GET(PCI_REBAR_CTRL_NBAR_MASK, ctrl);
|
||||
|
||||
for (i = 0; i < nbars; i++, pos += 8) {
|
||||
int bar_idx;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
|
||||
bar_idx = ctrl & PCI_REBAR_CTRL_BAR_IDX;
|
||||
bar_idx = FIELD_GET(PCI_REBAR_CTRL_BAR_IDX, ctrl);
|
||||
if (bar_idx == bar)
|
||||
return pos;
|
||||
}
|
||||
@ -3755,14 +3753,14 @@ u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar)
|
||||
return 0;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CAP, &cap);
|
||||
cap &= PCI_REBAR_CAP_SIZES;
|
||||
cap = FIELD_GET(PCI_REBAR_CAP_SIZES, cap);
|
||||
|
||||
/* Sapphire RX 5600 XT Pulse has an invalid cap dword for BAR 0 */
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ATI && pdev->device == 0x731f &&
|
||||
bar == 0 && cap == 0x7000)
|
||||
cap = 0x3f000;
|
||||
bar == 0 && cap == 0x700)
|
||||
return 0x3f00;
|
||||
|
||||
return cap >> 4;
|
||||
return cap;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_rebar_get_possible_sizes);
|
||||
|
||||
@ -3784,7 +3782,7 @@ int pci_rebar_get_current_size(struct pci_dev *pdev, int bar)
|
||||
return pos;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
|
||||
return (ctrl & PCI_REBAR_CTRL_BAR_SIZE) >> PCI_REBAR_CTRL_BAR_SHIFT;
|
||||
return FIELD_GET(PCI_REBAR_CTRL_BAR_SIZE, ctrl);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3807,7 +3805,7 @@ int pci_rebar_set_size(struct pci_dev *pdev, int bar, int size)
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
|
||||
ctrl &= ~PCI_REBAR_CTRL_BAR_SIZE;
|
||||
ctrl |= size << PCI_REBAR_CTRL_BAR_SHIFT;
|
||||
ctrl |= FIELD_PREP(PCI_REBAR_CTRL_BAR_SIZE, size);
|
||||
pci_write_config_dword(pdev, pos + PCI_REBAR_CTRL, ctrl);
|
||||
return 0;
|
||||
}
|
||||
@ -6045,7 +6043,7 @@ int pcix_get_max_mmrbc(struct pci_dev *dev)
|
||||
if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
|
||||
return -EINVAL;
|
||||
|
||||
return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
|
||||
return 512 << FIELD_GET(PCI_X_STATUS_MAX_READ, stat);
|
||||
}
|
||||
EXPORT_SYMBOL(pcix_get_max_mmrbc);
|
||||
|
||||
@ -6068,7 +6066,7 @@ int pcix_get_mmrbc(struct pci_dev *dev)
|
||||
if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
|
||||
return -EINVAL;
|
||||
|
||||
return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
|
||||
return 512 << FIELD_GET(PCI_X_CMD_MAX_READ, cmd);
|
||||
}
|
||||
EXPORT_SYMBOL(pcix_get_mmrbc);
|
||||
|
||||
@ -6099,19 +6097,19 @@ int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
|
||||
if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
|
||||
return -EINVAL;
|
||||
|
||||
if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
|
||||
if (v > FIELD_GET(PCI_X_STATUS_MAX_READ, stat))
|
||||
return -E2BIG;
|
||||
|
||||
if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
|
||||
return -EINVAL;
|
||||
|
||||
o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
|
||||
o = FIELD_GET(PCI_X_CMD_MAX_READ, cmd);
|
||||
if (o != v) {
|
||||
if (v > o && (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC))
|
||||
return -EIO;
|
||||
|
||||
cmd &= ~PCI_X_CMD_MAX_READ;
|
||||
cmd |= v << 2;
|
||||
cmd |= FIELD_PREP(PCI_X_CMD_MAX_READ, v);
|
||||
if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
|
||||
return -EIO;
|
||||
}
|
||||
@ -6131,7 +6129,7 @@ int pcie_get_readrq(struct pci_dev *dev)
|
||||
|
||||
pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
|
||||
|
||||
return 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12);
|
||||
return 128 << FIELD_GET(PCI_EXP_DEVCTL_READRQ, ctl);
|
||||
}
|
||||
EXPORT_SYMBOL(pcie_get_readrq);
|
||||
|
||||
@ -6164,7 +6162,7 @@ int pcie_set_readrq(struct pci_dev *dev, int rq)
|
||||
rq = mps;
|
||||
}
|
||||
|
||||
v = (ffs(rq) - 8) << 12;
|
||||
v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, ffs(rq) - 8);
|
||||
|
||||
if (bridge->no_inc_mrrs) {
|
||||
int max_mrrs = pcie_get_readrq(dev);
|
||||
@ -6194,7 +6192,7 @@ int pcie_get_mps(struct pci_dev *dev)
|
||||
|
||||
pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
|
||||
|
||||
return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
|
||||
return 128 << FIELD_GET(PCI_EXP_DEVCTL_PAYLOAD, ctl);
|
||||
}
|
||||
EXPORT_SYMBOL(pcie_get_mps);
|
||||
|
||||
@ -6217,7 +6215,7 @@ int pcie_set_mps(struct pci_dev *dev, int mps)
|
||||
v = ffs(mps) - 8;
|
||||
if (v > dev->pcie_mpss)
|
||||
return -EINVAL;
|
||||
v <<= 5;
|
||||
v = FIELD_PREP(PCI_EXP_DEVCTL_PAYLOAD, v);
|
||||
|
||||
ret = pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
|
||||
PCI_EXP_DEVCTL_PAYLOAD, v);
|
||||
@ -6259,9 +6257,9 @@ u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev **limiting_dev,
|
||||
while (dev) {
|
||||
pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &lnksta);
|
||||
|
||||
next_speed = pcie_link_speed[lnksta & PCI_EXP_LNKSTA_CLS];
|
||||
next_width = (lnksta & PCI_EXP_LNKSTA_NLW) >>
|
||||
PCI_EXP_LNKSTA_NLW_SHIFT;
|
||||
next_speed = pcie_link_speed[FIELD_GET(PCI_EXP_LNKSTA_CLS,
|
||||
lnksta)];
|
||||
next_width = FIELD_GET(PCI_EXP_LNKSTA_NLW, lnksta);
|
||||
|
||||
next_bw = next_width * PCIE_SPEED2MBS_ENC(next_speed);
|
||||
|
||||
@ -6333,7 +6331,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)
|
||||
|
||||
pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &lnkcap);
|
||||
if (lnkcap)
|
||||
return (lnkcap & PCI_EXP_LNKCAP_MLW) >> 4;
|
||||
return FIELD_GET(PCI_EXP_LNKCAP_MLW, lnkcap);
|
||||
|
||||
return PCIE_LNK_WIDTH_UNKNOWN;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define dev_fmt(fmt) "DPC: " fmt
|
||||
|
||||
#include <linux/aer.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/init.h>
|
||||
@ -17,6 +18,9 @@
|
||||
#include "portdrv.h"
|
||||
#include "../pci.h"
|
||||
|
||||
#define PCI_EXP_DPC_CTL_EN_MASK (PCI_EXP_DPC_CTL_EN_FATAL | \
|
||||
PCI_EXP_DPC_CTL_EN_NONFATAL)
|
||||
|
||||
static const char * const rp_pio_error_string[] = {
|
||||
"Configuration Request received UR Completion", /* Bit Position 0 */
|
||||
"Configuration Request received CA Completion", /* Bit Position 1 */
|
||||
@ -202,7 +206,7 @@ static void dpc_process_rp_pio_error(struct pci_dev *pdev)
|
||||
|
||||
/* Get First Error Pointer */
|
||||
pci_read_config_word(pdev, cap + PCI_EXP_DPC_STATUS, &dpc_status);
|
||||
first_error = (dpc_status & 0x1f00) >> 8;
|
||||
first_error = FIELD_GET(PCI_EXP_DPC_RP_PIO_FEP, dpc_status);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rp_pio_error_string); i++) {
|
||||
if ((status & ~mask) & (1 << i))
|
||||
@ -270,20 +274,27 @@ void dpc_process_error(struct pci_dev *pdev)
|
||||
pci_info(pdev, "containment event, status:%#06x source:%#06x\n",
|
||||
status, source);
|
||||
|
||||
reason = (status & PCI_EXP_DPC_STATUS_TRIGGER_RSN) >> 1;
|
||||
ext_reason = (status & PCI_EXP_DPC_STATUS_TRIGGER_RSN_EXT) >> 5;
|
||||
reason = status & PCI_EXP_DPC_STATUS_TRIGGER_RSN;
|
||||
ext_reason = status & PCI_EXP_DPC_STATUS_TRIGGER_RSN_EXT;
|
||||
pci_warn(pdev, "%s detected\n",
|
||||
(reason == 0) ? "unmasked uncorrectable error" :
|
||||
(reason == 1) ? "ERR_NONFATAL" :
|
||||
(reason == 2) ? "ERR_FATAL" :
|
||||
(ext_reason == 0) ? "RP PIO error" :
|
||||
(ext_reason == 1) ? "software trigger" :
|
||||
"reserved error");
|
||||
(reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_UNCOR) ?
|
||||
"unmasked uncorrectable error" :
|
||||
(reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_NFE) ?
|
||||
"ERR_NONFATAL" :
|
||||
(reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_FE) ?
|
||||
"ERR_FATAL" :
|
||||
(ext_reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_RP_PIO) ?
|
||||
"RP PIO error" :
|
||||
(ext_reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_SW_TRIGGER) ?
|
||||
"software trigger" :
|
||||
"reserved error");
|
||||
|
||||
/* show RP PIO error detail information */
|
||||
if (pdev->dpc_rp_extensions && reason == 3 && ext_reason == 0)
|
||||
if (pdev->dpc_rp_extensions &&
|
||||
reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_IN_EXT &&
|
||||
ext_reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_RP_PIO)
|
||||
dpc_process_rp_pio_error(pdev);
|
||||
else if (reason == 0 &&
|
||||
else if (reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_UNCOR &&
|
||||
dpc_get_aer_uncorrect_severity(pdev, &info) &&
|
||||
aer_get_device_error_info(pdev, &info)) {
|
||||
aer_print_error(pdev, &info);
|
||||
@ -338,7 +349,7 @@ void pci_dpc_init(struct pci_dev *pdev)
|
||||
/* Quirks may set dpc_rp_log_size if device or firmware is buggy */
|
||||
if (!pdev->dpc_rp_log_size) {
|
||||
pdev->dpc_rp_log_size =
|
||||
(cap & PCI_EXP_DPC_RP_PIO_LOG_SIZE) >> 8;
|
||||
FIELD_GET(PCI_EXP_DPC_RP_PIO_LOG_SIZE, cap);
|
||||
if (pdev->dpc_rp_log_size < 4 || pdev->dpc_rp_log_size > 9) {
|
||||
pci_err(pdev, "RP PIO log size %u is invalid\n",
|
||||
pdev->dpc_rp_log_size);
|
||||
@ -368,12 +379,13 @@ static int dpc_probe(struct pcie_device *dev)
|
||||
}
|
||||
|
||||
pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CAP, &cap);
|
||||
|
||||
pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, &ctl);
|
||||
|
||||
ctl = (ctl & 0xfff4) | PCI_EXP_DPC_CTL_EN_FATAL | PCI_EXP_DPC_CTL_INT_EN;
|
||||
ctl &= ~PCI_EXP_DPC_CTL_EN_MASK;
|
||||
ctl |= PCI_EXP_DPC_CTL_EN_FATAL | PCI_EXP_DPC_CTL_INT_EN;
|
||||
pci_write_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, ctl);
|
||||
pci_info(pdev, "enabled with IRQ %d\n", dev->irq);
|
||||
|
||||
pci_info(pdev, "enabled with IRQ %d\n", dev->irq);
|
||||
pci_info(pdev, "error containment capabilities: Int Msg #%d, RPExt%c PoisonedTLP%c SwTrigger%c RP PIO Log %d, DL_ActiveErr%c\n",
|
||||
cap & PCI_EXP_DPC_IRQ, FLAG(cap, PCI_EXP_DPC_CAP_RP_EXT),
|
||||
FLAG(cap, PCI_EXP_DPC_CAP_POISONED_TLP),
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#define dev_fmt(fmt) "PME: " fmt
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
@ -235,7 +236,8 @@ static void pcie_pme_work_fn(struct work_struct *work)
|
||||
pcie_clear_root_pme_status(port);
|
||||
|
||||
spin_unlock_irq(&data->lock);
|
||||
pcie_pme_handle_request(port, rtsta & 0xffff);
|
||||
pcie_pme_handle_request(port,
|
||||
FIELD_GET(PCI_EXP_RTSTA_PME_RQ_ID, rtsta));
|
||||
spin_lock_irq(&data->lock);
|
||||
|
||||
continue;
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
@ -69,7 +70,7 @@ static int pcie_message_numbers(struct pci_dev *dev, int mask,
|
||||
if (mask & (PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP |
|
||||
PCIE_PORT_SERVICE_BWNOTIF)) {
|
||||
pcie_capability_read_word(dev, PCI_EXP_FLAGS, ®16);
|
||||
*pme = (reg16 & PCI_EXP_FLAGS_IRQ) >> 9;
|
||||
*pme = FIELD_GET(PCI_EXP_FLAGS_IRQ, reg16);
|
||||
nvec = *pme + 1;
|
||||
}
|
||||
|
||||
@ -81,7 +82,7 @@ static int pcie_message_numbers(struct pci_dev *dev, int mask,
|
||||
if (pos) {
|
||||
pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS,
|
||||
®32);
|
||||
*aer = (reg32 & PCI_ERR_ROOT_AER_IRQ) >> 27;
|
||||
*aer = FIELD_GET(PCI_ERR_ROOT_AER_IRQ, reg32);
|
||||
nvec = max(nvec, *aer + 1);
|
||||
}
|
||||
}
|
||||
@ -92,7 +93,7 @@ static int pcie_message_numbers(struct pci_dev *dev, int mask,
|
||||
if (pos) {
|
||||
pci_read_config_word(dev, pos + PCI_EXP_DPC_CAP,
|
||||
®16);
|
||||
*dpc = reg16 & PCI_EXP_DPC_IRQ;
|
||||
*dpc = FIELD_GET(PCI_EXP_DPC_IRQ, reg16);
|
||||
nvec = max(nvec, *dpc + 1);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
* Copyright (c) 2016, Intel Corporation.
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
@ -53,7 +54,7 @@ void pci_ptm_init(struct pci_dev *dev)
|
||||
pci_add_ext_cap_save_buffer(dev, PCI_EXT_CAP_ID_PTM, sizeof(u32));
|
||||
|
||||
pci_read_config_dword(dev, ptm + PCI_PTM_CAP, &cap);
|
||||
dev->ptm_granularity = (cap & PCI_PTM_GRANULARITY_MASK) >> 8;
|
||||
dev->ptm_granularity = FIELD_GET(PCI_PTM_GRANULARITY_MASK, cap);
|
||||
|
||||
/*
|
||||
* Per the spec recommendation (PCIe r6.0, sec 7.9.15.3), select the
|
||||
@ -146,7 +147,7 @@ static int __pci_enable_ptm(struct pci_dev *dev)
|
||||
|
||||
ctrl |= PCI_PTM_CTRL_ENABLE;
|
||||
ctrl &= ~PCI_PTM_GRANULARITY_MASK;
|
||||
ctrl |= dev->ptm_granularity << 8;
|
||||
ctrl |= FIELD_PREP(PCI_PTM_GRANULARITY_MASK, dev->ptm_granularity);
|
||||
if (dev->ptm_root)
|
||||
ctrl |= PCI_PTM_CTRL_ROOT;
|
||||
|
||||
|
@ -807,8 +807,8 @@ static void pci_set_bus_speed(struct pci_bus *bus)
|
||||
}
|
||||
|
||||
bus->max_bus_speed = max;
|
||||
bus->cur_bus_speed = pcix_bus_speed[
|
||||
(status & PCI_X_SSTATUS_FREQ) >> 6];
|
||||
bus->cur_bus_speed =
|
||||
pcix_bus_speed[FIELD_GET(PCI_X_SSTATUS_FREQ, status)];
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1217,8 +1217,8 @@ static bool pci_ea_fixed_busnrs(struct pci_dev *dev, u8 *sec, u8 *sub)
|
||||
|
||||
offset = ea + PCI_EA_FIRST_ENT;
|
||||
pci_read_config_dword(dev, offset, &dw);
|
||||
ea_sec = dw & PCI_EA_SEC_BUS_MASK;
|
||||
ea_sub = (dw & PCI_EA_SUB_BUS_MASK) >> PCI_EA_SUB_BUS_SHIFT;
|
||||
ea_sec = FIELD_GET(PCI_EA_SEC_BUS_MASK, dw);
|
||||
ea_sub = FIELD_GET(PCI_EA_SUB_BUS_MASK, dw);
|
||||
if (ea_sec == 0 || ea_sub < ea_sec)
|
||||
return false;
|
||||
|
||||
|
@ -6175,7 +6175,7 @@ static void dpc_log_size(struct pci_dev *dev)
|
||||
if (!(val & PCI_EXP_DPC_CAP_RP_EXT))
|
||||
return;
|
||||
|
||||
if (!((val & PCI_EXP_DPC_RP_PIO_LOG_SIZE) >> 8)) {
|
||||
if (FIELD_GET(PCI_EXP_DPC_RP_PIO_LOG_SIZE, val) == 0) {
|
||||
pci_info(dev, "Overriding RP PIO Log Size to 4\n");
|
||||
dev->dpc_rp_log_size = 4;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Author: Alex Williamson <alex.williamson@redhat.com>
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
@ -201,9 +202,9 @@ static int pci_vc_do_save_buffer(struct pci_dev *dev, int pos,
|
||||
/* Extended VC Count (not counting VC0) */
|
||||
evcc = cap1 & PCI_VC_CAP1_EVCC;
|
||||
/* Low Priority Extended VC Count (not counting VC0) */
|
||||
lpevcc = (cap1 & PCI_VC_CAP1_LPEVCC) >> 4;
|
||||
lpevcc = FIELD_GET(PCI_VC_CAP1_LPEVCC, cap1);
|
||||
/* Port Arbitration Table Entry Size (bits) */
|
||||
parb_size = 1 << ((cap1 & PCI_VC_CAP1_ARB_SIZE) >> 10);
|
||||
parb_size = 1 << FIELD_GET(PCI_VC_CAP1_ARB_SIZE, cap1);
|
||||
|
||||
/*
|
||||
* Port VC Control Register contains VC Arbitration Select, which
|
||||
@ -231,7 +232,7 @@ static int pci_vc_do_save_buffer(struct pci_dev *dev, int pos,
|
||||
int vcarb_offset;
|
||||
|
||||
pci_read_config_dword(dev, pos + PCI_VC_PORT_CAP2, &cap2);
|
||||
vcarb_offset = ((cap2 & PCI_VC_CAP2_ARB_OFF) >> 24) * 16;
|
||||
vcarb_offset = FIELD_GET(PCI_VC_CAP2_ARB_OFF, cap2) * 16;
|
||||
|
||||
if (vcarb_offset) {
|
||||
int size, vcarb_phases = 0;
|
||||
@ -277,7 +278,7 @@ static int pci_vc_do_save_buffer(struct pci_dev *dev, int pos,
|
||||
|
||||
pci_read_config_dword(dev, pos + PCI_VC_RES_CAP +
|
||||
(i * PCI_CAP_VC_PER_VC_SIZEOF), &cap);
|
||||
parb_offset = ((cap & PCI_VC_RES_CAP_ARB_OFF) >> 24) * 16;
|
||||
parb_offset = FIELD_GET(PCI_VC_RES_CAP_ARB_OFF, cap) * 16;
|
||||
if (parb_offset) {
|
||||
int size, parb_phases = 0;
|
||||
|
||||
|
@ -638,6 +638,7 @@
|
||||
#define PCI_EXP_RTCAP 0x1e /* Root Capabilities */
|
||||
#define PCI_EXP_RTCAP_CRSVIS 0x0001 /* CRS Software Visibility capability */
|
||||
#define PCI_EXP_RTSTA 0x20 /* Root Status */
|
||||
#define PCI_EXP_RTSTA_PME_RQ_ID 0x0000ffff /* PME Requester ID */
|
||||
#define PCI_EXP_RTSTA_PME 0x00010000 /* PME status */
|
||||
#define PCI_EXP_RTSTA_PENDING 0x00020000 /* PME pending */
|
||||
/*
|
||||
@ -931,12 +932,13 @@
|
||||
|
||||
/* Process Address Space ID */
|
||||
#define PCI_PASID_CAP 0x04 /* PASID feature register */
|
||||
#define PCI_PASID_CAP_EXEC 0x02 /* Exec permissions Supported */
|
||||
#define PCI_PASID_CAP_PRIV 0x04 /* Privilege Mode Supported */
|
||||
#define PCI_PASID_CAP_EXEC 0x0002 /* Exec permissions Supported */
|
||||
#define PCI_PASID_CAP_PRIV 0x0004 /* Privilege Mode Supported */
|
||||
#define PCI_PASID_CAP_WIDTH 0x1f00
|
||||
#define PCI_PASID_CTRL 0x06 /* PASID control register */
|
||||
#define PCI_PASID_CTRL_ENABLE 0x01 /* Enable bit */
|
||||
#define PCI_PASID_CTRL_EXEC 0x02 /* Exec permissions Enable */
|
||||
#define PCI_PASID_CTRL_PRIV 0x04 /* Privilege Mode Enable */
|
||||
#define PCI_PASID_CTRL_ENABLE 0x0001 /* Enable bit */
|
||||
#define PCI_PASID_CTRL_EXEC 0x0002 /* Exec permissions Enable */
|
||||
#define PCI_PASID_CTRL_PRIV 0x0004 /* Privilege Mode Enable */
|
||||
#define PCI_EXT_CAP_PASID_SIZEOF 8
|
||||
|
||||
/* Single Root I/O Virtualization */
|
||||
@ -976,6 +978,8 @@
|
||||
#define PCI_LTR_VALUE_MASK 0x000003ff
|
||||
#define PCI_LTR_SCALE_MASK 0x00001c00
|
||||
#define PCI_LTR_SCALE_SHIFT 10
|
||||
#define PCI_LTR_NOSNOOP_VALUE 0x03ff0000 /* Max No-Snoop Latency Value */
|
||||
#define PCI_LTR_NOSNOOP_SCALE 0x1c000000 /* Scale for Max Value */
|
||||
#define PCI_EXT_CAP_LTR_SIZEOF 8
|
||||
|
||||
/* Access Control Service */
|
||||
@ -1043,9 +1047,16 @@
|
||||
#define PCI_EXP_DPC_STATUS 0x08 /* DPC Status */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER 0x0001 /* Trigger Status */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN 0x0006 /* Trigger Reason */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_UNCOR 0x0000 /* Uncorrectable error */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_NFE 0x0002 /* Rcvd ERR_NONFATAL */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_FE 0x0004 /* Rcvd ERR_FATAL */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_IN_EXT 0x0006 /* Reason in Trig Reason Extension field */
|
||||
#define PCI_EXP_DPC_STATUS_INTERRUPT 0x0008 /* Interrupt Status */
|
||||
#define PCI_EXP_DPC_RP_BUSY 0x0010 /* Root Port Busy */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_EXT 0x0060 /* Trig Reason Extension */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_RP_PIO 0x0000 /* RP PIO error */
|
||||
#define PCI_EXP_DPC_STATUS_TRIGGER_RSN_SW_TRIGGER 0x0020 /* DPC SW Trigger bit */
|
||||
#define PCI_EXP_DPC_RP_PIO_FEP 0x1f00 /* RP PIO First Err Ptr */
|
||||
|
||||
#define PCI_EXP_DPC_SOURCE_ID 0x0A /* DPC Source Identifier */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user