diff mbox

drm/exynos: Add fallback option to get non physically contiguous memory for gem_dumb_create

Message ID 1377239706-17804-1-git-send-email-vikas.sajjan@linaro.org
State Accepted
Commit 3fec4532d112a4b8427ded6725a7f00d75023886
Headers show

Commit Message

Vikas C Sajjan Aug. 23, 2013, 6:35 a.m. UTC
To address the case where physically contiguous memory MAY NOT be a mandatory
requirement for framebuffer for the application calling exynos_drm_gem_dumb_create,
the patch adds a feature to get non physically contiguous memory for framebuffer,
if physically contiguous memory allocation fails and if IOMMU is supported.

Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
Signed-off-by: Arun Kumar <arun.kk@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Vikas Sajjan Aug. 26, 2013, 2:03 p.m. UTC | #1
adding linux-samsung-soc mailing list and Dave Airlie.

On Fri, Aug 23, 2013 at 12:05 PM, Vikas Sajjan <vikas.sajjan@linaro.org> wrote:
> To address the case where physically contiguous memory MAY NOT be a mandatory
> requirement for framebuffer for the application calling exynos_drm_gem_dumb_create,
> the patch adds a feature to get non physically contiguous memory for framebuffer,
> if physically contiguous memory allocation fails and if IOMMU is supported.
>
> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
> Signed-off-by: Arun Kumar <arun.kk@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> index 2eabe1a..66d1b40 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> @@ -17,6 +17,7 @@
>  #include "exynos_drm_drv.h"
>  #include "exynos_drm_gem.h"
>  #include "exynos_drm_buf.h"
> +#include "exynos_drm_iommu.h"
>
>  static unsigned int convert_to_vm_err_msg(int msg)
>  {
> @@ -666,6 +667,18 @@ int exynos_drm_gem_dumb_create(struct drm_file *file_priv,
>
>         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");
> +               exynos_gem_obj = exynos_drm_gem_create(dev,
> +                                       EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
> +                                       args->size);
> +       }
> +
>         if (IS_ERR(exynos_gem_obj))
>                 return PTR_ERR(exynos_gem_obj);
>
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
Inki Dae Aug. 27, 2013, 2:44 a.m. UTC | #2
Applied.

Thanks,
Inki Dae

> -----Original Message-----
> From: Vikas Sajjan [mailto:vikas.sajjan@linaro.org]
> Sent: Friday, August 23, 2013 3:35 PM
> To: dri-devel@lists.freedesktop.org; inki.dae@samsung.com
> Cc: kgene.kim@samsung.com; s.nawrocki@samsung.com; robdclark@gmail.com;
> tomasz.figa@gmail.com; laurent.pinchart@ideasonboard.com;
> patches@linaro.org; linaro-dev@lists.linaro.org
> Subject: [PATCH] drm/exynos: Add fallback option to get non physically
> contiguous memory for gem_dumb_create
> 
> To address the case where physically contiguous memory MAY NOT be a
> mandatory
> requirement for framebuffer for the application calling
> exynos_drm_gem_dumb_create,
> the patch adds a feature to get non physically contiguous memory for
> framebuffer,
> if physically contiguous memory allocation fails and if IOMMU is
supported.
> 
> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
> Signed-off-by: Arun Kumar <arun.kk@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> index 2eabe1a..66d1b40 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> @@ -17,6 +17,7 @@
>  #include "exynos_drm_drv.h"
>  #include "exynos_drm_gem.h"
>  #include "exynos_drm_buf.h"
> +#include "exynos_drm_iommu.h"
> 
>  static unsigned int convert_to_vm_err_msg(int msg)
>  {
> @@ -666,6 +667,18 @@ int exynos_drm_gem_dumb_create(struct drm_file
> *file_priv,
> 
>  	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");
> +		exynos_gem_obj = exynos_drm_gem_create(dev,
> +					EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
> +					args->size);
> +	}
> +
>  	if (IS_ERR(exynos_gem_obj))
>  		return PTR_ERR(exynos_gem_obj);
> 
> --
> 1.7.9.5
Vikas C Sajjan Aug. 27, 2013, 3:04 a.m. UTC | #3
Thanks.

On 27 August 2013 08:14, Inki Dae <inki.dae@samsung.com> wrote:
> Applied.
>
> Thanks,
> Inki Dae
>
>> -----Original Message-----
>> From: Vikas Sajjan [mailto:vikas.sajjan@linaro.org]
>> Sent: Friday, August 23, 2013 3:35 PM
>> To: dri-devel@lists.freedesktop.org; inki.dae@samsung.com
>> Cc: kgene.kim@samsung.com; s.nawrocki@samsung.com; robdclark@gmail.com;
>> tomasz.figa@gmail.com; laurent.pinchart@ideasonboard.com;
>> patches@linaro.org; linaro-dev@lists.linaro.org
>> Subject: [PATCH] drm/exynos: Add fallback option to get non physically
>> contiguous memory for gem_dumb_create
>>
>> To address the case where physically contiguous memory MAY NOT be a
>> mandatory
>> requirement for framebuffer for the application calling
>> exynos_drm_gem_dumb_create,
>> the patch adds a feature to get non physically contiguous memory for
>> framebuffer,
>> if physically contiguous memory allocation fails and if IOMMU is
> supported.
>>
>> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>> Signed-off-by: Arun Kumar <arun.kk@samsung.com>
>> ---
>>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
>>  1 file changed, 13 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> index 2eabe1a..66d1b40 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> @@ -17,6 +17,7 @@
>>  #include "exynos_drm_drv.h"
>>  #include "exynos_drm_gem.h"
>>  #include "exynos_drm_buf.h"
>> +#include "exynos_drm_iommu.h"
>>
>>  static unsigned int convert_to_vm_err_msg(int msg)
>>  {
>> @@ -666,6 +667,18 @@ int exynos_drm_gem_dumb_create(struct drm_file
>> *file_priv,
>>
>>       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");
>> +             exynos_gem_obj = exynos_drm_gem_create(dev,
>> +                                     EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
>> +                                     args->size);
>> +     }
>> +
>>       if (IS_ERR(exynos_gem_obj))
>>               return PTR_ERR(exynos_gem_obj);
>>
>> --
>> 1.7.9.5
>
Inki Dae Aug. 27, 2013, 4:14 a.m. UTC | #4
One more thing, changed the subject to "Consider fallback option to
allocation fail". The subject is too long :)

Thanks,
Inki Dae


> -----Original Message-----
> From: linux-samsung-soc-owner@vger.kernel.org [mailto:linux-samsung-soc-
> owner@vger.kernel.org] On Behalf Of Vikas Sajjan
> Sent: Tuesday, August 27, 2013 12:05 PM
> To: Inki Dae
> Cc: DRI mailing list; kgene.kim; Sylwester Nawrocki; Rob Clark; Tomasz
> Figa; Laurent Pinchart; Patch Tracking; linaro-dev@lists.linaro.org; sunil
> joshi; linux-samsung-soc@vger.kernel.org
> Subject: Re: [PATCH] drm/exynos: Add fallback option to get non physically
> contiguous memory for gem_dumb_create
> 
> Thanks.
> 
> On 27 August 2013 08:14, Inki Dae <inki.dae@samsung.com> wrote:
> > Applied.
> >
> > Thanks,
> > Inki Dae
> >
> >> -----Original Message-----
> >> From: Vikas Sajjan [mailto:vikas.sajjan@linaro.org]
> >> Sent: Friday, August 23, 2013 3:35 PM
> >> To: dri-devel@lists.freedesktop.org; inki.dae@samsung.com
> >> Cc: kgene.kim@samsung.com; s.nawrocki@samsung.com; robdclark@gmail.com;
> >> tomasz.figa@gmail.com; laurent.pinchart@ideasonboard.com;
> >> patches@linaro.org; linaro-dev@lists.linaro.org
> >> Subject: [PATCH] drm/exynos: Add fallback option to get non physically
> >> contiguous memory for gem_dumb_create
> >>
> >> To address the case where physically contiguous memory MAY NOT be a
> >> mandatory
> >> requirement for framebuffer for the application calling
> >> exynos_drm_gem_dumb_create,
> >> the patch adds a feature to get non physically contiguous memory for
> >> framebuffer,
> >> if physically contiguous memory allocation fails and if IOMMU is
> > supported.
> >>
> >> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
> >> Signed-off-by: Arun Kumar <arun.kk@samsung.com>
> >> ---
> >>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
> >>  1 file changed, 13 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> >> b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> >> index 2eabe1a..66d1b40 100644
> >> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
> >> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
> >> @@ -17,6 +17,7 @@
> >>  #include "exynos_drm_drv.h"
> >>  #include "exynos_drm_gem.h"
> >>  #include "exynos_drm_buf.h"
> >> +#include "exynos_drm_iommu.h"
> >>
> >>  static unsigned int convert_to_vm_err_msg(int msg)
> >>  {
> >> @@ -666,6 +667,18 @@ int exynos_drm_gem_dumb_create(struct drm_file
> >> *file_priv,
> >>
> >>       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");
> >> +             exynos_gem_obj = exynos_drm_gem_create(dev,
> >> +                                     EXYNOS_BO_NONCONTIG |
EXYNOS_BO_WC,
> >> +                                     args->size);
> >> +     }
> >> +
> >>       if (IS_ERR(exynos_gem_obj))
> >>               return PTR_ERR(exynos_gem_obj);
> >>
> >> --
> >> 1.7.9.5
> >
> 
> 
> 
> --
> Thanks and Regards
>  Vikas Sajjan
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-
> soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Vikas C Sajjan Aug. 27, 2013, 4:22 a.m. UTC | #5
OK.

On 27 August 2013 09:44, Inki Dae <inki.dae@samsung.com> wrote:
>
> One more thing, changed the subject to "Consider fallback option to
> allocation fail". The subject is too long :)
>
> Thanks,
> Inki Dae
>
>
>> -----Original Message-----
>> From: linux-samsung-soc-owner@vger.kernel.org [mailto:linux-samsung-soc-
>> owner@vger.kernel.org] On Behalf Of Vikas Sajjan
>> Sent: Tuesday, August 27, 2013 12:05 PM
>> To: Inki Dae
>> Cc: DRI mailing list; kgene.kim; Sylwester Nawrocki; Rob Clark; Tomasz
>> Figa; Laurent Pinchart; Patch Tracking; linaro-dev@lists.linaro.org; sunil
>> joshi; linux-samsung-soc@vger.kernel.org
>> Subject: Re: [PATCH] drm/exynos: Add fallback option to get non physically
>> contiguous memory for gem_dumb_create
>>
>> Thanks.
>>
>> On 27 August 2013 08:14, Inki Dae <inki.dae@samsung.com> wrote:
>> > Applied.
>> >
>> > Thanks,
>> > Inki Dae
>> >
>> >> -----Original Message-----
>> >> From: Vikas Sajjan [mailto:vikas.sajjan@linaro.org]
>> >> Sent: Friday, August 23, 2013 3:35 PM
>> >> To: dri-devel@lists.freedesktop.org; inki.dae@samsung.com
>> >> Cc: kgene.kim@samsung.com; s.nawrocki@samsung.com; robdclark@gmail.com;
>> >> tomasz.figa@gmail.com; laurent.pinchart@ideasonboard.com;
>> >> patches@linaro.org; linaro-dev@lists.linaro.org
>> >> Subject: [PATCH] drm/exynos: Add fallback option to get non physically
>> >> contiguous memory for gem_dumb_create
>> >>
>> >> To address the case where physically contiguous memory MAY NOT be a
>> >> mandatory
>> >> requirement for framebuffer for the application calling
>> >> exynos_drm_gem_dumb_create,
>> >> the patch adds a feature to get non physically contiguous memory for
>> >> framebuffer,
>> >> if physically contiguous memory allocation fails and if IOMMU is
>> > supported.
>> >>
>> >> Signed-off-by: Vikas Sajjan <vikas.sajjan@linaro.org>
>> >> Signed-off-by: Arun Kumar <arun.kk@samsung.com>
>> >> ---
>> >>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   13 +++++++++++++
>> >>  1 file changed, 13 insertions(+)
>> >>
>> >> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> >> b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> >> index 2eabe1a..66d1b40 100644
>> >> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> >> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> >> @@ -17,6 +17,7 @@
>> >>  #include "exynos_drm_drv.h"
>> >>  #include "exynos_drm_gem.h"
>> >>  #include "exynos_drm_buf.h"
>> >> +#include "exynos_drm_iommu.h"
>> >>
>> >>  static unsigned int convert_to_vm_err_msg(int msg)
>> >>  {
>> >> @@ -666,6 +667,18 @@ int exynos_drm_gem_dumb_create(struct drm_file
>> >> *file_priv,
>> >>
>> >>       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");
>> >> +             exynos_gem_obj = exynos_drm_gem_create(dev,
>> >> +                                     EXYNOS_BO_NONCONTIG |
> EXYNOS_BO_WC,
>> >> +                                     args->size);
>> >> +     }
>> >> +
>> >>       if (IS_ERR(exynos_gem_obj))
>> >>               return PTR_ERR(exynos_gem_obj);
>> >>
>> >> --
>> >> 1.7.9.5
>> >
>>
>>
>>
>> --
>> Thanks and Regards
>>  Vikas Sajjan
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-
>> soc" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
index 2eabe1a..66d1b40 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
@@ -17,6 +17,7 @@ 
 #include "exynos_drm_drv.h"
 #include "exynos_drm_gem.h"
 #include "exynos_drm_buf.h"
+#include "exynos_drm_iommu.h"
 
 static unsigned int convert_to_vm_err_msg(int msg)
 {
@@ -666,6 +667,18 @@  int exynos_drm_gem_dumb_create(struct drm_file *file_priv,
 
 	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");
+		exynos_gem_obj = exynos_drm_gem_create(dev,
+					EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
+					args->size);
+	}
+
 	if (IS_ERR(exynos_gem_obj))
 		return PTR_ERR(exynos_gem_obj);