Jump to content

ZeroRPMBuilder for macOS - AMD Zero RPM / Fan 35°C PowerPlay Patch Generator


Recommended Posts

  • Administrators
Posted

ZeroRPMBuilder is a native macOS utility created to generate AMD GPU fan-control patches for Clover/OpenCore through DeviceProperties.

The application can extract or import an AMD PowerPlay table, validate its structure, apply a controlled Zero RPM modification, and generate a ready-to-use PP_PhmSoftPowerPlayTable without flashing or modifying the GPU VBIOS.

It was designed for users who want a cleaner and safer way to disable Zero RPM or configure a predictable fan start/stop temperature on supported AMD GPUs.

P29WOZB.pngExtracting the VBIOS with Clover

You can dump your GPU VBIOS directly from the boot menu:

  1. Boot with Clover HERE
  2. Press F6.
  3. Clover will save the GPU ROM/VBIOS to the EFI partition, usually inside the Clover misc folder.
  4. Copy the generated file and load it into ZeroRPMBuilder.

This is useful when you want ZeroRPMBuilder to work with the exact VBIOS from your GPU.


Main Features

  • Native macOS application
  • AMD GPU and PowerPlay table detection
  • Automatic GFX0 detection
  • Bundled gfxutil 1.84b
  • Automatic OpenCore PCI Device Path detection
  • VBIOS / PowerPlay table extraction
  • SPPT import support
  • Strict PowerPlay structure validation
  • Automatic Clover/OpenCoreDeviceProperties generation
  • Automatic device-id spoofing when required
  • Automatic no-gfx-spoof for supported Lexa cases
  • Offline patch generation for GPUs not installed in the current Mac
  • Original SPPT backup
  • Patched binary and hexadecimal exports
  • OpenCore config.plist generation
  • OpenCore DeviceProperties snippet generation
  • Detailed export report
  • No VBIOS flashing required

Fan Presets

ZeroRPM OFF — Fan Always On

This mode disables the GPU's Zero RPM behavior.

Only the Zero RPM enable field is changed.

The original:

  • fan start temperature
  • fan stop temperature
  • fan curve
  • RPM limits
  • thermal targets

are preserved.

This is intended for users who prefer the fans to remain available instead of entering the GPU's factory Zero RPM state.


FAN 35°C — Stop 30°C

This preset keeps Zero RPM enabled but changes the fan activation temperatures to:

Fan Stop Temperature:  30°C
Fan Start Temperature: 35°C
Zero RPM:               Enabled

The GPU can stop its fans below the configured threshold and restart them at approximately 35°C.

Only the required PowerPlay fan-control fields are modified.


Supported AMD Architectures

ZeroRPMBuilder currently supports validated PowerPlay layouts for:

Polaris

  • Polaris 10
  • Polaris 11
  • Polaris 12 / Lexa
  • Polaris 20
  • Polaris 21
  • Polaris 23

Examples include:

  • RX 460
  • RX 470
  • RX 480
  • RX 550
  • RX 560
  • RX 570
  • RX 580
  • RX 590
  • Radeon Pro WX series

Vega 10

Including:

  • RX Vega 56
  • RX Vega 64
  • Vega Frontier Edition
  • Radeon Pro WX 8100 / 8200 / 9100

Vega 20

Including:

  • Radeon VII
  • Radeon Pro VII

Navi 10 / Navi 14

Including:

  • RX 5300
  • RX 5500
  • RX 5600
  • RX 5700
  • Radeon Pro W5500
  • Radeon Pro W5700

Navi 21 / Navi 22 / Navi 23

Including members of the:

  • RX 6600 family
  • RX 6700 family
  • RX 6800 family
  • RX 6900 family
  • Radeon Pro W6600 / W6800 families

The application currently recognizes 56 AMD PCI Device IDs across the supported PowerPlay families.


Automatic DeviceProperties Detection

ZeroRPMBuilder includes gfxutil 1.84b directly inside the application bundle.

No Homebrew installation is required.

The application first attempts:

gfxutil -f GFX0

to obtain the real EFI PCI device path.

Example:

PciRoot(0x2)/Pci(0x0,0x0)/Pci(0x0,0x0)

If gfxutil cannot resolve the device, ZeroRPMBuilder uses its internal IORegistry detector.

If no usable GPU path can be determined, generation is still allowed through a generic fallback:

PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)

The user can also manually enter the required DeviceProperties path.


Offline / Cross-GPU Patch Generation

ZeroRPMBuilder does not require the target GPU to be installed in the Mac used to generate the patch.

For example:

Mac currently running:
RX 6600 XT / Navi 23

Loaded VBIOS:
RX 580 / Polaris

The application will still generate the Polaris patch.

The local GPU is used only when appropriate for DeviceProperties path detection.

The loaded VBIOS/SPPT remains authoritative for the actual patch.

This makes ZeroRPMBuilder useful for:

  • preparing an EFI for another computer;
  • preparing a patch before installing the GPU;
  • building patches remotely;
  • working with VBIOS dumps from another machine.

A different GPU installed in the current Mac will no longer block generation.


Automatic Device-ID Spoofing

For selected GPUs that require a compatible PCI Device ID, ZeroRPMBuilder can automatically generate:

device-id

inside OpenCore DeviceProperties.

