qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/25] NXP i.MX RT595
@ 2024-10-08  1:18 Octavian Purdila
  2024-10-08  1:18 ` [PATCH v2 01/25] fifo32: add peek function Octavian Purdila
                   ` (24 more replies)
  0 siblings, 25 replies; 29+ messages in thread
From: Octavian Purdila @ 2024-10-08  1:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: qemu-arm, stefanst, pbonzini, peter.maydell, marcandre.lureau,
	berrange, eduardo, luc, damien.hedde, alistair, thuth, philmd,
	jsnow, crosa, lvivier

This patch set adds support for NXP's RT500 MCU [1] and the RT595
EVK[2]. More RT500 device models will be submitted in future patch sets.

This is a minimal patch set that allows running the NXP MCU SDK hello
world example[4].

The patch set introduces a (python) tool that generates C header files
from ARM SVD files[3]. This significantly reduces the effort to write
a new device model by automatically generating: register definitions
and layout (including bit fields), register names for easier debugging
and tracing, reset register values, register write masks, etc.

The generated files are commited and not generated at compile
time. Build targets are created so that they can be easily regenerated
if needed.

Changes since v1:

 * svd_gen_header: remove field values generation for 1 bit fields,
   add options to control which registers and fields to be generated,
   switch to using defines instead of enums for field values with more
   than 1 bit
 * i2c-tester: document the rationale and basic functionality in the
   header

Changes since RFC v3:
 * rewrite the flexcomm devices to take advantage of QEMU's object
   model / class inheritance and overlapped memory region and remove
   the adhoc flexcomm APIs
 * remove code duplication by using common fifo functions for USART
   and SPI
 * fix copyright in one of the headers
 * remove hw/registerfields.h from generated headers as hw/register.h
   is already included
 * fix signed off email address for the qtests API patches
 * fix description (tests/unit -> tests/qtest) for RT500 clock
   controller tests
 * convert devices to use the Resettable interfaces
 * add support for migration
 * rework the fifo32 tests on top of Mark's and Phillippe's work

Changes since RFC v2:
 * convert tests from unit to qtest
 * move i2c and spi testers from unit tests to hw/misc devices
 * switch to using RegisterAccessInfo to generate register information
   like register names, reset values, or read-only mask
 * use register_write instead of adding a new reg32_write API
 * remove reg32_aligned_access completly and rely on memops access
   constraints and size of access for alignment checks
 * add qtest APIs for checking memory access faulires
 * add qtest APIs for accessing the device clock frequency
 * fix bugs detected by address sanitizers

Changes since RFC v1:
 * setup scripts/git.orderfile
 * svd_gen_header: add support for multi line comments
 * svd_gen_header: use qemu register fields instead of bitfields
 * svd_gen_header: generate register write mask array
 * add mcux-soc-svd as a subproject instead of commiting the rt595 SVD
   file directly
 * svd generated headers: don't generate them at compile time, instead
   commit the generated headers and create compile targets so that it is
   easy to regenerate them
 * remove pysvd dependency; developers who need to (re)generate svd
   headers need to have it installed on the host machine
 * use DEFINE_TYPES where possible
 * use g_strdup_printf where possible
 * reduce iterator variables scopes
 * hard code rt500 to use the cortex-m33
 * use static for local arrays initializers
 * remove rt500 properties as they are not yet used
 * drop private/public comments
 * remove unused headers
 * free rt500 mem regions in rt500_unrealize() instead of
   rt500_finalize
 * use memops access constraints where possible instead of
   reg32_aligned_access
 * flexspi: use 64bit properties for mmap_size property
 * rstctl: use a generic abstract type and remove the  "num" property
 * flexspi: don't call get_system_memory() directly and remove
   mmap_base property

