[PATCH 00/26] hw/riscv: Restore Microchip PolarFire SoC Icicle Kit firmware boot

Bin Meng posted 26 patches 13 hours ago
Failed in applying to current master (apply log)
MAINTAINERS                                   |  10 +-
docs/system/riscv/microchip-icicle-kit.rst    | 129 ++++-
hw/sd/sdhci-internal.h                        |   1 +
include/hw/misc/mchp_pfsoc_dmc.h              |   6 +
include/hw/misc/mchp_pfsoc_ioscb.h            |   8 +
include/hw/misc/mchp_pfsoc_l2cc.h             |  31 ++
include/hw/riscv/microchip_pfsoc.h            |   7 +
include/hw/rtc/mchp_pfsoc_rtc.h               |  46 ++
hw/misc/mchp_pfsoc_dmc.c                      | 272 +++++++++-
hw/misc/mchp_pfsoc_ioscb.c                    | 174 ++++++-
hw/misc/mchp_pfsoc_l2cc.c                     | 230 +++++++++
hw/misc/mchp_pfsoc_sysreg.c                   |   9 +-
hw/riscv/microchip_pfsoc.c                    |  92 ++--
hw/rtc/mchp_pfsoc_rtc.c                       | 479 ++++++++++++++++++
hw/sd/cadence_sdhci.c                         |   3 +
hw/sd/sd.c                                    |  43 +-
hw/sd/sdhci.c                                 | 292 ++++++++---
tests/qtest/mchp_pfsoc_l2cc_test.c            | 221 ++++++++
tests/qtest/mchp_pfsoc_rtc_test.c             | 317 ++++++++++++
hw/misc/Kconfig                               |   3 +
hw/misc/meson.build                           |   1 +
hw/riscv/Kconfig                              |   2 +
hw/rtc/Kconfig                                |   3 +
hw/rtc/meson.build                            |   1 +
tests/functional/riscv64/meson.build          |   2 +
.../riscv64/test_microchip_icicle_kit.py      |  52 ++
tests/qtest/meson.build                       |   5 +
27 files changed, 2264 insertions(+), 175 deletions(-)
create mode 100644 include/hw/misc/mchp_pfsoc_l2cc.h
create mode 100644 include/hw/rtc/mchp_pfsoc_rtc.h
create mode 100644 hw/misc/mchp_pfsoc_l2cc.c
create mode 100644 hw/rtc/mchp_pfsoc_rtc.c
create mode 100644 tests/qtest/mchp_pfsoc_l2cc_test.c
create mode 100644 tests/qtest/mchp_pfsoc_rtc_test.c
create mode 100644 tests/functional/riscv64/test_microchip_icicle_kit.py
[PATCH 00/26] hw/riscv: Restore Microchip PolarFire SoC Icicle Kit firmware boot
Posted by Bin Meng 13 hours ago
The microchip-icicle-kit machine was originally validated with an older
Hart Software Services (HSS) firmware stack. HSS v2024.06 cannot boot
through U-Boot to Linux because several firmware-visible parts of the
PolarFire SoC are missing or incomplete.

The first failure occurs before the UART is initialized because the L2
zero window is not mapped. HSS then needs additional L2 cache controller
and DDR training behavior. Later boot stages exercise system services,
the RTC, SDHC version 4 DMA, and high-capacity SD card block sizing,
along with the complete DDR aliases. The existing models ither reject
these accesses or expose behavior that does not match the hardware
specifications.

This series restores the complete firmware boot flow. With these changes,
QEMU boots the HSS v2024.06 eNVM image, loads its U-Boot payload from an
SD card, and reaches the Buildroot 2026.05 Linux login prompt.

The changes are organized around the firmware boot sequence:

* Correct the L2-LIM size, map the L2 zero window, and provide the DMC
  status transitions required by HSS DDR initialization.
* Model the documented L2CC Config, WayEnable, and WayMask registers,
  and resize L2-LIM as cache ways are enabled.
* Complete SDHCI version 4 support used by the Cadence controller,
  including Host Control 2, SDMA system addressing, 64-bit ADMA2
  descriptors, and SDMA boundary continuation.
* Run ADMA from a bounded timer-driven engine instead of performing work
  from command or unrelated MMIO accesses.  This keeps DMA progress
  independent of guest register traffic and avoids consuming a polling
  deadline inside the command write.
* Keep SDHC and SDXC memory transfers at their fixed 512-byte block
  size, and advertise the Cadence controller's 64-bit system bus
  support.
* Add the PolarFire SoC serial-number system service and RTC, and honor
  the system-service notification control bit.
* Correct the DDR aliases and fix the board topology at its physical
  configuration of 2 GiB of RAM and five harts.
* Document direct and HSS boot, add focused qtests and a full firmware
  functional test, and restore the machine's Supported maintainer
  status.

This series assumes that the following generic SDHCI prerequisite series
has already been applied:

- Message ID <20260715160731.29969-2-dingtao0430@163.com>

Testing performed:

* Built qemu-system-riscv64 and the documentation.
* Passed various newly added qtests.
* Booted HSS v2024.06, U-Boot, and Buildroot 2026.05 Linux to the login
  prompt using the functional-test image.

The functional test downloads this versioned image archive:

https://github.com/processmission/qemu-machine-images/releases/download/
v1.0.0/riscv64-microchip-icicle-kit-v1.0.0.tar.zst

When restoring the HSS boot support, 3 potential bugs were identified in
the upstream HSS source codes that either blocks the DDR training from
succeed or traps in a multi-core race at the very beginning or after
a succesfully DDR training but stuck at OpenSBI/U-Boot hand-off. There
are already bug reports filed aginst various upstream projects.


Bin Meng (26):
  hw/riscv: pfsoc: Correct the L2LIM maximum mapped size
  hw/riscv: pfsoc: Map the L2 zero device window
  hw/misc: pfsoc: Support PolarFire SoC DDR training with newer version
    HSS
  hw/misc: pfsoc: Model L2 cache controller registers
  hw/riscv: pfsoc: Couple L2CC to L2-LIM
  tests/qtest: Add PolarFire SoC L2CC coverage
  hw/sd: sdhci: Migrate the Host Control 2 register
  hw/sd: sdhci: Accept version 4 enable without UHS-I
  hw/sd: sdhci: Use version 4 system address for SDMA
  hw/sd: sdhci: Support version 4 ADMA 64-bit addressing
  hw/sd: sdhci: Resume version 4 SDMA at buffer boundaries
  hw/sd: sdhci: Run ADMA independently of MMIO
  hw/sd: sd: Keep high-capacity memory blocks at 512 bytes
  hw/sd: cadence: Advertise 64-bit system bus support
  hw/misc: pfsoc: Model PolarFire SoC serial number service
  hw/rtc: Add PolarFire SoC RTC model
  hw/riscv: pfsoc: Add PolarFire SoC RTC to Icicle Kit
  tests/qtest: Add PolarFire SoC RTC coverage
  hw/misc: pfsoc: Honor PolarFire service notification requests
  hw/riscv: pfsoc: Correct PolarFire SoC DDR aliases
  hw/riscv: pfsoc: Fix Icicle Kit RAM size at 2 GiB
  hw/riscv: pfsoc: Fix Icicle Kit hart count at five
  docs/system/riscv: Document Icicle Kit HSS boot
  docs/system/riscv: pfsoc: Document CLINT topology for direct Linux
    boot
  tests/functional/riscv64: Add Icicle Kit firmware boot test
  MAINTAINERS: Add PolarFire SoC Icicle Kit maintainer

 MAINTAINERS                                   |  10 +-
 docs/system/riscv/microchip-icicle-kit.rst    | 129 ++++-
 hw/sd/sdhci-internal.h                        |   1 +
 include/hw/misc/mchp_pfsoc_dmc.h              |   6 +
 include/hw/misc/mchp_pfsoc_ioscb.h            |   8 +
 include/hw/misc/mchp_pfsoc_l2cc.h             |  31 ++
 include/hw/riscv/microchip_pfsoc.h            |   7 +
 include/hw/rtc/mchp_pfsoc_rtc.h               |  46 ++
 hw/misc/mchp_pfsoc_dmc.c                      | 272 +++++++++-
 hw/misc/mchp_pfsoc_ioscb.c                    | 174 ++++++-
 hw/misc/mchp_pfsoc_l2cc.c                     | 230 +++++++++
 hw/misc/mchp_pfsoc_sysreg.c                   |   9 +-
 hw/riscv/microchip_pfsoc.c                    |  92 ++--
 hw/rtc/mchp_pfsoc_rtc.c                       | 479 ++++++++++++++++++
 hw/sd/cadence_sdhci.c                         |   3 +
 hw/sd/sd.c                                    |  43 +-
 hw/sd/sdhci.c                                 | 292 ++++++++---
 tests/qtest/mchp_pfsoc_l2cc_test.c            | 221 ++++++++
 tests/qtest/mchp_pfsoc_rtc_test.c             | 317 ++++++++++++
 hw/misc/Kconfig                               |   3 +
 hw/misc/meson.build                           |   1 +
 hw/riscv/Kconfig                              |   2 +
 hw/rtc/Kconfig                                |   3 +
 hw/rtc/meson.build                            |   1 +
 tests/functional/riscv64/meson.build          |   2 +
 .../riscv64/test_microchip_icicle_kit.py      |  52 ++
 tests/qtest/meson.build                       |   5 +
 27 files changed, 2264 insertions(+), 175 deletions(-)
 create mode 100644 include/hw/misc/mchp_pfsoc_l2cc.h
 create mode 100644 include/hw/rtc/mchp_pfsoc_rtc.h
 create mode 100644 hw/misc/mchp_pfsoc_l2cc.c
 create mode 100644 hw/rtc/mchp_pfsoc_rtc.c
 create mode 100644 tests/qtest/mchp_pfsoc_l2cc_test.c
 create mode 100644 tests/qtest/mchp_pfsoc_rtc_test.c
 create mode 100644 tests/functional/riscv64/test_microchip_icicle_kit.py

-- 
2.34.1