Load and parse BIOS/firmware where possible

This commit is contained in:
Adam Madsen
2020-11-02 14:47:13 -06:00
parent 7c1c9aa44a
commit 68ca4816b6
26 changed files with 16883 additions and 117 deletions

View File

@@ -1,6 +1,7 @@
/*
Vendor Reset - Vendor Specific Reset
Copyright (C) 2020 Geoffrey McRae <geoff@hostfission.com>
Copyright (C) 2020 Adam Madsen <adam@ajmadsen.com>
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -19,33 +20,49 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include "vendor-reset-dev.h"
#include "common.h"
#include "firmware.h"
#include "amdgpu_discovery.h"
#include "nv.h"
extern bool amdgpu_get_bios(struct amd_fake_dev *adev);
static int amd_navi10_reset(struct vendor_reset_dev *dev)
{
struct amd_vendor_private *priv = amd_private(dev);
struct amd_fake_dev *adev;
int ret;
priv->adev = (struct amd_fake_dev){
.dev = &dev->pdev->dev,
.private = priv,
};
adev = &priv->adev;
ret = amd_fake_dev_init(adev, dev);
if (ret)
return ret;
ret = amdgpu_discovery_reg_base_init(adev);
if (ret < 0)
{
pci_info(dev->pdev,
"amdgpu_discovery_reg_base_init failed, using legacy method");
"amdgpu_discovery_reg_base_init failed, using legacy method\n");
navi10_reg_base_init(adev);
}
if (adev->mman.discovery_bin)
amdgpu_discovery_fini(adev);
if (!amdgpu_get_bios(adev))
{
pci_err(dev->pdev, "amdgpu_get_bios failed: %d\n", ret);
ret = -ENOTSUPP;
goto adev_free;
}
return 0;
ret = atom_bios_init(adev);
if (ret)
{
pci_err(dev->pdev, "atom_bios_init failed: %d\n", ret);
goto adev_free;
}
adev_free:
amd_fake_dev_fini(adev);
return ret;
}
const struct vendor_reset_ops amd_navi10_ops =