Patch "drm/radeon: handle vfct with multiple vbios images" has been added to the 4.10-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/radeon: handle vfct with multiple vbios images
to the 4.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-radeon-handle-vfct-with-multiple-vbios-images.patch
and it can be found in the queue-4.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a882f5de402ded769af74fbf276132f9c175049cMon Sep 17 00:00:00 2001
From: Alex Deucher <[email protected]>
Date: Wed, 25 Jan 2017 15:33:44 -0500
Subject: drm/radeon: handle vfct with multiple vbios images
From: Alex Deucher <[email protected]>
commit a882f5de402ded769af74fbf276132f9c175049c upstream.
The vfct table can contain multiple vbios images if the platform contains multiple GPUs. Noticed by netkas on phoronix forums. This patch fixes those platforms.
--- drivers/gpu/drm/radeon/radeon_bios.c | 68 +++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 31 deletions(-)
drivers/gpu/drm/radeon/radeon_bios.c +37 -31
@@ -596,52 +596,58 @@ static bool radeon_read_disabled_bios(st#ifdef CONFIG_ACPI static bool radeon_acpi_vfct_bios (struct radeon_device *rdev) { -bool ret = false;struct acpi_table_header *hdr;acpi_size tbl_size;UEFI_ACPI_VFCT *vfct; -GOP_VBIOS_CONTENT *vbios; -VFCT_IMAGE_HEADER *vhdr; +unsigned offset;if (!ACPI_SUCCESS (acpi_get_table ("VFCT" ,1 , &hdr)))return false; tbl_size = hdr->length;if (tbl_size <sizeof (UEFI_ACPI_VFCT )) {DRM_ERROR ("ACPI VFCT table present but broken (too short #1)\n" ); - goto out_unmap; +return false; } vfct = (UEFI_ACPI_VFCT *)hdr; -if (vfct->VBIOSImageOffset +sizeof (VFCT_IMAGE_HEADER ) > tbl_size) { -DRM_ERROR ("ACPI VFCT table present but broken (too short #2)\n" ); - goto out_unmap; - } + offset = vfct->VBIOSImageOffset; - vbios = (GOP_VBIOS_CONTENT *)((char *)hdr + vfct->VBIOSImageOffset); - vhdr = &vbios->VbiosHeader; -DRM_INFO ("ACPI VFCT contains a BIOS for %02x:%02x.%d %04x:%04x, size %d\n" , - 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) { -DRM_INFO ("ACPI VFCT table is not for this card\n" ); - goto out_unmap; +while (offset < tbl_size) { +GOP_VBIOS_CONTENT *vbios = (GOP_VBIOS_CONTENT *)((char *)hdr + offset); +VFCT_IMAGE_HEADER *vhdr = &vbios->VbiosHeader; + + offset +=sizeof (VFCT_IMAGE_HEADER ); +if (offset > tbl_size) { +DRM_ERROR ("ACPI VFCT image header truncated\n" ); +return false; + } + + offset += vhdr->ImageLength; +if (offset > tbl_size) { +DRM_ERROR ("ACPI VFCT image truncated\n" ); +return false; + } + +if (vhdr->ImageLength && + 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) { + rdev->bios =kmemdup (&vbios->VbiosContent, + vhdr->ImageLength, +GFP_KERNEL ); + +if (!rdev->bios) { +kfree (rdev->bios); +return false; + } +return true; + } } -if (vfct->VBIOSImageOffset +sizeof (VFCT_IMAGE_HEADER ) + vhdr->ImageLength > tbl_size) { -DRM_ERROR ("ACPI VFCT image truncated\n" ); - goto out_unmap; - } - - rdev->bios =kmemdup (&vbios->VbiosContent, vhdr->ImageLength,GFP_KERNEL ); - ret = !!rdev->bios; - -out_unmap: -return ret; +DRM_ERROR ("ACPI VFCT table present but broken (too short #2)\n" ); +return false; }#else static inline bool radeon_acpi_vfct_bios (struct radeon_device *rdev)
Patches currently in stable-queue which might be from [email protected] are
queue-4.10/drm-amdgpu-add-more-cases-to-dce11-possible-crtc-mask-setup.patch queue-4.10/drm-amdgpu-pm-check-for-headless-before-calling-compute_clocks.patch queue-4.10/revert-drm-amdgpu-update-tile-table-for-oland-hainan.patch queue-4.10/drm-radeon-handle-vfct-with-multiple-vbios-images.patch