diff options
| author | Bjorn Helgaas <bhelgaas@google.com> | 2014-10-06 11:59:15 -0400 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-10-06 11:59:15 -0400 |
| commit | f92d9ee3ab39841d1f29f2d1aa96ff7c74b36ee1 (patch) | |
| tree | c747c9ce1882b9a08d284603717890c5ef81bbf7 | |
| parent | 55dd4175a4bc10d943c159dabef552baaf459a59 (diff) | |
| parent | 767ebaff4ef7235eb49ddec5d48db97b17c37cf5 (diff) | |
Merge branch 'pci/host-xgene' into next
* pci/host-xgene:
arm64: dts: Add APM X-Gene PCIe device tree nodes
PCI: xgene: Add APM X-Gene PCIe driver
Conflicts:
drivers/pci/host/Kconfig
drivers/pci/host/Makefile
| -rw-r--r-- | Documentation/devicetree/bindings/pci/xgene-pci.txt | 57 | ||||
| -rw-r--r-- | MAINTAINERS | 8 | ||||
| -rw-r--r-- | arch/arm64/boot/dts/apm-mustang.dts | 8 | ||||
| -rw-r--r-- | arch/arm64/boot/dts/apm-storm.dtsi | 165 | ||||
| -rw-r--r-- | drivers/pci/host/Kconfig | 11 | ||||
| -rw-r--r-- | drivers/pci/host/Makefile | 1 | ||||
| -rw-r--r-- | drivers/pci/host/pci-xgene.c | 659 |
7 files changed, 908 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/pci/xgene-pci.txt b/Documentation/devicetree/bindings/pci/xgene-pci.txt new file mode 100644 index 000000000000..1070b068c7c6 --- /dev/null +++ b/Documentation/devicetree/bindings/pci/xgene-pci.txt | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | * AppliedMicro X-Gene PCIe interface | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - device_type: set to "pci" | ||
| 5 | - compatible: should contain "apm,xgene-pcie" to identify the core. | ||
| 6 | - reg: A list of physical base address and length for each set of controller | ||
| 7 | registers. Must contain an entry for each entry in the reg-names | ||
| 8 | property. | ||
| 9 | - reg-names: Must include the following entries: | ||
| 10 | "csr": controller configuration registers. | ||
| 11 | "cfg": pcie configuration space registers. | ||
| 12 | - #address-cells: set to <3> | ||
| 13 | - #size-cells: set to <2> | ||
| 14 | - ranges: ranges for the outbound memory, I/O regions. | ||
| 15 | - dma-ranges: ranges for the inbound memory regions. | ||
| 16 | - #interrupt-cells: set to <1> | ||
| 17 | - interrupt-map-mask and interrupt-map: standard PCI properties | ||
| 18 | to define the mapping of the PCIe interface to interrupt | ||
| 19 | numbers. | ||
| 20 | - clocks: from common clock binding: handle to pci clock. | ||
| 21 | |||
| 22 | Optional properties: | ||
| 23 | - status: Either "ok" or "disabled". | ||
| 24 | - dma-coherent: Present if dma operations are coherent | ||
| 25 | |||
| 26 | Example: | ||
| 27 | |||
| 28 | SoC specific DT Entry: | ||
| 29 | |||
| 30 | pcie0: pcie@1f2b0000 { | ||
| 31 | status = "disabled"; | ||
| 32 | device_type = "pci"; | ||
| 33 | compatible = "apm,xgene-storm-pcie", "apm,xgene-pcie"; | ||
| 34 | #interrupt-cells = <1>; | ||
| 35 | #size-cells = <2>; | ||
| 36 | #address-cells = <3>; | ||
| 37 | reg = < 0x00 0x1f2b0000 0x0 0x00010000 /* Controller registers */ | ||
| 38 | 0xe0 0xd0000000 0x0 0x00040000>; /* PCI config space */ | ||
| 39 | reg-names = "csr", "cfg"; | ||
| 40 | ranges = <0x01000000 0x00 0x00000000 0xe0 0x10000000 0x00 0x00010000 /* io */ | ||
| 41 | 0x02000000 0x00 0x80000000 0xe1 0x80000000 0x00 0x80000000>; /* mem */ | ||
| 42 | dma-ranges = <0x42000000 0x80 0x00000000 0x80 0x00000000 0x00 0x80000000 | ||
| 43 | 0x42000000 0x00 0x00000000 0x00 0x00000000 0x80 0x00000000>; | ||
| 44 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
| 45 | interrupt-map = <0x0 0x0 0x0 0x1 &gic 0x0 0xc2 0x1 | ||
| 46 | 0x0 0x0 0x0 0x2 &gic 0x0 0xc3 0x1 | ||
| 47 | 0x0 0x0 0x0 0x3 &gic 0x0 0xc4 0x1 | ||
| 48 | 0x0 0x0 0x0 0x4 &gic 0x0 0xc5 0x1>; | ||
| 49 | dma-coherent; | ||
| 50 | clocks = <&pcie0clk 0>; | ||
| 51 | }; | ||
| 52 | |||
| 53 | |||
| 54 | Board specific DT Entry: | ||
| 55 | &pcie0 { | ||
| 56 | status = "ok"; | ||
| 57 | }; | ||
diff --git a/MAINTAINERS b/MAINTAINERS index 07fd7e279700..fac7057ba67c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -6868,6 +6868,14 @@ F: include/linux/pci* | |||
| 6868 | F: arch/x86/pci/ | 6868 | F: arch/x86/pci/ |
| 6869 | F: arch/x86/kernel/quirks.c | 6869 | F: arch/x86/kernel/quirks.c |
| 6870 | 6870 | ||
| 6871 | PCI DRIVER FOR APPLIEDMICRO XGENE | ||
| 6872 | M: Tanmay Inamdar <tinamdar@apm.com> | ||
| 6873 | L: linux-pci@vger.kernel.org | ||
| 6874 | L: linux-arm-kernel@lists.infradead.org | ||
| 6875 | S: Maintained | ||
| 6876 | F: Documentation/devicetree/bindings/pci/xgene-pci.txt | ||
| 6877 | F: drivers/pci/host/pci-xgene.c | ||
| 6878 | |||
| 6871 | PCI DRIVER FOR IMX6 | 6879 | PCI DRIVER FOR IMX6 |
| 6872 | M: Richard Zhu <r65037@freescale.com> | 6880 | M: Richard Zhu <r65037@freescale.com> |
| 6873 | M: Lucas Stach <l.stach@pengutronix.de> | 6881 | M: Lucas Stach <l.stach@pengutronix.de> |
diff --git a/arch/arm64/boot/dts/apm-mustang.dts b/arch/arm64/boot/dts/apm-mustang.dts index b2f56229aa5e..f64900052f4e 100644 --- a/arch/arm64/boot/dts/apm-mustang.dts +++ b/arch/arm64/boot/dts/apm-mustang.dts | |||
| @@ -25,6 +25,14 @@ | |||
| 25 | }; | 25 | }; |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | &pcie0clk { | ||
| 29 | status = "ok"; | ||
| 30 | }; | ||
| 31 | |||
| 32 | &pcie0 { | ||
| 33 | status = "ok"; | ||
| 34 | }; | ||
| 35 | |||
| 28 | &serial0 { | 36 | &serial0 { |
| 29 | status = "ok"; | 37 | status = "ok"; |
| 30 | }; | 38 | }; |
diff --git a/arch/arm64/boot/dts/apm-storm.dtsi b/arch/arm64/boot/dts/apm-storm.dtsi index c0aceef7f5b3..403197a0e621 100644 --- a/arch/arm64/boot/dts/apm-storm.dtsi +++ b/arch/arm64/boot/dts/apm-storm.dtsi | |||
| @@ -269,6 +269,171 @@ | |||
| 269 | enable-mask = <0x2>; | 269 | enable-mask = <0x2>; |
| 270 | clock-output-names = "rtcclk"; | 270 | clock-output-names = "rtcclk"; |
| 271 | }; | 271 | }; |
| 272 | |||
| 273 | pcie0clk: pcie0clk@1f2bc000 { | ||
| 274 | status = "disabled"; | ||
| 275 | compatible = "apm,xgene-device-clock"; | ||
| 276 | #clock-cells = <1>; | ||
| 277 | clocks = <&socplldiv2 0>; | ||
| 278 | reg = <0x0 0x1f2bc000 0x0 0x1000>; | ||
| 279 | reg-names = "csr-reg"; | ||
| 280 | clock-output-names = "pcie0clk"; | ||
| 281 | }; | ||
| 282 | |||
| 283 | pcie1clk: pcie1clk@1f2cc000 { | ||
| 284 | status = "disabled"; | ||
| 285 | compatible = "apm,xgene-device-clock"; | ||
| 286 | #clock-cells = <1>; | ||
| 287 | clocks = <&socplldiv2 0>; | ||
| 288 | reg = <0x0 0x1f2cc000 0x0 0x1000>; | ||
| 289 | reg-names = "csr-reg"; | ||
| 290 | clock-output-names = "pcie1clk"; | ||
| 291 | }; | ||
| 292 | |||
| 293 | pcie2clk: pcie2clk@1f2dc000 { | ||
| 294 | status = "disabled"; | ||
| 295 | compatible = "apm,xgene-device-clock"; | ||
| 296 | #clock-cells = <1>; | ||
| 297 | clocks = <&socplldiv2 0>; | ||
| 298 | reg = <0x0 0x1f2dc000 0x0 0x1000>; | ||
| 299 | reg-names = "csr-reg"; | ||
| 300 | clock-output-names = "pcie2clk"; | ||
| 301 | }; | ||
| 302 | |||
| 303 | pcie3clk: pcie3clk@1f50c000 { | ||
| 304 | status = "disabled"; | ||
| 305 | compatible = "apm,xgene-device-clock"; | ||
| 306 | #clock-cells = <1>; | ||
| 307 | clocks = <&socplldiv2 0>; | ||
| 308 | reg = <0x0 0x1f50c000 0x0 0x1000>; | ||
| 309 | reg-names = "csr-reg"; | ||
| 310 | clock-output-names = "pcie3clk"; | ||
| 311 | }; | ||
| 312 | |||
| 313 | pcie4clk: pcie4clk@1f51c000 { | ||
| 314 | status = "disabled"; | ||
| 315 | compatible = "apm,xgene-device-clock"; | ||
| 316 | #clock-cells = <1>; | ||
| 317 | clocks = <&socplldiv2 0>; | ||
| 318 | reg = <0x0 0x1f51c000 0x0 0x1000>; | ||
| 319 | reg-names = "csr-reg"; | ||
| 320 | clock-output-names = "pcie4clk"; | ||
| 321 | }; | ||
| 322 | }; | ||
| 323 | |||
| 324 | pcie0: pcie@1f2b0000 { | ||
| 325 | status = "disabled"; | ||
| 326 | device_type = "pci"; | ||
| 327 | compatible = "apm,xgene-storm-pcie", "apm,xgene-pcie"; | ||
| 328 | #interrupt-cells = <1>; | ||
| 329 | #size-cells = <2>; | ||
| 330 | #address-cells = <3>; | ||
| 331 | reg = < 0x00 0x1f2b0000 0x0 0x00010000 /* Controller registers */ | ||
| 332 | 0xe0 0xd0000000 0x0 0x00040000>; /* PCI config space */ | ||
| 333 | reg-names = "csr", "cfg"; | ||
| 334 | ranges = <0x01000000 0x00 0x00000000 0xe0 0x10000000 0x00 0x00010000 /* io */ | ||
| 335 | 0x02000000 0x00 0x80000000 0xe1 0x80000000 0x00 0x80000000>; /* mem */ | ||
| 336 | dma-ranges = <0x42000000 0x80 0x00000000 0x80 0x00000000 0x00 0x80000000 | ||
| 337 | 0x42000000 0x00 0x00000000 0x00 0x00000000 0x80 0x00000000>; | ||
| 338 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
| 339 | interrupt-map = <0x0 0x0 0x0 0x1 &gic 0x0 0xc2 0x1 | ||
| 340 | 0x0 0x0 0x0 0x2 &gic 0x0 0xc3 0x1 | ||
