soc: ti: k3: Add support for AM62L

The TI AM62L is a low-power ARM Cortex-A53 based SoC with display for
IOT, HMI and general purpose applications. More information here:

https://www.ti.com/product/AM62L

Add initial SoC and DTS support here.

Signed-off-by: Andrew Davis <afd@ti.com>
This commit is contained in:
Andrew Davis
2025-12-18 11:47:42 -06:00
committed by Fabio Baltieri
parent 13eeffbc4b
commit a159d0ee03
7 changed files with 522 additions and 1 deletions

View File

@@ -0,0 +1,173 @@
/*
* Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <mem.h>
#include <freq.h>
#include <arm64/armv8-a.dtsi>
#include <zephyr/dt-bindings/interrupt-controller/arm-gic.h>
#include <zephyr/dt-bindings/pinctrl/ti-k3-pinctrl.h>
#include <zephyr/dt-bindings/gpio/gpio.h>
#include <ti/am62l-main.dtsi>
#include <ti/am62l-wakeup.dtsi>
/ {
#address-cells = <1>;
#size-cells = <1>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0>;
};
cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <1>;
};
};
firmware {
psci: psci {
compatible = "arm,psci-1.1";
method = "smc";
};
scmi {
compatible = "arm,scmi-smc";
arm,smc-id = <0x82004000>;
shmem = <&scmi_shmem>;
#address-cells = <1>;
#size-cells = <0>;
scmi_pds: protocol@11 {
compatible = "arm,scmi-power";
reg = <0x11>;
#power-domain-cells = <1>;
};
scmi_clk: protocol@14 {
compatible = "arm,scmi-clock";
reg = <0x14>;
#clock-cells = <1>;
};
};
};
oc_sram: sram@70800000 {
compatible = "mmio-sram";
reg = <0x70800000 DT_SIZE_K(64)>;
ranges = <0x0 0x70800000 0x10000>;
#address-cells = <1>;
#size-cells = <1>;
scmi_shmem: sram@0 {
compatible = "arm,scmi-shmem";
reg = <0x0 0x100>;
};
};
arch_timer: timer {
compatible = "arm,armv8-timer";
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
<GIC_PPI 14 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
<GIC_PPI 11 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
<GIC_PPI 10 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
gic: interrupt-controller@1800000 {
compatible = "arm,gic-v3", "arm,gic";
reg = <0x01800000 0x10000>, /* GICD */
<0x01840000 0xc0000>; /* GICR */
interrupt-controller;
#interrupt-cells = <4>;
#address-cells = <1>;
#size-cells = <1>;
status = "okay";
its: msi-controller@1820000 {
compatible = "arm,gic-v3-its";
reg = <0x01820000 0x10000>;
status = "okay";
};
};
};
&wkup_timer0 {
interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&wkup_timer1 {
interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&wkup_i2c0 {
interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart0 {
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart1 {
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart2 {
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart3 {
interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart4 {
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart5 {
interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_uart6 {
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_i2c0 {
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_i2c1 {
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_i2c2 {
interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};
&main_i2c3 {
interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
};

283
dts/vendor/ti/am62l-main.dtsi vendored Normal file
View File

@@ -0,0 +1,283 @@
/*
* Device Tree Source for AM62L SoC Family Main Domain peripherals
*
* Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
main_uart0: serial@2800000 {
compatible = "ns16550";
reg = <0x02800000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart1: serial@2810000 {
compatible = "ns16550";
reg = <0x02810000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart2: serial@2820000 {
compatible = "ns16550";
reg = <0x02820000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart3: serial@2830000 {
compatible = "ns16550";
reg = <0x02830000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart4: serial@2840000 {
compatible = "ns16550";
reg = <0x02840000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart5: serial@2850000 {
compatible = "ns16550";
reg = <0x02850000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_uart6: serial@2860000 {
compatible = "ns16550";
reg = <0x02860000 0x100>;
clock-frequency = <48000000>;
current-speed = <115200>;
reg-shift = <2>;
status = "disabled";
};
main_i2c0: i2c@20000000 {
compatible = "ti,omap-i2c";
reg = <0x20000000 0x100>;
clock-frequency = <100000>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
main_i2c1: i2c@20010000 {
compatible = "ti,omap-i2c";
reg = <0x20010000 0x100>;
clock-frequency = <100000>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
main_i2c2: i2c@20020000 {
compatible = "ti,omap-i2c";
reg = <0x20020000 0x100>;
clock-frequency = <100000>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
main_i2c3: i2c@20030000 {
compatible = "ti,omap-i2c";
reg = <0x20030000 0x100>;
clock-frequency = <100000>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
main_gpio0: main-gpio0 {
#gpio-cells = <2>;
gpio-map = <0 0 &main_gpio0_0 0 0>, <1 0 &main_gpio0_0 1 0>,
<2 0 &main_gpio0_0 2 0>, <3 0 &main_gpio0_0 3 0>,
<4 0 &main_gpio0_0 4 0>, <5 0 &main_gpio0_0 5 0>,
<6 0 &main_gpio0_0 6 0>, <7 0 &main_gpio0_0 7 0>,
<8 0 &main_gpio0_0 8 0>, <9 0 &main_gpio0_0 9 0>,
<10 0 &main_gpio0_0 10 0>, <11 0 &main_gpio0_0 11 0>,
<12 0 &main_gpio0_0 12 0>, <13 0 &main_gpio0_0 13 0>,
<14 0 &main_gpio0_0 14 0>, <15 0 &main_gpio0_0 15 0>,
<16 0 &main_gpio0_0 16 0>, <17 0 &main_gpio0_0 17 0>,
<18 0 &main_gpio0_0 18 0>, <19 0 &main_gpio0_0 19 0>,
<20 0 &main_gpio0_0 20 0>, <21 0 &main_gpio0_0 21 0>,
<22 0 &main_gpio0_0 22 0>, <23 0 &main_gpio0_0 23 0>,
<24 0 &main_gpio0_0 24 0>, <25 0 &main_gpio0_0 25 0>,
<26 0 &main_gpio0_0 26 0>, <27 0 &main_gpio0_0 27 0>,
<28 0 &main_gpio0_0 28 0>, <29 0 &main_gpio0_0 29 0>,
<30 0 &main_gpio0_0 30 0>, <31 0 &main_gpio0_0 31 0>,
<32 0 &main_gpio0_1 0 0>, <33 0 &main_gpio0_1 1 0>,
<34 0 &main_gpio0_1 2 0>, <35 0 &main_gpio0_1 3 0>,
<36 0 &main_gpio0_1 4 0>, <37 0 &main_gpio0_1 5 0>,
<38 0 &main_gpio0_1 6 0>, <39 0 &main_gpio0_1 7 0>,
<40 0 &main_gpio0_1 8 0>, <41 0 &main_gpio0_1 9 0>,
<42 0 &main_gpio0_1 10 0>, <43 0 &main_gpio0_1 11 0>,
<44 0 &main_gpio0_1 12 0>, <45 0 &main_gpio0_1 13 0>,
<46 0 &main_gpio0_1 14 0>, <47 0 &main_gpio0_1 15 0>,
<48 0 &main_gpio0_1 16 0>, <49 0 &main_gpio0_1 17 0>,
<50 0 &main_gpio0_1 18 0>, <51 0 &main_gpio0_1 19 0>,
<52 0 &main_gpio0_1 20 0>, <53 0 &main_gpio0_1 21 0>,
<54 0 &main_gpio0_1 22 0>, <55 0 &main_gpio0_1 23 0>,
<56 0 &main_gpio0_1 24 0>, <57 0 &main_gpio0_1 25 0>,
<58 0 &main_gpio0_1 26 0>, <59 0 &main_gpio0_1 27 0>,
<60 0 &main_gpio0_1 28 0>, <61 0 &main_gpio0_1 29 0>,
<62 0 &main_gpio0_1 30 0>, <63 0 &main_gpio0_1 31 0>,
<64 0 &main_gpio0_2 0 0>, <65 0 &main_gpio0_2 1 0>,
<66 0 &main_gpio0_2 2 0>, <67 0 &main_gpio0_2 3 0>,
<68 0 &main_gpio0_2 4 0>, <69 0 &main_gpio0_2 5 0>,
<70 0 &main_gpio0_2 6 0>, <71 0 &main_gpio0_2 7 0>,
<72 0 &main_gpio0_2 8 0>, <73 0 &main_gpio0_2 9 0>,
<74 0 &main_gpio0_2 10 0>, <75 0 &main_gpio0_2 11 0>,
<76 0 &main_gpio0_2 12 0>, <77 0 &main_gpio0_2 13 0>,
<78 0 &main_gpio0_2 14 0>, <79 0 &main_gpio0_2 15 0>,
<80 0 &main_gpio0_2 16 0>, <81 0 &main_gpio0_2 17 0>,
<82 0 &main_gpio0_2 18 0>, <83 0 &main_gpio0_2 17 0>,
<84 0 &main_gpio0_2 20 0>, <85 0 &main_gpio0_2 21 0>,
<86 0 &main_gpio0_2 22 0>, <87 0 &main_gpio0_2 23 0>,
<88 0 &main_gpio0_2 24 0>, <89 0 &main_gpio0_2 25 0>,
<90 0 &main_gpio0_2 26 0>, <91 0 &main_gpio0_2 27 0>,
<92 0 &main_gpio0_2 28 0>, <93 0 &main_gpio0_2 29 0>,
<94 0 &main_gpio0_2 30 0>, <95 0 &main_gpio0_2 31 0>,
<96 0 &main_gpio0_3 0 0>, <97 0 &main_gpio0_3 1 0>,
<98 0 &main_gpio0_3 2 0>, <99 0 &main_gpio0_3 3 0>,
<100 0 &main_gpio0_3 4 0>, <101 0 &main_gpio0_3 5 0>,
<102 0 &main_gpio0_3 6 0>, <103 0 &main_gpio0_3 7 0>,
<104 0 &main_gpio0_3 8 0>, <105 0 &main_gpio0_3 9 0>,
<106 0 &main_gpio0_3 10 0>, <107 0 &main_gpio0_3 11 0>,
<108 0 &main_gpio0_3 12 0>, <109 0 &main_gpio0_3 13 0>,
<110 0 &main_gpio0_3 14 0>, <111 0 &main_gpio0_3 15 0>,
<112 0 &main_gpio0_3 16 0>, <113 0 &main_gpio0_3 17 0>,
<114 0 &main_gpio0_3 18 0>, <115 0 &main_gpio0_3 17 0>,
<116 0 &main_gpio0_3 20 0>, <117 0 &main_gpio0_3 21 0>,
<118 0 &main_gpio0_3 22 0>, <119 0 &main_gpio0_3 23 0>,
<120 0 &main_gpio0_3 24 0>, <121 0 &main_gpio0_3 25 0>,
<122 0 &main_gpio0_3 26 0>, <123 0 &main_gpio0_3 27 0>,
<124 0 &main_gpio0_3 28 0>, <125 0 &main_gpio0_3 29 0>;
gpio-map-mask = <0xffff 0x0>;
gpio-map-pass-thru = <0x0 0x1>;
};
main_gpio0_0: gpio@600010 {
compatible = "ti,davinci-gpio";
reg = <0x00600010 0x28>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <32>;
status = "disabled";
};
main_gpio0_1: gpio@600038 {
compatible = "ti,davinci-gpio";
reg = <0x00600038 0x28>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <32>;
status = "disabled";
};
main_gpio0_2: gpio@600060 {
compatible = "ti,davinci-gpio";
reg = <0x00600060 0x28>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <32>;
status = "disabled";
};
main_gpio0_3: gpio@600088 {
compatible = "ti,davinci-gpio";
reg = <0x00600088 0x28>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <30>;
status = "disabled";
};
main_rti0: watchdog@e000000 {
compatible = "ti,j7-rti-wdt";
reg = <0x0e000000 0x100>;
clock-frequency = <DT_FREQ_M(25)>;
status = "disabled";
};
main_rti1: watchdog@e010000 {
compatible = "ti,j7-rti-wdt";
reg = <0x0e010000 0x100>;
clock-frequency = <DT_FREQ_M(25)>;
status = "disabled";
};
main_spi0: spi@20100000 {
compatible = "ti,omap-mcspi";
reg = <0x20100000 0x400>;
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <0>;
power-domains = <&scmi_pds 72>;
clock-frequency = <DT_FREQ_M(50)>;
clocks = <&scmi_clk 299>;
ti,spi-num-cs = <4>;
status = "disabled";
};
main_spi1: spi@20110000 {
compatible = "ti,omap-mcspi";
reg = <0x20110000 0x400>;
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <0>;
power-domains = <&scmi_pds 73>;
clock-frequency = <DT_FREQ_M(50)>;
clocks = <&scmi_clk 302>;
ti,spi-num-cs = <4>;
status = "disabled";
};
main_spi2: spi@20120000 {
compatible = "ti,omap-mcspi";
reg = <0x20120000 0x400>;
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <0>;
power-domains = <&scmi_pds 74>;
clock-frequency = <DT_FREQ_M(50)>;
clocks = <&scmi_clk 305>;
ti,spi-num-cs = <4>;
status = "disabled";
};
main_spi3: spi@20130000 {
compatible = "ti,omap-mcspi";
reg = <0x20130000 0x400>;
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <0>;
power-domains = <&scmi_pds 75>;
clock-frequency = <DT_FREQ_M(50)>;
clocks = <&scmi_clk 308>;
ti,spi-num-cs = <4>;
status = "disabled";
};
};

56
dts/vendor/ti/am62l-wakeup.dtsi vendored Normal file
View File

@@ -0,0 +1,56 @@
/*
* Device Tree Source for AM62L SoC Family Wakeup Domain peripherals
*
* Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
wkup_pinctrl: pinctrl@4084000 {
compatible = "ti,k3-pinctrl";
reg = <0x04084000 0x24c>;
status = "disabled";
};
wkup_gpio0: gpio@4201010 {
compatible = "ti,davinci-gpio";
reg = <0x04201010 0x28>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <7>;
power-domains = <&scmi_pds 36>;
clocks = <&scmi_clk 146>;
clock-names = "gpio";
status = "disabled";
};
wkup_timer0: timer@2b100000 {
compatible = "ti,am654-timer";
reg = <0x2b100000 DT_SIZE_K(1)>;
clocks = <&scmi_clk 93>;
clock-names = "fck";
power-domains = <&scmi_pds 19>;
status = "disabled";
};
wkup_timer1: timer@2b110000 {
compatible = "ti,am654-timer";
reg = <0x2b110000 DT_SIZE_K(1)>;
clocks = <&scmi_clk 98>;
clock-names = "fck";
power-domains = <&scmi_pds 20>;
status = "disabled";
};
wkup_i2c0: i2c@2b200000 {
compatible = "ti,omap-i2c";
reg = <0x2b200000 0x100>;
#address-cells = <1>;
#size-cells = <0>;
power-domains = <&scmi_pds 57>;
clocks = <&scmi_clk 262>;
clock-names = "fck";
status = "disabled";
};
};

View File

@@ -4,7 +4,7 @@
zephyr_include_directories(.)
zephyr_sources(common/ctrl_partitions.c)
if(CONFIG_SOC_AM6234_A53 OR CONFIG_SOC_AM6232_A53 OR CONFIG_SOC_AM6254_A53)
if(CONFIG_SOC_AM6234_A53 OR CONFIG_SOC_AM6232_A53 OR CONFIG_SOC_AM6254_A53 OR CONFIG_SOC_AM62L3_A53)
zephyr_sources_ifdef(CONFIG_ARM_MMU a53/mmu_regions.c)
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm64/scripts/linker.ld CACHE INTERNAL "")

View File

@@ -39,6 +39,7 @@ config SOC_PART_NUMBER
default "AM6234" if SOC_AM6234_A53
default "AM6234" if SOC_AM6234_M4
default "AM6254" if SOC_AM6254_M4 || SOC_AM6254_A53
default "AM62L3" if SOC_AM62L3_A53
default "AM6442" if SOC_AM6442_M4
default "AM6442" if SOC_AM6442_R5F0_0
default "AM6442" if SOC_AM6442_R5F0_1

View File

@@ -47,6 +47,10 @@ config SOC_AM6232_M4
bool
select SOC_SERIES_AM6X_M4
config SOC_AM62L3_A53
bool
select SOC_SERIES_AM6X_A53
config SOC_AM6442_M4
bool
select SOC_SERIES_AM6X_M4
@@ -95,6 +99,7 @@ config SOC
default "am6232" if SOC_AM6232_M4 || SOC_AM6232_A53
default "am6234" if SOC_AM6234_M4 || SOC_AM6234_A53
default "am6254" if SOC_AM6254_M4 || SOC_AM6254_A53
default "am62l3" if SOC_AM62L3_A53
default "am6442" if SOC_AM6442_M4
default "am6442" if SOC_AM6442_R5F0_0
default "am6442" if SOC_AM6442_R5F0_1

View File

@@ -15,6 +15,9 @@ family:
cpuclusters:
- name: m4
- name: a53
- name: am62l3
cpuclusters:
- name: a53
- name: am6442
cpuclusters:
- name: m4