Faraday Technology FTPCI100 PCI Host Bridge

This PCI bridge is found inside that Cortina Systems Gemini SoC platform and
is a generic IP block from Faraday Technology. It exists in two variants:
plain and dual PCI. The plain version embeds a cascading interrupt controller
into the host bridge. The dual version routes the interrupts to the host
chips interrupt controller.

The host controller appear on the PCI bus with vendor ID 0x159b (Faraday
Technology) and product ID 0x4321.

Mandatory properties:

- compatible: ranging from specific to generic, should be one of
  "cortina,gemini-pci", "faraday,ftpci100"
  "cortina,gemini-pci-dual", "faraday,ftpci100-dual"
  "faraday,ftpci100"
  "faraday,ftpci100-dual"
- reg: memory base and size for the host bridge
- #address-cells: set to <3>
- #size-cells: set to <2>
- #interrupt-cells: set to <1>
- bus-range: set to <0x00 0xff>
- device_type, set to "pci"
- ranges: see pci.txt
- interrupt-map-mask: see pci.txt
- interrupt-map: see pci.txt
- dma-ranges: three ranges for the inbound memory region. The ranges must
  be aligned to a 1MB boundary, and may be 1MB, 2MB, 4MB, 8MB, 16MB, 32MB, 64MB,
  128MB, 256MB, 512MB, 1GB or 2GB in size. The memory should be marked as
  pre-fetchable.

Optional properties:
- clocks: when present, this should contain the peripheral clock (PCLK) and the
  PCI clock (PCICLK). If these are not present, they are assumed to be
  hard-wired enabled and always on. The PCI clock will be 33 or 66 MHz.
- clock-names: when present, this should contain "PCLK" for the peripheral
  clock and "PCICLK" for the PCI-side clock.

Mandatory subnodes:
- For "faraday,ftpci100" a node representing the interrupt-controller inside the
  host bridge is mandatory. It has the following mandatory properties:
  - interrupt: see interrupt-controller/interrupts.txt
  - interrupt-controller: see interrupt-controller/interrupts.txt
  - #address-cells: set to <0>
  - #interrupt-cells: set to <1>

I/O space considerations:

The plain variant has 128MiB of non-prefetchable memory space, whereas the
"dual" variant has 64MiB. Take this into account when describing the ranges.

Interrupt map considerations:

The "dual" variant will get INT A, B, C, D from the system interrupt controller
and should point to respective interrupt in that controller in its
interrupt-map.

The code which is the only documentation of how the Faraday PCI (the non-dual
variant) interrupts assigns the default interrupt mapping/swizzling has
typically been like this, doing the swizzling on the interrupt controller side
rather than in the interconnect:

interrupt-map-mask = <0xf800 0 0 7>;
interrupt-map =
	<0x4800 0 0 1 &pci_intc 0>, /* Slot 9 */
	<0x4800 0 0 2 &pci_intc 1>,
	<0x4800 0 0 3 &pci_intc 2>,
	<0x4800 0 0 4 &pci_intc 3>,
	<0x5000 0 0 1 &pci_intc 1>, /* Slot 10 */
	<0x5000 0 0 2 &pci_intc 2>,
	<0x5000 0 0 3 &pci_intc 3>,
	<0x5000 0 0 4 &pci_intc 0>,
	<0x5800 0 0 1 &pci_intc 2>, /* Slot 11 */
	<0x5800 0 0 2 &pci_intc 3>,
	<0x5800 0 0 3 &pci_intc 0>,
	<0x5800 0 0 4 &pci_intc 1>,
	<0x6000 0 0 1 &pci_intc 3>, /* Slot 12 */
	<0x6000 0 0 2 &pci_intc 0>,
	<0x6000 0 0 3 &pci_intc 1>,
	<0x6000 0 0 4 &pci_intc 2>;

Example:

pci@50000000 {
	compatible = "cortina,gemini-pci", "faraday,ftpci100";
	reg = <0x50000000 0x100>;
	interrupts = <8 IRQ_TYPE_LEVEL_HIGH>, /* PCI A */
			<26 IRQ_TYPE_LEVEL_HIGH>, /* PCI B */
			<27 IRQ_TYPE_LEVEL_HIGH>, /* PCI C */
			<28 IRQ_TYPE_LEVEL_HIGH>; /* PCI D */
	#address-cells = <3>;
	#size-cells = <2>;
	#interrupt-cells = <1>;

	bus-range = <0x00 0xff>;
	ranges = /* 1MiB I/O space 0x50000000-0x500fffff */
		 <0x01000000 0 0          0x50000000 0 0x00100000>,
		 /* 128MiB non-prefetchable memory 0x58000000-0x5fffffff */
		 <0x02000000 0 0x58000000 0x58000000 0 0x08000000>;

	/* DMA ranges */
	dma-ranges =
	/* 128MiB at 0x00000000-0x07ffffff */
	<0x02000000 0 0x00000000 0x00000000 0 0x08000000>,
	/* 64MiB at 0x00000000-0x03ffffff */
	<0x02000000 0 0x00000000 0x00000000 0 0x04000000>,
	/* 64MiB at 0x00000000-0x03ffffff */
	<0x02000000 0 0x00000000 0x00000000 0 0x04000000>;

	interrupt-map-mask = <0xf800 0 0 7>;
	interrupt-map =
		<0x4800 0 0 1 &pci_intc 0>, /* Slot 9 */
		<0x4800 0 0 2 &pci_intc 1>,
		<0x4800 0 0 3 &pci_intc 2>,
		<0x4800 0 0 4 &pci_intc 3>,
		<0x5000 0 0 1 &pci_intc 1>, /* Slot 10 */
		<0x5000 0 0 2 &pci_intc 2>,
		<0x5000 0 0 3 &pci_intc 3>,
		<0x5000 0 0 4 &pci_intc 0>,
		<0x5800 0 0 1 &pci_intc 2>, /* Slot 11 */
		<0x5800 0 0 2 &pci_intc 3>,
		<0x5800 0 0 3 &pci_intc 0>,
		<0x5800 0 0 4 &pci_intc 1>,
		<0x6000 0 0 1 &pci_intc 3>, /* Slot 12 */
		<0x6000 0 0 2 &pci_intc 0>,
		<0x6000 0 0 3 &pci_intc 0>,
		<0x6000 0 0 4 &pci_intc 0>;
	pci_intc: interrupt-controller {
		interrupt-parent = <&intcon>;
		interrupt-controller;
		#address-cells = <0>;
		#interrupt-cells = <1>;
	};
};
