mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
f4112469cd
Commit 52055bafa1
("drm: rcar-du: Move plane commit code from CRTC
start to CRTC resume") changed the order of the plane commit and CRTC
enable operations to accommodate the runtime PM requirements. However,
this introduced corruption in the first displayed frame, as the CRTC is
now enabled without any plane configured. On Gen2 hardware the first
frame will be black and likely unnoticed, but on Gen3 hardware we end up
starting the display before the VSP compositor, which is more
noticeable.
To fix this, revert the order of the commit operations back, and handle
runtime PM requirements in the CRTC .atomic_begin() and .atomic_enable()
helper operation handlers.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
82 lines
2.3 KiB
C
82 lines
2.3 KiB
C
/*
|
|
* rcar_du_crtc.h -- R-Car Display Unit CRTCs
|
|
*
|
|
* Copyright (C) 2013-2015 Renesas Electronics Corporation
|
|
*
|
|
* Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef __RCAR_DU_CRTC_H__
|
|
#define __RCAR_DU_CRTC_H__
|
|
|
|
#include <linux/mutex.h>
|
|
#include <linux/wait.h>
|
|
|
|
#include <drm/drmP.h>
|
|
#include <drm/drm_crtc.h>
|
|
|
|
struct rcar_du_group;
|
|
struct rcar_du_vsp;
|
|
|
|
/**
|
|
* struct rcar_du_crtc - the CRTC, representing a DU superposition processor
|
|
* @crtc: base DRM CRTC
|
|
* @clock: the CRTC functional clock
|
|
* @extclock: external pixel dot clock (optional)
|
|
* @mmio_offset: offset of the CRTC registers in the DU MMIO block
|
|
* @index: CRTC software and hardware index
|
|
* @initialized: whether the CRTC has been initialized and clocks enabled
|
|
* @event: event to post when the pending page flip completes
|
|
* @flip_wait: wait queue used to signal page flip completion
|
|
* @outputs: bitmask of the outputs (enum rcar_du_output) driven by this CRTC
|
|
* @group: CRTC group this CRTC belongs to
|
|
* @vsp: VSP feeding video to this CRTC
|
|
* @vsp_pipe: index of the VSP pipeline feeding video to this CRTC
|
|
*/
|
|
struct rcar_du_crtc {
|
|
struct drm_crtc crtc;
|
|
|
|
struct clk *clock;
|
|
struct clk *extclock;
|
|
unsigned int mmio_offset;
|
|
unsigned int index;
|
|
bool initialized;
|
|
|
|
struct drm_pending_vblank_event *event;
|
|
wait_queue_head_t flip_wait;
|
|
|
|
unsigned int outputs;
|
|
|
|
struct rcar_du_group *group;
|
|
struct rcar_du_vsp *vsp;
|
|
unsigned int vsp_pipe;
|
|
};
|
|
|
|
#define to_rcar_crtc(c) container_of(c, struct rcar_du_crtc, crtc)
|
|
|
|
enum rcar_du_output {
|
|
RCAR_DU_OUTPUT_DPAD0,
|
|
RCAR_DU_OUTPUT_DPAD1,
|
|
RCAR_DU_OUTPUT_LVDS0,
|
|
RCAR_DU_OUTPUT_LVDS1,
|
|
RCAR_DU_OUTPUT_HDMI0,
|
|
RCAR_DU_OUTPUT_HDMI1,
|
|
RCAR_DU_OUTPUT_TCON,
|
|
RCAR_DU_OUTPUT_MAX,
|
|
};
|
|
|
|
int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int index);
|
|
void rcar_du_crtc_suspend(struct rcar_du_crtc *rcrtc);
|
|
void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc);
|
|
|
|
void rcar_du_crtc_route_output(struct drm_crtc *crtc,
|
|
enum rcar_du_output output);
|
|
void rcar_du_crtc_finish_page_flip(struct rcar_du_crtc *rcrtc);
|
|
|
|
#endif /* __RCAR_DU_CRTC_H__ */
|