This patchset implements a model of the AN521 FPGA image for the
MPS2 dev board. The AN521 is similar to our existing AN505 model,
except that it is based on the SSE-200 Subsystem for Embedded
rather than the older IoTKit. The SSE-200 is essentially an
updated version of the IoTKit with a few extra devices and
two Cortex-M33 CPUs. Most of the patchset is enhancing our
IoTKit emulation to add the SSE-200 functionality.
The SSE-200 is the part that I'm most interested in, because
the eventual aim is a model of the Musca-B1 devboard, which
also uses the SSE-200:
https://developer.arm.com/products/system-design/development-boards/iot-test-chips-and-boards/musca-b-test-chip-board
The MPS2-AN521 is a convenient stepping stone that allows us to
test the SSE-200 parts.

Patchset structure:
 * patches 1-3 fix some armv7m limitations so we can create
   multiple Cortex-M33s in one board with one starting powered off
 * patches 4-7 rename the IoTKit code/files to ARMSSE and refactor
   it to have an abstract base class that will be subclassed by
   the IoTKit and SSE-200 devices
 * patches 8-20 add the various extra/different SSE-200 features
   (or unimplemented-device stubs for them) governed by feature
   switches
 * patch 21 adds the SSE-200 model which sets those feature switches
 * patches 22 and 23 make the minor mps2-tz changes needed to add
   the AN521 image

Currently unimplemented features:
 * the iotkit-sysctl device has some extra registers on SSE-200:
   FCLK_DIV, SYSCLK_DI, CLOCK_FORCE, INITSVRTOR1, NMI_ENABLE, EWCTRL,
   PDCM_PD_SYS_SENSE, PDCM_PD_SRAM[0123]_SENSE (these will fall into
   the existing bad-offset logging so we can identify if a guest
   is trying to use them)
 * the icache control, CPU local security control register bank,
   the Message Handling Units (MHUs) and Power Policy Units (PPUs)
   are all stubbed out
 * the crypto unit and its non-volatile memory are optional, and
   we do not implement it
 * no CPU power control is implemented -- notably this means that there
   is no way for the guest to ever power up CPU 1, so it will sit
   permanently dormant. Guest images that only use CPU 0 will work fine.

Before we fix the last of those we (ideally) need the "heterogenous
CPU support" patchset to land.

This image can run the Arm Trusted Firmware M built for AN521.

AN521 docs:
http://infocenter.arm.com/help/topic/com.arm.doc.dai0521c/index.html

SSE-200 TRM:
http://infocenter.arm.com/help/topic/com.arm.doc.101104_0100_00_en/corelink_sse200_subsystem_for_embedded_technical_reference_manual_101104_0100_00_en.pdf

thanks
-- PMM

Peter Maydell (23):
  armv7m: Don't assume the NVIC's CPU is CPU 0
  armv7m: Make cpu object a child of the armv7m container
  armv7m: Pass through start-powered-off CPU property
  hw/arm/iotkit: Rename IoTKit to ARMSSE
  hw/arm/iotkit: Refactor into abstract base class and subclass
  hw/arm/iotkit: Rename 'iotkit' local variables and functions
  hw/arm/iotkit: Rename files to hw/arm/armsse.[ch]
  hw/misc/iotkit-secctl: Support 4 internal MPCs
  hw/arm/armsse: Make number of SRAM banks parameterised
  hw/arm/armsse: Make SRAM bank size configurable
  hw/arm/armsse: Support dual-CPU configuration
  hw/arm/armsse: Give each CPU its own view of memory
  hw/arm/armsse: Put each CPU in its own cluster object
  iotkit-sysinfo: Make SYS_VERSION and SYS_CONFIG configurable
  hw/arm/armsse: Add unimplemented-device stubs for MHUs
  hw/arm/armsse: Add unimplemented-device stubs for PPUs
  hw/arm/armsse: Add unimplemented-device stub for cache control
    registers
  hw/arm/armsse: Add unimplemented-device stub for CPU local control
    registers
  hw/misc/armsse-cpuid: Implement SSE-200 CPU_IDENTITY register block
  hw/arm/armsse: Add CPU_IDENTITY block to SSE-200
  hw/arm/armsse: Add SSE-200 model
  hw/arm/mps2-tz: Add IRQ infrastructure to support SSE-200
  hw/arm/mps2-tz: Add mps2-an521 model

 hw/arm/Makefile.objs                  |    2 +-
 hw/misc/Makefile.objs                 |    1 +
 include/hw/arm/{iotkit.h => armsse.h} |  113 ++-
 include/hw/arm/armv7m.h               |    1 +
 include/hw/misc/armsse-cpuid.h        |   41 +
 include/hw/misc/iotkit-secctl.h       |    6 +-
 include/hw/misc/iotkit-sysinfo.h      |    6 +
 hw/arm/armsse.c                       | 1241 +++++++++++++++++++++++++
 hw/arm/armv7m.c                       |   23 +-
 hw/arm/iotkit.c                       |  759 ---------------
 hw/arm/mps2-tz.c                      |  121 ++-
 hw/intc/armv7m_nvic.c                 |    3 +-
 hw/misc/armsse-cpuid.c                |  134 +++
 hw/misc/iotkit-secctl.c               |    5 +-
 hw/misc/iotkit-sysinfo.c              |   15 +-
 MAINTAINERS                           |    6 +-
 default-configs/arm-softmmu.mak       |    3 +-
 hw/misc/trace-events                  |    4 +
 18 files changed, 1670 insertions(+), 814 deletions(-)
 rename include/hw/arm/{iotkit.h => armsse.h} (53%)
 create mode 100644 include/hw/misc/armsse-cpuid.h
 create mode 100644 hw/arm/armsse.c
 delete mode 100644 hw/arm/iotkit.c
 create mode 100644 hw/misc/armsse-cpuid.c

-- 
2.20.1


Reply via email to