All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Deucher <alexdeucher@gmail.com>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: Alex Deucher <alexander.deucher@amd.com>,
	stable@vger.kernel.org, dri-devel@lists.freedesktop.org,
	David L <equinox-freedesktopbugs@diac24.net>
Subject: Re: [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2)
Date: Thu, 16 Aug 2012 15:38:38 -0400	[thread overview]
Message-ID: <CADnq5_OVhKof_YgnKc26EDBDS4MrOGrYFqmd+RNedvPAbgeuFw@mail.gmail.com> (raw)
In-Reply-To: <20120816192523.GA17662@kroah.com>

On Thu, Aug 16, 2012 at 3:25 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> On Thu, Aug 16, 2012 at 03:13:46PM -0400, alexdeucher@gmail.com wrote:
>> From: David L <equinox-freedesktopbugs@diac24.net>
>>
>> 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.deucher@amd.com>
>> Cc: stable@vger.kernel.org
>> ---
>>  drivers/gpu/drm/radeon/radeon_bios.c |   62 ++++++++++++++++++++++++++++++++++
>>  1 files changed, 62 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
>> index 501f488..bf21f65 100644
>> --- a/drivers/gpu/drm/radeon/radeon_bios.c
>> +++ b/drivers/gpu/drm/radeon/radeon_bios.c
>> @@ -32,6 +32,9 @@
>>
>>  #include <linux/vga_switcheroo.h>
>>  #include <linux/slab.h>
>> +#ifdef CONFIG_ACPI
>> +#include <linux/acpi.h>
>> +#endif
>
> You forgot to remove this one :(

Argh!  I squashed that into the wrong patch when I rebased my fixes.

>
>>  /*
>>   * BIOS.
>>   */
>> @@ -476,6 +479,63 @@ static bool radeon_read_disabled_bios(struct radeon_device *rdev)
>>               return legacy_read_disabled_bios(rdev);
>>  }
>>
>> +#ifdef CONFIG_ACPI
>> +static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
>> +{
>> +     bool ret = false;
>> +     struct acpi_table_header *hdr;
>> +     /* acpi_get_table_with_size is not exported :( */
>> +     acpi_size tbl_size = 0x7fffffff;
>> +     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... */
>> +     return ret;
>> +}
>> +#else
>> +static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
>
> Make it inline, and then the compiler is smart enough to just delete the
> whole if () check you make when you call it.
>
> Third time's a charm?

On the way.

Alex

  reply	other threads:[~2012-08-16 19:38 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-16 17:54 [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch alexdeucher
2012-08-16 17:54 ` [PATCH 2/2] drm/radeon: split ATRM support out from the ATPX handler alexdeucher
2012-08-16 18:26   ` Greg KH
2012-08-16 18:25 ` [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch Jerome Glisse
2012-08-16 18:25 ` Greg KH
2012-08-16 19:13   ` [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2) alexdeucher
2012-08-16 19:13     ` [PATCH 2/2] drm/radeon: split ATRM support out from the ATPX handler (v2) alexdeucher
2012-08-16 19:25     ` [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2) Greg KH
2012-08-16 19:38       ` Alex Deucher [this message]
2012-08-16 19:48       ` [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v3) alexdeucher
2012-08-16 19:48         ` [PATCH 2/2] drm/radeon: split ATRM support out from the ATPX handler (v3) alexdeucher
2012-08-16 19:40     ` [PATCH 1/2] drm/radeon: implement ACPI VFCT vbios fetch (v2) David Lamparter
2012-08-16 19:51       ` Alex Deucher
2012-08-17 16:56         ` Alex Deucher
2012-08-17 17:03           ` Matthew Garrett
2012-08-20 15:19             ` [PATCH 1/4] drm/radeon: implement ACPI VFCT vbios fetch (v3) alexdeucher
2012-08-20 15:19               ` [PATCH 2/4] ACPI: export symbol acpi_get_table_with_size alexdeucher
2012-08-21 14:50                 ` Alex Deucher
2012-08-21 14:51                   ` Matthew Garrett
2012-08-21 14:52                   ` Matthew Garrett
2012-08-22  8:31                   ` Lan Tianyu
2012-08-20 15:19               ` [PATCH 3/4] drm/radeon: convert radeon vfct code to use acpi_get_table_with_size alexdeucher
2012-08-20 15:19               ` [PATCH 4/4] drm/radeon: split ATRM support out from the ATPX handler (v3) alexdeucher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADnq5_OVhKof_YgnKc26EDBDS4MrOGrYFqmd+RNedvPAbgeuFw@mail.gmail.com \
    --to=alexdeucher@gmail.com \
    --cc=alexander.deucher@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=equinox-freedesktopbugs@diac24.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.