Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Middle East conflict casts shadow of global ad outlook

    Customer reviews become a key battleground as AI revolutionizes product discovery

    In graphic detail: Middle-tier creators are fueling the next phase of the creator economy

    Facebook X (Twitter) Instagram
    • Artificial Intelligence
    • Business Technology
    • Cryptocurrency
    • Gadgets
    • Gaming
    • Health
    • Software and Apps
    • Technology
    Facebook X (Twitter) Instagram Pinterest Vimeo
    Tech AI Verse
    • Home
    • Artificial Intelligence

      What the polls say about how Americans are using AI

      February 27, 2026

      Tensions between the Pentagon and AI giant Anthropic reach a boiling point

      February 21, 2026

      Read the extended transcript: President Donald Trump interviewed by ‘NBC Nightly News’ anchor Tom Llamas

      February 6, 2026

      Stocks and bitcoin sink as investors dump software company shares

      February 4, 2026

      AI, crypto and Trump super PACs stash millions to spend on the midterms

      February 2, 2026
    • Business

      The team behind continuous batching says your idle GPUs should be running inference, not sitting dark

      March 13, 2026

      Met Office ‘supercomputing as a service’ one year old

      March 12, 2026

      Tech hiring evolves as candidates ask for AI compute alongside pay and perks

      March 11, 2026

      Oracle is spending billions on AI data centers as cash flow turns negative

      March 11, 2026

      Google: Cloud attacks exploit flaws more than weak credentials

      March 10, 2026
    • Crypto

      Banks Respond to Kraken’s Federal Reserve Access as Trump Sides with Crypto

      March 4, 2026

      Hyperliquid and DEXs Break the Top 10 — Is the CEX Era Ending?

      March 4, 2026

      Consensus Hong Kong 2026: The Institutional Turn 

      March 4, 2026

      New Crypto Mutuum Finance (MUTM) Reports V1 Protocol Progress as Roadmap Enters Phase 3

      March 4, 2026

      Bitcoin Short Sellers Caught Off Guard in New White House Move

      March 4, 2026
    • Technology

      Middle East conflict casts shadow of global ad outlook

      March 13, 2026

      Customer reviews become a key battleground as AI revolutionizes product discovery

      March 13, 2026

      In graphic detail: Middle-tier creators are fueling the next phase of the creator economy

      March 13, 2026

      The Future of Marketing Briefing: a war, an oil spike and an ad market that can’t see what comes next

      March 13, 2026

      As AI creative moves upstream, one production firm is pitching brands a model built on that trend

      March 13, 2026
    • Others
      • Gadgets
      • Gaming
      • Health
      • Software and Apps
    Check BMI
    Tech AI Verse
    You are at:Home»Technology»Porting Gigabyte MZ33-AR1 Server Board with AMD Turin CPU to Coreboot
    Technology

    Porting Gigabyte MZ33-AR1 Server Board with AMD Turin CPU to Coreboot

    TechAiVerseBy TechAiVerseAugust 16, 2025No Comments22 Mins Read0 Views
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr Email Reddit
    Porting Gigabyte MZ33-AR1 Server Board with AMD Turin CPU to Coreboot
    Share
    Facebook Twitter LinkedIn Pinterest WhatsApp Email

    Porting Gigabyte MZ33-AR1 Server Board with AMD Turin CPU to Coreboot

    Introduction

    This blog post describes the progress of the first phase of enabling AMD Turin
    support in coreboot and porting Gigabyte MZ33-AR1 board. The project is funded
    by NLnet Foundation.

    The project was inspired by AMD’s efforts to bring open-source firmware for
    their most recent CPUs. Couple months ago AMD published their CPU
    initialization code for AMD Turin server processor family on
    GitHub. The OpenSIL is a
    new initiative to unify the silicon initialization for AMD platform across
    multiple firmware frameworks, like EDK2 and coreboot. Following the successful
    integration of Genoa (Turin’s predecessor) Proof of Concept in coreboot, we
    are striving for a brand new Turin processor family.

    The first phase of the project consisted of couple milestones:

    • Milestone a. Turin PSP firmware package

      Extract APCB from the reference MZ33-AR1 image and add them to mainboard
      code in coreboot. Integrate support for stitching public Turin PSP blobs in
      coreboot.

    • Milestone b. Turin SoC skeleton in coreboot

      Create soc/amd/turin_poc in coreboot, port minimal OpenSIL integration and
      make sure the tree compiles.

    • Milestone c. MZ33-AR1 mainboard skeleton

      Add mainboard/gigabyte/mz33-ar1, wire it to the new SoC, enable serial
      console, and confirm the bootblock executes on hardware.

    Let’s run through each of them and explain what was done to fulfill the goals.

    Turin SoC skeleton in coreboot

    SoC structure is the base of the “world” for building coreboot images for
    board. It binds the mainboard code with silicon specific drivers and glues all
    other pieces together. It is usually necessary to have a separate soc
    directory with relevant source for each new microarchitecture/processor
    family, as the differences between them may be too significant for reuse.

    In our case we created the turin_poc SoC based on genoa_poc SoC, as it is
    the closest SoC to Turin (architecture-wise) and it already integrates OpenSIL
    drivers. So the easiest way is to simply copy the directory and rename genoa
    to turin everywhere.

    The relevant patch can be found here.

    Before it compiles though, we will need a couple more modifications in other
    places and a board target to build it. So let’s move forward to the next
    relevant patch, which is modification of the SoC structure to reflect the
    architectural changes introduce in Turin.

    It is not trivial to describe what should be changed and how. One must simply
    run through all the source file added in previous patch, all drivers selected
    by src/soc/amd/turin_poc/Kconfig file and compare it against Processor
    Programming Reference from AMD. But let’s run through the modification in the
    patch and briefly explain it.

    1. Turin CPU has less USB ports than Genoa, so the chip structure has to
      reflect that. The number of ports has been reduced to match the hardware
      capabilities.
    2. src/soc/amd/turin_poc/early_fch.c has been updated to match what other
      AMD SoCs do, e.g. Mendocino or Phoenix. it is very basic chipset
      initialization required for basic operation of coreboot in the very early
      stage. It set’s up mostly legacy ISA devices, eSPI, I/O decoding, UARTs,
      SMBus and SPI.
    3. Small differences in registers bits for AOAC (Always on Always Connected)
      which are used to enable internal CPU devices not visible on PCI bus.
    4. Adjusted MMIO and I/O base addresses for CPU internal devices and ACPI.
      Proper MMIO is required to initialize the hardware properly.
    5. src/soc/amd/turin_poc/root_complex.c is the file I had most struggles
      with. It describes how PCI domains are laid out on the SoC. I had a long
      chat with Felix Held (fellow coreboot developer), who worked on Genoa POC,
      and helped me understand how the domain map to fabric IDs and the SMN
      (System Management Network) base addresses. As a result of this fruitful
      discussion a patch has
      been created. Thank you again Felix!
    6. src/soc/amd/turin_poc/chipset.cb is the second file which gave me some
      trouble. The AMD’s Processor Programming Reference (PPR) for Turin is not
      so clear about the layout of the PCI devices. It has an enigmatic table
      describing which device is present on which domain, however these domains
      are divided into A,B,C,D without clear explanation which domain map to
      which IOHC (I/O Hub Controller). After a very long deep dives into PPR and
      lspci logs from the actual Gigabyte MZ33-AR1 board, I figured out which
      devices should correspond to which domain.
    7. src/soc/amd/turin_poc/Makefile.mk is updated to include non-volatile APOB
      (AGESA PSP Output Block) and microcode files in the PSP firmware structure.
      On most recent system microcode is loaded onto the CPU by PSP, so it has to
      be provided in the PSP-understandable way. APOBs are just pointers to the
      flash where the memory training results are stored. It can be used for
      fastboot purposes, like MRC cache on Intel platforms.

    Once the SOC tree was ready, it was time to integrate the actual OpenSIL.
    Again it was based on the genoa_poc OpenSIL driver for easier integration.
    Here is the relevant
    patch. Unfortunately, the
    OpenSIL did not build out of the box, so it was necessary to add a fork
    temporarily, until the build
    fixes
    are merged.

    That concludes the effort for creating soc structure for Turin processors.

    Turin PSP firmware package

    PSP (Platform Security Processor), nowadays known as ASP (AMD Security
    Processor) is a privileged coprocessor embedded into AMD CPUs, similar to
    Intel’s ME in Intel chipsets. It is responsible for early silicon and memory
    initialization before the BIOS/firmware runs.

    Preparing PSP blobs for AMD platform can be divided into 2 steps:

    • mainboard-agnostic blobs, specific for the CPU silicon
    • mainboard-specific blobs.

    These blobs are consumed by PSP (and other IP blocks) before the main CPU
    starts. We will be providing a more detailed analysis of these blobs in
    subsequent project phases.

    The first group consists of blobs that are delivered by AMD to initialize the
    PSP and CPU before the BIOS/firmware kicks in and all boards should include
    them. These blobs have been published by AMD too on
    GitHub.
    So the task is pretty simple, add the repository as a submodule in coreboot,
    and hook these blobs into the build system. Here is the
    patch that accomplishes
    this.

    The CPU-specific blobs are included in the build by defining a fw.cfg file
    and pointing to it with AMDFW_CONFIG_FILE Kconfig option. The fw.cfg file
    is pretty simple, it points to the directory where blobs are located and
    defines name of the SoC:

    1
    2
    
    FIRMWARE_LOCATION          3rdparty/amd_firmwares/Firmwares/Turin
    SOC_NAME                   Turin
    

    and then lists the file names (second column) to be included under specific
    blob type (first column):

    1
    2
    
    AMD_PUBKEY_FILE            TypeId0x00_AmdPubKey_BRH.tkn
    ...
    

    It is worth noting that Genoa had less blobs than Turin. Some blobs are new
    and not yet known to coreboot’s utility, amdfwtool, that glues them
    together. To get all those blobs stitched together, a modification amdfwtool
    was necessary. The relevant changes can be found in this
    patch. The patch is still
    in work in progress state, because despite including all blobs, the board does
    not boot with the image created by coreboot build system. There might be some
    new requirements for stitching the PSP blobs for Turin, that was not present
    earlier in Genoa. Solving this problem has been planned for the next project
    phases.

    Next are the board-specific blobs. There aren’t many of them, just one type:
    APCB (AGESA PSP Configuration Block). APCB blobs are configuration data blobs
    for PSP AGESA to configure memory for the board. They are board-specific and
    must be prepared for each board separately. They are needed to build a working
    coreboot image. The easiest way to obtain them is to extract them from vendor
    image. To do so we will need PSPTool,
    an utility to parse and dump PSP structures in AMD firmware images.

    To quickly build the utility simply do:

    1
    2
    3
    4
    5
    6
    
    git clone https://github.com/PSPReverse/PSPTool
    cd PSPTool
    git checkout zen5
    python3 -m virtualenv venv
    source venv/bin/activate
    pip install -e .
    

    We checking out zen5 branch, because Turin CPU is Zen5 architecture.

    To know which blobs we have to extract or take we need to list the entries
    present in the images first:

    The is a firmware dump taken from the board itself or the image
    taken from vendor BIOS update. Below process uses vendors firmware image
    R05_F04
    .
    Once the update package is downloaded and unzipped, listing the image can be
    done with

    1
    
    psptool -E mb_bios_MZ33-AR1_R05_F04/SPI_UPD/image.bin
    

    However, this command results in a failure. The current state of PSPTool does
    not parse the images properly yet. So to fix the problem, necessary
    modifications were made and a Pull
    Request
    uploaded. Rebuilding
    the utility using the modified code and listing the entries again results in
    success. A full output for reference is available
    here.

    The linked pull request already fulfills half of work planned for the other
    milestone for this project. That is the Upstream PSPTool parsing improvements (task 7 milestone B). More changes to PSPTool will follow
    later, that expose even more information about the PSP firmware structures,
    like subprogram and instance fields, which are also useful to determine what
    blobs are applicable for given platform. The improved PSPTool will be also
    included in the Dasharo HCL reports to improve dumping data on AMD platforms
    (task 7 milestone A). We also have another tool incoming, which is similar
    to coreboot’s
    inteltool
    ,
    that will help dumping AMD CPU registers relevant for coreboot porting (task
    7, milestones C and D).

    The image may have multiple ROMs inside it, 16MB each for modern platforms. Be
    careful to take the blobs from the right directory. For example Gigabyte
    MZ33-AR1 has a dual ROM with Genoa and Turin firmware:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    +-----+------+-----------+---------+------------------------------+
    | ROM | Addr |    Size   |   FET   |            AGESA             |
    +-----+------+-----------+---------+------------------------------+
    |  0  | 0x0  | 0x1000000 | 0x20000 | AGESA!V9 GenoaPI-SP5 1.0.0.C |
    +-----+------+-----------+---------+------------------------------+
    ...
    +-----+-----------+-----------+-----------+------------------------------+
    | ROM |    Addr   |    Size   |    FET    |            AGESA             |
    +-----+-----------+-----------+-----------+------------------------------+
    |  1  | 0x1000000 | 0x1000000 | 0x1020000 | AGESA!V9 TurinPI-SP5 1.0.0.0 |
    +-----+-----------+-----------+-----------+------------------------------+
    

    Each ROM have two types of directories: PSP and BIOS. E.g.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    +--+-----------+---------+------------+-------+---------------------+
    |  | Directory |   Addr  | Generation | Magic | Secondary Directory |
    +--+-----------+---------+------------+-------+---------------------+
    |  |     0     | 0x41000 |    None    |  $PSP |       0x311000      |
    +--+-----------+---------+------------+-------+---------------------+
    ...
    +--+-----------+----------+------------+-------+---------------------+
    |  | Directory |   Addr   | Generation | Magic | Secondary Directory |
    +--+-----------+----------+------------+-------+---------------------+
    |  |     2     | 0x2d1000 |    None    |  $BHD |       0x691000      |
    +--+-----------+----------+------------+-------+---------------------+
    

    Each of the directory types may have two levels of directories. Second level
    directories are marked as $PL2 and $BL2. The main difference is that the
    main directories marked as $PSP and $BHD are considered recovery and have
    a limited set of blobs in it. Also the APCB blobs may be configured
    differently for recovery and normal boot. That is why it is important to
    extract the APCBs from second level directory.

    APCB blobs always live in the BIOS directories. For example, if we want to
    extract the APCB from Turin image, we will have to look at directory 3 in the
    second ROM:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    +-----+-----------+-----------+-----------+------------------------------+
    | ROM |    Addr   |    Size   |    FET    |            AGESA             |
    +-----+-----------+-----------+-----------+------------------------------+
    |  1  | 0x1000000 | 0x1000000 | 0x1020000 | AGESA!V9 TurinPI-SP5 1.0.0.0 |
    +-----+-----------+-----------+-----------+------------------------------+
    ...
    +--+-----------+-----------+------------+-------+---------------------+
    |  | Directory |    Addr   | Generation | Magic | Secondary Directory |
    +--+-----------+-----------+------------+-------+---------------------+
    |  |     3     | 0x1662000 |    None    |  $BL2 |                     |
    +--+-----------+-----------+------------+-------+---------------------+
    +--+---+-------+-----------+----------+----------------------+ ...
    |  |   | Entry |   Address |     Size |                 Type | ...
    +--+---+-------+-----------+----------+----------------------+ ...
    |  |   |     0 | 0x1662400 |   0xb6a6 | EARLY_VGA_IMAGE~0x69 | ...
    |  |   |     1 | 0x166db00 |   0x7900 |       APCB_COPY~0x68 | ...
    |  |   |     2 | 0x1675400 |    0xcb8 |       APCB_COPY~0x68 | ...
    |  |   |     3 | 0x1676100 |    0x5a0 |       APCB_COPY~0x68 | ...
    |  |   |     4 | 0x1677000 |   0x1000 |            APCB~0x60 | ...
    |  |   |     5 | 0x1678000 |   0x1000 |            APCB~0x60 | ...
    |  |   |     6 |       0x0 |      0x0 |            APOB~0x61 | ...
    |  |   |     7 | 0x1cc0000 | 0x340000 |                 BIOS | ...
    

    We can see that there are 2 APCBs and 3 ACPB_COPY’s. We will need all of them.
    Since we located the APCBs we want, it is time to extract the blobs. Blobs can
    be extracted from the first ROM with the following command:

    1
    
    psptool -X mb_bios_MZ33-AR1_R05_F04/SPI_UPD/image.bin
    

    The command will extract all blobs to the
    mb_bios_MZ33-AR1_R05_F04/SPI_UPD/image.bin_extracted directory where the
    image was located. However, we are interested in the second ROM with Turin
    blobs, so we need to pass additional parameter:

    1
    
    psptool -X -r 1 mb_bios_MZ33-AR1_R05_F04/SPI_UPD/image.bin
    

    The files will have a a prefixes consisting of dXX_eYY where XX is the
    directory number in the ROM and YY is the entry number in given directory.
    So in our case we should look for d03_e01* up to d03_e05*. And these are
    the files we will need when creating mainboard structure:

    1
    2
    3
    4
    5
    
    d03_e01_APCB_COPY~0x68
    d03_e02_APCB_COPY~0x68
    d03_e03_APCB_COPY~0x68
    d03_e04_APCB~0x60
    d03_e05_APCB~0x60
    

    This concludes the PSP firmware package milestone.

    MZ33-AR1 mainboard skeleton

    Finally it is time for the last piece of the puzzle, the mainboard code. We
    only want the minimum required to run bootblock and have some signs of life on
    the serial console. The servers board often have the serial port exposed over
    network via BMC Serial over LAN (SOL) feature and sometimes as a physical DB9
    connector for RS232 on rear panel.

    But, let’s go back to the main topic. The patch adding initial board support
    can be found here. The
    current board’s code consists of a couple source files:

    • Kconfigs (with the name and configuration options)
    • Makefile.mk which adds mainboard source file to be compiled
    • bootblock.c the early board specific code that sets up the debug interface
    • mainboard.c mainboard code for ramstage, currently has only interrupt
      configuration
    • dsdt.asl from which the DSDT ACPI table is built
    • devicetree.cb with the devices enabled and used by the board and board’s
      configuration
    • *apcb files, which we extracted just moments ago
    • And couple other necessary files not really relevant for this story

    The bootblock.c is very basic and does the following things:

    • Sets up eSPI. eSPI is the interface used to communicate with BMC. It has to
      be configured to route serial port access on port 0x3f8 and the BMC’s Super
      I/O on port 0x2e/0x2f. Part of the configuration is done in devicetree.cb
      an eSPI interface GPIOs are set in bootblock.c.
    • Configures BMC serial port. The BMC is AST2600, but the generic AST2050 and
      AST2400 driver will suffice here to set up the serial port for debugging. So
      we simply call the generic function that initialize serial port and that’s
      about it.

    mainboard.c and dsdt.asl have pretty much similar content to Genoa POC
    reference board, Onyx. not much will happen here, until later phases of the
    project. The files add just enough source code to compile.

    devicetree.cb defines very basic configuration of the board and enables
    crucial devices for the early booting phase, mainly the lpc_bridge (eSPI)
    with the ASPEED BMC Super I/O and TPM. Some additional settings are already
    defined as well, like USB, SATA, but they are subject to change in later
    phases.

    Makefile.mk mainly defines the APCB files that are going to be used by the
    board. The APCB files should reside in mainboard directory and are defined as
    follows:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    ifneq ($(wildcard $(src)/mainboard/$(MAINBOARDDIR)/data.apcb),)
    APCB_SOURCES = $(src)/mainboard/$(MAINBOARDDIR)/data.apcb
    APCB_SOURCES1 = $(src)/mainboard/$(MAINBOARDDIR)/data1.apcb
    APCB_SOURCES_RECOVERY = $(src)/mainboard/$(MAINBOARDDIR)/data_rec.apcb
    APCB_SOURCES_RECOVERY1 = $(src)/mainboard/$(MAINBOARDDIR)/data_rec1.apcb
    APCB_SOURCES_RECOVERY2 = $(src)/mainboard/$(MAINBOARDDIR)/data_rec2.apcb
    else
    show_notices:: warn_no_apcb
    endif
    

    The APCB files we extracted earlier map as follows:

    • APCB_SOURCES – first APCB (type 0x60) from the second level BIOS directory
      with. In our case it will be d03_e04_APCB~0x60 file.
    • APCB_SOURCES1 – second APCB (type 0x60) from the second level BIOS
      directory. In our case it will be d03_e05_APCB~0x60 file.
    • APCB_SOURCES_RECOVERY – first APCB_COPY (type 0x68) from the second level
      BIOS directory. In our case it will be d03_e01_APCB_COPY~0x68 file.
    • APCB_SOURCES_RECOVERY1 – second APCB_COPY (type 0x68) from the second
      level BIOS directory. In our case it will be d03_e02_APCB_COPY~0x68 file.
    • APCB_SOURCES_RECOVERY2 – third APCB_COPY (type 0x68) from the second level
      BIOS directory. In our case it will be d03_e03_APCB_COPY~0x68 file.

    They are simply renamed to *.apcb files to match the convention used in
    coreboot.

    The patch also adds a couple of configs to be used to build an image quickly:

    • configs/config.gigabyte_mz33-ar1 regular config file using PSP blobs and
      supposed to produce a full working image
    • configs/config.gigabyte_mz33-ar1_no_psp – config file not using PSP blobs
      to workaround booting problem when public PSP blobs are used. I will explain
      why we have such config soon.

    This concludes the mainboard code milestone. Time to build some images!

    Building and running

    To build a bootable coreboot image, we had to go for certain workarounds and
    omit stichting PSP blobs. Thankfully, the vendor image copies enough flash to
    memory for the BIOS to execute and this flash region is not compressed. Now,
    how did we discover it? Again, the PSPTool comes with the help together with
    UEFITool:

    1
    2
    
    |  |   |     6 |       0x0 |      0x0 |            APOB~0x61 | ...
    |  |   |     7 | 0x1cc0000 | 0x340000 |                 BIOS | ...
    

    The 7th entry indicates where the early BIOS boot code resides in flash. It
    says that it is 0x340000 bytes at offset 0x1cc0000. When the vendor image is
    opened in the UEFITool we can see that it point to uncompressed SEC and PEI
    Firmware Volume:

    So it means we can inject our coreboot image there. However, to make it work
    properly, we will need to peek into the BIOS and APOB (AGESA PSP Output Block)
    entry bytes with hex editor to obtain the destination address in DRAM where
    the BIOS and APOB contents are copied. APOB is necessary for BIOS to be
    consumed and parsed to obtain crucial information about memory configuration
    from PSP. A quick peek into the hexdump of the image right at the beginning of
    the BIOS directory ($BL2 marker) from which we extracted the APCBs:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    01662000  24 42 4c 32 c3 cc 8c 73  22 00 00 00 80 05 00 20  |$BL2...s"...... |
    01662010  69 00 00 00 a6 b6 00 00  00 24 66 00 00 00 00 00  |i........$f.....|
    01662020  ff ff ff ff ff ff ff ff  68 00 00 00 00 79 00 00  |........h....y..|
    01662030  00 db 66 00 00 00 00 00  ff ff ff ff ff ff ff ff  |..f.............|
    01662040  68 00 80 00 b8 0c 00 00  00 54 67 00 00 00 00 00  |h........Tg.....|
    01662050  ff ff ff ff ff ff ff ff  68 00 90 00 a0 05 00 00  |........h.......|
    01662060  00 61 67 00 00 00 00 00  ff ff ff ff ff ff ff ff  |.ag.............|
    01662070  60 00 00 00 00 10 00 00  00 70 67 00 00 00 00 00  |`........pg.....|
    01662080  ff ff ff ff ff ff ff ff  60 00 10 00 00 10 00 00  |........`.......|
    01662090  00 80 67 00 00 00 00 00  ff ff ff ff ff ff ff ff  |..g.............|
    016620a0  61 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |a...............|
    016620b0  00 00 bc 75 00 00 00 00  62 00 03 00 00 00 34 00  |...u....b.....4.|
    016620c0  00 00 cc 00 00 00 00 00  00 00 cc 75 00 00 00 00  |...........u....|
    016620d0  63 00 00 00 00 00 0d 00  00 90 67 00 00 00 00 00  |c.........g.....|
    

    The APOB entry is at offset 0x016620a0 and its destination address at
    0x016620b0 (64bit address) and we see it is equal to 0x75bc0000. Similarly
    for BIOS entry is at offset 0x016620b8, because each entry is 0x18 bytes and
    BIOS is right after APOB. The destination address would the be at offset
    0x016620c8 a is equal to 0x75cc0000. Having this data we could fabricate
    the same memory map for coreboot by defining the following in mainboard’s
    Kconfig:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    config BUILD_WITHOUT_PSP_BLOBS
     bool "Build without PSP blobs"
     default y
     help
       Build coreboot image without PSP blobs. When selected, the bootblock
       will be put in CBFS as on regular x86 board. The amdfw.rom will not
       be created.
    
       This is a workaround option for amdfwtool not being able to created
       a working amdfw.rom for this board. Instead, the resulting image
       will be a regular image to be flashed in place of vendor UEFI FVs
       at the last 0x340000 bytes.
    
    if BUILD_WITHOUT_PSP_BLOBS
    
    config BOOTBLOCK_IN_CBFS
     default y
    
    config AMDFW_CONFIG_FILE
     default ""
    
    config CBFS_SIZE
     default 0x340000
    
    # Below addresses match the vendor BIOS R04_F03
    # Remove them once the public blobs start working
    config EARLY_RESERVED_DRAM_BASE
     default 0x75b90000
    
    config PSP_APOB_DRAM_ADDRESS
     default 0x75bc0000
    
    config PSP_APOB_DRAM_SIZE
     default 0x100000
    
    config ROMSTAGE_ADDR
     default 0x76000000
    
    config ROMSTAGE_SIZE
     default 0x80000
    
    endif
    

    When user selects BUILD_WITHOUT_PSP_BLOBS option, coreboot will configure
    the memory map so that the bootblock is linked at the right address after PSP
    copies it to DRAM from flash. PSP_APOB_DRAM_ADDRESS is the APOB destination
    address. The PSP_APOB_DRAM_SIZE is simply the space between BIOS and APOB
    destinations: 0x75cc0000 - 0x75bc0000 = 0x100000. CBFS_SIZE must be equal
    to the BIOS region in flash that is being copied, so 0x340000. At last
    ROMSTAGE_ADDR must be simply the first address after the BIOS flash region
    that is copied: 0x75cc0000 + 0x340000 = 0x76000000.
    EARLY_RESERVED_DRAM_BASE just needs to be lower then APOB with some space to
    fit the CPU stack. A lot of hacking and maths, but it works.

    And as a proof, let’s built the image without PSP blobs:

    1
    2
    3
    
    git clone https://review.coreboot.org/coreboot.git
    cd coreboot
    git fetch https://review.coreboot.org/coreboot refs/changes/12/88712/1 && git checkout FETCH_HEAD
    

    Assuming you have docker installed, run the container and start build process:

    1
    2
    3
    4
    5
    6
    7
    
    docker run --rm -it -v $PWD:/home/coreboot/coreboot 
         -w /home/coreboot/coreboot coreboot/coreboot-sdk:2024-12-21_306660c2de 
         /bin/bash
    
    (docker)$ cp configs/config.gigabyte_mz33-ar1_no_psp .config
    (docker)$ make olddefconfig
    (docker)$ make
    

    The resulting image will be present in build/coreboot.rom. To flash it on
    the board an external programmer is required. More convenient options are
    probably available with BMC, but the methodology was not yet discovered.

    Follow the instructions on Dasharo
    documentation

    to flash the image.

    Once flashed, power on the board and observer the serial output. it can be
    done with USB to RS232 adapter and a DB9 null modem cable, or the BMC SOL
    feature.

    Sample output:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    [NOTE ]  coreboot-25.06-332-gddc10428152e Thu Aug 07 11:04:15 UTC 2025 x86_64 bootblock starting
    [DEBUG]  Family_Model: 00b00f21
    [INFO ]  Set power off after power failure.
    [DEBUG]  PMxC0 STATUS: 0x800 BIT11
    [DEBUG]  SPI normal read speed: 800 KHz
    [DEBUG]  SPI fast read speed: 66.66 Mhz
    [DEBUG]  SPI alt read speed: 66.66 Mhz
    [DEBUG]  SPI TPM read speed: Invalid
    [DEBUG]  SPI100: Disabled
    [DEBUG]  SPI Read Mode: Reserved
    [DEBUG]  SPI ROM mapping: 3-2-1-0
    [ERROR]  Invalid FMAP at 0x1cc0000
    [EMERG]  Cannot locate primary CBFS
    

    This concludes the first phase of the project.

    Summary

    Turin OpenSIL is still in the Proof of Concept stage and is not intended
    for production use
    – proceed at your own risk. All current patches for Turin
    and Gigabyte MZ33-AR1 support are available under the turin_poc
    topic
    topic on coreboot’s
    Gerrit. The subsequent phases of the project will bring even more exciting
    developments, so stay tuned for updates.

    Acknowledgements

    We would like to thank the creators and contributors of
    PSPTool and
    UEFITool, whose excellent work played a
    key role in achieving the results presented here.

    Vertical Application Roadmap

    We’re also excited to share our longer‑term vision for vertical applications
    powered by the Dasharo Pro Package on the Gigabyte MZ33‑AR1 platform. As
    previewed in our Qubes OS Summit 2025 presentation, Qubes Air: Hardware,
    Firmware, and Architectural
    Foundations
    our
    roadmap includes secure integration of Dasharo firmware (coreboot+UEFI), AMD’s
    OpenSIL, and OpenBMC as a trusted root, aimed at delivering server‑grade Qubes
    OS deployments. In the follow‑up session, Qubes Air: Opinionated Value
    Proposition for Security‑Conscious Technical
    Professionals
    we
    expanded on this vision by highlighting vertical integration scenarios using
    Qubes OS with Dasharo, secure thin clients and servers, and advanced
    capabilities such as RemoteVM, attestation via TrenchBoot, and early
    Proof‑of‑Concepts tailored for highly sensitive technical workflows. Stay
    tuned: we’re working toward solutions that deliver secure, vertically
    integrated, real-world applications for privacy-focused environments using the
    Dasharo Pro Package.

    If you plan to attend there are still some tickets to grab here.

    For OEMs & ODMs

    If you are an OEM or ODM and see the value in AMD OpenSIL support for your
    products, our team can help make it a reality. Reach out to us via our contact
    form
    or email us at
    contact3mdebcom to start the conversation.

    Stay Updated

    If you’re following the Gigabyte MZ33-AR1 journey, we invite you to join our
    Dasharo Community Release mailing list for this platform. Subscribers will
    receive public announcements about project progress, including the Dasharo
    Product Package (DPP) release when it’s ready.


    Michał Żygowski

    Firmware Engineer with networking background. Feels comfortable with low-level development using C/C++ and assembly. Interested in advanced hardware features, security and coreboot. Core developer of coreboot. Maintainer of Braswell SoC, PC Engines, Protectli and Libretrend platforms.


    Share. Facebook Twitter Pinterest LinkedIn Reddit WhatsApp Telegram Email
    Previous ArticleClaude Opus 4 and 4.1 can now end a rare subset of conversations
    Next Article TextKit 2 – The Promised Land
    TechAiVerse
    • Website

    Jonathan is a tech enthusiast and the mind behind Tech AI Verse. With a passion for artificial intelligence, consumer tech, and emerging innovations, he deliver clear, insightful content to keep readers informed. From cutting-edge gadgets to AI advancements and cryptocurrency trends, Jonathan breaks down complex topics to make technology accessible to all.

    Related Posts

    Middle East conflict casts shadow of global ad outlook

    March 13, 2026

    Customer reviews become a key battleground as AI revolutionizes product discovery

    March 13, 2026

    In graphic detail: Middle-tier creators are fueling the next phase of the creator economy

    March 13, 2026
    Leave A Reply Cancel Reply

    Top Posts

    Ping, You’ve Got Whale: AI detection system alerts ships of whales in their path

    April 22, 2025716 Views

    Lumo vs. Duck AI: Which AI is Better for Your Privacy?

    July 31, 2025303 Views

    Wired Headphones Are Making A Comeback, And We Have Gen Z To Thank

    July 22, 2025210 Views

    6.7 Cummins Lifter Failure: What Years Are Affected (And Possible Fixes)

    April 14, 2025172 Views
    Don't Miss
    Technology March 13, 2026

    Middle East conflict casts shadow of global ad outlook

    Middle East conflict casts shadow of global ad outlook By Seb Joseph  •  March 13,…

    Customer reviews become a key battleground as AI revolutionizes product discovery

    In graphic detail: Middle-tier creators are fueling the next phase of the creator economy

    The Future of Marketing Briefing: a war, an oil spike and an ad market that can’t see what comes next

    Stay In Touch
    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • Vimeo

    Subscribe to Updates

    Get the latest creative news from SmartMag about art & design.

    About Us
    About Us

    Welcome to Tech AI Verse, your go-to destination for everything technology! We bring you the latest news, trends, and insights from the ever-evolving world of tech. Our coverage spans across global technology industry updates, artificial intelligence advancements, machine learning ethics, and automation innovations. Stay connected with us as we explore the limitless possibilities of technology!

    Facebook X (Twitter) Pinterest YouTube WhatsApp
    Our Picks

    Middle East conflict casts shadow of global ad outlook

    March 13, 20263 Views

    Customer reviews become a key battleground as AI revolutionizes product discovery

    March 13, 20263 Views

    In graphic detail: Middle-tier creators are fueling the next phase of the creator economy

    March 13, 20262 Views
    Most Popular

    Outbreak turns 30

    March 14, 20250 Views

    New SuperBlack ransomware exploits Fortinet auth bypass flaws

    March 14, 20250 Views

    CDs Offer Guaranteed Returns in an Uncertain Market. Today’s CD Rates, March 14, 2025

    March 14, 20250 Views
    © 2026 TechAiVerse. Designed by Divya Tech.
    • Home
    • About Us
    • Contact Us
    • Privacy Policy
    • Terms & Conditions

    Type above and press Enter to search. Press Esc to cancel.