Current automatic mappings include selected:

  • Navi 21
  • Navi 23
  • Polaris Lexa

Examples:

73EF → 73FF
73AF → 73BF
73A5 → 73BF

and supported Lexa mappings such as:

699F → 67FF
6987 → 67FF
6995 → 67E3
6985 → 67E3
6981 → 67E3

The property is stored in the correct little-endian OpenCore format.


Lexa no-gfx-spoof

For the supported Lexa Device IDs that require the additional WhateverGreen behavior, ZeroRPMBuilder also generates:

<key>no-gfx-spoof</key>
<data>AQAAAA==</data>

which corresponds to:

01 00 00 00

This is currently applied to:

699F
6987
6995
6985
6981

It is not added globally to every spoofed GPU.


Generated OpenCore Properties

A generated entry can look like:

DeviceProperties
└── Add
    └── PciRoot(...)/Pci(...)/Pci(...)
        ├── PP_PhmSoftPowerPlayTable
        ├── device-id
        └── no-gfx-spoof

device-id and no-gfx-spoof are only added when applicable.

The actual PowerPlay patch is stored as raw binary data in:

PP_PhmSoftPowerPlayTable

Safe PowerPlay Validation

ZeroRPMBuilder does not blindly patch arbitrary offsets.

Before modifying a table, it validates the expected PowerPlay structure for the detected architecture.

Depending on the GPU family, validation can include:

  • PowerPlay format revision
  • content revision
  • table revision
  • declared structure size
  • fan table revision
  • fan table offset
  • SMU PowerPlay version
  • thermal controller type
  • OverDrive table layout
  • required field bounds

If the loaded table does not match a supported structure, the application refuses to patch it.

Unknown layouts are not guessed.


What Does ZeroRPMBuilder Modify?

Depending on the architecture, only the equivalent fields for:

FanZeroRpmEnable
FanStopTemp
FanStartTemp

are modified.

ZeroRPMBuilder does not intentionally change:

  • GPU core clocks
  • memory clocks
  • GPU voltage
  • memory voltage
  • power limits
  • TDC limits
  • fan curves
  • minimum RPM
  • maximum RPM
  • fan target temperature
  • OverDrive capability tables
  • FeaturesToRun

Original Table Preservation

Before exporting the modified PowerPlay table, ZeroRPMBuilder preserves the original source.

Generated packages can contain:

Original SPPT
Patched SPPT
HEX export
OpenCore config.plist
OpenCore DeviceProperties snippet
Generation report

This makes it easier to compare or restore the original configuration.


VBIOS Safety

ZeroRPMBuilder does not flash your GPU.

It does not write anything to the physical VBIOS.

The modified PowerPlay table is applied through OpenCore:

DeviceProperties
→ PP_PhmSoftPowerPlayTable

Removing the property restores normal behavior without reflashing the graphics card.


Built-in gfxutil

ZeroRPMBuilder includes the official Acidanthera gfxutil 1.84b RELEASE universal binary:

x86_64
arm64

It is used exclusively for PCI / EFI Device Path discovery.

The application therefore does not require the user to install gfxutil separately.

Credit for gfxutil belongs to its respective upstream authors and contributors.


Testing

The current release has been validated through automated regression, structural, parser and stress testing.

The current development test set includes:

Core regression tests:     405/405
Structural validation:     143/143
Swift parser checks:       13/13
AddressSanitizer tests:    405/405
ThreadSanitizer tests:     405/405
Stress testing:            PASS

Stress testing includes repeated:

  • PowerPlay modifications;
  • VBIOS extraction;
  • PCI path parsing;
  • OpenCore plist generation;
  • ZIP generation;
  • import/export operations.

The patch matrix also covers both fan modes across all currently recognized GPU IDs.


Important Notes

PowerPlay tables can vary between:

  • GPU generations;
  • board partners;
  • VBIOS revisions;
  • OEM cards;
  • workstation variants.

ZeroRPMBuilder therefore validates the structure before writing anything.

If a VBIOS contains an unknown PowerPlay layout, please provide the original ROM/SPPT so support can be investigated safely.

Always keep a working EFI backup before modifying your OpenCore configuration.


Feedback and Hardware Samples

Compatibility reports are welcome.

If a GPU is detected but its PowerPlay table is rejected, please include:

  • exact GPU model;
  • PCI Device ID;
  • VBIOS ROM if possible;
  • original SPPT;
  • macOS version;
  • ZeroRPMBuilder log.

Additional real-world VBIOS samples help improve validation without resorting to unsafe generic offsets.


Credits

ZeroRPMBuilder

©DNMTechLabs
dnmtechlabs@gmail.com

Additional credit to the Acidanthera project and the authors/contributors of gfxutil, Lilu, WhateverGreen and the broader Hackintosh development community.


Download

ZeroRPMBuilder HERE

AMD PowerPlay / Zero RPM patch generator for macOS and OpenCore.

No VBIOS flashing. No permanent GPU modification.

-Guides and Tutorials HERE

-Hackintosh Tutorial Database - HERE

-The largest EFI folder collection for Hackintosh HERE

-Support Olarila Vanilla Hackintosh by making a donation HERE

-Professional Hackintosh Support since 2006 HERE

×
×
  • Create New...