[1] https://www.nxp.com/docs/en/data-sheet/IMXRT500EC.pdf
[2] https://www.nxp.com/webapp/Download?colCode=MIMXRT595EVKHUG
[3] https://arm-software.github.io/CMSIS_5/SVD/html/index.html
[4] Building and running the NXP MCU SDK hello world example

    Clone the following git repos:

    https://github.com/nxp-mcuxpresso/cmsis.git,
    https://github.com/nxp-mcuxpresso/mcux-sdk.git
    https://github.com/nxp-mcuxpresso/mcux-sdk-examples.git

    in the following directories: CMSIS, core, examples.

    cd examples/evkmimxrt595/demo_apps/hello_world/armgcc

    ARMGCC_DIR=/usr CFLAGS=-I../../../../../CMSIS/CMSIS/Core/Include \
      sh build_flash_debug.sh

    qemu-system-arm --machine rt595-evk -kernel flash_debug/hello_world.elf \
      -global armv7m.init-nsvtor=0x08001000 -global armv7m.init-svtor=0x08001000 \
      -chardev stdio,id=flexcomm0

Octavian Purdila (22):
  fifo32: add peek function
  tests/unit: add fifo32 tests
  Add mcux-soc-svd subproject
  hw/misc: add support for flexcomm
  hw/misc/flexcomm.c: add common fifo functionality
  hw/char: add support for flexcomm usart
  hw/i2c: add support for flexcomm i2c
  hw/misc: add support for RT500's clock controller
  hw/ssi: add support for flexspi
  hw/misc: add support for RT500's reset controller
  hw/arm: add basic support for the RT500 SoC
  hw/arm: add RT595-EVK board
  tests/qtest: add register access macros and functions
  system/qtest: add APIS to check for memory access failures
  tests/qtest: add flexcomm tests
  tests/qtest: add flexcomm usart tests
  hw/misc: add i2c-tester
  tests/qtest: add tests for flexcomm i2c
  hw/ssi: allow NULL realize callbacks for peripherals
  hw/misc: add spi-tester
  systems/qtest: add device clock APIs
  tests/qtest: add tests for RT500's clock controller

Sebastian Ene (2):
  hw/ssi: add support for flexcomm spi
  tests/qtest: add tests for flexcomm spi

