arm: Add Artpec-6 SoC
Subsystems (5)
Lars Persson
maintainerv3 cover arm: Add Artpec-6 SoC
Basic support for the Axis Artpec-6 ARM SoC. Timers, interrupts, UARTs and ethernet are wired up.
Changes since v2:
- Create a syscon binding for the system controller.
- Clock patches split out to new patch series "clk: Add Artpec-6 SoC support".
Changes since v1:
- Corrected bindings for axis,artpec6-pll1-clock.
- Moved the uart aliases to the board dts.
- Kconfig cleanup.
- Added a device tree binding for the dma configuration.
- Added CONFIG_SYNOPSYS_DWC_ETH_QOS to multi_v7_defconfig.
- Added binding documentation for axis,artpec6-dev-board.
Lars Persson (6):
arm: add device-tree SoC bindings for Axis Artpec-6
arm: dts: add Artpec-6 SoC dtsi file
arm: dts: add Artpec-6 development board dts
arm: initial machine port for artpec-6 SoC
arm: multi_v7_defconfig: add MACH_ARTPEC6
arm: mach-artpec: add entry to MAINTAINERS
Documentation/devicetree/bindings/arm/axis.txt | 29 +++ MAINTAINERS | 10 ++ arch/arm/Kconfig | 2 + arch/arm/Makefile | 1 + arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/artpec6-devboard.dts | 64 +++++++ arch/arm/boot/dts/artpec6.dtsi | 236 +++++++++++++++++++++++++ arch/arm/configs/multi_v7_defconfig | 3 + arch/arm/mach-artpec/Kconfig | 20 +++ arch/arm/mach-artpec/Makefile | 1 + arch/arm/mach-artpec/board-artpec6.c | 72 ++++++++ 11 files changed, 440 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axis.txt create mode 100644 arch/arm/boot/dts/artpec6-devboard.dts create mode 100644 arch/arm/boot/dts/artpec6.dtsi create mode 100644 arch/arm/mach-artpec/Kconfig create mode 100644 arch/arm/mach-artpec/Makefile create mode 100644 arch/arm/mach-artpec/board-artpec6.c
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v3 1/6 arm: add device-tree SoC bindings for Axis Artpec-6
This adds device tree bindings for the Artpec-6 SoC.
--- Documentation/devicetree/bindings/arm/axis.txt | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axis.txt
Documentation/devicetree/bindings/arm/axis.txt new file +29 -0
@@ -0,0 +1,29 @@ +Axis Communications AB +ARTPEC series SoC Device Tree Bindings + +ARTPEC-6 ARM SoC +================ + +Required root node properties: +- compatible = "axis,artpec6"; + +ARTPEC-6 System Controller +-------------------------- + +The ARTPEC-6 has a system controller with mixed functions controlling DMA, PCIe +and resets. + +Required properties: +- compatible: "axis,artpec6-syscon", "syscon" +- reg: Address and length of the register bank. + +Example: + syscon { + compatible = "axis,artpec6-syscon", "syscon"; + reg = <0xf8000000 0x48>; + }; + +ARTPEC-6 Development board: +--------------------------- +Required root node properties: +- compatible = "axis,artpec6-dev-board", "axis,artpec6";
Signature · 1 line
2.1.4
Re: [PATCH v3 1/6] arm: add device-tree SoC bindings for Axis Artpec-6
Quoted 7 lines · Lars Persson
This adds device tree bindings for the Artpec-6 SoC.
Signed-off-by Lars Persson <[email protected]>--- Documentation/devicetree/bindings/arm/axis.txt | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axis.txt
Lars Persson
maintainerPATCH v3 2/6 arm: dts: add Artpec-6 SoC dtsi file
In reply to Lars PerssonInitial device tree for the Artpec-6 SoC.
--- arch/arm/boot/dts/artpec6.dtsi | 236 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 arch/arm/boot/dts/artpec6.dtsi
arch/arm/boot/dts/artpec6.dtsi new file +236 -0
@@ -0,0 +1,236 @@ +/* + * Device Tree Source for the Axis ARTPEC-6 SoC + * + * This file is licensed under the terms of the GNU General Public License + * version 2. This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + */ + +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include "skeleton.dtsi" + +/ { + compatible = "axis,artpec6"; + interrupt-parent = <&intc>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu at 0 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <0>; + next-level-cache = <&pl310>; + }; + + cpu1: cpu at 1 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <1>; + next-level-cache = <&pl310>; + }; + }; + + syscon { + compatible = "axis,artpec6-syscon", "syscon"; + reg = <0xf8000000 0x48>; + }; + + psci { + compatible = "arm,psci-0.2", "arm,psci"; + method = "smc"; + psci_version = <0x84000000>; + cpu_on = <0x84000003>; + system_reset = <0x84000009>; + }; + + scu at faf00000 { + compatible = "arm,cortex-a9-scu"; + reg = <0xfaf00000 0x58>; + }; + + /* Main external clock driving CPU and peripherals */ + ext_clk: ext_clk { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <50000000>; + }; + + /* PLL1 is used by CPU and some peripherals */ + pll1_clk: pll1_clk at f8000000 { + #clock-cells = <0>; + compatible = "axis,artpec6-pll1-clock"; + reg = <0xf8000000 4>; + clocks = <&ext_clk>; + }; + + cpu_clk: cpu_clk { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <1>; + clock-mult = <1>; + clocks = <&pll1_clk>; + clock-output-names = "cpu_clk"; + }; + + cpu_clkdiv2: cpu_clkdiv2 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <2>; + clock-mult = <1>; + clocks = <&cpu_clk>; + }; + + cpu_clkdiv4: cpu_clkdiv4 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <4>; + clock-mult = <1>; + clocks = <&cpu_clk>; + }; + + apb_pclk: apb_pclk { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <8>; + clock-mult = <1>; + clocks = <&cpu_clk>; + clock-output-names = "apb_pclk"; + }; + + /* PLL2 is used by a number of peripherals, including UDL */ + pll2: pll2 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <1>; + clock-mult = <24>; + clocks = <&ext_clk>; + }; + + /* PLL2DIV2 is used by the Fractional Clock Divider, for i2s */ + pll2div2: pll2div2 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <2>; + clock-mult = <1>; + clocks = <&pll2>; + }; + + pll2div12: pll2div12 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <12>; + clock-mult = <1>; + clocks = <&pll2>; + }; + + pll2div24: pll2div24 { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <24>; + clock-mult = <1>; + clocks = <&pll2>; + clock-output-names = "uart_clk"; + }; + + + gtimer at faf00200 { + compatible = "arm,cortex-a9-global-timer"; + reg = <0xfaf00200 0x20>; + interrupts = <GIC_PPI 11 0xf01>; + clocks = <&cpu_clkdiv2>; + }; + + timer at faf00600 { + compatible = "arm,cortex-a9-twd-timer"; + reg = <0xfaf00600 0x20>; + interrupts = <GIC_PPI 13 0xf04>; + clocks = <&cpu_clkdiv2>; + status = "disabled"; + }; + + intc: interrupt-controller at faf01000 { + interrupt-controller; + compatible = "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + reg = < 0xfaf01000 0x1000 >, < 0xfaf00100 0x0100 >; + }; + + pl310: cache-controller at faf10000 { + compatible = "arm,pl310-cache"; + cache-unified; + cache-level = <2>; + reg = <0xfaf10000 0x1000>; + interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; + arm,data-latency = <1 1 1>; + arm,tag-latency = <1 1 1>; + arm,filter-ranges = <0x0 0x80000000>; + }; + + pmu { + compatible = "arm,cortex-a9-pmu"; + interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; + interrupt-parent = <&intc>; + }; + + amba at 0 { + compatible = "simple-bus"; + #address-cells = <0x1>; + #size-cells = <0x1>; + interrupt-parent = <&intc>; + ranges; + dma-ranges = <0x80000000 0x00000000 0x40000000>; + dma-coherent; + + ethernet: ethernet at f8010000 { + clock-names = "phy_ref_clk", "apb_pclk"; + clocks = <&ext_clk>, <&apb_pclk>; + compatible = "snps,dwc-qos-ethernet-4.10"; + interrupt-parent = <&intc>; + interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; + reg = <0xf8010000 0x4000>; + + snps,write-requests = <2>; + snps,read-requests = <16>; + snps,txpbl = <8>; + snps,rxpbl = <2>; + + status = "disabled"; + }; + + uart0: serial at f8036000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0xf8036000 0x1000>; + interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&pll2div24>, <&apb_pclk>; + clock-names = "uart_clk", "apb_pclk"; + status = "disabled"; + }; + uart1: serial at f8037000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0xf8037000 0x1000>; + interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&pll2div24>, <&apb_pclk>; + clock-names = "uart_clk", "apb_pclk"; + status = "disabled"; + }; + uart2: serial at f8038000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0xf8038000 0x1000>; + interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&pll2div24>, <&apb_pclk>; + clock-names = "uart_clk", "apb_pclk"; + status = "disabled"; + }; + uart3: serial at f8039000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0xf8039000 0x1000>; + interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&pll2div24>, <&apb_pclk>; + clock-names = "uart_clk", "apb_pclk"; + status = "disabled"; + }; + }; +};
Signature · 1 line
2.1.4
Re: [PATCH v3 2/6] arm: dts: add Artpec-6 SoC dtsi file
Quoted 14 lines · Lars Persson
Initial device tree for the Artpec-6 SoC.
Signed-off-by Lars Persson <[email protected]>--- arch/arm/boot/dts/artpec6.dtsi | 236 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 arch/arm/boot/dts/artpec6.dtsiarch/arm/boot/dts/artpec6.dtsi new file +0
-0
arch/arm/boot/dts/artpec6.dtsi line 7
Quoted 7 lines
arch/arm/boot/dts/artpec6.dtsi new file +7
-0@@ -0,0 +1,236 @@ +/* + * Device Tree Source for the Axis ARTPEC-6 SoC + * + * This file is licensed under the terms of the GNU General Public License + * version 2. This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + */
I just realized these are GPL-only. We try to get most DTS/DTSI files dual licensed now so that they can be separated from the linux kernel and used in other projects. You can see the boilerplate used by other platforms in the same directory.
I'd appreciate a patch that changed the licensing (it can be done on top of this, since I already applied the patches we might as well keep them and fix incrementally).
(Let me know if your corporate lawyers are giving you a hard time over this, I'd be happy to talk to them to explain if needed).
-Olof
Lars Persson
maintainerPATCH v3 3/6 arm: dts: add Artpec-6 development board dts
In reply to Lars Persson--- arch/arm/boot/dts/Makefile | 2 ++ arch/arm/boot/dts/artpec6-devboard.dts | 64 ++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 arch/arm/boot/dts/artpec6-devboard.dts
arch/arm/boot/dts/Makefile +2 -0
@@ -2,6 +2,8 @@ ifeq ($(CONFIG_OF),y) dtb-$(CONFIG_ARCH_ALPINE) += \ alpine-db.dtb +dtb-$(CONFIG_MACH_ARTPEC6) += \ + artpec6-devboard.dtb dtb-$(CONFIG_MACH_ASM9260) += \ alphascale-asm9260-devkit.dtb # Keep at91 dtb files sorted alphabetically for each SoC
arch/arm/boot/dts/artpec6-devboard.dts new file +64 -0
64 lines not on this page · raw message
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v3 4/6 arm: initial machine port for artpec-6 SoC
In reply to Lars PerssonBasic machine port for the Artpec-6 SoC from Axis
Communications.
--- arch/arm/Kconfig | 2 + arch/arm/Makefile | 1 + arch/arm/mach-artpec/Kconfig | 20 ++++++++++ arch/arm/mach-artpec/Makefile | 1 + arch/arm/mach-artpec/board-artpec6.c | 72 ++++++++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 arch/arm/mach-artpec/Kconfig create mode 100644 arch/arm/mach-artpec/Makefile create mode 100644 arch/arm/mach-artpec/board-artpec6.c
arch/arm/Kconfig +2 -0
@@ -724,6 +724,8 @@ source "arch/arm/mach-mvebu/Kconfig" source "arch/arm/mach-alpine/Kconfig" +source "arch/arm/mach-artpec/Kconfig" + source "arch/arm/mach-asm9260/Kconfig" source "arch/arm/mach-at91/Kconfig"
arch/arm/Makefile +1 -0
@@ -154,6 +154,7 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000 # Machine directory name. This list is sorted alphanumerically # by CONFIG_* macro name. machine-$(CONFIG_ARCH_ALPINE) += alpine +machine-$(CONFIG_ARCH_ARTPEC) += artpec machine-$(CONFIG_ARCH_AT91) += at91 machine-$(CONFIG_ARCH_AXXIA) += axxia machine-$(CONFIG_ARCH_BCM) += bcm
arch/arm/mach-artpec/Kconfig new file +20 -0
@@ -0,0 +1,20 @@ +menuconfig ARCH_ARTPEC + bool "Axis Communications ARM based ARTPEC SoCs" + depends on ARCH_MULTI_V7 + +if ARCH_ARTPEC + +config MACH_ARTPEC6 + bool "Axis ARTPEC-6 ARM Cortex A9 Platform" + depends on ARCH_MULTI_V7 + select ARM_AMBA + select ARM_GIC + select ARM_GLOBAL_TIMER + select ARM_PSCI + select HAVE_ARM_ARCH_TIMER + select HAVE_ARM_SCU + select HAVE_ARM_TWD if SMP + help + Support for Axis ARTPEC-6 ARM Cortex A9 Platform + +endif
arch/arm/mach-artpec/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_MACH_ARTPEC6) := board-artpec6.o
arch/arm/mach-artpec/board-artpec6.c new file +72 -0
72 lines not on this page · raw message
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v3 5/6 arm: multi_v7_defconfig: add MACH_ARTPEC6
In reply to Lars Persson--- arch/arm/configs/multi_v7_defconfig | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/configs/multi_v7_defconfig +3 -0
@@ -16,6 +16,8 @@ CONFIG_ARCH_MULTI_V7=y # CONFIG_ARCH_MULTI_V4 is not set CONFIG_ARCH_VIRT=y CONFIG_ARCH_ALPINE=y +CONFIG_ARCH_ARTPEC=y +CONFIG_MACH_ARTPEC6=y CONFIG_ARCH_MVEBU=y CONFIG_MACH_ARMADA_370=y CONFIG_MACH_ARMADA_375=y
@@ -227,6 +229,7 @@ CONFIG_R8169=y CONFIG_SH_ETH=y CONFIG_SMSC911X=y CONFIG_STMMAC_ETH=y +CONFIG_SYNOPSYS_DWC_ETH_QOS=y CONFIG_TI_CPSW=y CONFIG_XILINX_EMACLITE=y CONFIG_AT803X_PHY=y
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v3 6/6 arm: mach-artpec: add entry to MAINTAINERS
In reply to Lars Persson--- MAINTAINERS | 10 ++++++++++ 1 file changed, 10 insertions(+)
MAINTAINERS +10 -0
@@ -932,6 +932,16 @@ M: Tsahee Zidenberg <[email protected]> S: Maintained F: arch/arm/mach-alpine/ +ARM/ARTPEC MACHINE SUPPORT +M: Jesper Nilsson <[email protected]> +M: Lars Persson <[email protected]> +M: Niklas Cassel <[email protected]> +S: Maintained +L: linux-arm-kernel at axis.com +F: arch/arm/mach-artpec +F: arch/arm/boot/dts/artpec6* +F: drivers/clk/clk-artpec6.c + ARM/ATMEL AT91RM9200, AT91SAM9 AND SAMA5 SOC SUPPORT M: Nicolas Ferre <[email protected]> M: Alexandre Belloni <[email protected]>
Signature · 1 line
2.1.4
Quoted 6 lines · On Thursday 11 February 2016 17:06:15 Lars Persson wrote:
Basic support for the Axis Artpec-6 ARM SoC. Timers, interrupts, UARTs and ethernet are wired up.
Changes since v2:
- Create a syscon binding for the system controller.
- Clock patches split out to new patch series "clk: Add Artpec-6 SoC support".
Looks all good to me now, impressive for v3 on a new platform port!
We'll apply it in the next few days, unless further review comments come in.
If you end up resending, please add my
Arnd
Hej,
Quoted 11 lines · Arnd Bergmann
Quoted 6 lines · On Thursday 11 February 2016 17:06:15 Lars Persson wrote:
Basic support for the Axis Artpec-6 ARM SoC. Timers, interrupts, UARTs and ethernet are wired up.
Changes since v2:
- Create a syscon binding for the system controller.
- Clock patches split out to new patch series "clk: Add Artpec-6 SoC support".Looks all good to me now, impressive for v3 on a new platform port!
We'll apply it in the next few days, unless further review comments come in.
Indeed, nice and clean. I have two minor nits:
1) We prefix with ARM:, not arm:. I fixed this up for you. I also added ARM:
dts: artpeg: ... on the dts changes. Not a huge deail on those.
2) Several of the patches lacked description. Subject pretty much says it all, but it's still nice to have a sentence or two as description. Again, not a huge deal, and I applied anyway, but for the future think about it.
That being said, I've applied the series across next/soc, next/dt and next/defconfig. Thanks!
-Olof