DMA Firmware – How To Create Your Own DMA Firmware

The goal of this guide is to help you create your own custom DMA firmware. There’s a lot of misinformation and gatekeeping around this topic, often because some people profit from selling firmware for hundreds of dollars.

Whenever questions are asked, the typical response is “read the docs,” without providing the proper link. For those who want to read the documentation, here it is: Xilinx Documentation.

Create DMA Firmware Instructions

To avoid anticheat detection, you should modify the following items. Note that this guide won’t help you bypass Face-it/VGK unless someone provides additional information, as many old methods are now patched:

  • DSN
  • Subsystem IDs
  • Device ID
  • Vendor ID
  • Revision
  • Blocks 0x40 and 0x60
  • BAR Address
  • Auto-Clear Status Register / Master Abort Flag

Let’s get started.


Step 1: Prerequisites

You will need the latest version of Xilinx Vivado (requires an AMD account), Visual Studio Community Edition (for this guide’s search functions), and the default firmware source code from Ulf’s GitHub repository.

Links:

(Note: Installing these tools is straightforward, so installation instructions are not provided.)

dma firmware

Step 2: Initial Customization

First, open the PCIeSquirrel folder in Visual Studio. Search for the function rw[20] <= 1; by pressing CTRL+F. You should find this in the file pcileech_pcie_cfg_a7.sv at line 208.

Change lines 208 and 209 to:

rw[20] <= 1;
rw[21] <= 1;

Next, modify the DSN (Device Serial Number) at line 215. It should look like this:

rw[127:64] <= 64'h00000000xxxxxxxx; // +008: cfg_dsn

Change the last numbers (default is 35) to a new value, e.g.:

rw[127:64] <= 64'h0000000042006969; // +008: cfg_dsn

Save all the files.


Step 3: Generate the Project

Open TCL shell 2022.xx (your version may differ). Navigate to the project folder using cd:

cd C:/Users/XXXX/Desktop/PCIeSquirrel

Build the Vivado project with:

source vivado_generate_project.tcl -notrace

Once complete, you will find the project file in the directory PCIeSquirrel\pcileech_squirrel\pcileech_squirrel.xpr.


Step 4: Customizing within Vivado

Open the project file in Vivado. In the “Project Manager” window, locate and double-click i_pcie_7x_0 under pcileech_squirrel_top\i_pcileech_pci_a7. Customize the IP in the “IDs” tab by entering the desired IDs:

  • Vendor ID: 10EB
  • Device ID: 3029
  • Revision ID: 09 (can be any value)
  • Subsystem Vendor ID: 10EB (match the Vendor ID)
  • Subsystem ID: 0008

Adjust class codes if necessary. Use PCI IDs to find device IDs. After entering the new values, click “OK” and then “Generate”.


Step 5: Locking the IP Core

In Vivado, open the “Tcl Console” and enter:

set_property is_managed false [get_files pcie_7x_0.xci]

This locks the core. To unlock it later, use:

set_property is_managed true [get_files pcie_7x_0.xci]

Step 6: Changing BAR Address (Optional)

If changing the BAR Address, search for bar_0 in Visual Studio. In pcie_7x_0.xci, at line 264, you’ll find:

"bar_0": [ { "value": "FFFFF000", "resolve_type": "generated", "usage": "all" } ],

Change FFFFF000 to the desired value, matching the physical device’s address.


Step 6.5: Changing MSI/PCI Pointers (Optional)

Run synthesis in Vivado. Then, in Visual Studio, search for PCIE_BASE_PTR and adjust as needed. Example parameters:

parameter [7:0]  MSI_BASE_PTR = 8'h48,
parameter [7:0]  MSI_CAP_NEXTPTR = 8'h60,
parameter [7:0]  PCIE_BASE_PTR = 8'h60,
parameter [7:0]  PCIE_CAP_NEXTPTR = 8'h9C,

Modify these values carefully to avoid conflicts.


Step 7: Building the DMA Firmware .bin File

In Vivado, select “Generate Bitstream” to build the firmware. This will take some time. Once complete, find your firmware in PCIeSquirrel\pcileech_squirrel\pcileech_squirrel.runs\impl_1 named pcileech_squirrel_top.bin.

Congratulations! You’ve successfully built your DMA firmware. Be cautious with your modifications to avoid damaging your hardware.

Want To Get Started With DMA Cheats?

Click Here to Join our exclusive Discord community to get started cheating in your favorite video games!

  • SUPPORT: Get personal help and tips directly from me
  • COMMUNITY: Connect with fellow DMA gamers and find teammates
  • UPDATES: Be the first to know about new updates and features