[PATCH V2 12/16] drm/radeon: Make radeon card usable for Loongson.

Alex Deucher alexdeucher at gmail.com
Wed Jun 20 09:16:47 PDT 2012


On Wed, Jun 20, 2012 at 4:28 AM, Huacai Chen <chenhuacai at gmail.com> wrote:
> On Wed, Jun 20, 2012 at 9:26 AM, Alex Deucher <alexdeucher at gmail.com> wrote:
>> On Tue, Jun 19, 2012 at 9:57 AM, j.glisse <j.glisse at gmail.com> wrote:
>>> On Tue, Jun 19, 2012 at 02:50:20PM +0800, Huacai Chen wrote:
>>>> 1, Use 32-bit DMA as a workaround (Loongson has a hardware bug that it
>>>>    doesn't support DMA address above 4GB).
>>>> 2, Read vga bios offered by system firmware.
>>>> 3, Handle io prot correctly for MIPS.
>>>> 4, Don't use swiotlb on Loongson machines (when use swiotlb, GPU reset
>>>>    occurs at resume from suspend).
>>>>
>>>> Signed-off-by: Huacai Chen <chenhc at lemote.com>
>>>> Signed-off-by: Hongliang Tao <taohl at lemote.com>
>>>> Signed-off-by: Hua Yan <yanh at lemote.com>
>>>> Cc: dri-devel at lists.freedesktop.org
>>>> ---
>>>>  drivers/gpu/drm/drm_vm.c               |    2 +-
>>>>  drivers/gpu/drm/radeon/radeon_bios.c   |   32 ++++++++++++++++++++++++++++++++
>>>>  drivers/gpu/drm/radeon/radeon_device.c |    5 +++++
>>>>  drivers/gpu/drm/radeon/radeon_ttm.c    |    6 +++---
>>>>  drivers/gpu/drm/ttm/ttm_bo_util.c      |    2 +-
>>>>  include/drm/drm_sarea.h                |    2 ++
>>>>  6 files changed, 44 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c
>>>> index 961ee08..3f06166 100644
>>>> --- a/drivers/gpu/drm/drm_vm.c
>>>> +++ b/drivers/gpu/drm/drm_vm.c
>>>> @@ -62,7 +62,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
>>>>               tmp = pgprot_writecombine(tmp);
>>>>       else
>>>>               tmp = pgprot_noncached(tmp);
>>>> -#elif defined(__sparc__) || defined(__arm__)
>>>> +#elif defined(__sparc__) || defined(__arm__) || defined(__mips__)
>>>>       tmp = pgprot_noncached(tmp);
>>>>  #endif
>>>>       return tmp;
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
>>>> index 501f488..2630e22 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_bios.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_bios.c
>>>> @@ -29,6 +29,7 @@
>>>>  #include "radeon_reg.h"
>>>>  #include "radeon.h"
>>>>  #include "atom.h"
>>>> +#include <asm/bootinfo.h>
>>>>
>>>>  #include <linux/vga_switcheroo.h>
>>>>  #include <linux/slab.h>
>>>> @@ -73,6 +74,32 @@ static bool igp_read_bios_from_vram(struct radeon_device *rdev)
>>>>       return true;
>>>>  }
>>>>
>>>> +#ifdef CONFIG_CPU_LOONGSON3
>>>> +extern u64 vgabios_addr;
>>>
>>> Ugly, is this how platform specific stuff are handled usualy ? I hope not,
>>> i would rather see a platform specific function such as loongson3_get_vga_bios.
>>
>> It could be hooked in as a pci quirk similar to how we read the vbios
>> from the legacy vga location on x86.
> Hi, Alex, the method you said is pci_fixup_video() in arch/x86/pci/fixup.c?

Correct, although you will probably need it in arch/mips/pci for your
platform.  You may want to make your quirk specific to this pci device
unless you need it for all vga chips on your platform.

Alex


More information about the dri-devel mailing list