Stefan Stanacar (1):
  scripts: add script to generate C header files from SVD XML files

 meson.build                                   |    4 +
 include/hw/arm/rt500.h                        |   44 +
 include/hw/arm/svd/flexcomm.h                 |   70 ++
 include/hw/arm/svd/flexcomm_i2c.h             |  229 ++++
 include/hw/arm/svd/flexcomm_spi.h             |  327 +++++
 include/hw/arm/svd/flexcomm_usart.h           |  294 +++++
 include/hw/arm/svd/flexspi.h                  | 1085 +++++++++++++++++
 include/hw/arm/svd/rt500.h                    |   63 +
 include/hw/arm/svd/rt500_clkctl0.h            |  509 ++++++++
 include/hw/arm/svd/rt500_clkctl1.h            |  675 ++++++++++
 include/hw/arm/svd/rt500_rstctl0.h            |  110 ++
 include/hw/arm/svd/rt500_rstctl1.h            |  110 ++
 include/hw/char/flexcomm_usart.h              |   33 +
 include/hw/i2c/flexcomm_i2c.h                 |   40 +
 include/hw/misc/flexcomm.h                    |   57 +
 include/hw/misc/flexcomm_function.h           |   55 +
 include/hw/misc/i2c_tester.h                  |   43 +
 include/hw/misc/rt500_clk_freqs.h             |   18 +
 include/hw/misc/rt500_clkctl0.h               |   35 +
 include/hw/misc/rt500_clkctl1.h               |   36 +
 include/hw/misc/rt500_rstctl.h                |   32 +
 include/hw/misc/spi_tester.h                  |   32 +
 include/hw/qdev-clock.h                       |   10 +
 include/hw/ssi/flexcomm_spi.h                 |   36 +
 include/hw/ssi/flexspi.h                      |   31 +
 include/qemu/fifo32.h                         |   28 +
 tests/qtest/libqtest-single.h                 |  116 ++
 tests/qtest/libqtest.h                        |   98 ++
 tests/qtest/reg-utils.h                       |   70 ++
 hw/arm/rt500.c                                |  329 +++++
 hw/arm/rt595-evk.c                            |   64 +
 hw/char/flexcomm_usart.c                      |  288 +++++
 hw/core/qdev-clock.c                          |    2 +-
 hw/i2c/flexcomm_i2c.c                         |  250 ++++
 hw/misc/flexcomm.c                            |  411 +++++++
 hw/misc/i2c_tester.c                          |  109 ++
 hw/misc/rt500_clkctl0.c                       |  253 ++++
 hw/misc/rt500_clkctl1.c                       |  238 ++++
 hw/misc/rt500_rstctl.c                        |  258 ++++
 hw/misc/spi_tester.c                          |   67 +
 hw/ssi/flexcomm_spi.c                         |  422 +++++++
 hw/ssi/flexspi.c                              |  181 +++
 hw/ssi/ssi.c                                  |    4 +-
 system/qtest.c                                |   95 +-
 tests/qtest/flexcomm-i2c-test.c               |  170 +++
 tests/qtest/flexcomm-spi-test.c               |  145 +++
 tests/qtest/flexcomm-test.c                   |   82 ++
 tests/qtest/flexcomm-usart-test.c             |  316 +++++
 tests/qtest/libqtest.c                        |  102 +-
 tests/qtest/rt500-clkctl-test.c               |  195 +++
 tests/unit/test-fifo.c                        |   50 +
 hw/arm/Kconfig                                |   12 +
 hw/arm/meson.build                            |    4 +
 hw/arm/svd/meson.build                        |   43 +
 hw/char/meson.build                           |    1 +
 hw/char/trace-events                          |    8 +
 hw/i2c/meson.build                            |    1 +
 hw/i2c/trace-events                           |   10 +
 hw/misc/Kconfig                               |   21 +
 hw/misc/meson.build                           |    7 +
 hw/misc/trace-events                          |   18 +
 hw/ssi/Kconfig                                |    4 +
 hw/ssi/meson.build                            |    2 +
 hw/ssi/trace-events                           |    9 +
 meson_options.txt                             |    3 +
 scripts/meson-buildoptions.sh                 |    4 +
 scripts/svd-gen-header.py                     |  415 +++++++
 subprojects/.gitignore                        |    1 +
 subprojects/mcux-soc-svd.wrap                 |    5 +
 .../packagefiles/mcux-soc-svd/meson.build     |    5 +
 tests/qtest/meson.build                       |    3 +
 71 files changed, 8875 insertions(+), 22 deletions(-)
 create mode 100644 include/hw/arm/rt500.h
 create mode 100644 include/hw/arm/svd/flexcomm.h
 create mode 100644 include/hw/arm/svd/flexcomm_i2c.h
 create mode 100644 include/hw/arm/svd/flexcomm_spi.h
 create mode 100644 include/hw/arm/svd/flexcomm_usart.h
 create mode 100644 include/hw/arm/svd/flexspi.h
 create mode 100644 include/hw/arm/svd/rt500.h
 create mode 100644 include/hw/arm/svd/rt500_clkctl0.h
 create mode 100644 include/hw/arm/svd/rt500_clkctl1.h
 create mode 100644 include/hw/arm/svd/rt500_rstctl0.h
 create mode 100644 include/hw/arm/svd/rt500_rstctl1.h
 create mode 100644 include/hw/char/flexcomm_usart.h
 create mode 100644 include/hw/i2c/flexcomm_i2c.h
 create mode 100644 include/hw/misc/flexcomm.h
 create mode 100644 include/hw/misc/flexcomm_function.h
 create mode 100644 include/hw/misc/i2c_tester.h
 create mode 100644 include/hw/misc/rt500_clk_freqs.h
 create mode 100644 include/hw/misc/rt500_clkctl0.h
 create mode 100644 include/hw/misc/rt500_clkctl1.h
 create mode 100644 include/hw/misc/rt500_rstctl.h
 create mode 100644 include/hw/misc/spi_tester.h
 create mode 100644 include/hw/ssi/flexcomm_spi.h
 create mode 100644 include/hw/ssi/flexspi.h
 create mode 100644 tests/qtest/reg-utils.h
 create mode 100644 hw/arm/rt500.c
 create mode 100644 hw/arm/rt595-evk.c
 create mode 100644 hw/char/flexcomm_usart.c
 create mode 100644 hw/i2c/flexcomm_i2c.c
 create mode 100644 hw/misc/flexcomm.c
 create mode 100644 hw/misc/i2c_tester.c
 create mode 100644 hw/misc/rt500_clkctl0.c
 create mode 100644 hw/misc/rt500_clkctl1.c
 create mode 100644 hw/misc/rt500_rstctl.c
 create mode 100644 hw/misc/spi_tester.c
 create mode 100644 hw/ssi/flexcomm_spi.c
 create mode 100644 hw/ssi/flexspi.c
 create mode 100644 tests/qtest/flexcomm-i2c-test.c
 create mode 100644 tests/qtest/flexcomm-spi-test.c
 create mode 100644 tests/qtest/flexcomm-test.c
 create mode 100644 tests/qtest/flexcomm-usart-test.c
 create mode 100644 tests/qtest/rt500-clkctl-test.c
 create mode 100644 hw/arm/svd/meson.build
 create mode 100755 scripts/svd-gen-header.py
 create mode 100644 subprojects/mcux-soc-svd.wrap
 create mode 100644 subprojects/packagefiles/mcux-soc-svd/meson.build

