[PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2)
On Thu, Aug 16, 2012 at 03:13:46PM -0400, alexdeucher at gmail.com wrote: > From: David L From: David Lamparter <equi...@diac24.net> There are still two rough edges left in here, I didn't get around to clean it up, other stuff came up -- sorry... > This is required for pure UEFI systems. The vbios is stored > in ACPI rather than at the legacy vga location. > > Fixes: > https://bugs.freedesktop.org/show_bug.cgi?id=26891 > > V2: fix #ifdefs as per Greg's comments > > Signed-off-by: Alex Deucher > Cc: stable at vger.kernel.org > --- [...] > + struct acpi_table_header *hdr; > + /* acpi_get_table_with_size is not exported :( */ > + acpi_size tbl_size = 0x7fff; I was using acpi_get_table_with_size, but that needs an export, with 0x7fff all the tests below are kinda useless because they always succeed. I think it'd be useful to keep the length checks in case some vendor breaks their ACPI tables, so this needs an EXPORT_SYMBOL. > + UEFI_ACPI_VFCT *vfct; > + GOP_VBIOS_CONTENT *vbios; > + VFCT_IMAGE_HEADER *vhdr; > + > + if (!ACPI_SUCCESS(acpi_get_table("VFCT", 1, ))) > + 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; > + if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) > 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); > + vhdr = >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; > + }; > + > + if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + > vhdr->ImageLength > tbl_size) { > + DRM_ERROR("ACPI VFCT image truncated\n"); > + goto out_unmap; > + } > + > + rdev->bios = kmemdup(>VbiosContent, vhdr->ImageLength, > GFP_KERNEL); > + ret = !!rdev->bios; > + > +out_unmap: > + /* uh, no idea what to do here... */ So, er, I had no clue how to clean up the return value of acpi_get_table - does this actually need to be cleaned up? Or do you just get a pointer straight to the "real" ACPI table? > + return ret; > +} > +#else > +static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) > +{ > + return false; > +} > +#endif > > bool radeon_get_bios(struct radeon_device *rdev) > { > @@ -484,6 +544,8 @@ bool radeon_get_bios(struct radeon_device *rdev) > > r = radeon_atrm_get_bios(rdev); > if (r == false) > + r = radeon_acpi_vfct_bios(rdev); > + if (r == false) > r = igp_read_bios_from_vram(rdev); > if (r == false) > r = radeon_read_bios(rdev); > -- > 1.7.7.5 > Cheers, -David -- next part -- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 230 bytes Desc: Digital signature URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20120816/9bc25513/attachment.pgp>
Re: [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2)
On Thu, Aug 16, 2012 at 03:13:46PM -0400, alexdeuc...@gmail.com wrote: From: David L equinox-freedesktopb...@diac24.net From: David Lamparter equi...@diac24.net There are still two rough edges left in here, I didn't get around to clean it up, other stuff came up -- sorry... This is required for pure UEFI systems. The vbios is stored in ACPI rather than at the legacy vga location. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=26891 V2: fix #ifdefs as per Greg's comments Signed-off-by: Alex Deucher alexander.deuc...@amd.com Cc: sta...@vger.kernel.org --- [...] + struct acpi_table_header *hdr; + /* acpi_get_table_with_size is not exported :( */ + acpi_size tbl_size = 0x7fff; I was using acpi_get_table_with_size, but that needs an export, with 0x7fff all the tests below are kinda useless because they always succeed. I think it'd be useful to keep the length checks in case some vendor breaks their ACPI tables, so this needs an EXPORT_SYMBOL. + UEFI_ACPI_VFCT *vfct; + GOP_VBIOS_CONTENT *vbios; + VFCT_IMAGE_HEADER *vhdr; + + if (!ACPI_SUCCESS(acpi_get_table(VFCT, 1, hdr))) + 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; + if (vfct-VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) 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); + 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; + }; + + 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: + /* uh, no idea what to do here... */ So, er, I had no clue how to clean up the return value of acpi_get_table - does this actually need to be cleaned up? Or do you just get a pointer straight to the real ACPI table? + return ret; +} +#else +static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) +{ + return false; +} +#endif bool radeon_get_bios(struct radeon_device *rdev) { @@ -484,6 +544,8 @@ bool radeon_get_bios(struct radeon_device *rdev) r = radeon_atrm_get_bios(rdev); if (r == false) + r = radeon_acpi_vfct_bios(rdev); + if (r == false) r = igp_read_bios_from_vram(rdev); if (r == false) r = radeon_read_bios(rdev); -- 1.7.7.5 Cheers, -David signature.asc Description: Digital signature ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
[Bug 38547] r600g fails shader, tries to run with failed shader, freezes.
On Thu, Jun 23, 2011 at 06:22:47AM -0700, bugzilla-daemon at freedesktop.org wrote: > --- Comment #5 from Jerome Glisse 2011-06-23 > 06:22:47 PDT --- > The mesa dump shader should at least print the shader that you already pasted > here. Really need the glsl one Really need the shader dumping code fixed ;) (i'll try to patch it up so it doesn't SEGV when I'm home from work) It crashes on trying to dump the very first shader the game uses (which is a shader that works just fine). -David
Re: [Bug 38547] r600g fails shader, tries to run with failed shader, freezes.
On Thu, Jun 23, 2011 at 06:22:47AM -0700, bugzilla-dae...@freedesktop.org wrote: --- Comment #5 from Jerome Glisse gli...@freedesktop.org 2011-06-23 06:22:47 PDT --- The mesa dump shader should at least print the shader that you already pasted here. Really need the glsl one Really need the shader dumping code fixed ;) (i'll try to patch it up so it doesn't SEGV when I'm home from work) It crashes on trying to dump the very first shader the game uses (which is a shader that works just fine). -David ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
r600g TXD opcode (was: ... translation from TGSI failed / missing vertex shader)
On Sun, Jun 05, 2011 at 10:32:34PM -0700, bugzilla-daemon at freedesktop.org wrote: > I'm attaching a patch that has an implementation. Unfortunately I can't seem > to > get it to work entirely correctly. The piglit test looks almost correct but > has > several artifacts in random places. If someone could point me in the right > direction (as I'm completely clueless), I would be happy to finish it. In case > it matters, piglit does not show any new failures from this patch. Did you make any progress? This also affects EVE Online btw. -David
r600g TXD opcode (was: ... translation from TGSI failed / missing vertex shader)
On Sun, Jun 05, 2011 at 10:32:34PM -0700, bugzilla-dae...@freedesktop.org wrote: I'm attaching a patch that has an implementation. Unfortunately I can't seem to get it to work entirely correctly. The piglit test looks almost correct but has several artifacts in random places. If someone could point me in the right direction (as I'm completely clueless), I would be happy to finish it. In case it matters, piglit does not show any new failures from this patch. Did you make any progress? This also affects EVE Online btw. -David ___ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel