AMD's Open Silicon Initialization Library (openSIL) is a new initiative, currently underway, that has the following goals:

  1. replace the remaining closed-source components of the BIOS firmware stack with open-source alternatives
  2. serve as a hardware abstraction layer for any boot loader, not just UEFI

Move Closed-Source to Open-Source

Traditionally, AMD has supported silicon initialization with their AGESA product: AMD Generic Encapsulated Software Architecture (AGESA).  Like similar solutions from other silicon providers, AGESA is closed-source and only made available to partners under NDA/SLA provisions.

AGESA will be retired and replaced with openSIL, which will be hosted as open-source on GitHub under an MIT license.  AMD is considering various community governance options; how that will work has not been finalized at this time.  To date, AMD has been working with the following partners to create an openSIL proof-of-concept:


Abstraction Layer for Multiple Boot Loaders

For the last ~15 years, UEFI has been the most popular boot loader in the PC and Server industries, supporting both Windows, Linux, and macOS.  As a consequence, most silicon initialization code, like AGESA, or Intel's FSP, has been written assuming UEFI will be the next step in the boot path.  While it is not the intention of openSIL to do anything to "kill off" or "replace" UEFI, it is a goal of openSIL to seamlessly enable alternative boot loaders such as Coreboot, Oreboot, and LinuxBoot.  In fact, any boot loader desiring to meet the openSIL specification should work, and be available to accept hand-off from the openSIL code.  See the following graphical illustrations of this change:

before openSIL, UEFI assumed

after openSIL, any boot loader

Moreover, by abstracting the hardware from the boot loader, it becomes possible to reuse the same boot loader binaries (for example, UEFI drivers) over a range of silicon platforms, including both x86 and ARM.  All that is necessary is that each silicon provider delivers their own openSIL libraries, and then an OEM's UEFI feature driver code could be reused across all silicon providers.  Nice!

Technical Details

openSIL is written in standard C (C17 to be exact).  It is comprised of the following three libraries which can be statically linked to any host firmware:

xSIM - Silicon Initialization Module Library

xSIM provides a set of API services that initialize the platform host silicon. Most of the silicon initialization on AMD-based platforms is performed by embedded microcontrollers prior to x86 RESET# de-assertion.  As a result, system memory is already available by the time the x86 RESET# is de-asserted.  Thus, the services exposed to the host firmware by xSIM library are minimal.  This library is independent of the platform netlist and does not perform any silicon initialization tied to platform design (for example, host CPU GPIO programing). Platform designers should not have to make source code modifications to this library.

xPRF - Platform Reference Firmware Library

xPRF is where platform-specific design decisions are handled.  OEM customers will need to modify the xPRF library to address platform design deviations from the silicon vendor’s CRB reference design. While the xSIM should remain untouched by customers, it is expected that customers will customize xPRF to describe design-specific features like GPIOs and SMM handlers. 

xUSL - Utility & Service Library

xUSL offers a set of helper functions to aid the xSIM and the xPRF libraries. This library is not exposed to the host firmware but is rather exclusively used by the xSIM and xPRF libraries.

Timeline

Before you get too excited, understand that openSIL is on a long timeline.  Such a large architectural change cannot be accomplished in a year or two, so AMD is taking a phased approach that looks like:

  • 2022-2023:  AMD did a proof-of-concept on their Genoa product.  They rewrote a subset of AGESA into openSIL, but this was never meant for production.  Rather, the intent was to determine the feasibility of switching from AGESA to openSIL, and to make a commitment to the open-source community that the transition from AGESA to an open-source solution was real and actively being pursued.
  • 2023-2024:  AMD extended the openSIL proof-of-concept to their Turin and Phoenix products, this time achieving parity with AGESA.  Again, this was never meant for production, but helped AMD with internal technical analysis of how to get AGESA transitioned to openSIL.
  • 2025-2026:  AMD's plan of record is to ship production-level openSIL for their 6th generation EPYC and Ryzen products, (codenames: Venice/Medusa) then release the code as open-source.  This includes the complete feature set, fully validated, and with QA support.

Building openSIL

There are some build instructions on the openSIL GitHub site, though they leave much to the imagination.  Here's how I got a successful build:

  1. I have Python 3.12.6 installed on my Windows machine
  2. pip install meson --> the Meson build system is used for building openSIL
  3. ensure you have NASM in your %path%
  4. git clone git@github.com:openSIL/openSIL.git --> get the source
  5. util\SetSilEnv.cmd W64 --> run this from the openSIL directory root to setup the environment
  6. meson compile -C build_w64  --> kick off the build

Now by a "successful build", I mean the compiler finished without errors, and there were binary files inside the build folder, build_w64.  It's a low bar for success, but at this early stage in the development of openSIL, I think it counts.

Resources

I hope you found this overview useful.  We'll stay tuned to openSIL to see how it develops!  Following are the primary resources I used to write this article.

AMD's blog post on openSIL.

The openSIL GitHub repository:  https://github.com/openSIL/openSIL

Open Compute Project's Regional Summit, Prague, April 2023

Open Compute Project's Global Summit, San Jose, October 2023

Open Source Firmware Conference, September, 2024

https://www.osfc.io/2024/talks/amds-long-term-strategy-for-open-source-firmware-from-concept-to-implementation/


Post a Comment

Be sure to select an account profile (e.g. Google, OpenID, etc.) before typing your comment!