aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2017-03-30 10:05:27 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-03-31 16:57:07 +1100
commitb878b6828f5b6defd7e5e8b5da38978fda235081 (patch)
treed07835a916116f80f15f20811fdee997cf1f8bcc
parent3170dd74cefeae5fa6b65b2b8f99dd54ca06d249 (diff)
downloadskiboot-b878b6828f5b6defd7e5e8b5da38978fda235081.zip
skiboot-b878b6828f5b6defd7e5e8b5da38978fda235081.tar.gz
skiboot-b878b6828f5b6defd7e5e8b5da38978fda235081.tar.bz2
hw/phb4: Locate AER capability position if necessary
Similar to PHB3, phb4_init_rc_cfg() can be called when the PHB is initialized or reinitialized after complete reset. In the later case, we needn't locate the AER capability position again and the cached position can be used as we do for PCIe capability. So several CPU cycles can be saved. The error message is shortened and meaningless comment is dropped as well. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--hw/phb4.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/hw/phb4.c b/hw/phb4.c
index 27213c4..55de229 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -2512,13 +2512,16 @@ static bool phb4_init_rc_cfg(struct phb4 *p)
*
* AER inits
*/
- aercap = pci_find_ecap(&p->phb, 0, PCIECAP_ID_AER, NULL);
- if (aercap < 0) {
- /* Shouldn't happen */
- PHBERR(p, "Failed to locate AER Ecapability in bridge\n");
- return false;
+ if (p->aercap <= 0) {
+ aercap = pci_find_ecap(&p->phb, 0, PCIECAP_ID_AER, NULL);
+ if (aercap < 0) {
+ PHBERR(p, "Can't locate AER capability\n");
+ return false;
+ }
+ p->aercap = aercap;
+ } else {
+ aercap = p->aercap;
}
- p->aercap = aercap;
/* Clear all UE status */
phb4_pcicfg_write32(&p->phb, 0, aercap + PCIECAP_AER_UE_STATUS,