diff --git a/drivers/amlogic/drm/meson_drv.c b/drivers/amlogic/drm/meson_drv.c index be96432e8fb3..bfa68937374d 100644 --- a/drivers/amlogic/drm/meson_drv.c +++ b/drivers/amlogic/drm/meson_drv.c @@ -176,7 +176,7 @@ static struct drm_driver meson_driver = { * If gem_prime_import_sg_table is NULL,only buffer created * by meson driver can be imported ok. */ - /*.gem_prime_import_sg_table = am_meson_gem_prime_import_sg_table,*/ + .gem_prime_import_sg_table = am_meson_gem_prime_import_sg_table, .gem_prime_vmap = am_meson_gem_prime_vmap, .gem_prime_vunmap = am_meson_gem_prime_vunmap, diff --git a/drivers/amlogic/drm/meson_gem.c b/drivers/amlogic/drm/meson_gem.c index 051cfceef449..4c6ef32a2098 100644 --- a/drivers/amlogic/drm/meson_gem.c +++ b/drivers/amlogic/drm/meson_gem.c @@ -133,7 +133,7 @@ void am_meson_gem_object_free(struct drm_gem_object *obj) if (obj->import_attach == false) am_meson_gem_free_ion_buf(obj->dev, meson_gem_obj); else - DRM_ERROR("Not support import buffer from other driver.\n"); + drm_prime_gem_destroy(obj, meson_gem_obj->sg); drm_gem_free_mmap_offset(obj); @@ -219,9 +219,8 @@ int am_meson_gem_object_get_phyaddr( int addr; size_t len; - if (!meson_gem->handle) { - DRM_INFO("%s handle null\n", __func__); - return -1; + if (meson_gem->sg) { + return meson_gem->addr; } ion_phys(drm->gem_client, meson_gem->handle, @@ -439,7 +438,8 @@ struct drm_gem_object *am_meson_gem_prime_import_sg_table( } DRM_DEBUG("%s: %p, sg_table %p\n", __func__, meson_gem_obj, sgt); - /*meson_gem_obj->sgt = sgt;*/ + meson_gem_obj->sg = sgt; + meson_gem_obj->addr = sg_dma_address(sgt->sgl); return &meson_gem_obj->base; } diff --git a/drivers/amlogic/drm/meson_gem.h b/drivers/amlogic/drm/meson_gem.h index 212a6aa90eca..c644112bd8fc 100644 --- a/drivers/amlogic/drm/meson_gem.h +++ b/drivers/amlogic/drm/meson_gem.h @@ -30,6 +30,10 @@ struct am_meson_gem_object { /*for buffer create from ion heap */ struct ion_handle *handle; bool bscatter; + + /* for buffer import form other driver */ + phys_addr_t addr; + struct sg_table *sg; }; /* GEM MANAGER CREATE*/