From 8d6d4de79d9e2f65e80395efdee5c3dcb95e7c33 Mon Sep 17 00:00:00 2001 From: Samuel Chee Date: Thu, 9 Jan 2025 13:51:20 +0000 Subject: [PATCH] boards: arm: mps2: Add support for mps2/an383 Added new mps2 board an383 to enable testing with ARM FVP. Qualifier to build/run is mps2/an383 Signed-off-by: Samuel Chee --- boards/arm/mps2/Kconfig | 4 +- boards/arm/mps2/Kconfig.defconfig | 3 +- boards/arm/mps2/Kconfig.mps2 | 2 + boards/arm/mps2/board.cmake | 30 +- boards/arm/mps2/board.yml | 1 + .../mps2/doc/img/{mps2_an521.jpg => mps2.jpg} | Bin boards/arm/mps2/doc/img/mps2_an385.jpg | Bin 34338 -> 0 bytes boards/arm/mps2/doc/mps2_an383.rst | 271 +++++++++++++++++ boards/arm/mps2/doc/mps2_an385.rst | 6 +- boards/arm/mps2/doc/mps2_an521.rst | 2 +- boards/arm/mps2/mps2_an383.dts | 30 ++ boards/arm/mps2/mps2_an383.yaml | 19 ++ boards/arm/mps2/mps2_an383_defconfig | 20 ++ boards/arm/mps2/mps2_an385.dts | 272 +----------------- boards/arm/mps2/mps2_base.dtsi | 265 +++++++++++++++++ drivers/gpio/gpio_mmio32.c | 8 + .../oot_root/boards/arm/mps2/board.cmake | 1 + .../drivers/gpio/gpio_api_1pin/testcase.yaml | 1 + .../watchdog/wdt_basic_api/testcase.yaml | 1 + tests/net/socket/tcp/testcase.yaml | 4 +- tests/subsys/llext/testcase.yaml | 1 + 21 files changed, 662 insertions(+), 279 deletions(-) rename boards/arm/mps2/doc/img/{mps2_an521.jpg => mps2.jpg} (100%) delete mode 100644 boards/arm/mps2/doc/img/mps2_an385.jpg create mode 100644 boards/arm/mps2/doc/mps2_an383.rst create mode 100644 boards/arm/mps2/mps2_an383.dts create mode 100644 boards/arm/mps2/mps2_an383.yaml create mode 100644 boards/arm/mps2/mps2_an383_defconfig create mode 100644 boards/arm/mps2/mps2_base.dtsi diff --git a/boards/arm/mps2/Kconfig b/boards/arm/mps2/Kconfig index 4beda641d53..367a8848536 100644 --- a/boards/arm/mps2/Kconfig +++ b/boards/arm/mps2/Kconfig @@ -1,6 +1,6 @@ # Copyright (c) 2017 Linaro Limited +# Copyright 2024 Arm Limited and/or its affiliates # SPDX-License-Identifier: Apache-2.0 config BOARD_MPS2 - select QEMU_TARGET - select HAS_COVERAGE_SUPPORT + select QEMU_TARGET if BOARD_MPS2_AN385 || BOARD_MPS2_AN521_CPU0 || BOARD_MPS2_AN521_CPU0_NS || BOARD_MPS2_AN521_CPU1 diff --git a/boards/arm/mps2/Kconfig.defconfig b/boards/arm/mps2/Kconfig.defconfig index b14613b4880..1995338ed52 100644 --- a/boards/arm/mps2/Kconfig.defconfig +++ b/boards/arm/mps2/Kconfig.defconfig @@ -1,7 +1,8 @@ # Copyright (c) 2017 Linaro Limited +# Copyright 2024 Arm Limited and/or its affiliates # SPDX-License-Identifier: Apache-2.0 -if BOARD_MPS2_AN385 +if BOARD_MPS2_AN385 || BOARD_MPS2_AN383 if SERIAL diff --git a/boards/arm/mps2/Kconfig.mps2 b/boards/arm/mps2/Kconfig.mps2 index 0731c5d2855..1bc354f9d56 100644 --- a/boards/arm/mps2/Kconfig.mps2 +++ b/boards/arm/mps2/Kconfig.mps2 @@ -1,7 +1,9 @@ # Copyright (c) 2017 Linaro Limited +# Copyright 2024 Arm Limited and/or its affiliates # SPDX-License-Identifier: Apache-2.0 config BOARD_MPS2 + select SOC_MPS2_AN383 if BOARD_MPS2_AN383 select SOC_MPS2_AN385 if BOARD_MPS2_AN385 select SOC_MPS2_AN521_CPU0 if BOARD_MPS2_AN521_CPU0 select SOC_MPS2_AN521_CPU0 if BOARD_MPS2_AN521_CPU0_NS diff --git a/boards/arm/mps2/board.cmake b/boards/arm/mps2/board.cmake index 6f38d01281b..8baa970ad1e 100644 --- a/boards/arm/mps2/board.cmake +++ b/boards/arm/mps2/board.cmake @@ -1,7 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Arm Limited and/or its affiliates + set(SUPPORTED_EMU_PLATFORMS qemu) - if(CONFIG_BOARD_MPS2_AN385) set(QEMU_CPU_TYPE_${ARCH} cortex-m3) set(QEMU_FLAGS_${ARCH} @@ -10,6 +11,14 @@ if(CONFIG_BOARD_MPS2_AN385) -nographic -vga none ) +elseif(CONFIG_BOARD_MPS2_AN383) + set(SUPPORTED_EMU_PLATFORMS armfvp) + set(ARMFVP_BIN_NAME FVP_MPS2_Cortex-M0plus) + set(ARMFVP_FLAGS + -C armcortexm0plusct.NUM_MPU_REGION=8 + -C armcortexm0plusct.USER=1 + -C armcortexm0plusct.VTOR=1 + ) elseif(CONFIG_BOARD_MPS2_AN521_CPU0 OR CONFIG_BOARD_MPS2_AN521_CPU0_NS OR CONFIG_BOARD_MPS2_AN521_CPU1) set(QEMU_CPU_TYPE_${ARCH} cortex-m33) set(QEMU_FLAGS_${ARCH} @@ -19,11 +28,7 @@ elseif(CONFIG_BOARD_MPS2_AN521_CPU0 OR CONFIG_BOARD_MPS2_AN521_CPU0_NS OR CONFIG -m 16 -vga none ) -endif() -board_set_debugger_ifnset(qemu) - -if(CONFIG_BOARD_MPS2_AN521_CPU0 OR CONFIG_BOARD_MPS2_AN521_CPU0_NS OR CONFIG_BOARD_MPS2_AN521_CPU1) # To enable a host tty switch between serial and pty # -chardev serial,path=/dev/ttyS0,id=hostS0 # pty is not available on Windows. @@ -44,3 +49,18 @@ if(CONFIG_BOARD_MPS2_AN521_CPU0 OR CONFIG_BOARD_MPS2_AN521_CPU0_NS OR CONFIG_BOA list(APPEND QEMU_EXTRA_FLAGS "-device;loader,file=${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME}") endif() endif() + +board_set_debugger_ifnset(qemu) + +set(ARMFVP_FLAGS ${ARMFVP_FLAGS} +-C fvp_mps2.telnetterminal0.start_telnet=0 +-C fvp_mps2.telnetterminal1.start_telnet=0 +-C fvp_mps2.telnetterminal2.start_telnet=0 +-C fvp_mps2.UART0.out_file=- +-C fvp_mps2.UART0.unbuffered_output=1 +-C fvp_mps2.UART1.out_file=- +-C fvp_mps2.UART1.unbuffered_output=1 +-C fvp_mps2.UART2.out_file=- +-C fvp_mps2.UART2.unbuffered_output=1 +-C fvp_mps2.mps2_visualisation.disable-visualisation=1 +) diff --git a/boards/arm/mps2/board.yml b/boards/arm/mps2/board.yml index 779a8ed21cc..88cf3a2b80a 100644 --- a/boards/arm/mps2/board.yml +++ b/boards/arm/mps2/board.yml @@ -3,6 +3,7 @@ board: full_name: V2M MPS2 vendor: arm socs: + - name: an383 - name: an385 - name: an521 variants: diff --git a/boards/arm/mps2/doc/img/mps2_an521.jpg b/boards/arm/mps2/doc/img/mps2.jpg similarity index 100% rename from boards/arm/mps2/doc/img/mps2_an521.jpg rename to boards/arm/mps2/doc/img/mps2.jpg diff --git a/boards/arm/mps2/doc/img/mps2_an385.jpg b/boards/arm/mps2/doc/img/mps2_an385.jpg deleted file mode 100644 index 58e42290939f8703dfa0e419c05c113e44cc98fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34338 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 OjgSvGq7mEv|4jfZvrQEM diff --git a/boards/arm/mps2/doc/mps2_an383.rst b/boards/arm/mps2/doc/mps2_an383.rst new file mode 100644 index 00000000000..a8f6d550acb --- /dev/null +++ b/boards/arm/mps2/doc/mps2_an383.rst @@ -0,0 +1,271 @@ +.. _mps2_an383_board: + +ARM V2M MPS2 AN383 +################## + +Overview +******** + +The ``mps2/an383`` board target is used by Zephyr applications that run on +the V2M MPS2 board. It provides support for the ARM Cortex-M0+ (AN383) CPU and +the following devices: + +- Nested Vectored Interrupt Controller (NVIC) +- System Tick System Clock (SYSTICK) +- Cortex-M System Design Kit UART + +.. image:: img/mps2.jpg + :align: center + :alt: ARM V2M MPS2 + +In addition to enabling actual hardware usage, this board target can +also use `FVP`_. to emulate the AN383 platform running on the MPS2+. + +More information about the board can be found at the `V2M MPS2 Website`_. + +The Application Note AN383 can be found at `Application Note AN383`_. + +.. note:: + This board target makes no claims about its suitability for use + with actual MPS2 hardware systems using AN383, or any other hardware + system. It has been tested on FVP. + + +Hardware +******** + +ARM V2M MPS2 AN383 provides the following hardware components: + +- ARM Cortex-M0+ +- ARM IoT Subsystem for Cortex-M +- Form factor: 140x120cm +- ZBTSRAM: 8MB single cycle SRAM, 16MB PSRAM +- Video: QSVGA touch screen panel, 4bit RGB VGA connector +- Audio: Audio Codec +- Debug: + + - ARM JTAG20 connector + - ARM parallel trace connector (MICTOR38) + - 20 pin Cortex debug connector + - 10 pin Cortex debug connector + - ILA connector for FPGA debug + +- Expansion + + - GPIO + - SPI + +.. note:: + 4 MB of flash memory (in ZBTSRAM 1, starting at address 0x00400000) and 4 MB of RAM + (in ZBTSRAM 2 & 3, starting at address 0x20000000) are available. + +Supported Features +================== + +The ``mps2/an383`` board target supports the following hardware features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| SYSTICK | on-chip | systick | ++-----------+------------+-------------------------------------+ +| UART | on-chip | serial port-polling; | +| | | serial port-interrupt | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| WATCHDOG | on-chip | watchdog | ++-----------+------------+-------------------------------------+ +| TIMER | on-chip | counter | ++-----------+------------+-------------------------------------+ +| DUALTIMER | on-chip | counter | ++-----------+------------+-------------------------------------+ + +Other hardware features are not currently supported by the port. +See the `V2M MPS2 Website`_ for a complete list of V2M MPS2 board hardware +features. + +The default configuration can be found in +:zephyr_file:`boards/arm/mps2/mps2_an383_defconfig` + +Interrupt Controller +==================== + +MPS2 is a Cortex-M0+ based SoC and has 6 fixed exceptions and 32 IRQs. + +A Cortex-M0+ board uses vectored exceptions. This means each exception +calls a handler directly from the vector table. + +Handlers are provided for exceptions 1-3, 11, and 14-15. The table here +MPS2 is a Cortex-M0+ based SoC and has 15 fixed exceptions and 45 IRQs. + ++------+------------+----------------+--------------------------+ +| Exc# | Name | Remarks | Used by Zephyr Kernel | ++======+============+================+==========================+ +| 1 | Reset | | system initialization | ++------+------------+----------------+--------------------------+ +| 2 | NMI | | system fatal error | ++------+------------+----------------+--------------------------+ +| 3 | Hard fault | | system fatal error | ++------+------------+----------------+--------------------------+ +| 11 | SVC | | system calls, kernel | +| | | | run-time exceptions, | +| | | | and IRQ offloading | ++------+------------+----------------+--------------------------+ +| 14 | PendSV | | context switch | ++------+------------+----------------+--------------------------+ +| 15 | SYSTICK | optional | system clock | ++------+------------+----------------+--------------------------+ + +Pin Mapping +=========== + +The ARM V2M MPS2 Board has 4 GPIO controllers. These controllers are responsible +for pin muxing, input/output, pull-up, etc. + +All GPIO controller pins are exposed via the following sequence of pin numbers: + +- Pins 0 - 15 are for GPIO 0 +- Pins 16 - 31 are for GPIO 1 +- Pins 32 - 47 are for GPIO 2 +- Pins 48 - 51 are for GPIO 3 + +Mapping from the ARM MPS2 Board pins to GPIO controllers: + +.. rst-class:: rst-columns + + - D0 : EXT_0 + - D1 : EXT_4 + - D2 : EXT_2 + - D3 : EXT_3 + - D4 : EXT_1 + - D5 : EXT_6 + - D6 : EXT_7 + - D7 : EXT_8 + - D8 : EXT_9 + - D9 : EXT_10 + - D10 : EXT_12 + - D11 : EXT_13 + - D12 : EXT_14 + - D13 : EXT_11 + - D14 : EXT_15 + - D15 : EXT_5 + - D16 : EXT_16 + - D17 : EXT_17 + - D18 : EXT_18 + - D19 : EXT_19 + - D20 : EXT_20 + - D21 : EXT_21 + - D22 : EXT_22 + - D23 : EXT_23 + - D24 : EXT_24 + - D25 : EXT_25 + - D26 : EXT_26 + - D27 : EXT_30 + - D28 : EXT_28 + - D29 : EXT_29 + - D30 : EXT_27 + - D31 : EXT_32 + - D32 : EXT_33 + - D33 : EXT_34 + - D34 : EXT_35 + - D35 : EXT_36 + - D36 : EXT_38 + - D37 : EXT_39 + - D38 : EXT_40 + - D39 : EXT_44 + - D40 : EXT_41 + - D41 : EXT_31 + - D42 : EXT_37 + - D43 : EXT_42 + - D44 : EXT_43 + - D45 : EXT_45 + - D46 : EXT_46 + - D47 : EXT_47 + - D48 : EXT_48 + - D49 : EXT_49 + - D50 : EXT_50 + - D51 : EXT_51 + +Peripheral Mapping: + +.. rst-class:: rst-columns + + - UART_3_RX : D0 + - UART_3_TX : D1 + - SPI_3_CS : D10 + - SPI_3_MOSI : D11 + - SPI_3_MISO : D12 + - SPI_3_SCLK : D13 + - I2C_3_SDA : D14 + - I2C_3_SCL : D15 + - UART_4_RX : D26 + - UART_4_TX : D30 + - SPI_4_CS : D36 + - SPI_4_MOSI : D37 + - SPI_4_MISO : D38 + - SPI_4_SCK : D39 + - I2C_4_SDA : D40 + - I2C_4_SCL : D41 + +For more details please refer to `MPS2 Technical Reference Manual (TRM)`_. + +System Clock +============ + +The V2M MPS2 main clock is 24 MHz. + +Serial Port +=========== + +The V2M MPS2 processor has five UARTs. Both the UARTs have only two wires for +RX/TX and no flow control (CTS/RTS) or FIFO. The Zephyr console output, by +default, is utilizing UART0. + +Programming and Debugging +************************* + +Flashing +======== + +V2M MPS2 provides: + +- A USB connection to the host computer, which exposes a Mass Storage and an + USB Serial Port. +- A Serial Flash device, which implements the USB flash disk file storage. +- A physical UART connection which is relayed over interface USB Serial port. + +Flashing an application to V2M MPS2 +----------------------------------- + +Here is an example for the :ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: mps2/an383 + :goals: build + +Connect the V2M MPS2 to your host computer using the USB port and you should +see a USB connection which exposes a Mass Storage and a USB Serial Port. +Copy the generated zephyr.bin in the exposed drive. +Reset the board and you should be able to see on the corresponding Serial Port +the following message: + +.. code-block:: console + + Hello World! arm + + +.. _V2M MPS2 Website: + https://developer.mbed.org/platforms/ARM-MPS2/ + +.. _MPS2 Technical Reference Manual (TRM): + http://infocenter.arm.com/help/topic/com.arm.doc.100112_0200_05_en/versatile_express_cortex_m_prototyping_systems_v2m_mps2_and_v2m_mps2plus_technical_reference_100112_0200_05_en.pdf + +.. _Application Note AN383: + https://documentation-service.arm.com/static/5ed1051dca06a95ce53f88a1 + +.. _FVP: + https://developer.arm.com/downloads/view/FMFVP diff --git a/boards/arm/mps2/doc/mps2_an385.rst b/boards/arm/mps2/doc/mps2_an385.rst index 79f01dc9c53..19b759125e4 100644 --- a/boards/arm/mps2/doc/mps2_an385.rst +++ b/boards/arm/mps2/doc/mps2_an385.rst @@ -1,7 +1,7 @@ .. _mps2_an385_board: -ARM V2M MPS2 -############ +ARM V2M MPS2 AN385 +################## Overview ******** @@ -14,7 +14,7 @@ the following devices: - System Tick System Clock (SYSTICK) - Cortex-M System Design Kit UART -.. image:: img/mps2_an385.jpg +.. image:: img/mps2.jpg :align: center :alt: ARM V2M MPS2 diff --git a/boards/arm/mps2/doc/mps2_an521.rst b/boards/arm/mps2/doc/mps2_an521.rst index 33a4f4d7ca6..067b4f286b0 100644 --- a/boards/arm/mps2/doc/mps2_an521.rst +++ b/boards/arm/mps2/doc/mps2_an521.rst @@ -15,7 +15,7 @@ CPU and the following devices: - Cortex-M System Design Kit GPIO - Cortex-M System Design Kit UART -.. image:: img/mps2_an521.jpg +.. image:: img/mps2.jpg :align: center :alt: ARM MPS2+ AN521 diff --git a/boards/arm/mps2/mps2_an383.dts b/boards/arm/mps2/mps2_an383.dts new file mode 100644 index 00000000000..ef21f37b3f7 --- /dev/null +++ b/boards/arm/mps2/mps2_an383.dts @@ -0,0 +1,30 @@ +/* + * Copyright 2024 Arm Limited and/or its affiliates + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include +#include "mps2_base.dtsi" + +/* FVP does not support uart3 and uart4 */ +/* hence we delete them for AN383 in FVP */ +/delete-node/ &uart3; +/delete-node/ &uart4; + +/ { + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m0+"; + reg = <0>; + }; + }; +}; diff --git a/boards/arm/mps2/mps2_an383.yaml b/boards/arm/mps2/mps2_an383.yaml new file mode 100644 index 00000000000..c7e2ae8ba3f --- /dev/null +++ b/boards/arm/mps2/mps2_an383.yaml @@ -0,0 +1,19 @@ +identifier: mps2/an383 +name: ARM V2M MPS2-an383 +type: mcu +arch: arm +simulation: + - name: armfvp + exec: FVP_MPS2_Cortex-M0plus +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - counter + - netif:serial-net + - gpio + - watchdog +testing: + default: true +vendor: arm diff --git a/boards/arm/mps2/mps2_an383_defconfig b/boards/arm/mps2/mps2_an383_defconfig new file mode 100644 index 00000000000..aaa7c33d63d --- /dev/null +++ b/boards/arm/mps2/mps2_an383_defconfig @@ -0,0 +1,20 @@ +# +# Copyright 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_RUNTIME_NMI=y + +# GPIOs +CONFIG_GPIO=y + +# Serial +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y + +CONFIG_ARM_MPU=y + +# 0x0 is a valid address, we cannot prevent access to that area +CONFIG_NULL_POINTER_EXCEPTION_DETECTION_NONE=y diff --git a/boards/arm/mps2/mps2_an385.dts b/boards/arm/mps2/mps2_an385.dts index d2db1cebed0..9206eb47039 100644 --- a/boards/arm/mps2/mps2_an385.dts +++ b/boards/arm/mps2/mps2_an385.dts @@ -1,58 +1,17 @@ -/* SPDX-License-Identifier: Apache-2.0 */ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright 2024 Arm Limited and/or its affiliates + */ /dts-v1/; #include #include #include +#include "mps2_base.dtsi" / { - compatible = "arm,mps2"; - #address-cells = <1>; - #size-cells = <1>; - - aliases { - led0 = &led_0; - led1 = &led_1; - sw0 = &user_button_0; - sw1 = &user_button_1; - watchdog0 = &wdog0; - }; - - chosen { - zephyr,console = &uart0; - zephyr,shell-uart = &uart0; - zephyr,uart-pipe = &uart1; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - }; - - leds { - compatible = "gpio-leds"; - led_0: led_0 { - gpios = <&gpio_led0 0>; - label = "USERLED0"; - }; - led_1: led_1 { - gpios = <&gpio_led0 1>; - label = "USERLED1"; - }; - }; - - gpio_keys { - compatible = "gpio-keys"; - user_button_0: button_0 { - label = "USERPB0"; - gpios = <&gpio_button 0>; - zephyr,code = ; - }; - user_button_1: button_1 { - label = "USERPB1"; - gpios = <&gpio_button 1>; - zephyr,code = ; - }; - }; - cpus { #address-cells = <1>; #size-cells = <0>; @@ -62,223 +21,4 @@ reg = <0>; }; }; - - sram0: memory@20000000 { - compatible = "mmio-sram"; - reg = <0x20000000 0x400000>; - }; - - flash0: flash@0 { - compatible = "soc-nv-flash"; - reg = <0 0x400000>; - }; - - sim_flash_controller: sim_flash_controller { - compatible = "zephyr,sim-flash"; - - #address-cells = <1>; - #size-cells = <1>; - erase-value = <0x00>; - - flash_sim0: flash_sim@0 { - compatible = "soc-nv-flash"; - reg = <0x00000000 0x8000>; - - erase-block-size = <1024>; - write-block-size = <4>; - - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - storage_partition: partition@0 { - label = "storage_partition"; - reg = <0x00000000 0x8000>; - }; - }; - }; - }; - - sysclk: system-clock { - compatible = "fixed-clock"; - clock-frequency = <25000000>; - #clock-cells = <0>; - }; - - soc { - timer0: timer@40000000 { - compatible = "arm,cmsdk-timer"; - reg = <0x40000000 0x1000>; - interrupts = <8 3>; - }; - - timer1: timer@40001000 { - compatible = "arm,cmsdk-timer"; - reg = <0x40001000 0x1000>; - interrupts = <9 3>; - }; - - dtimer0: dtimer@40002000 { - compatible = "arm,cmsdk-dtimer"; - reg = <0x40002000 0x1000>; - interrupts = <10 3>; - }; - - uart0: uart@40004000 { - compatible = "arm,cmsdk-uart"; - reg = <0x40004000 0x1000>; - interrupts = <1 3 0 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; - }; - - uart1: uart@40005000 { - compatible = "arm,cmsdk-uart"; - reg = <0x40005000 0x1000>; - interrupts = <3 3 2 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; - }; - - uart2: uart@40006000 { - compatible = "arm,cmsdk-uart"; - reg = <0x40006000 0x1000>; - interrupts = <5 3 4 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; - }; - - uart3: uart@40007000 { - compatible = "arm,cmsdk-uart"; - reg = <0x40007000 0x1000>; - interrupts = <19 3 18 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; - }; - - wdog0: wdog@40008000 { - compatible = "arm,cmsdk-watchdog"; - clocks = <&sysclk>; - reg = <0x40008000 0x1000>; - }; - - uart4: uart@40009000 { - compatible = "arm,cmsdk-uart"; - reg = <0x40009000 0x1000>; - interrupts = <21 3 20 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; - }; - - gpio0: gpio@40010000 { - compatible = "arm,cmsdk-gpio"; - reg = <0x40010000 0x1000>; - interrupts = <6 3>; - gpio-controller; - #gpio-cells = <2>; - }; - - gpio1: gpio@40011000 { - compatible = "arm,cmsdk-gpio"; - reg = <0x40011000 0x1000>; - interrupts = <7 3>; - gpio-controller; - #gpio-cells = <2>; - }; - - gpio2: gpio@40012000 { - compatible = "arm,cmsdk-gpio"; - reg = <0x40012000 0x1000>; - interrupts = <16 3>; - gpio-controller; - #gpio-cells = <2>; - }; - - gpio3: gpio@40013000 { - compatible = "arm,cmsdk-gpio"; - reg = <0x40013000 0x1000>; - interrupts = <17 3>; - gpio-controller; - #gpio-cells = <2>; - }; - - eth0: eth@40200000 { - /* Linux has "smsc,lan9115" */ - compatible = "smsc,lan9220"; - /* Such a big size from memory map in AN385 */ - /* Actual reg range is ~0x200 */ - reg = <0x40200000 0x100000>; - interrupts = <13 3>; - }; - - i2c_touch: i2c@40022000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x40022000 0x1000>; - }; - - i2c_audio_conf: i2c@40023000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x40023000 0x1000>; - }; - - i2c_shield0: i2c@40029000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x40029000 0x1000>; - }; - - i2c_shield1: i2c@4002a000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x4002a000 0x1000>; - }; - - gpio_led0: mps2_fpgaio@40028000 { - compatible = "arm,mps2-fpgaio-gpio"; - - reg = <0x40028000 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <2>; - }; - - gpio_button: mps2_fpgaio@40028008 { - compatible = "arm,mps2-fpgaio-gpio"; - - reg = <0x40028008 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <2>; - }; - - gpio_misc: mps2_fpgaio@4002804c { - compatible = "arm,mps2-fpgaio-gpio"; - - reg = <0x4002804c 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <10>; - }; - - }; -}; - -&nvic { - arm,num-irq-priority-bits = <3>; }; diff --git a/boards/arm/mps2/mps2_base.dtsi b/boards/arm/mps2/mps2_base.dtsi new file mode 100644 index 00000000000..7d332d7f063 --- /dev/null +++ b/boards/arm/mps2/mps2_base.dtsi @@ -0,0 +1,265 @@ +/* Copyright 2024 Arm Limited and/or its affiliates */ +/* SPDX-License-Identifier: Apache-2.0 */ + +/ { + compatible = "arm,mps2"; + #address-cells = <1>; + #size-cells = <1>; + + aliases { + led0 = &led_0; + led1 = &led_1; + sw0 = &user_button_0; + sw1 = &user_button_1; + watchdog0 = &wdog0; + }; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-pipe = &uart1; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + led_0: led_0 { + gpios = <&gpio_led0 0>; + label = "USERLED0"; + }; + + led_1: led_1 { + gpios = <&gpio_led0 1>; + label = "USERLED1"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button_0: button_0 { + label = "USERPB0"; + gpios = <&gpio_button 0>; + zephyr,code = ; + }; + + user_button_1: button_1 { + label = "USERPB1"; + gpios = <&gpio_button 1>; + zephyr,code = ; + }; + }; + + sram0: memory@20000000 { + compatible = "mmio-sram"; + reg = <0x20000000 0x400000>; + }; + + flash0: flash@0 { + compatible = "soc-nv-flash"; + reg = <0 0x400000>; + }; + + sim_flash_controller: sim_flash_controller { + compatible = "zephyr,sim-flash"; + #address-cells = <1>; + #size-cells = <1>; + erase-value = <0x00>; + + flash_sim0: flash_sim@0 { + compatible = "soc-nv-flash"; + reg = <0x00000000 0x8000>; + erase-block-size = <1024>; + write-block-size = <4>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + storage_partition: partition@0 { + label = "storage_partition"; + reg = <0x00000000 0x8000>; + }; + }; + }; + }; + + sysclk: system-clock { + compatible = "fixed-clock"; + clock-frequency = <25000000>; + #clock-cells = <0>; + }; + + soc { + timer0: timer@40000000 { + compatible = "arm,cmsdk-timer"; + reg = <0x40000000 0x1000>; + interrupts = <8 3>; + }; + + timer1: timer@40001000 { + compatible = "arm,cmsdk-timer"; + reg = <0x40001000 0x1000>; + interrupts = <9 3>; + }; + + dtimer0: dtimer@40002000 { + compatible = "arm,cmsdk-dtimer"; + reg = <0x40002000 0x1000>; + interrupts = <10 3>; + }; + + uart0: uart@40004000 { + compatible = "arm,cmsdk-uart"; + reg = <0x40004000 0x1000>; + interrupts = <1 3 0 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; + }; + + uart1: uart@40005000 { + compatible = "arm,cmsdk-uart"; + reg = <0x40005000 0x1000>; + interrupts = <3 3 2 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; + }; + + uart2: uart@40006000 { + compatible = "arm,cmsdk-uart"; + reg = <0x40006000 0x1000>; + interrupts = <5 3 4 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; + }; + + uart3: uart@40007000 { + compatible = "arm,cmsdk-uart"; + reg = <0x40007000 0x1000>; + interrupts = <19 3 18 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; + }; + + wdog0: wdog@40008000 { + compatible = "arm,cmsdk-watchdog"; + clocks = <&sysclk>; + reg = <0x40008000 0x1000>; + }; + + uart4: uart@40009000 { + compatible = "arm,cmsdk-uart"; + reg = <0x40009000 0x1000>; + interrupts = <21 3 20 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; + }; + + gpio0: gpio@40010000 { + compatible = "arm,cmsdk-gpio"; + reg = <0x40010000 0x1000>; + interrupts = <6 3>; + gpio-controller; + #gpio-cells = <2>; + }; + + gpio1: gpio@40011000 { + compatible = "arm,cmsdk-gpio"; + reg = <0x40011000 0x1000>; + interrupts = <7 3>; + gpio-controller; + #gpio-cells = <2>; + }; + + gpio2: gpio@40012000 { + compatible = "arm,cmsdk-gpio"; + reg = <0x40012000 0x1000>; + interrupts = <16 3>; + gpio-controller; + #gpio-cells = <2>; + }; + + gpio3: gpio@40013000 { + compatible = "arm,cmsdk-gpio"; + reg = <0x40013000 0x1000>; + interrupts = <17 3>; + gpio-controller; + #gpio-cells = <2>; + }; + + eth0: eth@40200000 { + /* Linux has "smsc,lan9115" */ + compatible = "smsc,lan9220"; + /* Such a big size from memory map in AN385 */ + /* Actual reg range is ~0x200 */ + reg = <0x40200000 0x100000>; + interrupts = <13 3>; + }; + + i2c_touch: i2c@40022000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x40022000 0x1000>; + }; + + i2c_audio_conf: i2c@40023000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x40023000 0x1000>; + }; + + i2c_shield0: i2c@40029000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x40029000 0x1000>; + }; + + i2c_shield1: i2c@4002a000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x4002a000 0x1000>; + }; + + gpio_led0: mps2_fpgaio@40028000 { + compatible = "arm,mps2-fpgaio-gpio"; + reg = <0x40028000 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <2>; + }; + + gpio_button: mps2_fpgaio@40028008 { + compatible = "arm,mps2-fpgaio-gpio"; + reg = <0x40028008 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <2>; + }; + + gpio_misc: mps2_fpgaio@4002804c { + compatible = "arm,mps2-fpgaio-gpio"; + reg = <0x4002804c 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <10>; + }; + }; +}; + +&nvic { + arm,num-irq-priority-bits = <3>; +}; diff --git a/drivers/gpio/gpio_mmio32.c b/drivers/gpio/gpio_mmio32.c index b88fac97a8e..5244f45f29e 100644 --- a/drivers/gpio/gpio_mmio32.c +++ b/drivers/gpio/gpio_mmio32.c @@ -147,6 +147,13 @@ static int gpio_mmio32_port_toggle_bits(const struct device *dev, return 0; } +int gpio_mmio_pin_interrupt_configure(const struct device *port, + gpio_pin_t pin, + enum gpio_int_mode, enum gpio_int_trig) +{ + return -ENOTSUP; +} + DEVICE_API(gpio, gpio_mmio32_api) = { .pin_configure = gpio_mmio32_config, .port_get_raw = gpio_mmio32_port_get_raw, @@ -154,6 +161,7 @@ DEVICE_API(gpio, gpio_mmio32_api) = { .port_set_bits_raw = gpio_mmio32_port_set_bits_raw, .port_clear_bits_raw = gpio_mmio32_port_clear_bits_raw, .port_toggle_bits = gpio_mmio32_port_toggle_bits, + .pin_interrupt_configure = gpio_mmio_pin_interrupt_configure, }; int gpio_mmio32_init(const struct device *dev) diff --git a/tests/cmake/hwm/board_extend/oot_root/boards/arm/mps2/board.cmake b/tests/cmake/hwm/board_extend/oot_root/boards/arm/mps2/board.cmake index 27c74975756..f89df3a4486 100644 --- a/tests/cmake/hwm/board_extend/oot_root/boards/arm/mps2/board.cmake +++ b/tests/cmake/hwm/board_extend/oot_root/boards/arm/mps2/board.cmake @@ -3,6 +3,7 @@ # Copyright (c) 2024, Nordic Semiconductor ASA if(CONFIG_BOARD_MPS2_AN521_CPUTEST) + set(SUPPORTED_EMU_PLATFORMS qemu) set(QEMU_CPU_TYPE_${ARCH} cortex-m33) set(QEMU_FLAGS_${ARCH} -cpu ${QEMU_CPU_TYPE_${ARCH}} diff --git a/tests/drivers/gpio/gpio_api_1pin/testcase.yaml b/tests/drivers/gpio/gpio_api_1pin/testcase.yaml index dd6a1149a25..a60abbc0065 100644 --- a/tests/drivers/gpio/gpio_api_1pin/testcase.yaml +++ b/tests/drivers/gpio/gpio_api_1pin/testcase.yaml @@ -13,6 +13,7 @@ tests: platform_exclude: - mps2/an385 - mps2/an521/cpu0 + - mps2/an383 - neorv32 drivers.gpio.1pin.aw9523b: tags: diff --git a/tests/drivers/watchdog/wdt_basic_api/testcase.yaml b/tests/drivers/watchdog/wdt_basic_api/testcase.yaml index da3497f41be..1002ab86199 100644 --- a/tests/drivers/watchdog/wdt_basic_api/testcase.yaml +++ b/tests/drivers/watchdog/wdt_basic_api/testcase.yaml @@ -16,6 +16,7 @@ tests: - s32z2xxdc2/s32z270/rtu1 - s32z2xxdc2@D/s32z270/rtu0 - s32z2xxdc2@D/s32z270/rtu1 + - mps2/an383 drivers.watchdog.stm32wwdg: filter: dt_compat_enabled("st,stm32-window-watchdog") or dt_compat_enabled("st,stm32-watchdog") extra_args: DTC_OVERLAY_FILE="boards/stm32_wwdg.overlay" diff --git a/tests/net/socket/tcp/testcase.yaml b/tests/net/socket/tcp/testcase.yaml index a7593ffcdd3..aa7fc4cbee5 100644 --- a/tests/net/socket/tcp/testcase.yaml +++ b/tests/net/socket/tcp/testcase.yaml @@ -11,7 +11,9 @@ common: # FIXME: This test fails very frequently on mps2/an385 due to the system # timer stability issues, so keep it disabled until the root cause # is fixed (GitHub issue zephyrproject-rtos/zephyr#48608). - platform_exclude: mps2/an385 + platform_exclude: + - mps2/an385 + - mps2/an383 tests: net.socket.tcp: extra_configs: diff --git a/tests/subsys/llext/testcase.yaml b/tests/subsys/llext/testcase.yaml index 2d97da954cf..c7fe918444c 100644 --- a/tests/subsys/llext/testcase.yaml +++ b/tests/subsys/llext/testcase.yaml @@ -7,6 +7,7 @@ common: - s32z2xxdc2/s32z270/rtu1 # See commit 18a0660 # platforms that are always skipped by the runtime filter - qemu_cortex_m0 + - mps2/an383 - qemu_xtensa/dc233c/mmu integration_platforms: - qemu_cortex_a9 # ARM Cortex-A9 (ARMv7-A ISA)