soc: Add the MAX32657 SoC
MAX32657 is Cortex-M33 based Analog Devices MCU. It supports ARM TrustZone security model. There will be two boards of this MCU Secure and Non-Secure This commit defines Secure version of peripherals. Basic feature of MAX32657 device: - Core is Cortex-M33 - 50MHz IPO clock - There are 54 interrupt vectors - 1MB flash & 256 SRAM - MAX32657 has: - 1 x UART - 1 x I2C/I3C - 1 x SPI - 6 x TIMER - 1 x RTC - 1 x WDT - 1 x TRNG Signed-off-by: Sadik Ozer <sadik.ozer@analog.com>
This commit is contained in:
parent
57b4e614f5
commit
f9ce25fd05
7 changed files with 322 additions and 0 deletions
101
dts/arm/adi/max32/max32657-pinctrl.dtsi
Normal file
101
dts/arm/adi/max32/max32657-pinctrl.dtsi
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024-2025 Analog Devices, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <zephyr/dt-bindings/pinctrl/max32-pinctrl.h>
|
||||||
|
|
||||||
|
&pinctrl {
|
||||||
|
/omit-if-no-ref/ i3c_scl_p0_0: i3c_scl_p0_0 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 0, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ i3c_sda_p0_1: i3c_sda_p0_1 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 1, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_mosi_p0_2: spi0_mosi_p0_2 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 2, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_ss0_p0_3: spi0_ss0_p0_3 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 3, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_miso_p0_4: spi0_miso_p0_4 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 4, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ uart0_rx_p0_5: uart0_rx_p0_5 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 5, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_sck_p0_6: spi0_sck_p0_6 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 6, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_ss1_p0_7: spi0_ss1_p0_7 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 7, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ spi0_ss2_p0_8: spi0_ss2_p0_8 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 8, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ uart0_tx_p0_9: uart0_tx_p0_9 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 9, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ sqwout_p0_13: sqwout_p0_13 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 13, AF1)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr0a_p0_0: tmr0a_p0_0 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 0, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr1a_p0_1: tmr1a_p0_1 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 1, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr3a_p0_2: tmr3a_p0_2 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 2, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr4a_p0_3: tmr4a_p0_3 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 3, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr5a_p0_4: tmr5a_p0_4 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 4, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr0b_p0_5: tmr0b_p0_5 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 5, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr4b_p0_6: tmr4b_p0_6 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 6, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr3b_p0_7: tmr3b_p0_7 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 7, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ i3c_pur_p0_8: i3c_pur_p0_8 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 8, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr1b_p0_9: tmr1b_p0_9 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 9, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr2a_p0_10: tmr2a_p0_10 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 10, AF2)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/omit-if-no-ref/ tmr5b_p0_11: tmr5b_p0_11 {
|
||||||
|
pinmux = <MAX32_PINMUX(0, 11, AF2)>;
|
||||||
|
};
|
||||||
|
};
|
43
dts/arm/adi/max32/max32657.dtsi
Normal file
43
dts/arm/adi/max32/max32657.dtsi
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024-2025 Analog Devices, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <mem.h>
|
||||||
|
#include <arm/armv8-m.dtsi>
|
||||||
|
#include <zephyr/dt-bindings/clock/adi_max32_clock.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
soc {
|
||||||
|
sram: sram@30000000 {
|
||||||
|
ranges = <0x0 0x30000000 0x40000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
peripheral: peripheral@50000000 {
|
||||||
|
ranges = <0x0 0x50000000 0x10000000>;
|
||||||
|
|
||||||
|
pinctrl: pin-controller@8000 {
|
||||||
|
ranges = <0x8000 0x50008000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
flc0: flash_controller@29000 {
|
||||||
|
compatible = "adi,max32-flash-controller";
|
||||||
|
reg = <0x29000 0x400>;
|
||||||
|
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
flash0: flash@1000000 {
|
||||||
|
compatible = "soc-nv-flash";
|
||||||
|
reg = <0x01000000 DT_SIZE_K(1024)>;
|
||||||
|
write-block-size = <16>;
|
||||||
|
erase-block-size = <8192>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "max32657_common.dtsi"
|
143
dts/arm/adi/max32/max32657_common.dtsi
Normal file
143
dts/arm/adi/max32/max32657_common.dtsi
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024-2025 Analog Devices, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <arm/armv8-m.dtsi>
|
||||||
|
#include <mem.h>
|
||||||
|
#include <freq.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zephyr,flash-controller = &flc0;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
cpu@0 {
|
||||||
|
compatible = "arm,cortex-m33";
|
||||||
|
reg = <0>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
mpu: mpu@e000ed90 {
|
||||||
|
compatible = "arm,armv8m-mpu";
|
||||||
|
reg = <0xe000ed90 0x40>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
clocks {
|
||||||
|
clk_ipo: clk_ipo {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <DT_FREQ_M(50)>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_inro: clk_inro {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = < DT_FREQ_K(8) >;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_ibro: clk_ibro {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = < 7372800 >;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_ertco: clk_ertco {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = < 32768 >;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_erfo: clk_erfo {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <DT_FREQ_M(32)>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sram {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
sram0: memory@0 {
|
||||||
|
compatible = "mmio-sram";
|
||||||
|
reg = <0x0 DT_SIZE_K(32)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sram1: memory@8000 {
|
||||||
|
compatible = "mmio-sram";
|
||||||
|
reg = <0x8000 DT_SIZE_K(32)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sram2: memory@10000 {
|
||||||
|
compatible = "mmio-sram";
|
||||||
|
reg = <0x10000 DT_SIZE_K(64)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sram3: memory@20000 {
|
||||||
|
compatible = "mmio-sram";
|
||||||
|
reg = <0x20000 DT_SIZE_K(64)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sram4: memory@30000 {
|
||||||
|
compatible = "mmio-sram";
|
||||||
|
reg = <0x30000 DT_SIZE_K(64)>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&peripheral {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
gcr: clock-controller@0 {
|
||||||
|
reg = <0x0 0x400>;
|
||||||
|
compatible = "adi,max32-gcr";
|
||||||
|
#clock-cells = <2>;
|
||||||
|
clocks = <&clk_ipo>;
|
||||||
|
sysclk-prescaler = <1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl: pin-controller@8000 {
|
||||||
|
compatible = "adi,max32-pinctrl";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0x8000 0x1000>;
|
||||||
|
|
||||||
|
gpio0: gpio@8000 {
|
||||||
|
reg = <0x8000 0x1000>;
|
||||||
|
compatible = "adi,max32-gpio";
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
clocks = <&gcr ADI_MAX32_CLOCK_BUS0 0>;
|
||||||
|
interrupts = <14 0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0: serial@42000 {
|
||||||
|
compatible = "adi,max32-uart";
|
||||||
|
reg = <0x42000 0x1000>;
|
||||||
|
clocks = <&gcr ADI_MAX32_CLOCK_BUS0 9>;
|
||||||
|
clock-source = <ADI_MAX32_PRPH_CLK_SRC_PCLK>;
|
||||||
|
interrupts = <11 0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&nvic {
|
||||||
|
arm,num-irq-priority-bits = <3>;
|
||||||
|
};
|
|
@ -9,6 +9,17 @@ config SOC_FAMILY_MAX32
|
||||||
select SOC_EARLY_INIT_HOOK
|
select SOC_EARLY_INIT_HOOK
|
||||||
select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE
|
select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE
|
||||||
|
|
||||||
|
config SOC_FAMILY_MAX32_M33
|
||||||
|
select ARM
|
||||||
|
select CPU_CORTEX_M_HAS_SYSTICK
|
||||||
|
select CPU_HAS_ARM_MPU
|
||||||
|
select CPU_HAS_FPU
|
||||||
|
select CLOCK_CONTROL
|
||||||
|
select CPU_CORTEX_M33
|
||||||
|
select ARM_TRUSTZONE_M
|
||||||
|
select CPU_HAS_ARM_SAU
|
||||||
|
select ARMV8_M_DSP
|
||||||
|
|
||||||
config SOC_FAMILY_MAX32_M4
|
config SOC_FAMILY_MAX32_M4
|
||||||
select ARM
|
select ARM
|
||||||
select CPU_CORTEX_M4
|
select CPU_CORTEX_M4
|
||||||
|
|
14
soc/adi/max32/Kconfig.defconfig.max32657
Normal file
14
soc/adi/max32/Kconfig.defconfig.max32657
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Analog Devices MAX32657 MCU
|
||||||
|
|
||||||
|
# Copyright (c) 2024-2025 Analog Devices, Inc.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
if SOC_MAX32657
|
||||||
|
|
||||||
|
config SYS_CLOCK_HW_CYCLES_PER_SEC
|
||||||
|
default $(dt_node_int_prop_int,/clocks/clk_ipo,clock-frequency)
|
||||||
|
|
||||||
|
config NUM_IRQS
|
||||||
|
default 54
|
||||||
|
|
||||||
|
endif # SOC_MAX32657
|
|
@ -6,6 +6,10 @@
|
||||||
config SOC_FAMILY_MAX32
|
config SOC_FAMILY_MAX32
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SOC_FAMILY_MAX32_M33
|
||||||
|
bool
|
||||||
|
select SOC_FAMILY_MAX32
|
||||||
|
|
||||||
config SOC_FAMILY_MAX32_M4
|
config SOC_FAMILY_MAX32_M4
|
||||||
bool
|
bool
|
||||||
select SOC_FAMILY_MAX32
|
select SOC_FAMILY_MAX32
|
||||||
|
@ -25,6 +29,10 @@ config SOC_MAX32655_M4
|
||||||
select SOC_MAX32655
|
select SOC_MAX32655
|
||||||
select SOC_FAMILY_MAX32_M4
|
select SOC_FAMILY_MAX32_M4
|
||||||
|
|
||||||
|
config SOC_MAX32657
|
||||||
|
bool
|
||||||
|
select SOC_FAMILY_MAX32_M33
|
||||||
|
|
||||||
config SOC_MAX32660
|
config SOC_MAX32660
|
||||||
bool
|
bool
|
||||||
select SOC_FAMILY_MAX32_M4
|
select SOC_FAMILY_MAX32_M4
|
||||||
|
@ -88,6 +96,7 @@ config SOC_MAX78002_M4
|
||||||
config SOC
|
config SOC
|
||||||
default "max32650" if SOC_MAX32650
|
default "max32650" if SOC_MAX32650
|
||||||
default "max32655" if SOC_MAX32655
|
default "max32655" if SOC_MAX32655
|
||||||
|
default "max32657" if SOC_MAX32657
|
||||||
default "max32660" if SOC_MAX32660
|
default "max32660" if SOC_MAX32660
|
||||||
default "max32662" if SOC_MAX32662
|
default "max32662" if SOC_MAX32662
|
||||||
default "max32666" if SOC_MAX32666
|
default "max32666" if SOC_MAX32666
|
||||||
|
|
|
@ -8,6 +8,7 @@ family:
|
||||||
- name: max32655
|
- name: max32655
|
||||||
cpuclusters:
|
cpuclusters:
|
||||||
- name: m4
|
- name: m4
|
||||||
|
- name: max32657
|
||||||
- name: max32660
|
- name: max32660
|
||||||
- name: max32662
|
- name: max32662
|
||||||
- name: max32666
|
- name: max32666
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue