From: "j.glisse" <j.glisse@gmail.com>
To: Lucas Stach <dev@lynxeye.de>
Cc: Huacai Chen <chenhuacai@gmail.com>,
linux-mips@linux-mips.org, Zhangjin Wu <wuzhangjin@gmail.com>,
Hua Yan <yanh@lemote.com>,
dri-devel@lists.freedesktop.org,
Ralf Baechle <ralf@linux-mips.org>,
Fuxin Zhang <zhangfx@lemote.com>, Huacai Chen <chenhc@lemote.com>,
Hongliang Tao <taohl@lemote.com>
Subject: Re: [PATCH V2 12/16] drm/radeon: Make radeon card usable for Loongson.
Date: Tue, 19 Jun 2012 10:07:04 -0400 [thread overview]
Message-ID: <20120619140703.GB1979@gmail.com> (raw)
In-Reply-To: <1340090395.8334.7.camel@tellur>
On Tue, Jun 19, 2012 at 09:19:55AM +0200, Lucas Stach wrote:
> Hello Huacai,
>
> Am Dienstag, den 19.06.2012, 14:50 +0800 schrieb Huacai Chen:
> > 1, Use 32-bit DMA as a workaround (Loongson has a hardware bug that it
> > doesn't support DMA address above 4GB).
>
> This is a bug of your platform/CPU and should be fixed at a lower level,
> not in every driver. While radeon might be the only device using 40bit
> DMA right know, it is very well possible that other devices pop up in
> the future. So please fix your platform code to disallow >32bit DMA.
>
> > 2, Read vga bios offered by system firmware.
> > 3, Handle io prot correctly for MIPS.
>
> This seems good to me, but you should really split this out in a
> separate TTM patch.
>
> > 4, Don't use swiotlb on Loongson machines (when use swiotlb, GPU reset
> > occurs at resume from suspend).
> >
> While SWIOTLB might not be a common setup, simply ignoring it because it
> doesn't work on your platform is the wrong thing to do. Could you please
> try to root-cause the issue?
>
> Thanks,
> Lucas
It's most likely because somehow with loongson and swiotlb you get bounce
page, radeon won't work with bounce pages.
Cheers,
Jerome
>
> > Signed-off-by: Huacai Chen <chenhc@lemote.com>
> > Signed-off-by: Hongliang Tao <taohl@lemote.com>
> > Signed-off-by: Hua Yan <yanh@lemote.com>
> > Cc: dri-devel@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;
> > +static bool loongson3_read_bios(struct radeon_device *rdev)
> > +{
> > + u8 *bios;
> > + resource_size_t size = 512 * 1024; /* ??? */
> > +
> > + rdev->bios = NULL;
> > +
> > + bios = (u8 *)vgabios_addr;
> > + if (!bios) {
> > + return false;
> > + }
> > +
> > + if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
> > + return false;
> > + }
> > + rdev->bios = kmalloc(size, GFP_KERNEL);
> > + if (rdev->bios == NULL) {
> > + return false;
> > + }
> > + memcpy(rdev->bios, bios, size);
> > + return true;
> > +}
> > +#endif
> > +
> > static bool radeon_read_bios(struct radeon_device *rdev)
> > {
> > uint8_t __iomem *bios;
> > @@ -490,6 +517,11 @@ bool radeon_get_bios(struct radeon_device *rdev)
> > if (r == false) {
> > r = radeon_read_disabled_bios(rdev);
> > }
> > +#ifdef CONFIG_CPU_LOONGSON3
> > + if (r == false) {
> > + r = loongson3_read_bios(rdev);
> > + }
> > +#endif
> > if (r == false || rdev->bios == NULL) {
> > DRM_ERROR("Unable to locate a BIOS ROM\n");
> > rdev->bios = NULL;
> > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> > index 066c98b..8aac7ab 100644
> > --- a/drivers/gpu/drm/radeon/radeon_device.c
> > +++ b/drivers/gpu/drm/radeon/radeon_device.c
> > @@ -777,6 +777,11 @@ int radeon_device_init(struct radeon_device *rdev,
> > (rdev->family < CHIP_RS400))
> > rdev->need_dma32 = true;
> >
> > +#ifdef CONFIG_CPU_LOONGSON3
> > + /* Workaround: Loongson 3 doesn't support 40-bits DMA */
> > + rdev->need_dma32 = true;
> > +#endif
> > +
> > dma_bits = rdev->need_dma32 ? 32 : 40;
> > r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits));
> > if (r) {
> > diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> > index c94a225..f49bdd1 100644
> > --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> > +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> > @@ -630,7 +630,7 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm)
> > }
> > #endif
> >
> > -#ifdef CONFIG_SWIOTLB
> > +#if defined(CONFIG_SWIOTLB) && !defined(CONFIG_CPU_LOONGSON3)
> > if (swiotlb_nr_tbl()) {
> > return ttm_dma_populate(>t->ttm, rdev->dev);
> > }
> > @@ -676,7 +676,7 @@ static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm)
> > }
> > #endif
> >
> > -#ifdef CONFIG_SWIOTLB
> > +#if defined(CONFIG_SWIOTLB) && !defined(CONFIG_CPU_LOONGSON3)
> > if (swiotlb_nr_tbl()) {
> > ttm_dma_unpopulate(>t->ttm, rdev->dev);
> > return;
> > @@ -906,7 +906,7 @@ static int radeon_ttm_debugfs_init(struct radeon_device *rdev)
> > radeon_mem_types_list[i].show = &ttm_page_alloc_debugfs;
> > radeon_mem_types_list[i].driver_features = 0;
> > radeon_mem_types_list[i++].data = NULL;
> > -#ifdef CONFIG_SWIOTLB
> > +#if defined(CONFIG_SWIOTLB) && !defined(CONFIG_CPU_LOONGSON3)
> > if (swiotlb_nr_tbl()) {
> > sprintf(radeon_mem_types_names[i], "ttm_dma_page_pool");
> > radeon_mem_types_list[i].name = radeon_mem_types_names[i];
> > diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > index f8187ea..0df71ea 100644
> > --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> > +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > @@ -472,7 +472,7 @@ pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp)
> > else
> > tmp = pgprot_noncached(tmp);
> > #endif
> > -#if defined(__sparc__)
> > +#if defined(__sparc__) || defined(__mips__)
> > if (!(caching_flags & TTM_PL_FLAG_CACHED))
> > tmp = pgprot_noncached(tmp);
> > #endif
> > diff --git a/include/drm/drm_sarea.h b/include/drm/drm_sarea.h
> > index ee5389d..1d1a858 100644
> > --- a/include/drm/drm_sarea.h
> > +++ b/include/drm/drm_sarea.h
> > @@ -37,6 +37,8 @@
> > /* SAREA area needs to be at least a page */
> > #if defined(__alpha__)
> > #define SAREA_MAX 0x2000U
> > +#elif defined(__mips__)
> > +#define SAREA_MAX 0x4000U
> > #elif defined(__ia64__)
> > #define SAREA_MAX 0x10000U /* 64kB */
> > #else
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2012-06-19 14:10 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-19 6:50 [PATCH V2 00/14] MIPS: Add Loongson-3 based machines support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 01/16] MIPS: Loongson: Add basic Loongson-3 definition Huacai Chen
2012-06-19 9:36 ` Florian Fainelli
2012-06-19 10:44 ` Huacai Chen
2012-06-19 6:50 ` [PATCH V2 02/16] MIPS: Loongson: Add basic Loongson-3 CPU support Huacai Chen
2012-06-19 9:47 ` Florian Fainelli
2012-06-19 10:45 ` Huacai Chen
2012-06-19 6:50 ` [PATCH V2 03/16] MIPS: Loongson 3: Add Lemote-3A machtypes definition Huacai Chen
2012-06-19 11:08 ` Sergei Shtylyov
2012-06-19 11:46 ` Huacai Chen
2012-06-19 6:50 ` [PATCH V2 04/16] MIPS: Loongson: Make Loongson-3 to use BCD format for RTC Huacai Chen
2012-06-19 6:50 ` [PATCH V2 05/16] MIPS: Loongson: Add UEFI-like firmware interface support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 06/16] MIPS: Loongson 3: Add HT-linked PCI support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 07/16] MIPS: Loongson 3: Add IRQ init and dispatch support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 08/16] MIPS: Loongson 3: Add serial port support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 09/16] MIPS: Loongson: Add swiotlb to support big memory (>4GB) Huacai Chen
2012-06-19 6:50 ` [PATCH V2 10/16] MIPS: Loongson: Add Loongson-3 Kconfig options Huacai Chen
2012-06-19 6:50 ` [PATCH V2 11/16] ata: Use 32-bit DMA in AHCI for Loongson-3 Huacai Chen
2012-06-19 12:32 ` Jeff Garzik
2012-06-19 12:36 ` Huacai Chen
2012-06-19 6:50 ` [PATCH V2 12/16] drm/radeon: Make radeon card usable for Loongson Huacai Chen
2012-06-19 7:19 ` Lucas Stach
2012-06-19 14:07 ` j.glisse [this message]
2012-06-20 6:12 ` Huacai Chen
2012-06-20 6:38 ` Lucas Stach
2012-06-20 6:54 ` Huacai Chen
2012-06-19 7:56 ` Michel Dänzer
2012-06-19 7:56 ` Michel Dänzer
2012-06-19 10:46 ` Huacai Chen
2012-06-19 10:46 ` Huacai Chen
2012-06-19 13:57 ` j.glisse
2012-06-20 1:26 ` Alex Deucher
2012-06-20 1:26 ` Alex Deucher
2012-06-20 8:28 ` Huacai Chen
2012-06-20 16:16 ` Alex Deucher
2012-06-20 16:16 ` Alex Deucher
2012-06-19 6:50 ` [PATCH V2 13/16] ALSA: HDA: Make hda sound " Huacai Chen
2012-06-19 6:50 ` Huacai Chen
2012-06-19 9:09 ` Clemens Ladisch
2012-06-19 9:09 ` [alsa-devel] " Clemens Ladisch
2012-06-19 9:26 ` Takashi Iwai
2012-06-19 10:47 ` Huacai Chen
2012-06-19 10:47 ` [alsa-devel] " Huacai Chen
2012-06-19 6:50 ` [PATCH V2 14/16] MIPS: Loongson 3: Add Loongson-3 SMP support Huacai Chen
2012-06-19 6:50 ` [PATCH V2 15/16] MIPS: Loongson 3: Add CPU Hotplug support Huacai Chen
2012-06-19 9:31 ` Yong Zhang
2012-06-19 9:31 ` Yong Zhang
2012-06-19 10:51 ` Huacai Chen
2012-06-20 6:36 ` Yong Zhang
2012-06-20 6:36 ` Yong Zhang
2012-06-20 6:57 ` Huacai Chen
2012-06-19 9:32 ` Yong Zhang
2012-06-19 9:32 ` Yong Zhang
2012-06-19 6:50 ` [PATCH V2 16/16] MIPS: Loongson: Add a Loongson-3 default config file Huacai Chen
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=20120619140703.GB1979@gmail.com \
--to=j.glisse@gmail.com \
--cc=chenhc@lemote.com \
--cc=chenhuacai@gmail.com \
--cc=dev@lynxeye.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
--cc=taohl@lemote.com \
--cc=wuzhangjin@gmail.com \
--cc=yanh@lemote.com \
--cc=zhangfx@lemote.com \
/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.