123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- * Mediatek/Ralink RT3883 PCI controller
- 1) 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".
- 2) 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 migh 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".
- 3) 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";
- };
- };
- };
|