Hi Roman,
On Wed, May 25, 2022 at 11:54:45AM +0000, Roman Stratiienko wrote:
By this commit 2 related issues are solved:
Issue #1. Corruption in blend route/enable register:
Register corruption happens after using old_state->zpos to disable layer state. Blend route/enable registers are shared with other layers and other layers may have already assigned this PIPE to valid value.
Solution: Do not use old_state->zpos to disable the plane pipe in blend registers.
Issue #2. Remove disabled layer from blend route/enable registers:
Since sun4i/drm are using normalized_zpos, .atomic_update() will setup blend route/enable pipes starting from PIPE0 to PIPEX, where X+1 is a number of layers used by the CRTC in this frame.
Remaining pipes (PIPE[X+1] - PIPE[MAX]) can have old data that MUST be updated.
new_state->normalized_zpos can't be used, since drm helpers won't update it for disabled planes.
Solution:
- Track the number of total used planes for crtc.
- Use this number instead of zpos to disable unused blend pipes.
Signed-off-by: Roman Stratiienko roman.o.stratiienko@globallogic.com
If there's two issues, and two solutions, it should be two patches.
Maxime