# Nuvoton iBMC boards (`*-bmc`, `npcm750-evb`, `quanta-gsj`)

The Nuvoton iBMC chips (NPCM7xx) are a family of ARM-based SoCs that are designed to be used as Baseboard Management Controllers (BMCs) in various servers. They all feature one or two ARM Cortex-A9 CPU cores, as well as an assortment of peripherals targeted for either Enterprise or Data Center / Hyperscale applications. The former is a superset of the latter, so NPCM750 has all the peripherals of NPCM730 and more.

The NPCM750 SoC has two Cortex-A9 cores and is targeted for the Enterprise segment. The following machines are based on this chip :

- `npcm750-evb` Nuvoton NPCM750 Evaluation board

The NPCM730 SoC has two Cortex-A9 cores and is targeted for Data Center and Hyperscale applications. The following machines are based on this chip :

- `quanta-gbs-bmc` Quanta GBS server BMC

- `quanta-gsj` Quanta GSJ server BMC

- `kudo-bmc` Fii USA Kudo server BMC

- `mori-bmc` Fii USA Mori server BMC

There are also two more SoCs, NPCM710 and NPCM705, which are single-core variants of NPCM750 and NPCM730, respectively. These are currently not supported by QEMU.

## Supported devices

> - SMP (Dual Core Cortex-A9)

> - Cortex-A9MPCore built-in peripherals: SCU, GIC, Global Timer, Private Timer and Watchdog.

> - SRAM, ROM and DRAM mappings

> - System Global Control Registers (GCR)

> - Clock and reset controller (CLK)

> - Timer controller (TIM)

> - Serial ports (16550-based)

> - DDR4 memory controller (dummy interface indicating memory training is done)

> - OTP controllers (no protection features)

> - Flash Interface Unit (FIU; no protection features)

> - Random Number Generator (RNG)

> - USB host (USBH)

> - GPIO controller

> - Analog to Digital Converter (ADC)

> - Pulse Width Modulation (PWM)

> - SMBus controller (SMBF)

> - Ethernet controller (EMC)

> - Tachometer

> - Peripheral SPI controller (PSPI)

## Missing devices

> - LPC/eSPI host-to-BMC interface, including

>   - Keyboard and mouse controller interface (KBCI)

>   - Keyboard Controller Style (KCS) channels

>   - BIOS POST code FIFO

>   - System Wake-up Control (SWC)

>   - Shared memory (SHM)

>   - eSPI slave interface

> - Ethernet controller (GMAC)

> - USB device (USBD)

> - SD/MMC host

> - PECI interface

> - PCI and PCIe root complex and bridges

> - VDM and MCTP support

> - Serial I/O expansion

> - LPC/eSPI host

> - Coprocessor

> - Graphics

> - Video capture

> - Encoding compression engine

> - Security features

## Boot options

The Nuvoton machines can boot from an OpenBMC firmware image, or directly into a kernel using the `-kernel` option. OpenBMC images for `quanta-gsj` and possibly others can be downloaded from the OpenBMC jenkins :

> https://jenkins.openbmc.org/

The firmware image should be attached as an MTD drive. Example :

    $ qemu-system-arm -machine quanta-gsj -nographic \
        -drive file=image-bmc,if=mtd,bus=0,unit=0,format=raw

The default root password for test images is usually `0penBmc`.