arm: Add Artpec-6 SoC
Subsystems (6)
Lars Persson
maintainerv2 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 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 (8):
clk: add device tree binding for artpec-6 pll1 clock
clk: add artpec-6 pll1 clock driver
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 +++ .../devicetree/bindings/clock/artpec6.txt | 16 ++ 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 +++++++ drivers/clk/Makefile | 1 + drivers/clk/clk-artpec6.c | 70 ++++++ 14 files changed, 527 insertions(+) create mode 100644 Documentation/devicetree/bindings/arm/axis.txt create mode 100644 Documentation/devicetree/bindings/clock/artpec6.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 create mode 100644 drivers/clk/clk-artpec6.c
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v2 1/8 clk: add device tree binding for artpec-6 pll1 clock
Add device tree documentation for the main PLL in the Artpec-6 SoC.
--- Documentation/devicetree/bindings/clock/artpec6.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Documentation/devicetree/bindings/clock/artpec6.txt
Documentation/devicetree/bindings/clock/artpec6.txt new file +16 -0
@@ -0,0 +1,16 @@ +* Clock bindings for Axis ARTPEC-6 chip + +Required properties: +- #clock-cells: Should be <0> +- compatible: Should be "axis,artpec6-pll1-clock" +- reg: Address and length of the DEVSTAT register. +- clocks: The PLL's input clock. + +Examples: + +pll1_clk: pll1_clk { + #clock-cells = <0>; + compatible = "axis,artpec6-pll1-clock"; + reg = <0xf8000000 4>; + clocks = <&ext_clk>; +};
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v2 2/8 clk: add artpec-6 pll1 clock driver
In reply to Lars PerssonThe PLL1 clock is a fixed-factor clock with factors derived from boot mode pins. This driver is a simple wrapper to register the fixed factor clock according to the pin settings.
--- drivers/clk/Makefile | 1 + drivers/clk/clk-artpec6.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 drivers/clk/clk-artpec6.c
drivers/clk/Makefile +1 -0
@@ -17,6 +17,7 @@ endif # hardware specific clock types # please keep this section sorted lexicographically by file/directory path name +obj-$(CONFIG_MACH_ARTPEC6) += clk-artpec6.o obj-$(CONFIG_MACH_ASM9260) += clk-asm9260.o obj-$(CONFIG_COMMON_CLK_AXI_CLKGEN) += clk-axi-clkgen.o obj-$(CONFIG_ARCH_AXXIA) += clk-axm5516.o
drivers/clk/clk-artpec6.c new file +70 -0
70 lines not on this page · raw message
Signature · 1 line
2.1.4
Lars Persson
maintainerPATCH v2 3/8 arm: add device-tree SoC bindings for Axis Artpec-6
In reply to Lars PerssonThis 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 DMA Configuration +-------------------------- + +The DMA configuration unit muxes dma request lines between single and burst +alternatives. + +Required properties: +- compatible: axis,artpec6-dmacfg +- reg: Address and length of DMACFG register. + +Example: + dmacfg { + compatible = "axis,artpec6-dmacfg"; + reg = <0xf8000010 4>; + }; + +ARTPEC-6 Development board: +--------------------------- +Required root node properties: +- compatible = "axis,artpec6-dev-board", "axis,artpec6";
Signature · 1 line
2.1.4
Arnd Bergmann
maintainerRe: [PATCH v2 3/8] arm: add device-tree SoC bindings for Axis Artpec-6
Quoted 4 lines · On Thursday 11 February 2016 15:04:37 Lars Persson wrote:
Documentation/devicetree/bindings/arm/axis.txt new file +4
-0+ +The DMA configuration unit muxes dma request lines between single and burst +alternatives. +
Documentation/devicetree/bindings/arm/axis.txt line 25
Quoted 10 lines
Documentation/devicetree/bindings/arm/axis.txt new file +10
-0+Required properties: +- compatible: axis,artpec6-dmacfg +- reg: Address and length of DMACFG register. + +Example: + dmacfg { + compatible = "axis,artpec6-dmacfg"; + reg = <0xf8000010 4>; + }; +
This method looks better than before, but putting a single register into DT looks wrong. I can almost guarantee that there are more registers at 0xf8000000-0xf8000fff (or more) that belong to either some system controller or a DMA controller.
Whatever it is, please describe it in the DT in a sensible way based on what the hardware does and what other resources it uses (interrupts etc) rather than what today's kernel happens to need.
Arnd
Lars Persson
maintainerPATCH v2 4/8 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>; + }; + }; + + dmacfg { + compatible = "axis,artpec6-dmacfg"; + reg = <0xf8000010 4>; + }; + + 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
Lars Persson
maintainerPATCH v2 5/8 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 v2 6/8 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 v2 7/8 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 v2 8/8 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
Arnd Bergmann
maintainerQuoted 11 lines · On Thursday 11 February 2016 15:04:34 Lars Persson wrote:
Basic support for the Axis Artpec-6 ARM SoC. Timers, interrupts, UARTs and ethernet are wired up.
Changes since v1:
- Corrected bindings for axis,artpec6-pll1-clock.
- Moved the uart aliases to the board dts.
-Kconfigcleanup.
- Added a device tree binding for the dma configuration.
- AddedCONFIG_SYNOPSYS_DWC_ETH_QOStomulti_v7_defconfig.
- Added binding documentation for axis,artpec6-dev-board.
Quoted 9 lines
Lars Persson (8):
clk: add device tree binding for artpec-6 pll1 clock
clk: add artpec-6 pll1 clock driver
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: addMACH_ARTPEC6
arm: mach-artpec: add entry toMAINTAINERS
Looks good except for the one issue I pointed out in patch 3 (and also 6). Once that is resolved, please submit the new platform for inclusion by sending it to arm at kernel.org.
The first two patches should get merged through the drivers/clk maintainer tree, please submit them separately there.
Arnd