]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
arm64: dts: exynos: axis: Add initial ARTPEC-8 SoC support
authorSungMin Park <smn1196@coasia.com>
Mon, 1 Sep 2025 05:19:24 +0000 (10:49 +0530)
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Thu, 4 Sep 2025 15:08:32 +0000 (17:08 +0200)
Add initial device tree support for Axis ARTPEC-8 SoC.

This SoC contains 4 Cortex-A53 CPUs and several other peripheral IPs.

Signed-off-by: SungMin Park <smn1196@coasia.com>
Signed-off-by: SeonGu Kang <ksk4725@coasia.com>
Signed-off-by: Ravi Patel <ravi.patel@samsung.com>
Link: https://lore.kernel.org/r/20250901051926.59970-5-ravi.patel@samsung.com
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
MAINTAINERS
arch/arm64/Kconfig.platforms
arch/arm64/boot/dts/exynos/Makefile
arch/arm64/boot/dts/exynos/axis/artpec-pinctrl.h [new file with mode: 0644]
arch/arm64/boot/dts/exynos/axis/artpec8-pinctrl.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/exynos/axis/artpec8.dtsi [new file with mode: 0644]

index fe168477caa45799dfe07de2f54de6d6a1ce0615..4d0c1f10ffd48689eab1f58a8571739c81a0bafc 100644 (file)
@@ -4102,6 +4102,18 @@ S:       Maintained
 F:     Documentation/devicetree/bindings/sound/axentia,*
 F:     sound/soc/atmel/tse850-pcm5142.c
 
+AXIS ARTPEC ARM64 SoC SUPPORT
+M:     Jesper Nilsson <jesper.nilsson@axis.com>
+M:     Lars Persson <lars.persson@axis.com>
+L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+L:     linux-samsung-soc@vger.kernel.org
+L:     linux-arm-kernel@axis.com
+S:     Maintained
+F:     Documentation/devicetree/bindings/clock/axis,artpec*-clock.yaml
+F:     arch/arm64/boot/dts/exynos/axis/
+F:     drivers/clk/samsung/clk-artpec*.c
+F:     include/dt-bindings/clock/axis,artpec*-clk.h
+
 AXI-FAN-CONTROL HARDWARE MONITOR DRIVER
 M:     Nuno Sá <nuno.sa@analog.com>
 L:     linux-hwmon@vger.kernel.org
index a88f5ad9328c2ee13a0822782af6c83899273f14..959f79d73b400ea4fd5462559d09e137b04c2876 100644 (file)
@@ -40,6 +40,13 @@ config ARCH_APPLE
          This enables support for Apple's in-house ARM SoC family, such
          as the Apple M1.
 
+config ARCH_ARTPEC
+       bool "Axis Communications ARTPEC SoC Family"
+       depends on ARCH_EXYNOS
+       select ARM_GIC
+       help
+          This enables support for the ARMv8 based ARTPEC SoC Family.
+
 config ARCH_AXIADO
        bool "Axiado SoC Family"
        select GPIOLIB
index bdb9e9813e506de3a8ff6d1c3115382cca6ea9d9..bcca6313655782acbfa0fe8e4d056e8e55b9fbea 100644 (file)
@@ -1,4 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
+subdir-y += axis
 subdir-y += google
 
 dtb-$(CONFIG_ARCH_EXYNOS) += \
