[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-08-02 Thread Huacai Chen
Hi, Lucas, sorry for so long a delay because I have a holiday for one month.

I found Loongson-3 must turn on SWIOTLB if the system memory has
addresses above 4G. As I know, there are two ways to get a DMA addr,
the first way is use dma_alloc_coherent(), and the other one is use
map_page()/map_sg() on an exsisting address. The first way can make
sure DMA addr below 4G, but the second way cannot (unless the memory
is so little that all the address space is below 4G).

Take SATA driver as an example, during initialization an 'ata_device'
struct is allocated and its address is probably above 4G (because this
is first used by CPU, not for DMA). 'ata_device' has a member 'id' and
'id' will be use for DMA in such a call path:

ata_host_register() --> ata_scsi_add_hosts() --> async_port_probe()
--> ata_port_probe() --> ata_bus_probe() --> ata_dev_read_id() -->
ata_exec_internal() --> ata_exec_internal_sg() --> ata_qc_issue() -->
ata_sg_setup() --> dma_map_sg()

Here,  dma_map_sg() will get a DMA addr above 4G, then SATA init failed.

In OHCI driver, there are similar situations.

P.S.:  With recently drm changes, I found radeon with SWIOTLB can
already work after suspend/resume, so my next version of Loongson
patches will not modify radeon_ttm.c.

On Fri, Jun 22, 2012 at 1:59 PM, Huacai Chen  wrote:
> On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
>> Hello Huacai,
>>
>> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>>> 1, Handle io prot correctly for MIPS.
>>> 2, Define SAREA_MAX as the size of one page.
>>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>>>when use swiotlb, GPU reset occurs at resume from suspend).
>>>
>> I still think this is wrong. You say Loongson needs SWIOTLB, but when
>> it's actually used you ignore it in the radeon driver code.
>>
>> I looked up why you are using SWIOTLB and I don't agree with you that it
>> is needed. SWIOTLB just gives you bounce pages for DMA memory above
>> DMA32 and therefore papers over your >4GB DMA platform bug in some
>> cases, while hurting performance.
>>
>> Please fix your DMA platform code so that region DMA is an alias for
>> region DMA32. It should allow you to drop all those ugly workarounds.
>>
> Hmm, you are probably right, I think I should have a discuss with the
> original author of this part of code.
>
>>> Signed-off-by: Huacai Chen 
>>> Signed-off-by: Hongliang Tao 
>>> Signed-off-by: Hua Yan 
>>> Reviewed-by: Michel D?nzer 
>>> Reviewed-by: Alex Deucher 
>>> Reviewed-by: Lucas Stach 
>>> Reviewed-by: j.glisse 
>>
>> You should probably only stick this tag on your patches after the people
>> you are naming explicitly gave their r-b for a specific version of a
>> patch.
>>
>> Thanks,
>> Lucas
>>> Cc: dri-devel at lists.freedesktop.org
>>> ---
>>>  drivers/gpu/drm/drm_vm.c|2 +-
>>>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>>>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>>>  include/drm/drm_sarea.h |2 ++
>>>  4 files changed, 7 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_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_l

Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-08-02 Thread Huacai Chen
Hi, Lucas, sorry for so long a delay because I have a holiday for one month.

I found Loongson-3 must turn on SWIOTLB if the system memory has
addresses above 4G. As I know, there are two ways to get a DMA addr,
the first way is use dma_alloc_coherent(), and the other one is use
map_page()/map_sg() on an exsisting address. The first way can make
sure DMA addr below 4G, but the second way cannot (unless the memory
is so little that all the address space is below 4G).

Take SATA driver as an example, during initialization an 'ata_device'
struct is allocated and its address is probably above 4G (because this
is first used by CPU, not for DMA). 'ata_device' has a member 'id' and
'id' will be use for DMA in such a call path:

ata_host_register() --> ata_scsi_add_hosts() --> async_port_probe()
--> ata_port_probe() --> ata_bus_probe() --> ata_dev_read_id() -->
ata_exec_internal() --> ata_exec_internal_sg() --> ata_qc_issue() -->
ata_sg_setup() --> dma_map_sg()

Here,  dma_map_sg() will get a DMA addr above 4G, then SATA init failed.

In OHCI driver, there are similar situations.

P.S.:  With recently drm changes, I found radeon with SWIOTLB can
already work after suspend/resume, so my next version of Loongson
patches will not modify radeon_ttm.c.

On Fri, Jun 22, 2012 at 1:59 PM, Huacai Chen  wrote:
> On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
>> Hello Huacai,
>>
>> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>>> 1, Handle io prot correctly for MIPS.
>>> 2, Define SAREA_MAX as the size of one page.
>>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>>>when use swiotlb, GPU reset occurs at resume from suspend).
>>>
>> I still think this is wrong. You say Loongson needs SWIOTLB, but when
>> it's actually used you ignore it in the radeon driver code.
>>
>> I looked up why you are using SWIOTLB and I don't agree with you that it
>> is needed. SWIOTLB just gives you bounce pages for DMA memory above
>> DMA32 and therefore papers over your >4GB DMA platform bug in some
>> cases, while hurting performance.
>>
>> Please fix your DMA platform code so that region DMA is an alias for
>> region DMA32. It should allow you to drop all those ugly workarounds.
>>
> Hmm, you are probably right, I think I should have a discuss with the
> original author of this part of code.
>
>>> Signed-off-by: Huacai Chen 
>>> Signed-off-by: Hongliang Tao 
>>> Signed-off-by: Hua Yan 
>>> Reviewed-by: Michel Dänzer 
>>> Reviewed-by: Alex Deucher 
>>> Reviewed-by: Lucas Stach 
>>> Reviewed-by: j.glisse 
>>
>> You should probably only stick this tag on your patches after the people
>> you are naming explicitly gave their r-b for a specific version of a
>> patch.
>>
>> Thanks,
>> Lucas
>>> Cc: dri-devel@lists.freedesktop.org
>>> ---
>>>  drivers/gpu/drm/drm_vm.c|2 +-
>>>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>>>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>>>  include/drm/drm_sarea.h |2 ++
>>>  4 files changed, 7 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_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

[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-23 Thread Huacai Chen
On Fri, Jun 22, 2012 at 7:11 PM, Ralf Baechle  wrote:
> On Fri, Jun 22, 2012 at 06:55:40PM +0800, Huacai Chen wrote:
>
>> > btw, would it be a good idea to use uncached accelerated instead ?
>> I have tried uncached accelerated, there will be random points in the
>> monitor, it seems a hw issue...
>
> Have you flushed the pages from memory before switching their cache mode
> to uncached accelerated? ?The MIPS architecture defines the result of
> mixing cache modes as UNPREDICTABLE so be careful to flush caches before
> switching cache mode of a page.
Not because of flushing, CPU designing team told us a method but very
complex, and that method will cause other performance drop. So, we
won't use uncached accelerate mode.
>
> ?Ralf


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 5:39 PM, Arnaud Patard
 wrote:
>
> Hi,
>
> Huacai Chen  writes:
>
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>> ? ?when use swiotlb, GPU reset occurs at resume from suspend).
>>
>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel D?nzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>> Cc: dri-devel at lists.freedesktop.org
>> ---
>> ?drivers/gpu/drm/drm_vm.c ? ? ? ? ? ?| ? ?2 +-
>> ?drivers/gpu/drm/radeon/radeon_ttm.c | ? ?6 +++---
>> ?drivers/gpu/drm/ttm/ttm_bo_util.c ? | ? ?2 +-
>> ?include/drm/drm_sarea.h ? ? ? ? ? ? | ? ?2 ++
>> ?4 files changed, 7 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);
>
> btw, would it be a good idea to use uncached accelerated instead ?
I have tried uncached accelerated, there will be random points in the
monitor, it seems a hw issue...

>
> Arnaud


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 7:11 PM, Ralf Baechle  wrote:
> On Fri, Jun 22, 2012 at 06:55:40PM +0800, Huacai Chen wrote:
>
>> > btw, would it be a good idea to use uncached accelerated instead ?
>> I have tried uncached accelerated, there will be random points in the
>> monitor, it seems a hw issue...
>
> Have you flushed the pages from memory before switching their cache mode
> to uncached accelerated?  The MIPS architecture defines the result of
> mixing cache modes as UNPREDICTABLE so be careful to flush caches before
> switching cache mode of a page.
Not because of flushing, CPU designing team told us a method but very
complex, and that method will cause other performance drop. So, we
won't use uncached accelerate mode.
>
>  Ralf
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
> Hello Huacai,
>
> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>> ? ?when use swiotlb, GPU reset occurs at resume from suspend).
>>
> I still think this is wrong. You say Loongson needs SWIOTLB, but when
> it's actually used you ignore it in the radeon driver code.
>
> I looked up why you are using SWIOTLB and I don't agree with you that it
> is needed. SWIOTLB just gives you bounce pages for DMA memory above
> DMA32 and therefore papers over your >4GB DMA platform bug in some
> cases, while hurting performance.
>
> Please fix your DMA platform code so that region DMA is an alias for
> region DMA32. It should allow you to drop all those ugly workarounds.
>
Hi, Lucas, I disable SWIOTLB and still make sure DMA <4G, radeon and
sound card seems work fine, but OHCI still can't work. From git log
arch/mips/cavium-octeon/dma-octeon.c, it seems Cavium also need
SWIOTLB to avoid OHCI issue.

>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel D?nzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>
> You should probably only stick this tag on your patches after the people
> you are naming explicitly gave their r-b for a specific version of a
> patch.
>
> Thanks,
> Lucas
>> Cc: dri-devel at lists.freedesktop.org
>> ---
>> ?drivers/gpu/drm/drm_vm.c ? ? ? ? ? ?| ? ?2 +-
>> ?drivers/gpu/drm/radeon/radeon_ttm.c | ? ?6 +++---
>> ?drivers/gpu/drm/ttm/ttm_bo_util.c ? | ? ?2 +-
>> ?include/drm/drm_sarea.h ? ? ? ? ? ? | ? ?2 ++
>> ?4 files changed, 7 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_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 ? ? ? ? ? ? ? ? ? ? ? 0x1U ? ? /* 64kB */
>> ?#else
>
>


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
> Hello Huacai,
>
> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>> ? ?when use swiotlb, GPU reset occurs at resume from suspend).
>>
> I still think this is wrong. You say Loongson needs SWIOTLB, but when
> it's actually used you ignore it in the radeon driver code.
>
> I looked up why you are using SWIOTLB and I don't agree with you that it
> is needed. SWIOTLB just gives you bounce pages for DMA memory above
> DMA32 and therefore papers over your >4GB DMA platform bug in some
> cases, while hurting performance.
>
> Please fix your DMA platform code so that region DMA is an alias for
> region DMA32. It should allow you to drop all those ugly workarounds.
>
Hmm, you are probably right, I think I should have a discuss with the
original author of this part of code.

>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel D?nzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>
> You should probably only stick this tag on your patches after the people
> you are naming explicitly gave their r-b for a specific version of a
> patch.
>
> Thanks,
> Lucas
>> Cc: dri-devel at lists.freedesktop.org
>> ---
>> ?drivers/gpu/drm/drm_vm.c ? ? ? ? ? ?| ? ?2 +-
>> ?drivers/gpu/drm/radeon/radeon_ttm.c | ? ?6 +++---
>> ?drivers/gpu/drm/ttm/ttm_bo_util.c ? | ? ?2 +-
>> ?include/drm/drm_sarea.h ? ? ? ? ? ? | ? ?2 ++
>> ?4 files changed, 7 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_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 ? ? ? ? ? ? ? ? ? ? ? 0x1U ? ? /* 64kB */
>> ?#else
>
>


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Ralf Baechle
On Fri, Jun 22, 2012 at 06:55:40PM +0800, Huacai Chen wrote:

> > btw, would it be a good idea to use uncached accelerated instead ?
> I have tried uncached accelerated, there will be random points in the
> monitor, it seems a hw issue...

Have you flushed the pages from memory before switching their cache mode
to uncached accelerated?  The MIPS architecture defines the result of
mixing cache modes as UNPREDICTABLE so be careful to flush caches before
switching cache mode of a page.

  Ralf


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Ralf Baechle
On Fri, Jun 22, 2012 at 11:39:19AM +0200, Arnaud Patard wrote:

> > --- 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);
> 
> btw, would it be a good idea to use uncached accelerated instead ?

Not unconditionally.  Only some MIPS cores support uncached accelerated.
Basically you can only assume that cache modes 2 (uncached) (3 cachable
non-coherent) are supported.  On a SMP system use of 2 and 3 may be
unwise (SGI IP27 and IP35 may throw obscure exceptions to indicate their
dislike of these.) and on multi-processor systems there is mode 5, which
is cachable coherent.

The necessary logic is too complex to got into drm_io_prot() which already
is an #ifdef mess anyway so that function should be changed to call some
sort of architecutre specific hook so that function should be changed to
call some sort of architecture specific hook...

  Ralf


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Arnaud Patard (Rtp)

Hi,

Huacai Chen  writes:

> 1, Handle io prot correctly for MIPS.
> 2, Define SAREA_MAX as the size of one page.
> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>when use swiotlb, GPU reset occurs at resume from suspend).
>
> Signed-off-by: Huacai Chen 
> Signed-off-by: Hongliang Tao 
> Signed-off-by: Hua Yan 
> Reviewed-by: Michel D?nzer 
> Reviewed-by: Alex Deucher 
> Reviewed-by: Lucas Stach 
> Reviewed-by: j.glisse 
> Cc: dri-devel at lists.freedesktop.org
> ---
>  drivers/gpu/drm/drm_vm.c|2 +-
>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>  include/drm/drm_sarea.h |2 ++
>  4 files changed, 7 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);

btw, would it be a good idea to use uncached accelerated instead ?

Arnaud


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
1, Handle io prot correctly for MIPS.
2, Define SAREA_MAX as the size of one page.
3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
   when use swiotlb, GPU reset occurs at resume from suspend).

Signed-off-by: Huacai Chen 
Signed-off-by: Hongliang Tao 
Signed-off-by: Hua Yan 
Reviewed-by: Michel D?nzer 
Reviewed-by: Alex Deucher 
Reviewed-by: Lucas Stach 
Reviewed-by: j.glisse 
Cc: dri-devel at lists.freedesktop.org
---
 drivers/gpu/drm/drm_vm.c|2 +-
 drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
 drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
 include/drm/drm_sarea.h |2 ++
 4 files changed, 7 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_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   0x1U   /* 64kB */
 #else
-- 
1.7.7.3



[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Christian König
Hello Huacai,


On 22.06.2012 07:59, Huacai Chen wrote:
> On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
>> Hello Huacai,
>>
>> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
[SNIP]
>>> Signed-off-by: Huacai Chen
>>> Signed-off-by: Hongliang Tao
>>> Signed-off-by: Hua Yan
>>> Reviewed-by: Michel D?nzer
>>> Reviewed-by: Alex Deucher
>>> Reviewed-by: Lucas Stach
>>> Reviewed-by: j.glisse
>> You should probably only stick this tag on your patches after the people
>> you are naming explicitly gave their r-b for a specific version of a
>> patch.
Yes indeed, a "Reviewed-by" line usually means that the person giving 
you that line has read your code and has none or very few negative 
comments about it, e.g. something like "change this and that and then 
its "Reviewed-by: ".

>>
>> Thanks,
>> Lucas
>>> Cc: dri-devel at lists.freedesktop.org
>>> ---
>>>   drivers/gpu/drm/drm_vm.c|2 +-
>>>   drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>>>   drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>>>   include/drm/drm_sarea.h |2 ++
>>>   4 files changed, 7 insertions(+), 5 deletions(-)

>>> diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c

I would suggest to either split the patches into seperate ones for drm, 
ttm & radeon or change the subject line, cause a subject line starting 
with "drm/radeon..." usually means that you have only changed something 
in the radeon driver.

In the unlikely case that you broke someones else code it would be quite 
surprising that a patch with a subject line indicating only drm/radeon 
changes breaks common drm code.

Otherwise it is nice to know that only a few define changes gets the 
driver going on a complete different CPU platform, keep up with the good 
work.

Regards,
Christian.

>>> 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_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   0x1U /* 64kB */
>>>   #else
>>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Lucas Stach
Hello Huacai,

Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
> 1, Handle io prot correctly for MIPS.
> 2, Define SAREA_MAX as the size of one page.
> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>when use swiotlb, GPU reset occurs at resume from suspend).
> 
I still think this is wrong. You say Loongson needs SWIOTLB, but when
it's actually used you ignore it in the radeon driver code.

I looked up why you are using SWIOTLB and I don't agree with you that it
is needed. SWIOTLB just gives you bounce pages for DMA memory above
DMA32 and therefore papers over your >4GB DMA platform bug in some
cases, while hurting performance.

Please fix your DMA platform code so that region DMA is an alias for
region DMA32. It should allow you to drop all those ugly workarounds.

> Signed-off-by: Huacai Chen 
> Signed-off-by: Hongliang Tao 
> Signed-off-by: Hua Yan 
> Reviewed-by: Michel D?nzer 
> Reviewed-by: Alex Deucher 
> Reviewed-by: Lucas Stach 
> Reviewed-by: j.glisse 

You should probably only stick this tag on your patches after the people
you are naming explicitly gave their r-b for a specific version of a
patch.

Thanks,
Lucas
> Cc: dri-devel at lists.freedesktop.org
> ---
>  drivers/gpu/drm/drm_vm.c|2 +-
>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>  include/drm/drm_sarea.h |2 ++
>  4 files changed, 7 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_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   0x1U /* 64kB */
>  #else




Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Ralf Baechle
On Fri, Jun 22, 2012 at 11:39:19AM +0200, Arnaud Patard wrote:

> > --- 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);
> 
> btw, would it be a good idea to use uncached accelerated instead ?

Not unconditionally.  Only some MIPS cores support uncached accelerated.
Basically you can only assume that cache modes 2 (uncached) (3 cachable
non-coherent) are supported.  On a SMP system use of 2 and 3 may be
unwise (SGI IP27 and IP35 may throw obscure exceptions to indicate their
dislike of these.) and on multi-processor systems there is mode 5, which
is cachable coherent.

The necessary logic is too complex to got into drm_io_prot() which already
is an #ifdef mess anyway so that function should be changed to call some
sort of architecutre specific hook so that function should be changed to
call some sort of architecture specific hook...

  Ralf
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Ralf Baechle
On Fri, Jun 22, 2012 at 06:55:40PM +0800, Huacai Chen wrote:

> > btw, would it be a good idea to use uncached accelerated instead ?
> I have tried uncached accelerated, there will be random points in the
> monitor, it seems a hw issue...

Have you flushed the pages from memory before switching their cache mode
to uncached accelerated?  The MIPS architecture defines the result of
mixing cache modes as UNPREDICTABLE so be careful to flush caches before
switching cache mode of a page.

  Ralf
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 5:39 PM, Arnaud Patard
 wrote:
>
> Hi,
>
> Huacai Chen  writes:
>
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>>    when use swiotlb, GPU reset occurs at resume from suspend).
>>
>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel Dänzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>> Cc: dri-devel@lists.freedesktop.org
>> ---
>>  drivers/gpu/drm/drm_vm.c            |    2 +-
>>  drivers/gpu/drm/radeon/radeon_ttm.c |    6 +++---
>>  drivers/gpu/drm/ttm/ttm_bo_util.c   |    2 +-
>>  include/drm/drm_sarea.h             |    2 ++
>>  4 files changed, 7 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);
>
> btw, would it be a good idea to use uncached accelerated instead ?
I have tried uncached accelerated, there will be random points in the
monitor, it seems a hw issue...

>
> Arnaud
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Rtp

Hi,

Huacai Chen  writes:

> 1, Handle io prot correctly for MIPS.
> 2, Define SAREA_MAX as the size of one page.
> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>when use swiotlb, GPU reset occurs at resume from suspend).
>
> Signed-off-by: Huacai Chen 
> Signed-off-by: Hongliang Tao 
> Signed-off-by: Hua Yan 
> Reviewed-by: Michel Dänzer 
> Reviewed-by: Alex Deucher 
> Reviewed-by: Lucas Stach 
> Reviewed-by: j.glisse 
> Cc: dri-devel@lists.freedesktop.org
> ---
>  drivers/gpu/drm/drm_vm.c|2 +-
>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>  include/drm/drm_sarea.h |2 ++
>  4 files changed, 7 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);

