[PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2)

2012-08-16 Thread David Lamparter
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)

2012-08-16 Thread David Lamparter
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.

2011-06-23 Thread David Lamparter
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.

2011-06-23 Thread David Lamparter
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)

2011-06-14 Thread David Lamparter
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)

2011-06-14 Thread David Lamparter
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