Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00406e87 authored by Aaron Sierra's avatar Aaron Sierra Committed by Scott Wood
Browse files

powerpc: fsl_pci: Add forced PCI Agent enumeration



The following commit prevents the MPC8548E on the XPedite5200 PrPMC
module from enumerating its PCI/PCI-X bus:

    powerpc/fsl-pci: use 'Header Type' to identify PCIE mode

The previous patch prevents any Freescale PCI-X bridge from enumerating
the bus, if it is hardware strapped into Agent mode.

In PCI-X, the Host is responsible for driving the PCI-X initialization
pattern to devices on the bus, so that they know whether to operate in
conventional PCI or PCI-X mode as well as what the bus timing will be.
For a PCI-X PrPMC, the pattern is driven by the mezzanine carrier it is
installed onto. Therefore, PrPMCs are PCI-X Agents, but one per system
may still enumerate the bus.

This patch causes the device node of any PCI/PCI-X bridge strapped into
Agent mode to be checked for the fsl,pci-agent-force-enum property. If
the property is present in the node, the bridge will be allowed to
enumerate the bus.

Cc: Minghuan Lian <Minghuan.Lian@freescale.com>
Signed-off-by: default avatarAaron Sierra <asierra@xes-inc.com>
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 7b0e6d6f
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
* Bus Enumeration by Freescale PCI-X Agent

Typically any Freescale PCI-X bridge hardware strapped into Agent mode
is prevented from enumerating the bus. The PrPMC form-factor requires
all mezzanines to be PCI-X Agents, but one per system may still
enumerate the bus.

The property defined below will allow a PCI-X bridge to be used for bus
enumeration despite being strapped into Agent mode.

Required properties:
- fsl,pci-agent-force-enum : There is no value associated with this
  property. The property itself is treated as a boolean.

Example:

	/* PCI-X bridge known to be PrPMC Monarch */
	pci0: pci@ef008000 {
		fsl,pci-agent-force-enum;
		#interrupt-cells = <1>;
		#size-cells = <2>;
		#address-cells = <3>;
		compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
		device_type = "pci";
		...
		...
	};
+2 −1
Original line number Diff line number Diff line
@@ -522,7 +522,8 @@ int fsl_add_bridge(struct platform_device *pdev, int is_primary)
	} else {
		/* For PCI read PROG to identify controller mode */
		early_read_config_byte(hose, 0, 0, PCI_CLASS_PROG, &progif);
		if ((progif & 1) == 1)
		if ((progif & 1) &&
		    !of_property_read_bool(dev, "fsl,pci-agent-force-enum"))
			goto no_bridge;
	}