2626#include <linux/pm_runtime.h>
2727
2828#include "atmel_hlcdc_dc.h"
29+ #include <drm/atmel_drm.h>
2930
3031#define ATMEL_HLCDC_LAYER_IRQS_OFFSET 8
3132
@@ -740,6 +741,41 @@ static void atmel_hlcdc_dc_irq_uninstall(struct drm_device *dev)
740741
741742DEFINE_DRM_GEM_CMA_FOPS (fops );
742743
744+ /*
745+ ioctl to export the physical address of GEM to user space for
746+ video decoder
747+ */
748+ int atmel_drm_gem_get_ioctl (struct drm_device * drm , void * data ,
749+ struct drm_file * file_priv )
750+ {
751+ struct drm_gem_object * gem_obj ;
752+ struct drm_gem_cma_object * cma_obj ;
753+ struct drm_mode_map_dumb * args = data ;
754+
755+ mutex_lock (& drm -> struct_mutex );
756+
757+ gem_obj = drm_gem_object_lookup (file_priv , args -> handle );
758+ if (!gem_obj ) {
759+ dev_err (drm -> dev , "failed to lookup gem object\n" );
760+ mutex_unlock (& drm -> struct_mutex );
761+ return - EINVAL ;
762+ }
763+
764+ cma_obj = to_drm_gem_cma_obj (gem_obj );
765+ args -> offset = (__u64 )cma_obj -> paddr ;
766+
767+ drm_gem_object_unreference (gem_obj );
768+
769+ mutex_unlock (& drm -> struct_mutex );
770+
771+ return 0 ;
772+ }
773+ static const struct drm_ioctl_desc atmel_ioctls [] = {
774+ DRM_IOCTL_DEF_DRV (ATMEL_GEM_GET , atmel_drm_gem_get_ioctl ,
775+ DRM_CONTROL_ALLOW |DRM_UNLOCKED ),
776+ };
777+
778+
743779static struct drm_driver atmel_hlcdc_dc_driver = {
744780 .driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
745781 DRIVER_MODESET | DRIVER_PRIME |
@@ -761,6 +797,8 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
761797 .gem_prime_vunmap = drm_gem_cma_prime_vunmap ,
762798 .gem_prime_mmap = drm_gem_cma_prime_mmap ,
763799 .dumb_create = drm_gem_cma_dumb_create ,
800+ .ioctls = atmel_ioctls ,
801+ .num_ioctls = ARRAY_SIZE (atmel_ioctls ),
764802 .fops = & fops ,
765803 .name = "atmel-hlcdc" ,
766804 .desc = "Atmel HLCD Controller DRM" ,
@@ -786,6 +824,7 @@ static int atmel_hlcdc_dc_drm_probe(struct platform_device *pdev)
786824 if (ret )
787825 goto err_unload ;
788826
827+ dev_info (ddev -> dev , "DRM device successfully registered\n" );
789828 return 0 ;
790829
791830err_unload :
0 commit comments