meta-omm-s3ip is a Yocto board layer for OpenBMC 2.18.0 that implements the S3IP (Simplified Software for Switch and Server Infrastructure Platform) specification on the ASPEED AST2600 BMC SoC.
This layer provides a complete, production-ready BMC firmware stack including:
- 🌡️ Temperature & Voltage Monitoring — via Entity-Manager + dbus-sensors
- 🌀 PID Fan Thermal Control — closed-loop PWM regulation with failsafe
- ⚡ Dual PSU Management — PMBus monitoring with redundancy
- 🔌 S3IP Redfish OEM Extensions — custom API endpoints for CPLD, fan zones, PSU
- 🖥️ Web Dashboard Demo — real-time simulation UI for testing
┌─────────────────────────────────────────────────────────┐
│ Redfish / bmcweb │
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
│ │ Standard Redfish │ │ S3IP OEM Extensions │ │
│ │ /Chassis │ │ /Chassis/{id}/Oem/OmmS3ip │ │
│ │ /Sensors │ │ └── FanZones │ │
│ │ /Power │ │ └── PowerSupplies │ │
│ └────────┬─────────┘ └──────────────┬──────────────┘ │
│ │ │ │
│ ┌────────▼───────────────────────────▼──────────────┐ │
│ │ D-Bus │ │
│ └──┬─────────┬────────────┬──────────┬──────────────┘ │
│ │ │ │ │ │
│ ┌──▼──┐ ┌──▼──────┐ ┌──▼────┐ ┌──▼──────────────┐ │
│ │dbus-│ │entity- │ │phos- │ │x86-power- │ │
│ │sens.│ │manager │ │pid-ctl│ │control │ │
│ └──┬──┘ └──┬──────┘ └──┬────┘ └─────────────────┘ │
│ │ │ │ │
│ ┌──▼────────▼────────────▼──────────────────────────┐ │
│ │ Linux Kernel (6.6-aspeed) │ │
│ │ I2C Mux ─ TMP75 ─ PMBus ─ PWM/TACH ─ ADC ─ PECI│ │
│ └──────────────────────────────────────────────────┘ │
│ AST2600 SoC │
│ Winbond W25Q256 (32MB Flash) │
└─────────────────────────────────────────────────────────┘
meta-omm-s3ip/
├── conf/
│ ├── layer.conf # Yocto layer config
│ └── machine/
│ └── omm-s3ip.conf # Machine: AST2600 + W25Q256
├── recipes-kernel/linux/
│ ├── linux-aspeed_%.bbappend # Kernel integration
│ └── linux-aspeed/
│ ├── aspeed-bmc-omm-s3ip.dts # Device Tree (I2C/SPI/GPIO)
│ └── omm-s3ip.cfg # Kernel config fragment
├── recipes-phosphor/
│ ├── configuration/
│ │ ├── entity-manager_%.bbappend
│ │ └── entity-manager/
│ │ └── omm-s3ip-baseboard.json # Hardware topology
│ ├── fans/
│ │ ├── phosphor-pid-control_%.bbappend
│ │ └── phosphor-pid-control/
│ │ ├── config.json.in # PID thermal zones
│ │ ├── fan-table-init.sh # Runtime hwmon resolver
│ │ └── phosphor-pid-control.service
│ ├── images/
│ │ └── omm-s3ip-image.bb # Flash image recipe
│ ├── interfaces/
│ │ ├── bmcweb_%.bbappend
│ │ └── bmcweb/
│ │ ├── 0001-bmcweb-Register-OMM-S3IP-OEM-routes.patch
│ │ └── oem/s3ip/
│ │ └── omm_s3ip_chassis.hpp # Redfish OEM handlers
│ ├── packagegroups/
│ │ └── packagegroup-omm-s3ip-apps.bb
│ └── sensors/
│ └── dbus-sensors_%.bbappend
├── tools/
│ ├── generate_flash.sh # Flash image generator (shell)
│ ├── generate_flash_image.py # Flash image generator (python)
│ └── flash-omm-s3ip-32mb.bin # Pre-built 32MB flash image
└── webui-demo/
├── index.html # Dashboard simulation
├── style.css
└── app.js
- Linux host (Ubuntu 22.04+ recommended) or Docker
- At least 50GB free disk space
- OpenBMC 2.18.0 source tree
# Clone OpenBMC
git clone -b v2.18.0 https://github.com/openbmc/openbmc.git
cd openbmc
# Clone this layer into the source tree
git clone https://github.com/<YOUR_USERNAME>/meta-omm-s3ip.git
# Source the build environment
source oe-init-build-env
# Add layer to bblayers.conf
bitbake-layers add-layer ../meta-omm-s3ip
# Set machine in local.conf
echo 'MACHINE = "omm-s3ip"' >> conf/local.confbitbake obmc-phosphor-imageThe output image will be at:
tmp/deploy/images/omm-s3ip/obmc-phosphor-image-omm-s3ip.static.mtd
See HARDWARE_FLASH.md for detailed flashing instructions.
| Partition | Offset | Size | Content |
|---|---|---|---|
| u-boot | 0x000000 | 512 KB | SPL + U-Boot |
| u-boot-env | 0x080000 | 128 KB | Environment vars |
| kernel | 0x0A0000 | 4.4 MB | FIT Image (Linux) |
| rofs | 0x500000 | 23 MB | SquashFS RootFS |
| rwfs | 0x1C00000 | 4 MB | JFFS2 RW Overlay |
| Method | Endpoint | Description |
|---|---|---|
| GET | /redfish/v1/Chassis/{id}/Oem/OmmS3ip |
CPLD version, HW revision, diagnostics |
| GET | /redfish/v1/Chassis/{id}/Oem/OmmS3ip/FanZones |
PID thermal zone collection |
| GET | /redfish/v1/Chassis/{id}/Oem/OmmS3ip/PowerSupplies |
PMBus PSU collection |
| Bus | Function | Devices |
|---|---|---|
| I2C-0 | BMC Local | EEPROM (FRU), RTC |
| I2C-1 | Baseboard | FRU EEPROM, CPLD |
| I2C-2 | Sensors (PCA9548 Mux) | TMP75 x3, TMP421, JEDEC DIMM Temp, NVMe, OCP NIC |
| I2C-3 | PSU (PCA9546 Mux) | PSU0/PSU1 PMBus + FRU |
| I2C-4 | Fan Board | FRU EEPROM, PCA9555 GPIO |
| I2C-5 | HSC | ADM1278 Hot-swap Controller |
| I2C-6 | Host CPU | Reserved (ME/PECI) |
| I2C-7 | Expansion | Reserved (GPU Riser) |
- Zone: 1 thermal zone (CPU_Zone)
- Inputs: Inlet (35°C SP), Outlet (55°C SP), CPU VR (80°C SP), DIMM (75°C SP)
- Outputs: 4 fans (PWM 30% min — 100% max)
- Failsafe: 100% duty cycle on sensor failure
Open webui-demo/index.html in a browser to see a real-time simulation dashboard with mock Redfish data. No server required.
| Document | Description |
|---|---|
| README.md | This file |
| DEPLOY.md | Build environment setup & deployment guide |
| HARDWARE_FLASH.md | SPI flash programming instructions |
This project is licensed under the Apache License 2.0 — see the LICENSE file for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add new feature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request