Unbricking a Gigabyte GV-N970G1 GAMING-4GD


2020-07-10

This card has dual-BIOSes, meaning if one is borked (in my case, via an accidental incorrect flash), it can be fixed.

VBIOS' are switched by changing the physical output. With only ONE monitor plugged in, try to boot off both the HDMI and DVI ports. Whichever one works is the good BIOS. Once booted, plug the monitor into the other and reflash.

Basically, to fix is to boot the computer using the good VBIOS, then flash the bad.

This was done on Ubuntu MATE 20.04.

Steps

  1. Boot using the good BIOS.

    Plug ONE monitor into the various ports and attempt boot. When one boots, the card is using the good BIOS.

  2. Download nvflash and Gigabyte.GTX970.4096.150104.rom (mirror) (or the current “good” version on your card).

    File SHA1
    nvflash_5.414.0_linux.zip 68b5989f36615b5df5293046b2ad2f01702003c4
    Gigabyte.GTX970.4096.150104.rom 9a79ed1ca8ac7290edb209083e3f7374282fbdc4
  3. Stop the display manager and unload the nvidia modules.

    This should be done via SSH from another machine, as the card will be switched to the bad bios soon.

    # systemctl stop lightdm
    
    # rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia
    

    If this fails for some reason, blacklist the modules in /etc/modprobe.d/ and reboot.

  4. Make sure nvflash can see the card.

    # ./nvflash_linux --list
    
    NVIDIA Firmware Update Utility (Version 5.414.0)
    Simplified Version For OEM Only
    NVIDIA display adapters present in system:
    <0> GeForce GTX 970      (10DE,13C2,1458,367A) H:--:NRM  S:00,B:03,D:00,F:00
    
  5. Compare the good bios against the downloaded one. If it mismatches, download the correct one and repeat. Even if you want to upgrade to a new version, DON’T. Restore the bad one first, then upgrade both of them.

    # ./nvflash_linux --verify Gigabyte.GTX970.4096.150104.rom 
    
    NVIDIA Firmware Update Utility (Version 5.414.0)
    Simplified Version For OEM Only
    Adapter: GeForce GTX 970      (10DE,13C2,1458,367A) H:--:NRM  S:00,B:03,D:00,F:00
    
    Identifying EEPROM...
    EEPROM ID (C8,4012) : GD GD25Q20 2.7-3.6V 2048Kx1S, page
    Reading adapter firmware image...
    Current      - Version:84.04.36.00.2F ID:10DE:13C2:1458:367A
                   GM204 Board (Normal Board)
    Compare with - Version:84.04.36.00.2F ID:10DE:13C2:1458:367A
                   GM204 Board (Normal Board)
    File firmware image matches adapter firmware image.
    
  6. Switch to the bad bios by plugging the ONE monitor into a non-working port and verify the bios mismatches.

    # ./nvflash_linux --verify Gigabyte.GTX970.4096.150104.rom 
    
    NVIDIA Firmware Update Utility (Version 5.414.0)
    Simplified Version For OEM Only
    Adapter: GeForce GTX 970      (10DE,13C2,1458,367A) H:--:NRM  S:00,B:03,D:00,F:00
    
    Identifying EEPROM...
    EEPROM ID (C8,4012) : GD GD25Q20 2.7-3.6V 2048Kx1S, page
    Reading adapter firmware image...
    Current      - Version:84.04.28.00.4C ID:10DE:13C2:1458:367B
                   GM204 Board (Normal Board)
    Compare with - Version:84.04.36.00.2F ID:10DE:13C2:1458:367A
                   GM204 Board (Normal Board)
    
    ERROR: Mismatch at offset 0x00000004.
    
          Size diffs between file(179712) and adapter firmware (180224)
    
    
  7. Flash the card.

    # ./nvflash_linux Gigabyte.GTX970.4096.150104.rom 
    
    NVIDIA Firmware Update Utility (Version 5.414.0)
    Simplified Version For OEM Only
    Checking for matches between display adapter(s) and image(s)...
    
    Adapter: GeForce GTX 970      (10DE,13C2,1458,367A) H:--:NRM  S:00,B:03,D:00,F:00
    
    Current      - Version:84.04.28.00.4C ID:10DE:13C2:1458:367B
                   GM204 Board (Normal Board)
    Replace with - Version:84.04.36.00.2F ID:10DE:13C2:1458:367A
                   GM204 Board (Normal Board)
    
    Update display adapter firmware?
    Press 'y' to confirm (any other key to abort):  y
    Identifying EEPROM...
    EEPROM ID (C8,4012) : GD GD25Q20 2.7-3.6V 2048Kx1S, page
    Storing updated firmware image...
    .....................
    Verifying update...
    Update successful.
    
    Firmware image has been updated from version 84.04.28.00.4C to 84.04.36.00.2F.
    
    
    A reboot is required for the update to take effect.
    

    Reboot, and the card should be fixed.

Notes

To dump the nvflash version and EEPROM info:

# ./nvflash_linux --version

NVIDIA Firmware Update Utility (Version 5.414.0)
Simplified Version For OEM Only
Adapter: GeForce GTX 970      (10DE,13C2,1458,367A) H:--:NRM  S:00,B:03,D:00,F:00

Identifying EEPROM...
EEPROM ID (C8,4012) : GD GD25Q20 2.7-3.6V 2048Kx1S, page
Reading adapter firmware image...
IFR Data Size         : 1768 bytes
IFR CRC32             : C140E136
IFR Image Size        : 2048 bytes
IFR Image CRC32       : 6E5E9720
IFR Subsystem ID      : 1458-367A
Image Size            : 177664 bytes
Version               : 84.04.36.00.2F
~CRC32                : 41D1A30D
Image Hash            : EFC70375821CF8250469C60322951166
OEM String            : NVIDIA
Vendor Name           : NVIDIA Corporation
Product Name          : GM204 Board
Product Revision      : Chip Rev   
Device Name(s)        : GeForce GTX 970
Board ID              : E908
PCI ID                : 10DE-13C2
Subsystem ID          : 1458-367A
Hierarchy ID          : Normal Board
Chip SKU              : 200-0
Project               : G401-0010
CDP                   : N/A
Build Date            : 11/12/14
Modification Date     : 01/04/15
UEFI Support          : Yes
UEFI Version          : 0x20007 (Sep 18 2014 @ 18895672 )
UEFI Variant Id       : 0x0000000000000006 ( GM2xx )
UEFI Signer(s)        : Microsoft Corporation UEFI CA 2011
InfoROM Version       : N/A
InfoROM Backup Exist  : NO
License Placeholder   : Absent
GPU Mode              : N/A
Sign-On Message       : GV-N970G1 GAMING-4GD_P/F60