Skip to content

Commit 3e10d2f

Browse files
author
Thomas Zimmermann
committed
drm/hisilicon/hibmc: Replace struct hibmc_framebuffer with generic code
The hibmc driver's struct hibmc_framebuffer stores a DRM framebuffer with an associated GEM object. This functionality is also provided by generic code. Switch hibmc over. Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Daniel Vetter <[email protected]> Acked-by: Sam Ravnborg <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent a882485 commit 3e10d2f

File tree

3 files changed

+3
-81
lines changed

3 files changed

+3
-81
lines changed

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
9999
s64 gpu_addr = 0;
100100
unsigned int line_l;
101101
struct hibmc_drm_private *priv = plane->dev->dev_private;
102-
struct hibmc_framebuffer *hibmc_fb;
103102
struct drm_gem_vram_object *gbo;
104103

105104
if (!state->fb)
106105
return;
107106

108-
hibmc_fb = to_hibmc_framebuffer(state->fb);
109-
gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
107+
gbo = drm_gem_vram_of_gem(state->fb->obj[0]);
110108

111109
gpu_addr = drm_gem_vram_offset(gbo);
112110
if (WARN_ON_ONCE(gpu_addr < 0))

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@
2020
struct drm_device;
2121
struct drm_gem_object;
2222

23-
struct hibmc_framebuffer {
24-
struct drm_framebuffer fb;
25-
struct drm_gem_object *obj;
26-
};
27-
2823
struct hibmc_drm_private {
2924
/* hw */
3025
void __iomem *mmio;
@@ -38,8 +33,6 @@ struct hibmc_drm_private {
3833
bool mode_config_initialized;
3934
};
4035

41-
#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
42-
4336
void hibmc_set_power_mode(struct hibmc_drm_private *priv,
4437
unsigned int power_mode);
4538
void hibmc_set_current_gate(struct hibmc_drm_private *priv,
@@ -50,10 +43,6 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv);
5043

5144
int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
5245
struct drm_gem_object **obj);
53-
struct hibmc_framebuffer *
54-
hibmc_framebuffer_init(struct drm_device *dev,
55-
const struct drm_mode_fb_cmd2 *mode_cmd,
56-
struct drm_gem_object *obj);
5746

5847
int hibmc_mm_init(struct hibmc_drm_private *hibmc);
5948
void hibmc_mm_fini(struct hibmc_drm_private *hibmc);

drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c

Lines changed: 2 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include <drm/drm_atomic_helper.h>
1717
#include <drm/drm_gem.h>
18+
#include <drm/drm_gem_framebuffer_helper.h>
1819
#include <drm/drm_gem_vram_helper.h>
1920
#include <drm/drm_print.h>
2021

@@ -97,74 +98,8 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
9798
return 0;
9899
}
99100

100-
static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
101-
{
102-
struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
103-
104-
drm_gem_object_put_unlocked(hibmc_fb->obj);
105-
drm_framebuffer_cleanup(fb);
106-
kfree(hibmc_fb);
107-
}
108-
109-
static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
110-
.destroy = hibmc_user_framebuffer_destroy,
111-
};
112-
113-
struct hibmc_framebuffer *
114-
hibmc_framebuffer_init(struct drm_device *dev,
115-
const struct drm_mode_fb_cmd2 *mode_cmd,
116-
struct drm_gem_object *obj)
117-
{
118-
struct hibmc_framebuffer *hibmc_fb;
119-
int ret;
120-
121-
hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
122-
if (!hibmc_fb) {
123-
DRM_ERROR("failed to allocate hibmc_fb\n");
124-
return ERR_PTR(-ENOMEM);
125-
}
126-
127-
drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
128-
hibmc_fb->obj = obj;
129-
ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
130-
if (ret) {
131-
DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
132-
kfree(hibmc_fb);
133-
return ERR_PTR(ret);
134-
}
135-
136-
return hibmc_fb;
137-
}
138-
139-
static struct drm_framebuffer *
140-
hibmc_user_framebuffer_create(struct drm_device *dev,
141-
struct drm_file *filp,
142-
const struct drm_mode_fb_cmd2 *mode_cmd)
143-
{
144-
struct drm_gem_object *obj;
145-
struct hibmc_framebuffer *hibmc_fb;
146-
147-
DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
148-
mode_cmd->width, mode_cmd->height,
149-
(mode_cmd->pixel_format) & 0xff,
150-
(mode_cmd->pixel_format >> 8) & 0xff,
151-
(mode_cmd->pixel_format >> 16) & 0xff,
152-
(mode_cmd->pixel_format >> 24) & 0xff);
153-
154-
obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
155-
if (!obj)
156-
return ERR_PTR(-ENOENT);
157-
158-
hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
159-
if (IS_ERR(hibmc_fb)) {
160-
drm_gem_object_put_unlocked(obj);
161-
return ERR_PTR((long)hibmc_fb);
162-
}
163-
return &hibmc_fb->fb;
164-
}
165-
166101
const struct drm_mode_config_funcs hibmc_mode_funcs = {
167102
.atomic_check = drm_atomic_helper_check,
168103
.atomic_commit = drm_atomic_helper_commit,
169-
.fb_create = hibmc_user_framebuffer_create,
104+
.fb_create = drm_gem_fb_create,
170105
};

0 commit comments

Comments
 (0)