Skip to content

Stephen-yang/meta-omm-s3ip

Repository files navigation

OMM S3IP — OpenBMC Board Layer for S3IP Specification

OpenBMC AST2600 Flash S3IP

Overview

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

Architecture

┌─────────────────────────────────────────────────────────┐
│                    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)               │
└─────────────────────────────────────────────────────────┘

Directory Structure

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

Quick Start

1. Prerequisites

  • Linux host (Ubuntu 22.04+ recommended) or Docker
  • At least 50GB free disk space
  • OpenBMC 2.18.0 source tree

2. Setup Build Environment

# 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.conf

3. Build

bitbake obmc-phosphor-image

4. Flash Image

The 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.

Flash Layout — Winbond W25Q256 (32MB)

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

S3IP Redfish OEM Endpoints

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

I2C Topology

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)

PID Fan Control

  • 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

Web Demo

Open webui-demo/index.html in a browser to see a real-time simulation dashboard with mock Redfish data. No server required.

Documentation

Document Description
README.md This file
DEPLOY.md Build environment setup & deployment guide
HARDWARE_FLASH.md SPI flash programming instructions

License

This project is licensed under the Apache License 2.0 — see the LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/my-feature)
  3. Commit your changes (git commit -m 'Add new feature')
  4. Push to the branch (git push origin feature/my-feature)
  5. Open a Pull Request

About

OpenBMC S3IP Board Layer — AST2600 + Winbond W25Q256 (32MB) — S3IP Compliant BMC Firmware

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors