@crowizz yes it would work.
And yup, reading a lot of things from l1t forum
& yes, need to contact asus support again
Some progress about igpu passthrough.
Using some recommandation from l1t I extracted the zen4 igpu rom from the motherboard uefi using GitHub - LongSoft/UEFITool: UEFI firmware image viewer and editor .
Zen4 IGPU ROM: https://neowutran.ovh/igpu.bin
sha1sum 1fbac0cbde86cf7dbc9d1aa827263cf8f167c52e
( ethernet card use this specific rom: https://neowutran.ovh/ethernet.bin
sha1sum: ab85435aee2a978c06b1a67da9436a2832576748 )
Then I patched the guest kernel to force loading the gpu firmware from file:
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/acpi.h>
#include <linux/firmware.h>
/*
* BIOS.
*/
static bool amdgpu_bios_firmware(struct amdgpu_device *adev)
{
const struct firmware* vbios_firmware;
const char* vbios_name = "vbios/renoir.bin";
const size_t vbios_size = 32 << PAGE_SHIFT;
int ret;
DRM_INFO("amdgpu_bios_firmware()\n");
ret = request_firmware(&vbios_firmware, vbios_name, adev->dev);
if (ret) {
DRM_ERROR("failed to load '%s': %d\n", vbios_name, ret);
return false;
}
if (!AMD_IS_VALID_VBIOS(vbios_firmware->data)) {
DRM_ERROR("vbios file '%s' signature incorrect %x %x\n",
vbios_name, vbios_firmware->data[0], vbios_firmware->data[1]);
release_firmware(vbios_firmware);
return false;
}
if (vbios_firmware->size > vbios_size) {
DRM_ERROR("vbios file '%s' size too large, %zu > %zu\n",
vbios_name, vbios_firmware->size, vbios_size);
release_firmware(vbios_firmware);
return false;
}
adev->bios = kzalloc(vbios_size, GFP_KERNEL);
if (adev->bios == NULL) {
DRM_ERROR("no memory to allocate for BIOS\n");
release_firmware(vbios_firmware);
return false;
}
adev->bios_size = vbios_size;
memcpy_fromio(adev->bios, vbios_firmware->data, vbios_firmware->size);
release_firmware(vbios_firmware);
return true;
}
bool amdgpu_get_bios(struct amdgpu_device *adev)
{
if (amdgpu_bios_firmware(adev)) {
dev_info(adev->dev, "Fetched VBIOS from firmware file\n");
goto success;
}
Now the IGPU is initialized by the guest. GPU is recognized by system tools. But there is some issues with power management so for the moment the IGPU is unusable.
This kind of error:
[ 6.329420] [drm] Fence fallback timer expired on ring comp_1.0.0
[ 7.339193] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.1.0 (-110).
[ 8.379193] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.2.0 (-110).
[ 9.419196] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.3.0 (-110).
[ 10.459187] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.0.1 (-110).
[ 11.499207] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.1.1 (-110).
[ 12.539183] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.2.1 (-110).
[ 13.579192] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on comp_1.3.1 (-110).
[ 14.089164] [drm] Fence fallback timer expired on ring kiq_2.1.0
[ 14.619186] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on kiq_2.1.0 (-110).
[ 15.659206] [drm:sdma_v5_2_ring_test_ib [amdgpu]] *ERROR* amdgpu: IB test timed out
[ 15.659356] amdgpu 0000:00:07.0: [drm:amdgpu_ib_ring_tests [amdgpu]] *ERROR* IB test failed on sdma0 (-110).
[ 16.169166] [drm] Fence fallback timer expired on ring vcn_dec_0
[ 16.679412] [drm] Fence fallback timer expired on ring vcn_enc_0.0
[ 17.189172] [drm] Fence fallback timer expired on ring vcn_enc_0.1
[ 17.189305] [drm:process_one_work] *ERROR* ib ring test failed (-110).