drm: add gem import interface to support drm-hwc [1/1]

PD#SWPL-11320

Problem:
current gem driver have not implementted the import interface.
For drm-hwc in android, gralloc allocate the dumb buffer, it
should use the import interface to import the allocated buffer
to the drm driver.

Solution:
implement the gem import interface

Verify:
g12a-u200

Change-Id: I32f7705fd67853a1000875b2af69fcaf700330e1
Signed-off-by: Ao Xu <ao.xu@amlogic.com>
This commit is contained in:
Ao Xu
2019-08-19 11:04:39 +08:00
committed by Luke Go
parent 455c74d2d8
commit d45e20a596
3 changed files with 10 additions and 6 deletions

View File

@@ -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,

View File

@@ -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;
}

View File

@@ -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*/