aboutsummaryrefslogtreecommitdiff
path: root/hw/phb3.c
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2016-06-10 15:03:38 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-06-14 16:00:16 +1000
commit306b47d08a7520a08acdbbe06bcb1668eaf4b42c (patch)
tree58b7e59f786e2036844be859270a342c2d46f0a1 /hw/phb3.c
parentbe7780911564db1b77f43c8e12447ff026947db3 (diff)
downloadskiboot-306b47d08a7520a08acdbbe06bcb1668eaf4b42c.zip
skiboot-306b47d08a7520a08acdbbe06bcb1668eaf4b42c.tar.gz
skiboot-306b47d08a7520a08acdbbe06bcb1668eaf4b42c.tar.bz2
core/pci: Fix wrong reserved PE# in enumeration
When scanning to non-existing PCI device, EEH (frozen) error is usually happening. We clear the unexpected frozen PE state after it. The reserved PE number is assumed to be 0 wrongly. So the frozen state on the reserved PE number isn't cleared properly. This introduces struct phb_ops::get_reserved_pe_number() to retrieve the reserved PE number from platforms. Then the EEH frozen state checking and clearing are applied to the reserved PE number. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/phb3.c')
-rw-r--r--hw/phb3.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/hw/phb3.c b/hw/phb3.c
index 156bd9e..ae4db6e 100644
--- a/hw/phb3.c
+++ b/hw/phb3.c
@@ -295,6 +295,11 @@ static uint8_t phb3_choose_bus(struct phb *phb __unused,
return candidate;
}
+static int64_t phb3_get_reserved_pe_number(void)
+{
+ return PHB3_RESERVED_PE_NUM;
+}
+
static void phb3_root_port_init(struct phb *phb, struct pci_device *dev,
int ecap, int aercap)
{
@@ -3633,6 +3638,7 @@ static const struct phb_ops phb3_ops = {
.cfg_write16 = phb3_pcicfg_write16,
.cfg_write32 = phb3_pcicfg_write32,
.choose_bus = phb3_choose_bus,
+ .get_reserved_pe_number = phb3_get_reserved_pe_number,
.device_init = phb3_device_init,
.presence_detect = phb3_presence_detect,
.ioda_reset = phb3_ioda_reset,