[PATCH] drm/exynos: allocate non-contigous buffers when iommu is enabled
Inki Dae
inki.dae at samsung.com
Wed May 21 23:41:02 PDT 2014
On 2014년 05월 22일 14:25, Rahul Sharma wrote:
> Hi Inki,
>
> The below fix doesn't affect the FB dev buffer allocation. IMO the scenario
> where u-boot allocates the buffer is not disturbed.
> Please review the implementation.
>
Applied.
Thanks,
Inki Dae
> Regards,
> Rahul Sharma.
>
> On 7 May 2014 17:21, Rahul Sharma <rahul.sharma at samsung.com> wrote:
>> From: Rahul Sharma <Rahul.Sharma at samsung.com>
>>
>> Allow to allocate non-contigous buffers when iommu is enabled.
>> Currently, it tries to allocates contigous buffer which consistently
>> fail for large buffers and then fall back to non contigous. Apart
>> from being slow, this implementation is also very noisy and fills
>> the screen with alloc fail logs.
>>
>> Change-Id: I523e95aa308122ed2edc55e065ae6eb8be996541
>> Signed-off-by: Rahul Sharma <Rahul.Sharma at samsung.com>
>> ---
>> drivers/gpu/drm/exynos/exynos_drm_gem.c | 22 ++++++++++------------
>> 1 file changed, 10 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> index 5d88924..7136945 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> @@ -624,22 +624,20 @@ int exynos_drm_gem_dumb_create(struct drm_file *file_priv,
>> args->pitch = args->width * ((args->bpp + 7) / 8);
>> args->size = args->pitch * args->height;
>>
>> - exynos_gem_obj = exynos_drm_gem_create(dev, EXYNOS_BO_CONTIG |
>> - EXYNOS_BO_WC, args->size);
>> - /*
>> - * If physically contiguous memory allocation fails and if IOMMU is
>> - * supported then try to get buffer from non physically contiguous
>> - * memory area.
>> - */
>> - if (IS_ERR(exynos_gem_obj) && is_drm_iommu_supported(dev)) {
>> - dev_warn(dev->dev, "contiguous FB allocation failed, falling back to non-contiguous\n");
>> + if (is_drm_iommu_supported(dev)) {
>> + exynos_gem_obj = exynos_drm_gem_create(dev,
>> + EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
>> + args->size);
>> + } else {
>> exynos_gem_obj = exynos_drm_gem_create(dev,
>> - EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
>> - args->size);
>> + EXYNOS_BO_CONTIG | EXYNOS_BO_WC,
>> + args->size);
>> }
>>
>> - if (IS_ERR(exynos_gem_obj))
>> + if (IS_ERR(exynos_gem_obj)) {
>> + dev_warn(dev->dev, "FB allocation failed.\n");
>> return PTR_ERR(exynos_gem_obj);
>> + }
>>
>> ret = exynos_drm_gem_handle_create(&exynos_gem_obj->base, file_priv,
>> &args->handle);
>> --
>> 1.7.9.5
>>
>
More information about the dri-devel
mailing list