diff --git a/arch/arm64/boot/dts/exynos/axis/artpec-pinctrl.h b/arch/arm64/boot/dts/exynos/axis/artpec-pinctrl.h
new file mode 100644 (file)
index 0000000..2c151aa
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
+/*
+ * Axis ARTPEC-8 SoC device tree pinctrl constants
+ *
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
+ *             https://www.samsung.com
+ * Copyright (c) 2025  Axis Communications AB.
+ *             https://www.axis.com
+ */
+
+#ifndef __DTS_ARM64_SAMSUNG_EXYNOS_AXIS_ARTPEC_PINCTRL_H__
+#define __DTS_ARM64_SAMSUNG_EXYNOS_AXIS_ARTPEC_PINCTRL_H__
+
+#define ARTPEC_PIN_PULL_NONE           0
+#define ARTPEC_PIN_PULL_DOWN           1
+#define ARTPEC_PIN_PULL_UP             3
+
+#define ARTPEC_PIN_FUNC_INPUT          0
+#define ARTPEC_PIN_FUNC_OUTPUT         1
+#define ARTPEC_PIN_FUNC_2              2
+#define ARTPEC_PIN_FUNC_3              3
+#define ARTPEC_PIN_FUNC_4              4
+#define ARTPEC_PIN_FUNC_5              5
+#define ARTPEC_PIN_FUNC_6              6
+#define ARTPEC_PIN_FUNC_EINT           0xf
+#define ARTPEC_PIN_FUNC_F              ARTPEC_PIN_FUNC_EINT
+
+/* Drive strength for ARTPEC */
+#define ARTPEC_PIN_DRV_SR1             0x8
+#define ARTPEC_PIN_DRV_SR2             0x9
+#define ARTPEC_PIN_DRV_SR3             0xa
+#define ARTPEC_PIN_DRV_SR4             0xb
+#define ARTPEC_PIN_DRV_SR5             0xc
+#define ARTPEC_PIN_DRV_SR6             0xd
+
+#endif /* __DTS_ARM64_SAMSUNG_EXYNOS_AXIS_ARTPEC_PINCTRL_H__ */
diff --git a/arch/arm64/boot/dts/exynos/axis/artpec8-pinctrl.dtsi b/arch/arm64/boot/dts/exynos/axis/artpec8-pinctrl.dtsi
new file mode 100644 (file)
index 0000000..8d239a7
--- /dev/null
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Axis ARTPEC-8 SoC pin-mux and pin-config device tree source
+ *
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
+ *             https://www.samsung.com
+ * Copyright (c) 2025  Axis Communications AB.
+ *             https://www.axis.com
+ */
+
+#include "artpec-pinctrl.h"
+
+&pinctrl_fsys {
+       gpe0: gpe0-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpe1: gpe1-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpe2: gpe2-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpf0: gpf0-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpf1: gpf1-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpf2: gpf2-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpf3: gpf3-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpf4: gpf4-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gps0: gps0-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gps1: gps1-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       serial0_bus: serial0-bus-pins {
+               samsung,pins = "gpf4-4", "gpf4-5";
+               samsung,pin-function = <ARTPEC_PIN_FUNC_2>;
+               samsung,pin-pud = <ARTPEC_PIN_PULL_UP>;
+               samsung,pin-drv = <ARTPEC_PIN_DRV_SR3>;
+       };
+};
+
+&pinctrl_peric {
+       gpa0: gpa0-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpa1: gpa1-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpa2: gpa2-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpk0: gpk0-gpio-bank {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+};
diff --git a/arch/arm64/boot/dts/exynos/axis/artpec8.dtsi b/arch/arm64/boot/dts/exynos/axis/artpec8.dtsi
new file mode 100644 (file)
index 0000000..db98332
--- /dev/null
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Axis ARTPEC-8 SoC device tree source
+ *
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
+ *             https://www.samsung.com
+ * Copyright (c) 2025  Axis Communications AB.
+ *             https://www.axis.com
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/axis,artpec8-clk.h>
+
+/ {
+       compatible = "axis,artpec8";
+       interrupt-parent = <&gic>;
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       aliases {
+               pinctrl0 = &pinctrl_fsys;
+               pinctrl1 = &pinctrl_peric;
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu0: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&cpu_sleep>;
+                       clocks = <&cmu_cpucl CLK_GOUT_CPUCL_CLUSTER_CPU>;
+                       clock-names = "cpu";
+               };
+
+               cpu1: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x1>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&cpu_sleep>;
+               };
+
+               cpu2: cpu@2 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x2>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&cpu_sleep>;
+               };
+
+               cpu3: cpu@3 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x3>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&cpu_sleep>;
+               };
+
+               idle-states {
+                       entry-method = "psci";
+
+                       cpu_sleep: cpu-sleep {
+                               compatible = "arm,idle-state";
+                               arm,psci-suspend-param = <0x0010000>;
+                               local-timer-stop;
+                               entry-latency-us = <300>;
+                               exit-latency-us = <1200>;
+                               min-residency-us = <2000>;
+                       };
+               };
+       };
+
+       fin_pll: clock-finpll {
+               compatible = "fixed-factor-clock";
+               clocks = <&osc_clk>;
+               #clock-cells = <0>;
+               clock-div = <2>;
+               clock-mult = <1>;
+               clock-output-names = "fin_pll";
+       };
+
+       osc_clk: clock-osc {
+               /* XXTI */
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-output-names = "osc_clk";
+       };
+
+       pmu {
+               compatible = "arm,cortex-a53-pmu";
+               interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
+       soc: soc@0 {
+               compatible = "simple-bus";
+               ranges = <0x0 0x0 0x0 0x17000000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               cmu_imem: clock-controller@10010000 {
+                       compatible = "axis,artpec8-cmu-imem";
+                       reg = <0x10010000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_IMEM_ACLK>,
+                                <&cmu_cmu CLK_DOUT_CMU_IMEM_JPEG>;
+                       clock-names = "fin_pll", "aclk", "jpeg";
+               };
+
+               timer@10040000 {
+                       compatible = "axis,artpec8-mct", "samsung,exynos4210-mct";
+                       reg = <0x10040000 0x1000>;
+                       clocks = <&fin_pll>, <&cmu_imem CLK_GOUT_IMEM_MCT_PCLK>;
+                       clock-names = "fin_pll", "mct";
+                       interrupts = <GIC_SPI 455 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 456 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 457 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 458 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 459 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 460 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 461 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 462 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 463 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 464 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               gic: interrupt-controller@10201000 {
+                       compatible = "arm,gic-400";
+                       reg = <0x10201000 0x1000>,
+                             <0x10202000 0x2000>,
+                             <0x10204000 0x2000>,
+                             <0x10206000 0x2000>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
+               };
+
+               cmu_cpucl: clock-controller@11410000 {
+                       compatible = "axis,artpec8-cmu-cpucl";
+                       reg = <0x11410000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_CPUCL_SWITCH>;
+                       clock-names = "fin_pll", "switch";
+               };
+
+               cmu_cmu: clock-controller@12400000 {
+                       compatible = "axis,artpec8-cmu-cmu";
+                       reg = <0x12400000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>;
+                       clock-names = "fin_pll";
+               };
+
+               cmu_core: clock-controller@12410000 {
+                       compatible = "axis,artpec8-cmu-core";
+                       reg = <0x12410000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_CORE_MAIN>,
+                                <&cmu_cmu CLK_DOUT_CMU_CORE_DLP>;
+                       clock-names = "fin_pll", "main", "dlp";
+               };
+
+               cmu_bus: clock-controller@12c10000 {
+                       compatible = "axis,artpec8-cmu-bus";
+                       reg = <0x12c10000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_BUS>,
+                                <&cmu_cmu CLK_DOUT_CMU_BUS_DLP>;
+                       clock-names = "fin_pll", "bus", "dlp";
+               };
+
+               cmu_peri: clock-controller@16410000 {
+                       compatible = "axis,artpec8-cmu-peri";
+                       reg = <0x16410000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_PERI_IP>,
+                                <&cmu_cmu CLK_DOUT_CMU_PERI_AUDIO>,
+                                <&cmu_cmu CLK_DOUT_CMU_PERI_DISP>;
+                       clock-names = "fin_pll", "ip", "audio", "disp";
+               };
+
+               pinctrl_peric: pinctrl@165f0000 {
+                       compatible = "axis,artpec8-pinctrl";
+                       reg = <0x165f0000 0x1000>;
+                       interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               cmu_fsys: clock-controller@16c10000 {
+                       compatible = "axis,artpec8-cmu-fsys";
+                       reg = <0x16c10000 0x4000>;
+                       #clock-cells = <1>;
+                       clocks = <&fin_pll>,
+                                <&cmu_cmu CLK_DOUT_CMU_FSYS_SCAN0>,
+                                <&cmu_cmu CLK_DOUT_CMU_FSYS_SCAN1>,
+                                <&cmu_cmu CLK_DOUT_CMU_FSYS_BUS>,
+                                <&cmu_cmu CLK_DOUT_CMU_FSYS_IP>;
+                       clock-names = "fin_pll", "scan0", "scan1", "bus", "ip";
+               };
+
+               pinctrl_fsys: pinctrl@16c30000 {
+                       compatible = "axis,artpec8-pinctrl";
+                       reg = <0x16c30000 0x1000>;
+                       interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               serial_0: serial@16cc0000 {
+                       compatible = "axis,artpec8-uart";
+                       reg = <0x16cc0000 0x100>;
+                       clocks = <&cmu_fsys CLK_GOUT_FSYS_UART0_PCLK>,
+                                <&cmu_fsys CLK_GOUT_FSYS_UART0_SCLK_UART>;
+                       clock-names = "uart", "clk_uart_baud0";
+                       interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&serial0_bus>;
+               };
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                            <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                            <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+                            <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
+       };
+};