trivial: add a plugin to show VBIOS version for AMD APUs

The VBIOS version is actually fetched by udev, this plugin sets
up the relationship so it's displayed in the right place.
This commit is contained in:
Mario Limonciello 2023-02-15 17:06:24 -06:00 committed by Mario Limonciello
parent 088359a381
commit c6731e56f2
8 changed files with 135 additions and 0 deletions

11
plugins/amd-gpu/README.md Normal file
View File

@ -0,0 +1,11 @@
---
title: Plugin: AMDGPU
---
## Introduction
This plugin reports the vbios version of APU devices supported by amdgpu.
## External Interface Access
This plugin requires read only access to attributes located within `/sys/bus/pci/drivers/*/amdgpu`.

View File

@ -0,0 +1,2 @@
[PCI\DRIVER_amdgpu]
Plugin = amdgpu

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2023 Advanced Micro Devices Inc.
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#include "config.h"
#include <fwupdplugin.h>
#include "fu-amd-gpu-device.h"
struct _FuAmdGpuDevice {
FuUdevDevice parent_instance;
};
G_DEFINE_TYPE(FuAmdGpuDevice, fu_amd_gpu_device, FU_TYPE_UDEV_DEVICE)
static gboolean
fu_amd_gpu_device_probe(FuDevice *device, GError **error)
{
const gchar *base;
g_autofree gchar *rom = NULL;
/* heuristic to detect !APU since we don't have sysfs file to indicate IS_APU */
base = fu_udev_device_get_sysfs_path(FU_UDEV_DEVICE(device));
rom = g_build_filename(base, "rom", NULL);
if (g_file_test(rom, G_FILE_TEST_EXISTS)) {
g_set_error_literal(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "only for APU");
return FALSE;
}
fu_device_add_parent_guid(device, "cpu");
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_INTERNAL);
return fu_udev_device_set_physical_id(FU_UDEV_DEVICE(device), "pci", error);
}
static void
fu_amd_gpu_device_init(FuAmdGpuDevice *self)
{
fu_device_set_name(FU_DEVICE(self), "Graphics Processing Unit (GPU)");
}
static void
fu_amd_gpu_device_class_init(FuAmdGpuDeviceClass *klass)
{
FuDeviceClass *klass_device = FU_DEVICE_CLASS(klass);
klass_device->probe = fu_amd_gpu_device_probe;
}

View File

@ -0,0 +1,12 @@
/*
* Copyright (C) 2023 Advanced Micro Devices Inc.
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include <fwupdplugin.h>
#define FU_TYPE_AMDGPU_DEVICE (fu_amd_gpu_device_get_type())
G_DECLARE_FINAL_TYPE(FuAmdGpuDevice, fu_amd_gpu_device, FU, AMDGPU_DEVICE, FuUdevDevice)

View File

@ -0,0 +1,36 @@
/*
* Copyright (C) 2023 Advanced Micro Devices Inc.
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#include "config.h"
#include "fu-amd-gpu-device.h"
#include "fu-amd-gpu-plugin.h"
struct _FuAmdGpuPlugin {
FuPlugin parent_instance;
};
G_DEFINE_TYPE(FuAmdGpuPlugin, fu_amd_gpu_plugin, FU_TYPE_PLUGIN)
static void
fu_amd_gpu_plugin_init(FuAmdGpuPlugin *self)
{
}
static void
fu_amd_gpu_plugin_constructed(GObject *obj)
{
FuPlugin *plugin = FU_PLUGIN(obj);
fu_plugin_add_udev_subsystem(plugin, "pci");
fu_plugin_add_device_gtype(plugin, FU_TYPE_AMDGPU_DEVICE);
}
static void
fu_amd_gpu_plugin_class_init(FuAmdGpuPluginClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
object_class->constructed = fu_amd_gpu_plugin_constructed;
}

View File

@ -0,0 +1,11 @@
/*
* Copyright (C) 2023 Advanced Micro Devices Inc.
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include <fwupdplugin.h>
G_DECLARE_FINAL_TYPE(FuAmdGpuPlugin, fu_amd_gpu_plugin, FU, AMDGPU_PLUGIN, FuPlugin)

View File

@ -0,0 +1,15 @@
if gudev.found()
cargs = ['-DG_LOG_DOMAIN="FuPluginAmdGpu"']
plugin_quirks += files('amd-gpu.quirk')
plugin_builtins += static_library('fu_plugin_amd_gpu',
sources: [
'fu-amd-gpu-plugin.c',
'fu-amd-gpu-device.c',
],
include_directories: plugin_incdirs,
link_with: plugin_libs,
c_args: cargs,
dependencies: plugin_deps,
)
endif

View File

@ -19,6 +19,7 @@ plugins = [
'acpi-ivrs',
'acpi-phat',
'amd-pmc',
'amd-gpu',
'analogix',
'android-boot',
'ata',