Merge tag 'drm-misc-next-2018-06-21' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for 4.19: UAPI Changes: - Add writeback connector (Brian Starkey/Liviu Dudau) - Add "content type" property to HDMI connectors (Stanislav Lisovskiy) Cross-subsystem Changes: - some devicetree Docs update - fix compile breakage on ION due to the dma-buf cleanups (Christian König) Core Changes: - Reject over-sized allocation requests early (Chris Wilson) - gem-fb-helper: Always do implicit sync (Daniel Vetter) - dma-buf cleanups (Christian König) Driver Changes: - Fixes for the otm8009a panel driver (Philippe Cornu) - Add Innolux TV123WAM panel driver support (Sandeep Panda) - Move GEM BO to drm_framebuffer in few drivers (Daniel Stone) - i915 pinning improvements (Chris Wilson) - Stop consulting plane->fb/crtc in a few drivers (Ville Syrjälä) Signed-off-by: Dave Airlie <airlied@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180621105428.GA20795@juma
This commit is contained in:
@@ -201,7 +201,7 @@ static void blend_setup(struct drm_crtc *crtc)
|
||||
int idx = idxs[pipe_id];
|
||||
if (idx > 0) {
|
||||
const struct mdp_format *format =
|
||||
to_mdp_format(msm_framebuffer_format(plane->fb));
|
||||
to_mdp_format(msm_framebuffer_format(plane->state->fb));
|
||||
alpha[idx-1] = format->alpha_enable;
|
||||
}
|
||||
}
|
||||
@@ -665,7 +665,6 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
|
||||
drm_crtc_init_with_planes(dev, crtc, plane, NULL, &mdp4_crtc_funcs,
|
||||
NULL);
|
||||
drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs);
|
||||
plane->crtc = crtc;
|
||||
|
||||
return crtc;
|
||||
}
|
||||
|
@@ -167,8 +167,6 @@ static void mdp4_plane_set_scanout(struct drm_plane *plane,
|
||||
msm_framebuffer_iova(fb, kms->aspace, 2));
|
||||
mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP3_BASE(pipe),
|
||||
msm_framebuffer_iova(fb, kms->aspace, 3));
|
||||
|
||||
plane->fb = fb;
|
||||
}
|
||||
|
||||
static void mdp4_write_csc_config(struct mdp4_kms *mdp4_kms,
|
||||
|
@@ -1207,7 +1207,6 @@ struct drm_crtc *mdp5_crtc_init(struct drm_device *dev,
|
||||
"unref cursor", unref_cursor_worker);
|
||||
|
||||
drm_crtc_helper_add(crtc, &mdp5_crtc_helper_funcs);
|
||||
plane->crtc = crtc;
|
||||
|
||||
return crtc;
|
||||
}
|
||||
|
@@ -512,7 +512,7 @@ static void mdp5_plane_atomic_async_update(struct drm_plane *plane,
|
||||
if (plane_enabled(new_state)) {
|
||||
struct mdp5_ctl *ctl;
|
||||
struct mdp5_pipeline *pipeline =
|
||||
mdp5_crtc_get_pipeline(plane->crtc);
|
||||
mdp5_crtc_get_pipeline(new_state->crtc);
|
||||
int ret;
|
||||
|
||||
ret = mdp5_plane_mode_set(plane, new_state->crtc, new_state->fb,
|
||||
@@ -1029,8 +1029,6 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
|
||||
src_img_w, src_img_h,
|
||||
src_x + src_w, src_y, src_w, src_h);
|
||||
|
||||
plane->fb = fb;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -17,6 +17,7 @@
|
||||
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
|
||||
#include "msm_drv.h"
|
||||
#include "msm_kms.h"
|
||||
@@ -25,49 +26,20 @@
|
||||
struct msm_framebuffer {
|
||||
struct drm_framebuffer base;
|
||||
const struct msm_format *format;
|
||||
struct drm_gem_object *planes[MAX_PLANE];
|
||||
};
|
||||
#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,
|
||||
unsigned int *handle)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
return drm_gem_handle_create(file_priv,
|
||||
msm_fb->planes[0], handle);
|
||||
}
|
||||
|
||||
static void msm_framebuffer_destroy(struct drm_framebuffer *fb)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
int i, n = fb->format->num_planes;
|
||||
|
||||
DBG("destroy: FB ID: %d (%p)", fb->base.id, fb);
|
||||
|
||||
drm_framebuffer_cleanup(fb);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
struct drm_gem_object *bo = msm_fb->planes[i];
|
||||
|
||||
drm_gem_object_put_unlocked(bo);
|
||||
}
|
||||
|
||||
kfree(msm_fb);
|
||||
}
|
||||
|
||||
static const struct drm_framebuffer_funcs msm_framebuffer_funcs = {
|
||||
.create_handle = msm_framebuffer_create_handle,
|
||||
.destroy = msm_framebuffer_destroy,
|
||||
.create_handle = drm_gem_fb_create_handle,
|
||||
.destroy = drm_gem_fb_destroy,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
int i, n = fb->format->num_planes;
|
||||
|
||||
seq_printf(m, "fb: %dx%d@%4.4s (%2d, ID:%d)\n",
|
||||
@@ -77,7 +49,7 @@ void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
|
||||
for (i = 0; i < n; i++) {
|
||||
seq_printf(m, " %d: offset=%d pitch=%d, obj: ",
|
||||
i, fb->offsets[i], fb->pitches[i]);
|
||||
msm_gem_describe(msm_fb->planes[i], m);
|
||||
msm_gem_describe(fb->obj[i], m);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -90,12 +62,11 @@ void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
|
||||
int msm_framebuffer_prepare(struct drm_framebuffer *fb,
|
||||
struct msm_gem_address_space *aspace)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
int ret, i, n = fb->format->num_planes;
|
||||
uint64_t iova;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
ret = msm_gem_get_iova(msm_fb->planes[i], aspace, &iova);
|
||||
ret = msm_gem_get_iova(fb->obj[i], aspace, &iova);
|
||||
DBG("FB[%u]: iova[%d]: %08llx (%d)", fb->base.id, i, iova, ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -107,26 +78,23 @@ int msm_framebuffer_prepare(struct drm_framebuffer *fb,
|
||||
void msm_framebuffer_cleanup(struct drm_framebuffer *fb,
|
||||
struct msm_gem_address_space *aspace)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
int i, n = fb->format->num_planes;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
msm_gem_put_iova(msm_fb->planes[i], aspace);
|
||||
msm_gem_put_iova(fb->obj[i], aspace);
|
||||
}
|
||||
|
||||
uint32_t msm_framebuffer_iova(struct drm_framebuffer *fb,
|
||||
struct msm_gem_address_space *aspace, int plane)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
if (!msm_fb->planes[plane])
|
||||
if (!fb->obj[plane])
|
||||
return 0;
|
||||
return msm_gem_iova(msm_fb->planes[plane], aspace) + fb->offsets[plane];
|
||||
return msm_gem_iova(fb->obj[plane], aspace) + fb->offsets[plane];
|
||||
}
|
||||
|
||||
struct drm_gem_object *msm_framebuffer_bo(struct drm_framebuffer *fb, int plane)
|
||||
{
|
||||
struct msm_framebuffer *msm_fb = to_msm_framebuffer(fb);
|
||||
return msm_fb->planes[plane];
|
||||
return drm_gem_fb_get_obj(fb, plane);
|
||||
}
|
||||
|
||||
const struct msm_format *msm_framebuffer_format(struct drm_framebuffer *fb)
|
||||
@@ -202,7 +170,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
|
||||
|
||||
msm_fb->format = format;
|
||||
|
||||
if (n > ARRAY_SIZE(msm_fb->planes)) {
|
||||
if (n > ARRAY_SIZE(fb->obj)) {
|
||||
ret = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
@@ -221,7 +189,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
msm_fb->planes[i] = bos[i];
|
||||
msm_fb->base.obj[i] = bos[i];
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
|
Reference in New Issue
Block a user