mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci
* 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci: (80 commits) x86/PCI: Expand the x86_msi_ops to have a restore MSIs. PCI: Increase resource array mask bit size in pcim_iomap_regions() PCI: DEVICE_COUNT_RESOURCE should be equal to PCI_NUM_RESOURCES PCI: pci_ids: add device ids for STA2X11 device (aka ConneXT) PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that breaks USB x86/PCI: amd: factor out MMCONFIG discovery PCI: Enable ATS at the device state restore PCI: msi: fix imbalanced refcount of msi irq sysfs objects PCI: kconfig: English typo in pci/pcie/Kconfig PCI/PM/Runtime: make PCI traces quieter PCI: remove pci_create_bus() xtensa/PCI: convert to pci_scan_root_bus() for correct root bus resources x86/PCI: convert to pci_create_root_bus() and pci_scan_root_bus() x86/PCI: use pci_scan_bus() instead of pci_scan_bus_parented() x86/PCI: read Broadcom CNB20LE host bridge info before PCI scan sparc32, leon/PCI: convert to pci_scan_root_bus() for correct root bus resources sparc/PCI: convert to pci_create_root_bus() sh/PCI: convert to pci_scan_root_bus() for correct root bus resources powerpc/PCI: convert to pci_create_root_bus() powerpc/PCI: split PHB part out of pcibios_map_io_space() ... Fix up conflicts in drivers/pci/msi.c and include/linux/pci_regs.h due to the same patches being applied in other branches.
This commit is contained in:
commit
7b67e75147
91 changed files with 1125 additions and 806 deletions
|
|
@ -7638,8 +7638,12 @@ static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
|
|||
**/
|
||||
static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd)
|
||||
{
|
||||
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
|
||||
|
||||
ENTER;
|
||||
pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev);
|
||||
if (ioa_cfg->cfg_locked)
|
||||
pci_cfg_access_unlock(ioa_cfg->pdev);
|
||||
ioa_cfg->cfg_locked = 0;
|
||||
ipr_cmd->job_step = ipr_reset_restore_cfg_space;
|
||||
LEAVE;
|
||||
return IPR_RC_JOB_CONTINUE;
|
||||
|
|
@ -7660,8 +7664,6 @@ static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
|
|||
int rc = PCIBIOS_SUCCESSFUL;
|
||||
|
||||
ENTER;
|
||||
pci_block_user_cfg_access(ioa_cfg->pdev);
|
||||
|
||||
if (ioa_cfg->ipr_chip->bist_method == IPR_MMIO)
|
||||
writel(IPR_UPROCI_SIS64_START_BIST,
|
||||
ioa_cfg->regs.set_uproc_interrupt_reg32);
|
||||
|
|
@ -7673,7 +7675,9 @@ static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
|
|||
ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
|
||||
rc = IPR_RC_JOB_RETURN;
|
||||
} else {
|
||||
pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev);
|
||||
if (ioa_cfg->cfg_locked)
|
||||
pci_cfg_access_unlock(ipr_cmd->ioa_cfg->pdev);
|
||||
ioa_cfg->cfg_locked = 0;
|
||||
ipr_cmd->s.ioasa.hdr.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
|
||||
rc = IPR_RC_JOB_CONTINUE;
|
||||
}
|
||||
|
|
@ -7716,7 +7720,6 @@ static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd)
|
|||
struct pci_dev *pdev = ioa_cfg->pdev;
|
||||
|
||||
ENTER;
|
||||
pci_block_user_cfg_access(pdev);
|
||||
pci_set_pcie_reset_state(pdev, pcie_warm_reset);
|
||||
ipr_cmd->job_step = ipr_reset_slot_reset_done;
|
||||
ipr_reset_start_timer(ipr_cmd, IPR_PCI_RESET_TIMEOUT);
|
||||
|
|
@ -7724,6 +7727,56 @@ static int ipr_reset_slot_reset(struct ipr_cmnd *ipr_cmd)
|
|||
return IPR_RC_JOB_RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_reset_block_config_access_wait - Wait for permission to block config access
|
||||
* @ipr_cmd: ipr command struct
|
||||
*
|
||||
* Description: This attempts to block config access to the IOA.
|
||||
*
|
||||
* Return value:
|
||||
* IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
|
||||
**/
|
||||
static int ipr_reset_block_config_access_wait(struct ipr_cmnd *ipr_cmd)
|
||||
{
|
||||
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
|
||||
int rc = IPR_RC_JOB_CONTINUE;
|
||||
|
||||
if (pci_cfg_access_trylock(ioa_cfg->pdev)) {
|
||||
ioa_cfg->cfg_locked = 1;
|
||||
ipr_cmd->job_step = ioa_cfg->reset;
|
||||
} else {
|
||||
if (ipr_cmd->u.time_left) {
|
||||
rc = IPR_RC_JOB_RETURN;
|
||||
ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
|
||||
ipr_reset_start_timer(ipr_cmd,
|
||||
IPR_CHECK_FOR_RESET_TIMEOUT);
|
||||
} else {
|
||||
ipr_cmd->job_step = ioa_cfg->reset;
|
||||
dev_err(&ioa_cfg->pdev->dev,
|
||||
"Timed out waiting to lock config access. Resetting anyway.\n");
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_reset_block_config_access - Block config access to the IOA
|
||||
* @ipr_cmd: ipr command struct
|
||||
*
|
||||
* Description: This attempts to block config access to the IOA
|
||||
*
|
||||
* Return value:
|
||||
* IPR_RC_JOB_CONTINUE
|
||||
**/
|
||||
static int ipr_reset_block_config_access(struct ipr_cmnd *ipr_cmd)
|
||||
{
|
||||
ipr_cmd->ioa_cfg->cfg_locked = 0;
|
||||
ipr_cmd->job_step = ipr_reset_block_config_access_wait;
|
||||
ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
|
||||
return IPR_RC_JOB_CONTINUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_reset_allowed - Query whether or not IOA can be reset
|
||||
* @ioa_cfg: ioa config struct
|
||||
|
|
@ -7763,7 +7816,7 @@ static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd)
|
|||
ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
|
||||
ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
|
||||
} else {
|
||||
ipr_cmd->job_step = ioa_cfg->reset;
|
||||
ipr_cmd->job_step = ipr_reset_block_config_access;
|
||||
rc = IPR_RC_JOB_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
@ -7796,7 +7849,7 @@ static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd)
|
|||
writel(IPR_UPROCI_RESET_ALERT, ioa_cfg->regs.set_uproc_interrupt_reg32);
|
||||
ipr_cmd->job_step = ipr_reset_wait_to_start_bist;
|
||||
} else {
|
||||
ipr_cmd->job_step = ioa_cfg->reset;
|
||||
ipr_cmd->job_step = ipr_reset_block_config_access;
|
||||
}
|
||||
|
||||
ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
|
||||
|
|
|
|||
|
|
@ -1387,6 +1387,7 @@ struct ipr_ioa_cfg {
|
|||
u8 msi_received:1;
|
||||
u8 sis64:1;
|
||||
u8 dump_timeout:1;
|
||||
u8 cfg_locked:1;
|
||||
|
||||
u8 revid;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue