[PATCH] drm/ttm: ioremap buffer according to TTM mem caching setting

Christian König ckoenig.leichtzumerken at gmail.com
Thu Mar 4 17:31:44 UTC 2021


Am 04.03.21 um 18:01 schrieb Bhardwaj, Rajneesh:
> I was wondering if a managed version of such API exists but looks like 
> none. We only have devm_ioremap_wc but that is valid only for 
> PAGE_CACHE_MODE_WC whereas ioremap_cache uses _WB. One more small 
> comment below.
>
>
> Acked-by: Rajneesh Bhardwaj <rajneesh.bhardwaj at amd.com>
>
> On 3/4/2021 11:04 AM, Oak Zeng wrote:
>> If tbo.mem.bus.caching is cached, buffer is intended to be mapped
>> as cached from CPU. Map it with ioremap_cache.
>>
>> This wasn't necessary before as device memory was never mapped
>> as cached from CPU side. It becomes necessary for aldebaran as
>> device memory is mapped cached from CPU.
>>
>> Signed-off-by: Oak Zeng <Oak.Zeng at amd.com>
>> Reviewed-by: Christian Konig <Christian.Koenig at amd.com>
>> ---
>>   drivers/gpu/drm/ttm/ttm_bo_util.c | 14 ++++++++++++++
>>   1 file changed, 14 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
>> b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index 031e581..7429464 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -91,6 +91,10 @@ static int ttm_resource_ioremap(struct ttm_device 
>> *bdev,
>>             if (mem->bus.caching == ttm_write_combined)
>>               addr = ioremap_wc(mem->bus.offset, bus_size);
>> +#ifdef CONFIG_X86
>
>
> Please use #if defined (CONFIG_X86)

Actually #ifdef is usually preferred.

Christian.

>
>> +        else if (mem->bus.caching == ttm_cached)
>> +            addr = ioremap_cache(mem->bus.offset, bus_size);
>> +#endif
>>           else
>>               addr = ioremap(mem->bus.offset, bus_size);
>>           if (!addr) {
>> @@ -372,6 +376,11 @@ static int ttm_bo_ioremap(struct 
>> ttm_buffer_object *bo,
>>           if (mem->bus.caching == ttm_write_combined)
>>               map->virtual = ioremap_wc(bo->mem.bus.offset + offset,
>>                             size);
>> +#ifdef CONFIG_X86
>> +        else if (mem->bus.caching == ttm_cached)
>> +            map->virtual = ioremap_cache(bo->mem.bus.offset + offset,
>> +                          size);
>> +#endif
>>           else
>>               map->virtual = ioremap(bo->mem.bus.offset + offset,
>>                              size);
>> @@ -490,6 +499,11 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct dma_buf_map *map)
>>           else if (mem->bus.caching == ttm_write_combined)
>>               vaddr_iomem = ioremap_wc(mem->bus.offset,
>>                            bo->base.size);
>> +        else if (mem->bus.caching == ttm_cached)
>> +#ifdef CONFIG_X86
>> +            vaddr_iomem = ioremap_cache(mem->bus.offset,
>> +                          bo->base.size);
>> +#endif
>>           else
>>               vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx



More information about the amd-gfx mailing list