162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2015 Free Electrons
462306a36Sopenharmony_ci * Copyright (C) 2015 NextThing Co
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Maxime Ripard <maxime.ripard@free-electrons.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <drm/drm_atomic.h>
1062306a36Sopenharmony_ci#include <drm/drm_atomic_helper.h>
1162306a36Sopenharmony_ci#include <drm/drm_blend.h>
1262306a36Sopenharmony_ci#include <drm/drm_gem_framebuffer_helper.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include "sun4i_drv.h"
1562306a36Sopenharmony_ci#include "sun4i_framebuffer.h"
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic int sun4i_de_atomic_check(struct drm_device *dev,
1862306a36Sopenharmony_ci				 struct drm_atomic_state *state)
1962306a36Sopenharmony_ci{
2062306a36Sopenharmony_ci	int ret;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	ret = drm_atomic_helper_check_modeset(dev, state);
2362306a36Sopenharmony_ci	if (ret)
2462306a36Sopenharmony_ci		return ret;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	ret = drm_atomic_normalize_zpos(dev, state);
2762306a36Sopenharmony_ci	if (ret)
2862306a36Sopenharmony_ci		return ret;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	return drm_atomic_helper_check_planes(dev, state);
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic const struct drm_mode_config_funcs sun4i_de_mode_config_funcs = {
3462306a36Sopenharmony_ci	.atomic_check		= sun4i_de_atomic_check,
3562306a36Sopenharmony_ci	.atomic_commit		= drm_atomic_helper_commit,
3662306a36Sopenharmony_ci	.fb_create		= drm_gem_fb_create,
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistatic const struct drm_mode_config_helper_funcs sun4i_de_mode_config_helpers = {
4062306a36Sopenharmony_ci	.atomic_commit_tail	= drm_atomic_helper_commit_tail_rpm,
4162306a36Sopenharmony_ci};
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_civoid sun4i_framebuffer_init(struct drm_device *drm)
4462306a36Sopenharmony_ci{
4562306a36Sopenharmony_ci	drm_mode_config_reset(drm);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	drm->mode_config.max_width = 8192;
4862306a36Sopenharmony_ci	drm->mode_config.max_height = 8192;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	drm->mode_config.funcs = &sun4i_de_mode_config_funcs;
5162306a36Sopenharmony_ci	drm->mode_config.helper_private = &sun4i_de_mode_config_helpers;
5262306a36Sopenharmony_ci}
53