mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
Merge branch 'pci/config-errs'
- Simplify config accessor error checking (Ilpo Järvinen) * pci/config-errs: scsi: ipr: Do PCI error checks on own line PCI: xgene: Do PCI error check on own line & keep return value PCI: Do error check on own line to split long "if" conditions atm: iphase: Do PCI error checks on own line sh: pci: Do PCI error check on own line alpha: Streamline convoluted PCI error handling
This commit is contained in:
commit
65de3fd8f5
@ -183,16 +183,17 @@ miata_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
the 2nd 8259 controller. So we have to check for it first. */
|
||||
|
||||
if((slot == 7) && (PCI_FUNC(dev->devfn) == 3)) {
|
||||
u8 irq=0;
|
||||
struct pci_dev *pdev = pci_get_slot(dev->bus, dev->devfn & ~7);
|
||||
if(pdev == NULL || pci_read_config_byte(pdev, 0x40,&irq) != PCIBIOS_SUCCESSFUL) {
|
||||
pci_dev_put(pdev);
|
||||
u8 irq = 0;
|
||||
int ret;
|
||||
|
||||
if (!pdev)
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
pci_dev_put(pdev);
|
||||
return irq;
|
||||
}
|
||||
|
||||
ret = pci_read_config_byte(pdev, 0x40, &irq);
|
||||
pci_dev_put(pdev);
|
||||
|
||||
return ret == PCIBIOS_SUCCESSFUL ? irq : -1;
|
||||
}
|
||||
|
||||
return COMMON_TABLE_LOOKUP;
|
||||
|
@ -50,20 +50,21 @@ int __init pci_is_66mhz_capable(struct pci_channel *hose,
|
||||
int top_bus, int current_bus)
|
||||
{
|
||||
u32 pci_devfn;
|
||||
unsigned short vid;
|
||||
u16 vid;
|
||||
int cap66 = -1;
|
||||
u16 stat;
|
||||
int ret;
|
||||
|
||||
pr_info("PCI: Checking 66MHz capabilities...\n");
|
||||
|
||||
for (pci_devfn = 0; pci_devfn < 0xff; pci_devfn++) {
|
||||
if (PCI_FUNC(pci_devfn))
|
||||
continue;
|
||||
if (early_read_config_word(hose, top_bus, current_bus,
|
||||
pci_devfn, PCI_VENDOR_ID, &vid) !=
|
||||
PCIBIOS_SUCCESSFUL)
|
||||
ret = early_read_config_word(hose, top_bus, current_bus,
|
||||
pci_devfn, PCI_VENDOR_ID, &vid);
|
||||
if (ret != PCIBIOS_SUCCESSFUL)
|
||||
continue;
|
||||
if (vid == 0xffff)
|
||||
if (PCI_POSSIBLE_ERROR(vid))
|
||||
continue;
|
||||
|
||||
/* check 66MHz capability */
|
||||
|
@ -2291,19 +2291,21 @@ static int get_esi(struct atm_dev *dev)
|
||||
static int reset_sar(struct atm_dev *dev)
|
||||
{
|
||||
IADEV *iadev;
|
||||
int i, error = 1;
|
||||
int i, error;
|
||||
unsigned int pci[64];
|
||||
|
||||
iadev = INPH_IA_DEV(dev);
|
||||
for(i=0; i<64; i++)
|
||||
if ((error = pci_read_config_dword(iadev->pci,
|
||||
i*4, &pci[i])) != PCIBIOS_SUCCESSFUL)
|
||||
return error;
|
||||
for (i = 0; i < 64; i++) {
|
||||
error = pci_read_config_dword(iadev->pci, i * 4, &pci[i]);
|
||||
if (error != PCIBIOS_SUCCESSFUL)
|
||||
return error;
|
||||
}
|
||||
writel(0, iadev->reg+IPHASE5575_EXT_RESET);
|
||||
for(i=0; i<64; i++)
|
||||
if ((error = pci_write_config_dword(iadev->pci,
|
||||
i*4, pci[i])) != PCIBIOS_SUCCESSFUL)
|
||||
return error;
|
||||
for (i = 0; i < 64; i++) {
|
||||
error = pci_write_config_dword(iadev->pci, i * 4, pci[i]);
|
||||
if (error != PCIBIOS_SUCCESSFUL)
|
||||
return error;
|
||||
}
|
||||
udelay(5);
|
||||
return 0;
|
||||
}
|
||||
|
@ -163,10 +163,11 @@ static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, int size, u32 *val)
|
||||
{
|
||||
struct xgene_pcie *port = pcie_bus_to_port(bus);
|
||||
int ret;
|
||||
|
||||
if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) !=
|
||||
PCIBIOS_SUCCESSFUL)
|
||||
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||
ret = pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val);
|
||||
if (ret != PCIBIOS_SUCCESSFUL)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* The v1 controller has a bug in its Configuration Request Retry
|
||||
|
@ -732,15 +732,18 @@ u16 pci_find_vsec_capability(struct pci_dev *dev, u16 vendor, int cap)
|
||||
{
|
||||
u16 vsec = 0;
|
||||
u32 header;
|
||||
int ret;
|
||||
|
||||
if (vendor != dev->vendor)
|
||||
return 0;
|
||||
|
||||
while ((vsec = pci_find_next_ext_capability(dev, vsec,
|
||||
PCI_EXT_CAP_ID_VNDR))) {
|
||||
if (pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER,
|
||||
&header) == PCIBIOS_SUCCESSFUL &&
|
||||
PCI_VNDR_HEADER_ID(header) == cap)
|
||||
ret = pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);
|
||||
if (ret != PCIBIOS_SUCCESSFUL)
|
||||
continue;
|
||||
|
||||
if (PCI_VNDR_HEADER_ID(header) == cap)
|
||||
return vsec;
|
||||
}
|
||||
|
||||
|
@ -1652,15 +1652,15 @@ static void pci_set_removable(struct pci_dev *dev)
|
||||
static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
|
||||
{
|
||||
#ifdef CONFIG_PCI_QUIRKS
|
||||
int pos;
|
||||
int pos, ret;
|
||||
u32 header, tmp;
|
||||
|
||||
pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
|
||||
|
||||
for (pos = PCI_CFG_SPACE_SIZE;
|
||||
pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
|
||||
if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
|
||||
|| header != tmp)
|
||||
ret = pci_read_config_dword(dev, pos, &tmp);
|
||||
if ((ret != PCIBIOS_SUCCESSFUL) || (header != tmp))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -5383,7 +5383,7 @@ int pci_dev_specific_disable_acs_redir(struct pci_dev *dev)
|
||||
*/
|
||||
static void quirk_intel_qat_vf_cap(struct pci_dev *pdev)
|
||||
{
|
||||
int pos, i = 0;
|
||||
int pos, i = 0, ret;
|
||||
u8 next_cap;
|
||||
u16 reg16, *cap;
|
||||
struct pci_cap_saved_state *state;
|
||||
@ -5429,8 +5429,8 @@ static void quirk_intel_qat_vf_cap(struct pci_dev *pdev)
|
||||
pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
|
||||
|
||||
pdev->cfg_size = PCI_CFG_SPACE_EXP_SIZE;
|
||||
if (pci_read_config_dword(pdev, PCI_CFG_SPACE_SIZE, &status) !=
|
||||
PCIBIOS_SUCCESSFUL || (status == 0xffffffff))
|
||||
ret = pci_read_config_dword(pdev, PCI_CFG_SPACE_SIZE, &status);
|
||||
if ((ret != PCIBIOS_SUCCESSFUL) || (PCI_POSSIBLE_ERROR(status)))
|
||||
pdev->cfg_size = PCI_CFG_SPACE_SIZE;
|
||||
|
||||
if (pci_find_saved_cap(pdev, PCI_CAP_ID_EXP))
|
||||
|
@ -761,12 +761,14 @@ static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg,
|
||||
static int ipr_save_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
|
||||
{
|
||||
int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
|
||||
int rc;
|
||||
|
||||
if (pcix_cmd_reg == 0)
|
||||
return 0;
|
||||
|
||||
if (pci_read_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
|
||||
&ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
|
||||
rc = pci_read_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
|
||||
&ioa_cfg->saved_pcix_cmd_reg);
|
||||
if (rc != PCIBIOS_SUCCESSFUL) {
|
||||
dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n");
|
||||
return -EIO;
|
||||
}
|
||||
@ -785,10 +787,12 @@ static int ipr_save_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
|
||||
static int ipr_set_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
|
||||
{
|
||||
int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
|
||||
int rc;
|
||||
|
||||
if (pcix_cmd_reg) {
|
||||
if (pci_write_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
|
||||
ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
|
||||
rc = pci_write_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
|
||||
ioa_cfg->saved_pcix_cmd_reg);
|
||||
if (rc != PCIBIOS_SUCCESSFUL) {
|
||||
dev_err(&ioa_cfg->pdev->dev, "Failed to setup PCI-X command register\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user