btw, would it be a good idea to use uncached accelerated instead ?

Arnaud
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Huacai Chen
On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
> Hello Huacai,
>
> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>>    when use swiotlb, GPU reset occurs at resume from suspend).
>>
> I still think this is wrong. You say Loongson needs SWIOTLB, but when
> it's actually used you ignore it in the radeon driver code.
>
> I looked up why you are using SWIOTLB and I don't agree with you that it
> is needed. SWIOTLB just gives you bounce pages for DMA memory above
> DMA32 and therefore papers over your >4GB DMA platform bug in some
> cases, while hurting performance.
>
> Please fix your DMA platform code so that region DMA is an alias for
> region DMA32. It should allow you to drop all those ugly workarounds.
>
Hi, Lucas, I disable SWIOTLB and still make sure DMA <4G, radeon and
sound card seems work fine, but OHCI still can't work. From git log
arch/mips/cavium-octeon/dma-octeon.c, it seems Cavium also need
SWIOTLB to avoid OHCI issue.

>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel Dänzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>
> You should probably only stick this tag on your patches after the people
> you are naming explicitly gave their r-b for a specific version of a
> patch.
>
> Thanks,
> Lucas
>> Cc: dri-devel@lists.freedesktop.org
>> ---
>>  drivers/gpu/drm/drm_vm.c            |    2 +-
>>  drivers/gpu/drm/radeon/radeon_ttm.c |    6 +++---
>>  drivers/gpu/drm/ttm/ttm_bo_util.c   |    2 +-
>>  include/drm/drm_sarea.h             |    2 ++
>>  4 files changed, 7 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_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                       0x1U     /* 64kB */
>>  #else
>
>
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-22 Thread Christian König

Hello Huacai,


On 22.06.2012 07:59, Huacai Chen wrote:

On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:

Hello Huacai,

Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:

[SNIP]

Signed-off-by: Huacai Chen
Signed-off-by: Hongliang Tao
Signed-off-by: Hua Yan
Reviewed-by: Michel Dänzer
Reviewed-by: Alex Deucher
Reviewed-by: Lucas Stach
Reviewed-by: j.glisse

You should probably only stick this tag on your patches after the people
you are naming explicitly gave their r-b for a specific version of a
patch.
Yes indeed, a "Reviewed-by" line usually means that the person giving 
you that line has read your code and has none or very few negative 
comments about it, e.g. something like "change this and that and then 
its "Reviewed-by: ".




Thanks,
Lucas

Cc: dri-devel@lists.freedesktop.org
---
  drivers/gpu/drm/drm_vm.c|2 +-
  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
  include/drm/drm_sarea.h |2 ++
  4 files changed, 7 insertions(+), 5 deletions(-)



diff --git a/drivers/gpu/drm/drm_vm.c b/drivers/gpu/drm/drm_vm.c


I would suggest to either split the patches into seperate ones for drm, 
ttm & radeon or change the subject line, cause a subject line starting 
with "drm/radeon..." usually means that you have only changed something 
in the radeon driver.


In the unlikely case that you broke someones else code it would be quite 
surprising that a patch with a subject line indicating only drm/radeon 
changes breaks common drm code.


Otherwise it is nice to know that only a few define changes gets the 
driver going on a complete different CPU platform, keep up with the good 
work.


Regards,
Christian.


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_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   0x1U /* 64kB */
  #else



___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel



___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-21 Thread Huacai Chen
On Fri, Jun 22, 2012 at 1:25 PM, Lucas Stach  wrote:
> Hello Huacai,
>
> Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
>> 1, Handle io prot correctly for MIPS.
>> 2, Define SAREA_MAX as the size of one page.
>> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>>    when use swiotlb, GPU reset occurs at resume from suspend).
>>
> I still think this is wrong. You say Loongson needs SWIOTLB, but when
> it's actually used you ignore it in the radeon driver code.
>
> I looked up why you are using SWIOTLB and I don't agree with you that it
> is needed. SWIOTLB just gives you bounce pages for DMA memory above
> DMA32 and therefore papers over your >4GB DMA platform bug in some
> cases, while hurting performance.
>
> Please fix your DMA platform code so that region DMA is an alias for
> region DMA32. It should allow you to drop all those ugly workarounds.
>
Hmm, you are probably right, I think I should have a discuss with the
original author of this part of code.

>> Signed-off-by: Huacai Chen 
>> Signed-off-by: Hongliang Tao 
>> Signed-off-by: Hua Yan 
>> Reviewed-by: Michel Dänzer 
>> Reviewed-by: Alex Deucher 
>> Reviewed-by: Lucas Stach 
>> Reviewed-by: j.glisse 
>
> You should probably only stick this tag on your patches after the people
> you are naming explicitly gave their r-b for a specific version of a
> patch.
>
> Thanks,
> Lucas
>> Cc: dri-devel@lists.freedesktop.org
>> ---
>>  drivers/gpu/drm/drm_vm.c            |    2 +-
>>  drivers/gpu/drm/radeon/radeon_ttm.c |    6 +++---
>>  drivers/gpu/drm/ttm/ttm_bo_util.c   |    2 +-
>>  include/drm/drm_sarea.h             |    2 ++
>>  4 files changed, 7 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_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                       0x1U     /* 64kB */
>>  #else
>
>
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-21 Thread Lucas Stach
Hello Huacai,

Am Freitag, den 22.06.2012, 11:01 +0800 schrieb Huacai Chen:
> 1, Handle io prot correctly for MIPS.
> 2, Define SAREA_MAX as the size of one page.
> 3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
>when use swiotlb, GPU reset occurs at resume from suspend).
> 
I still think this is wrong. You say Loongson needs SWIOTLB, but when
it's actually used you ignore it in the radeon driver code.

I looked up why you are using SWIOTLB and I don't agree with you that it
is needed. SWIOTLB just gives you bounce pages for DMA memory above
DMA32 and therefore papers over your >4GB DMA platform bug in some
cases, while hurting performance.

Please fix your DMA platform code so that region DMA is an alias for
region DMA32. It should allow you to drop all those ugly workarounds.

> Signed-off-by: Huacai Chen 
> Signed-off-by: Hongliang Tao 
> Signed-off-by: Hua Yan 
> Reviewed-by: Michel Dänzer 
> Reviewed-by: Alex Deucher 
> Reviewed-by: Lucas Stach 
> Reviewed-by: j.glisse 

You should probably only stick this tag on your patches after the people
you are naming explicitly gave their r-b for a specific version of a
patch.

Thanks,
Lucas
> Cc: dri-devel@lists.freedesktop.org
> ---
>  drivers/gpu/drm/drm_vm.c|2 +-
>  drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
>  drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
>  include/drm/drm_sarea.h |2 ++
>  4 files changed, 7 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_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   0x1U /* 64kB */
>  #else


___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH V3 11/16] drm/radeon: Make radeon card usable for Loongson.

2012-06-21 Thread Huacai Chen
1, Handle io prot correctly for MIPS.
2, Define SAREA_MAX as the size of one page.
3, Don't use swiotlb on Loongson machines (Loonson need swioitlb, but
   when use swiotlb, GPU reset occurs at resume from suspend).

Signed-off-by: Huacai Chen 
Signed-off-by: Hongliang Tao 
Signed-off-by: Hua Yan 
Reviewed-by: Michel Dänzer 
Reviewed-by: Alex Deucher 
Reviewed-by: Lucas Stach 
Reviewed-by: j.glisse 
Cc: dri-devel@lists.freedesktop.org
---
 drivers/gpu/drm/drm_vm.c|2 +-
 drivers/gpu/drm/radeon/radeon_ttm.c |6 +++---
 drivers/gpu/drm/ttm/ttm_bo_util.c   |2 +-
 include/drm/drm_sarea.h |2 ++
 4 files changed, 7 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_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   0x1U   /* 64kB */
 #else
-- 
1.7.7.3

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel