Merge drm/drm-next into drm-misc-next
We haven't done any backmerge for a while due to the merge window, and it starts to become an issue for komeda. Let's bring 5.4-rc1 in. Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
@@ -142,7 +142,7 @@ static int komeda_parse_pipe_dt(struct komeda_dev *mdev, struct device_node *np)
|
||||
of_graph_get_port_by_id(np, KOMEDA_OF_PORT_OUTPUT);
|
||||
|
||||
pipe->dual_link = pipe->of_output_links[0] && pipe->of_output_links[1];
|
||||
pipe->of_node = np;
|
||||
pipe->of_node = of_node_get(np);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -35,6 +35,25 @@ komeda_get_format_caps(struct komeda_format_caps_table *table,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u32 komeda_get_afbc_format_bpp(const struct drm_format_info *info, u64 modifier)
|
||||
{
|
||||
u32 bpp;
|
||||
|
||||
switch (info->format) {
|
||||
case DRM_FORMAT_YUV420_8BIT:
|
||||
bpp = 12;
|
||||
break;
|
||||
case DRM_FORMAT_YUV420_10BIT:
|
||||
bpp = 15;
|
||||
break;
|
||||
default:
|
||||
bpp = info->cpp[0] * 8;
|
||||
break;
|
||||
}
|
||||
|
||||
return bpp;
|
||||
}
|
||||
|
||||
/* Two assumptions
|
||||
* 1. RGB always has YTR
|
||||
* 2. Tiled RGB always has SC
|
||||
|
@@ -97,6 +97,9 @@ const struct komeda_format_caps *
|
||||
komeda_get_format_caps(struct komeda_format_caps_table *table,
|
||||
u32 fourcc, u64 modifier);
|
||||
|
||||
u32 komeda_get_afbc_format_bpp(const struct drm_format_info *info,
|
||||
u64 modifier);
|
||||
|
||||
u32 *komeda_get_layer_fourcc_list(struct komeda_format_caps_table *table,
|
||||
u32 layer_type, u32 *n_fmts);
|
||||
|
||||
|
@@ -43,7 +43,7 @@ komeda_fb_afbc_size_check(struct komeda_fb *kfb, struct drm_file *file,
|
||||
struct drm_framebuffer *fb = &kfb->base;
|
||||
const struct drm_format_info *info = fb->format;
|
||||
struct drm_gem_object *obj;
|
||||
u32 alignment_w = 0, alignment_h = 0, alignment_header, n_blocks;
|
||||
u32 alignment_w = 0, alignment_h = 0, alignment_header, n_blocks, bpp;
|
||||
u64 min_size;
|
||||
|
||||
obj = drm_gem_object_lookup(file, mode_cmd->handles[0]);
|
||||
@@ -88,8 +88,9 @@ komeda_fb_afbc_size_check(struct komeda_fb *kfb, struct drm_file *file,
|
||||
kfb->offset_payload = ALIGN(n_blocks * AFBC_HEADER_SIZE,
|
||||
alignment_header);
|
||||
|
||||
bpp = komeda_get_afbc_format_bpp(info, fb->modifier);
|
||||
kfb->afbc_size = kfb->offset_payload + n_blocks *
|
||||
ALIGN(info->cpp[0] * AFBC_SUPERBLK_PIXELS,
|
||||
ALIGN(bpp * AFBC_SUPERBLK_PIXELS / 8,
|
||||
AFBC_SUPERBLK_ALIGNMENT);
|
||||
min_size = kfb->afbc_size + fb->offsets[0];
|
||||
if (min_size > obj->size) {
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_irq.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
|
||||
#include "komeda_dev.h"
|
||||
@@ -145,7 +146,6 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
|
||||
struct komeda_crtc_state *kcrtc_st = to_kcrtc_st(crtc_st);
|
||||
struct komeda_plane_state *kplane_st;
|
||||
struct drm_plane_state *plane_st;
|
||||
struct drm_framebuffer *fb;
|
||||
struct drm_plane *plane;
|
||||
struct list_head zorder_list;
|
||||
int order = 0, err;
|
||||
@@ -171,7 +171,6 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
|
||||
|
||||
list_for_each_entry(kplane_st, &zorder_list, zlist_node) {
|
||||
plane_st = &kplane_st->base;
|
||||
fb = plane_st->fb;
|
||||
plane = plane_st->plane;
|
||||
|
||||
plane_st->normalized_zpos = order++;
|
||||
@@ -204,7 +203,7 @@ static int komeda_kms_check(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_st, *new_crtc_st;
|
||||
struct drm_crtc_state *new_crtc_st;
|
||||
int i, err;
|
||||
|
||||
err = drm_atomic_helper_check_modeset(dev, state);
|
||||
@@ -215,7 +214,7 @@ static int komeda_kms_check(struct drm_device *dev,
|
||||
* so need to add all affected_planes (even unchanged) to
|
||||
* drm_atomic_state.
|
||||
*/
|
||||
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_st, new_crtc_st, i) {
|
||||
for_each_new_crtc_in_state(state, crtc, new_crtc_st, i) {
|
||||
err = drm_atomic_add_affected_planes(state, crtc);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -306,24 +305,33 @@ struct komeda_kms_dev *komeda_kms_attach(struct komeda_dev *mdev)
|
||||
komeda_kms_irq_handler, IRQF_SHARED,
|
||||
drm->driver->name, drm);
|
||||
if (err)
|
||||
goto cleanup_mode_config;
|
||||
goto free_component_binding;
|
||||
|
||||
err = mdev->funcs->enable_irq(mdev);
|
||||
if (err)
|
||||
goto cleanup_mode_config;
|
||||
goto free_component_binding;
|
||||
|
||||
drm->irq_enabled = true;
|
||||
|
||||
drm_kms_helper_poll_init(drm);
|
||||
|
||||
err = drm_dev_register(drm, 0);
|
||||
if (err)
|
||||
goto cleanup_mode_config;
|
||||
goto free_interrupts;
|
||||
|
||||
return kms;
|
||||
|
||||
cleanup_mode_config:
|
||||
free_interrupts:
|
||||
drm_kms_helper_poll_fini(drm);
|
||||
drm->irq_enabled = false;
|
||||
mdev->funcs->disable_irq(mdev);
|
||||
free_component_binding:
|
||||
component_unbind_all(mdev->dev, drm);
|
||||
cleanup_mode_config:
|
||||
drm_mode_config_cleanup(drm);
|
||||
komeda_kms_cleanup_private_objs(kms);
|
||||
drm->dev_private = NULL;
|
||||
drm_dev_put(drm);
|
||||
free_kms:
|
||||
kfree(kms);
|
||||
return ERR_PTR(err);
|
||||
@@ -334,12 +342,14 @@ void komeda_kms_detach(struct komeda_kms_dev *kms)
|
||||
struct drm_device *drm = &kms->base;
|
||||
struct komeda_dev *mdev = drm->dev_private;
|
||||
|
||||
drm_dev_unregister(drm);
|
||||
drm_kms_helper_poll_fini(drm);
|
||||
drm_atomic_helper_shutdown(drm);
|
||||
drm->irq_enabled = false;
|
||||
mdev->funcs->disable_irq(mdev);
|
||||
drm_dev_unregister(drm);
|
||||
component_unbind_all(mdev->dev, drm);
|
||||
komeda_kms_cleanup_private_objs(kms);
|
||||
drm_mode_config_cleanup(drm);
|
||||
komeda_kms_cleanup_private_objs(kms);
|
||||
drm->dev_private = NULL;
|
||||
drm_dev_put(drm);
|
||||
}
|
||||
|
@@ -494,6 +494,7 @@ void komeda_pipeline_dump_register(struct komeda_pipeline *pipe,
|
||||
struct seq_file *sf);
|
||||
|
||||
/* component APIs */
|
||||
extern __printf(10, 11)
|
||||
struct komeda_component *
|
||||
komeda_component_add(struct komeda_pipeline *pipe,
|
||||
size_t comp_sz, u32 id, u32 hw_id,
|
||||
|
@@ -148,7 +148,7 @@ static int komeda_wb_connector_add(struct komeda_kms_dev *kms,
|
||||
if (!kcrtc->master->wb_layer)
|
||||
return 0;
|
||||
|
||||
kwb_conn = kzalloc(sizeof(*wb_conn), GFP_KERNEL);
|
||||
kwb_conn = kzalloc(sizeof(*kwb_conn), GFP_KERNEL);
|
||||
if (!kwb_conn)
|
||||
return -ENOMEM;
|
||||
|
||||
|
Reference in New Issue
Block a user