You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Geoffrey McRae cacf13399f [core] refactored to centralize the lookup and reset code 4 years ago
include [core] refactored to centralize the lookup and reset code 4 years ago
src [core] refactored to centralize the lookup and reset code 4 years ago
userspace [core] refactored to centralize the lookup and reset code 4 years ago
.gitignore AMD: I think that's Navi. 4 years ago
Kbuild Add structure for common pre- and post-reset tasks 4 years ago
LICENSE Initial module framework 4 years ago
Makefile Add install target to install module 4 years ago
README.md [core] Add device to Navi14 list 4 years ago
dkms.conf [amd] navi10: Fix PSP bootloader read at reset check 4 years ago

README.md

Vendor Reset

The goal of this project is to provide a kernel module that is capable of resetting hardware devices into a state where they can be re-initialized or passed through into a virtual machine (VFIO). While it would be great to have these in the kernel as PCI quirks, some of the reset procedures are very complex and would never be accepted as a quirk (ie AMD Vega 10).

By providing this as an out of tree kernel module, vendors will be able to easily create pull requests to add functionality to this module, and users will be able to easily update this module without requiring a complete kernel rebuild.

Patching the kernel

TL;DR - No patching required.

This module has been written to use ftrace to hook pci_dev_specific_reset, allowing it to handle device resets directly without patching the running kernel. Simply modprobing the module is enough to enable the reset routines for all supported hardware.

Installing

This module can be installed either using the standard make, make install pattern, or through dkms (recommended).

dkms install .

Usage

Either modprobe vendor-reset or add the device to the appropriate place to load it at system boot, such as /etc/modules (Debian). Consult your distribution's documentation as to the best way to perform this.

Supported Devices

Vendor Family Common Name(s)
AMD Polaris 10
AMD Polaris 11
AMD Polaris 12
AMD Vega 10 Vega 56/64
AMD Vega 20 Radeon VII
AMD Navi 10 5600XT, 5700, 5700XT
AMD Navi 12 Pro 5600M
AMD Navi 14 Pro 5300, RX 5300, 5500XT

Developing

If you are a vendor intending to add support for your device to this project please first consider two things:

  1. Can you fix your hardware/firmware to reset correctly using FLR or a BUS reset?
  2. Is the reset simple enough that it should really be a kernel pci quirk (see: kernel/drivers/pci/quirk.c)?

If you answer yes to either of these questions this project is not for you.