- Mediatek/Ralink RT3883 PCI controller
Main node
Required properties:
compatible: must be “ralink,rt3883-pci”
reg: specifies the physical base address of the controller and
the length of the memory mapped region.#address-cells: specifies the number of cells needed to encode an
address. The value must be 1.#size-cells: specifies the number of cells used to represent the size
of an address. The value must be 1.ranges: specifies the translation between child address space and parent
address space
Optional properties:
- status: indicates the operational status of the device.
Value must be either “disabled” or “okay”.
Child nodes
The main node must have two child nodes which describes the built-in
interrupt controller and the PCI host bridge.a) Interrupt controller:
Required properties:
interrupt-controller: identifies the node as an interrupt controller
#address-cells: specifies the number of cells needed to encode an
address. The value must be 0. As such, ‘interrupt-map’ nodes do not
have to specify a parent unit address.#interrupt-cells: specifies the number of cells needed to encode an
interrupt source. The value must be 1.interrupt-parent: the phandle for the interrupt controller that
services interrupts for this device.interrupts: specifies the interrupt source of the parent interrupt
controller. The format of the interrupt specifier depends on the
parent interrupt controller.
b) PCI host bridge:
Required properties:
#address-cells: specifies the number of cells needed to encode an
address. The value must be 0.#size-cells: specifies the number of cells used to represent the size
of an address. The value must be 2.#interrupt-cells: specifies the number of cells needed to encode an
interrupt source. The value must be 1.device_type: must be “pci”
bus-range: PCI bus numbers covered
ranges: specifies the ranges for the PCI memory and I/O regions
interrupt-map-mask,
interrupt-map: standard PCI properties to define the mapping of the
PCI interface to interrupt numbers.
The PCI host bridge node might have additional sub-nodes representing
the onboard PCI devices/PCI slots. Each such sub-node must have the
following mandatory properties:reg: used only for interrupt mapping, so only the first four bytes
are used to refer to the correct bus number and device number.device_type: must be “pci”
If a given sub-node represents a PCI bridge it must have following
mandatory properties as well:#address-cells: must be set to <3>
#size-cells: must set to <2>
#interrupt-cells: must be set to <1>
interrupt-map-mask,
interrupt-map: standard PCI properties to define the mapping of the
PCI interface to interrupt numbers.
Besides the required properties the sub-nodes may have these optional
properties:- status: indicates the operational status of the sub-node.
Value must be either “disabled” or “okay”.
Example:
a) SoC specific dtsi file:
pci@10140000 {
compatible = "ralink,rt3883-pci"; reg = <0x10140000 0x20000>; #address-cells = <1>; #size-cells = <1>; ranges; /* direct mapping */ status = "disabled"; pciintc: interrupt-controller { interrupt-controller; #address-cells = <0>; #interrupt-cells = <1>; interrupt-parent = <&cpuintc>; interrupts = <4>; }; host-bridge { #address-cells = <3>; #size-cells = <2>; #interrupt-cells = <1>; device_type = "pci"; bus-range = <0 255>; ranges = < 0x02000000 0 0x00000000 0x20000000 0 0x10000000 /* pci memory */ 0x01000000 0 0x00000000 0x10160000 0 0x00010000 /* io space */ >; interrupt-map-mask = <0xf800 0 0 7>; interrupt-map = < /* IDSEL 17 */ 0x8800 0 0 1 &pciintc 18 0x8800 0 0 2 &pciintc 18 0x8800 0 0 3 &pciintc 18 0x8800 0 0 4 &pciintc 18 /* IDSEL 18 */ 0x9000 0 0 1 &pciintc 19 0x9000 0 0 2 &pciintc 19 0x9000 0 0 3 &pciintc 19 0x9000 0 0 4 &pciintc 19 >; pci-bridge@1 { reg = <0x0800 0 0 0 0>; device_type = "pci"; #interrupt-cells = <1>; #address-cells = <3>; #size-cells = <2>; interrupt-map-mask = <0x0 0 0 0>; interrupt-map = <0x0 0 0 0 &pciintc 20>; status = "disabled"; }; pci-slot@17 { reg = <0x8800 0 0 0 0>; device_type = "pci"; status = "disabled"; }; pci-slot@18 { reg = <0x9000 0 0 0 0>; device_type = "pci"; status = "disabled"; }; };
};
b) Board specific dts file:
pci@10140000 {
status = "okay"; host-bridge { pci-bridge@1 { status = "okay"; }; };
};