-- 
2.47.0.rc0.187.ge670bccf7e-goog



^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2024-10-09  8:41 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-08  1:18 [PATCH v2 00/25] NXP i.MX RT595 Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 01/25] fifo32: add peek function Octavian Purdila
2024-10-08 11:27   ` Mark Cave-Ayland
2024-10-08 17:25     ` Octavian Purdila
2024-10-09  8:41       ` Mark Cave-Ayland
2024-10-08  1:18 ` [PATCH v2 02/25] tests/unit: add fifo32 tests Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 03/25] scripts: add script to generate C header files from SVD XML files Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 04/25] Add mcux-soc-svd subproject Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 05/25] hw/misc: add support for flexcomm Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 06/25] hw/misc/flexcomm.c: add common fifo functionality Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 07/25] hw/char: add support for flexcomm usart Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 08/25] hw/i2c: add support for flexcomm i2c Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 09/25] hw/ssi: add support for flexcomm spi Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 10/25] hw/misc: add support for RT500's clock controller Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 11/25] hw/ssi: add support for flexspi Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 12/25] hw/misc: add support for RT500's reset controller Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 13/25] hw/arm: add basic support for the RT500 SoC Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 14/25] hw/arm: add RT595-EVK board Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 15/25] tests/qtest: add register access macros and functions Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 16/25] system/qtest: add APIS to check for memory access failures Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 17/25] tests/qtest: add flexcomm tests Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 18/25] tests/qtest: add flexcomm usart tests Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 19/25] hw/misc: add i2c-tester Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 20/25] tests/qtest: add tests for flexcomm i2c Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 21/25] hw/ssi: allow NULL realize callbacks for peripherals Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 22/25] hw/misc: add spi-tester Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 23/25] tests/qtest: add tests for flexcomm spi Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 24/25] systems/qtest: add device clock APIs Octavian Purdila
2024-10-08  1:18 ` [PATCH v2 25/25] tests/qtest: add tests for RT500's clock controller Octavian Purdila

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).