@@ -698,134 +698,6 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
return ret;
}
-/**
- * struct dpu_kms_fbo_fb - framebuffer creation list
- * @list: list of framebuffer attached to framebuffer object
- * @fb: Pointer to framebuffer attached to framebuffer object
- */
-struct dpu_kms_fbo_fb {
- struct list_head list;
- struct drm_framebuffer *fb;
-};
-
-struct drm_framebuffer *dpu_kms_fbo_create_fb(struct drm_device *dev,
- struct dpu_kms_fbo *fbo)
-{
- struct drm_framebuffer *fb = NULL;
- struct dpu_kms_fbo_fb *fbo_fb;
- struct drm_mode_fb_cmd2 mode_cmd = {0};
- u32 base_offset = 0;
- int i, ret;
-
- if (!dev) {
- DPU_ERROR("invalid drm device node\n");
- return NULL;
- }
-
- fbo_fb = kzalloc(sizeof(struct dpu_kms_fbo_fb), GFP_KERNEL);
- if (!fbo_fb)
- return NULL;
-
- mode_cmd.pixel_format = fbo->pixel_format;
- mode_cmd.width = fbo->width;
- mode_cmd.height = fbo->height;
- mode_cmd.flags = fbo->flags;
-
- for (i = 0; i < fbo->nplane; i++) {
- mode_cmd.offsets[i] = base_offset;
- mode_cmd.pitches[i] = fbo->layout.plane_pitch[i];
- mode_cmd.modifier[i] = fbo->modifier[i];
- base_offset += fbo->layout.plane_size[i];
- DPU_DEBUG("offset[%d]:%x\n", i, mode_cmd.offsets[i]);
- }
-
- fb = msm_framebuffer_init(dev, &mode_cmd, fbo->bo);
- if (IS_ERR(fb)) {
- ret = PTR_ERR(fb);
- fb = NULL;
- DPU_ERROR("failed to allocate fb %d\n", ret);
- goto fail;
- }
-
- /* need to take one reference for gem object */
- for (i = 0; i < fbo->nplane; i++)
- drm_gem_object_get(fbo->bo[i]);
-
- DPU_DEBUG("register private fb:%d\n", fb->base.id);
-
- INIT_LIST_HEAD(&fbo_fb->list);
- fbo_fb->fb = fb;
- drm_framebuffer_get(fbo_fb->fb);
- list_add_tail(&fbo_fb->list, &fbo->fb_list);
-
- return fb;
-
-fail:
- kfree(fbo_fb);
- return NULL;
-}
-
-static void dpu_kms_fbo_destroy(struct dpu_kms_fbo *fbo)
-{
- struct msm_drm_private *priv;
- struct dpu_kms *dpu_kms;
- struct drm_device *dev;
- struct dpu_kms_fbo_fb *curr, *next;
- int i;
-
- if (!fbo) {
- DPU_ERROR("invalid drm device node\n");
- return;
- }
- dev = fbo->dev;
-
- if (!dev || !dev->dev_private) {
- DPU_ERROR("invalid drm device node\n");
- return;
- }
- priv = dev->dev_private;
-
- if (!priv->kms) {
- DPU_ERROR("invalid kms handle\n");
- return;
- }
- dpu_kms = to_dpu_kms(priv->kms);
-
- DPU_DEBUG("%dx%d@%c%c%c%c/%llx/%x\n", fbo->width, fbo->height,
- fbo->pixel_format >> 0, fbo->pixel_format >> 8,
- fbo->pixel_format >> 16, fbo->pixel_format >> 24,
- fbo->modifier[0], fbo->flags);
-
- list_for_each_entry_safe(curr, next, &fbo->fb_list, list) {
- DPU_DEBUG("unregister private fb:%d\n", curr->fb->base.id);
- drm_framebuffer_unregister_private(curr->fb);
- drm_framebuffer_put(curr->fb);
- list_del(&curr->list);
- kfree(curr);
- }
-
- for (i = 0; i < fbo->layout.num_planes; i++) {
- if (fbo->bo[i]) {
- mutex_lock(&dev->struct_mutex);
- drm_gem_object_put(fbo->bo[i]);
- mutex_unlock(&dev->struct_mutex);
- fbo->bo[i] = NULL;
- }
- }
-
- if (fbo->dma_buf) {
- dma_buf_put(fbo->dma_buf);
- fbo->dma_buf = NULL;
- }
-
-#ifdef CONFIG_ION
- if (dpu_kms->iclient && fbo->ihandle) {
- ion_free(dpu_kms->iclient, fbo->ihandle);
- fbo->ihandle = NULL;
- }
-#endif
-}
-
#ifdef CONFIG_ION
static void dpu_kms_set_gem_flags(struct msm_gem_object *msm_obj,
uint32_t flags)
@@ -835,157 +707,6 @@ static void dpu_kms_set_gem_flags(struct msm_gem_object *msm_obj,
}
#endif
-struct dpu_kms_fbo *dpu_kms_fbo_alloc(struct drm_device *dev, u32 width,
- u32 height, u32 pixel_format, u64 modifier[4], u32 flags)
-{
- struct msm_drm_private *priv;
- struct dpu_kms *dpu_kms;
- struct dpu_kms_fbo *fbo;
- int i, ret;
-
- if (!dev || !dev->dev_private) {
- DPU_ERROR("invalid drm device node\n");
- return NULL;
- }
- priv = dev->dev_private;
-
- if (!priv->kms) {
- DPU_ERROR("invalid kms handle\n");
- return NULL;
- }
- dpu_kms = to_dpu_kms(priv->kms);
-
- DPU_DEBUG("%dx%d@%c%c%c%c/%llx/%x\n", width, height,
- pixel_format >> 0, pixel_format >> 8,
- pixel_format >> 16, pixel_format >> 24,
- modifier[0], flags);
-
- fbo = kzalloc(sizeof(struct dpu_kms_fbo), GFP_KERNEL);
- if (!fbo)
- return NULL;
-
- atomic_set(&fbo->refcount, 0);
- INIT_LIST_HEAD(&fbo->fb_list);
- fbo->dev = dev;
- fbo->width = width;
- fbo->height = height;
- fbo->pixel_format = pixel_format;
- fbo->flags = flags;
- for (i = 0; i < ARRAY_SIZE(fbo->modifier); i++)
- fbo->modifier[i] = modifier[i];
- fbo->nplane = drm_format_num_planes(fbo->pixel_format);
- fbo->fmt = dpu_get_dpu_format_ext(fbo->pixel_format, fbo->modifier[0]);
- if (!fbo->fmt) {
- ret = -EINVAL;
- DPU_ERROR("failed to find pixel format\n");
- goto done;
- }
-
- ret = dpu_format_get_plane_sizes(fbo->fmt, fbo->width, fbo->height,
- &fbo->layout, fbo->layout.plane_pitch);
- if (ret) {
- DPU_ERROR("failed to get plane sizes\n");
- goto done;
- }
-
- /* allocate backing buffer object */
- if (dpu_kms->iclient) {
-#ifdef CONFIG_ION
- u32 heap_id = ION_HEAP(ION_SYSTEM_HEAP_ID);
-
- fbo->ihandle = ion_alloc(dpu_kms->iclient,
- fbo->layout.total_size, SZ_4K, heap_id, 0);
- if (IS_ERR_OR_NULL(fbo->ihandle)) {
- DPU_ERROR("failed to alloc ion memory\n");
- ret = PTR_ERR(fbo->ihandle);
- fbo->ihandle = NULL;
- goto done;
- }
-
- fbo->dma_buf = ion_share_dma_buf(dpu_kms->iclient,
- fbo->ihandle);
- if (IS_ERR(fbo->dma_buf)) {
- DPU_ERROR("failed to share ion memory\n");
- ret = -ENOMEM;
- fbo->dma_buf = NULL;
- goto done;
- }
-
- fbo->bo[0] = dev->driver->gem_prime_import(dev,
- fbo->dma_buf);
- if (IS_ERR(fbo->bo[0])) {
- DPU_ERROR("failed to import ion memory\n");
- ret = PTR_ERR(fbo->bo[0]);
- fbo->bo[0] = NULL;
- goto done;
- }
-
- /* insert extra bo flags */
- dpu_kms_set_gem_flags(to_msm_bo(fbo->bo[0]), MSM_BO_KEEPATTRS);
-#endif
- } else {
- fbo->bo[0] = msm_gem_new(dev, fbo->layout.total_size,
- MSM_BO_SCANOUT | MSM_BO_WC);
- if (IS_ERR(fbo->bo[0])) {
- DPU_ERROR("failed to new gem buffer\n");
- ret = PTR_ERR(fbo->bo[0]);
- fbo->bo[0] = NULL;
- goto done;
- }
- }
-
- mutex_lock(&dev->struct_mutex);
- for (i = 1; i < fbo->layout.num_planes; i++) {
- fbo->bo[i] = fbo->bo[0];
- drm_gem_object_get(fbo->bo[i]);
- }
- mutex_unlock(&dev->struct_mutex);
-
-done:
- if (ret) {
- dpu_kms_fbo_destroy(fbo);
- kfree(fbo);
- fbo = NULL;
- } else {
- dpu_kms_fbo_reference(fbo);
- }
-
- return fbo;
-}
-
-int dpu_kms_fbo_reference(struct dpu_kms_fbo *fbo)
-{
- if (!fbo) {
- DPU_ERROR("invalid parameters\n");
- return -EINVAL;
- }
-
- DPU_DEBUG("%pS refcount:%d\n", __builtin_return_address(0),
- atomic_read(&fbo->refcount));
-
- atomic_inc(&fbo->refcount);
-
- return 0;
-}
-
-void dpu_kms_fbo_unreference(struct dpu_kms_fbo *fbo)
-{
- if (!fbo) {
- DPU_ERROR("invalid parameters\n");
- return;
- }
-
- DPU_DEBUG("%pS refcount:%d\n", __builtin_return_address(0),
- atomic_read(&fbo->refcount));
-
- if (!atomic_read(&fbo->refcount)) {
- DPU_ERROR("invalid refcount\n");
- return;
- } else if (atomic_dec_return(&fbo->refcount) == 0) {
- dpu_kms_fbo_destroy(fbo);
- }
-}
-
#ifdef CONFIG_DEBUG_FS
static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor)
{
@@ -110,37 +110,6 @@ struct dpu_irq {
struct dentry *debugfs_file;
};
-/**
- * struct dpu_kms_fbo - framebuffer memory object
- * @refcount: reference/usage count of this object
- * @dev: Pointer to containing drm device
- * @width: width of the framebuffer
- * @height: height of the framebuffer
- * @flags: drm framebuffer flags
- * @modifier: pixel format modifier of the framebuffer
- * @fmt: Pointer to dpu format descriptor
- * @layout: dpu format layout descriptor
- * @ihandle: framebuffer object ion handle
- * @dma_buf: framebuffer object dma buffer
- * @bo: per plane buffer object
- * @fb_list: llist of fb created from this buffer object
- */
-struct dpu_kms_fbo {
- atomic_t refcount;
- struct drm_device *dev;
- u32 width, height;
- u32 pixel_format;
- u32 flags;
- u64 modifier[4];
- int nplane;
- const struct dpu_format *fmt;
- struct dpu_hw_fmt_layout layout;
- struct ion_handle *ihandle;
- struct dma_buf *dma_buf;
- struct drm_gem_object *bo[4];
- struct list_head fb_list;
-};
-
struct dpu_kms {
struct msm_kms base;
struct drm_device *dev;
@@ -426,44 +395,6 @@ void dpu_kms_info_stop(struct dpu_kms_info *info);
int dpu_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
void dpu_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc);
-/**
- * dpu_kms_fbo_create_fb - create framebuffer from given framebuffer object
- * @dev: Pointer to drm device
- * @fbo: Pointer to framebuffer object
- * return: Pointer to drm framebuffer on success; NULL on error
- */
-struct drm_framebuffer *dpu_kms_fbo_create_fb(struct drm_device *dev,
- struct dpu_kms_fbo *fbo);
-
-/**
- * dpu_kms_fbo_alloc - create framebuffer object with given format parameters
- * @dev: pointer to drm device
- * @width: width of framebuffer
- * @height: height of framebuffer
- * @pixel_format: pixel format of framebuffer
- * @modifier: pixel format modifier
- * @flags: DRM_MODE_FB flags
- * return: Pointer to framebuffer memory object on success; NULL on error
- */
-struct dpu_kms_fbo *dpu_kms_fbo_alloc(struct drm_device *dev,
- u32 width, u32 height, u32 pixel_format,
- u64 modifiers[4], u32 flags);
-
-/**
- * dpu_kms_fbo_reference - increment reference count of given framebuffer object
- * @fbo: Pointer to framebuffer memory object
- * return: 0 on success; error code otherwise
- */
-int dpu_kms_fbo_reference(struct dpu_kms_fbo *fbo);
-
-/**
- * dpu_kms_fbo_unreference - decrement reference count of given framebuffer
- * object
- * @fbo: Pointer to framebuffer memory object
- * return: 0 on success; error code otherwise
- */
-void dpu_kms_fbo_unreference(struct dpu_kms_fbo *fbo);
-
void dpu_kms_encoder_enable(struct drm_encoder *encoder);
/**
@@ -339,9 +339,6 @@ uint32_t msm_framebuffer_iova(struct drm_framebuffer *fb,
uint32_t msm_framebuffer_phys(struct drm_framebuffer *fb, int plane);
struct drm_gem_object *msm_framebuffer_bo(struct drm_framebuffer *fb, int plane);
const struct msm_format *msm_framebuffer_format(struct drm_framebuffer *fb);
-struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
- const struct drm_mode_fb_cmd2 *mode_cmd,
- struct drm_gem_object **bos);
struct drm_framebuffer *msm_framebuffer_create(struct drm_device *dev,
struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd);
struct drm_framebuffer * msm_alloc_stolen_fb(struct drm_device *dev,
@@ -29,6 +29,8 @@ struct msm_framebuffer {
};
#define to_msm_framebuffer(x) container_of(x, struct msm_framebuffer, base)
+static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
+ const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos);
static int msm_framebuffer_create_handle(struct drm_framebuffer *fb,
struct drm_file *file_priv,
@@ -161,7 +163,7 @@ struct drm_framebuffer *msm_framebuffer_create(struct drm_device *dev,
return ERR_PTR(ret);
}
-struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
+static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos)
{
struct msm_drm_private *priv = dev->dev_private;
It's not used anywhere and it lets us revert the changes to msm_fb to match upstream. Signed-off-by: Sean Paul <seanpaul@chromium.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 279 ------------------------ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 69 ------ drivers/gpu/drm/msm/msm_drv.h | 3 - drivers/gpu/drm/msm/msm_fb.c | 4 +- 4 files changed, 3 insertions(+), 352 deletions(-)