Originally posted by netkas
View Post
Announcement
Collapse
No announcement yet.
More Radeon & AMDGPU Fixes Line-Up For Linux 4.10
Collapse
X
-
-
Thanks for getting the logs. Problem seems to be:
Code:[ 8.358193] [drm] initializing kernel modesetting (PITCAIRN 0x1002:0x6810 0x106B:0x012A 0x00). [ 8.379700] [drm] register mmio base: 0xA0600000 [ 8.400813] [drm] register mmio size: 262144 [ 8.421487] [drm] ACPI VFCT contains a BIOS for 02:00.0 1002:6810, size 65536 [ 8.442002] [drm] ACPI VFCT table is not for this card [ 8.462549] amdgpu 0000:06:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x0000 [ 8.483276] amdgpu 0000:06:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x0000 [ 8.503611] [drm:amdgpu_get_bios [amdgpu]] *ERROR* Unable to locate a BIOS ROM [ 8.523669] amdgpu 0000:06:00.0: Fatal error during GPU init [ 8.543586] [drm] amdgpu: finishing device.
EDIT - sorry, I missed your second post there. I don't *think* we have a file option for VBIOS but will check.Test signature
Comment
-
sp, infact VFCT table has two vbioses, for both cards (master and slave), first going slave vbios, then master vbios.
Radeon driver is only able to extract first one. (in facts it's only looking for first one)
windows amd drivers I believe is able to extract both
here is that vfct table - http://rgho.st/6pG498pFz
first vbios starts at 0x68, second vbios starts at 0x10084
Last edited by netkas; 24 January 2017, 03:07 PM.
Comment
-
so, here
if check for first vbios failed at line 630, a check for second vbios need to be done, it can be found at
if ((vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength) < tbt_size) {
vhdr = vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength;
//start some checks again
}
Comment
-
I'll try to test this updated function some time soon, will report back.
Code:static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) { bool ret = false; bool vbios_found = false; struct acpi_table_header *hdr; acpi_size tbl_size; UEFI_ACPI_VFCT *vfct; GOP_VBIOS_CONTENT *vbios; VFCT_IMAGE_HEADER *vhdr; uint16_t vbios_index = 0; uint32_t vbios_offset = 0; if (!ACPI_SUCCESS(acpi_get_table_with_size("VFCT", 1, &hdr, &tbl_size))) return false; if (tbl_size < sizeof(UEFI_ACPI_VFCT)) { DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n"); goto out_unmap; } vfct = (UEFI_ACPI_VFCT *)hdr; while (vbios_found == false) { if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vbios_offset > tbl_size) { DRM_ERROR("ACPI VFCT table present but broken (too short #2)\n"); goto out_unmap; } vbios = (GOP_VBIOS_CONTENT *)((char *)hdr + vfct->VBIOSImageOffset + vbios_offset); vhdr = &vbios->VbiosHeader; DRM_INFO("ACPI VFCT[%d] contains a BIOS for %02x:%02x.%d %04x:%04x, size %d\n", vbios_index, vhdr->PCIBus, vhdr->PCIDevice, vhdr->PCIFunction, vhdr->VendorID, vhdr->DeviceID, vhdr->ImageLength); if (vhdr->PCIBus == rdev->pdev->bus->number && vhdr->PCIDevice == PCI_SLOT(rdev->pdev->devfn) && vhdr->PCIFunction == PCI_FUNC(rdev->pdev->devfn) && vhdr->VendorID == rdev->pdev->vendor && vhdr->DeviceID == rdev->pdev->device) { vbios_found = true; break; } else { DRM_INFO("ACPI VFCT[%d] table is not for this card\n", vbios_index); } if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength + vbios_offset > tbl_size) { DRM_ERROR("ACPI VFCT image truncated\n"); goto out_unmap; } if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength + vbios_offset < tbl_size) { DRM_INFO("Checking next ACPI VFCT bios image\n"); vbios_index++; vbios_offset += sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength; } } if (!vbios_found) goto out_unmap; rdev->bios = kmemdup(&vbios->VbiosContent, vhdr->ImageLength, GFP_KERNEL); ret = !!rdev->bios; out_unmap: return ret; }
Comment
-
hello again.
tested my patch, it works, I get screen output and acceleration
log: http://pastebin.com/GrxUUPHZ
interesting part of log -
[ 2.154872] [drm] ACPI VFCT[0] contains a BIOS for 02:00.0 1002:6810, size 65536
[ 4.497936] [drm] ACPI VFCT[0] contains a BIOS for 02:00.0 1002:6810, size 65536
[ 4.497939] [drm] ACPI VFCT[0] table is not for this card
[ 4.497941] [drm] Checking next ACPI VFCT bios image
[ 4.497944] [drm] ACPI VFCT[1] contains a BIOS for 06:00.0 1002:6810, size 65536
the patch - http://rgho.st/8YFjKysNy
however after about 1 min the system hard freezes(even without x.org running), tried radeon.dpm=0, no change. kernel 4.4Last edited by netkas; 25 January 2017, 05:18 AM.
- Likes 1
Comment
-
tried 4.9.5 kernel
with radeon - same patch, same behaviour
with amdgpu:
the log - http://pastebin.com/NiTiWAYi
the patch - http://rgho.st/68s7Zq9V9
system doesn't freeze.
but everything is green.
in console, black became green, white is still white.
Xorg - everything is greenish, I can see colors - red, blue, green (in glxgear), but the darker the color the more greenish it is. the brighter the color the more magentish it is.Last edited by netkas; 25 January 2017, 09:39 AM.
Comment
-
Originally posted by debianxfce View Post
If you use kernel from kernel.org or similar, they have minimal amount of new amdgpu code (see the diff column from kernel.org) , so code is UNFINISHED AS YOU SEE WITH DMESG. Use this for the amdgpu driver:
https://cgit.freedesktop.org/%7Eagd5...-next-4.11-wip
And this:
https://launchpad.net/~paulo-miguel-...mesa/+packages
I have tried the kernel form drm-next-4.11-wip.
There is absolutely no difference in results versus 4.9.5 (== exactly same results)
also, 4.9.5+amdgpu hardfreezed after some time too (it took much longer than with radeon driver)
when system freeze happens, display goes black as well.
patches for drm-next-4.11-wip
radeon: http://rgho.st/6xtTt6XDf
amdgpu: http://rgho.st/8HxfqWdFg
- Likes 1
Comment
-
Originally posted by netkas View Post
Comment
Comment