drm/mali-dp: Improve writeback handling for DP500.

Mali DP500 operates in continuous writeback mode (writes frame content
until stopped) and it needs special handling in order to behave like
a one-shot writeback engine. The original state machine added for DP500
was a bit fragile, as it did not handle correctly cases where a new
atomic commit was in progress when the SE IRQ happens and it would
commit some partial updates.

Improve the handling by adding a parameter to the set_config_valid()
function to clear the config valid bit in hardware before starting a
new commit and by introducing a MW_RESTART state in the writeback
state machine to cater for the case where a new writeback commit
gets submitted while the last one is still being active.

Reported-by: Brian Starkey <brian.starkey@arm.com>
Reviewed-by: Brian Starkey <brian.starkey@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Esse commit está contido em:
Liviu Dudau
2018-06-15 16:56:09 +01:00
commit 0735cfdf0a
3 arquivos alterados com 36 adições e 17 exclusões

Ver arquivo

@@ -152,12 +152,13 @@ struct malidp_hw {
bool (*in_config_mode)(struct malidp_hw_device *hwdev);
/*
* Set configuration valid flag for hardware parameters that can
* be changed outside the configuration mode. Hardware will use
* the new settings when config valid is set after the end of the
* current buffer scanout
* Set/clear configuration valid flag for hardware parameters that can
* be changed outside the configuration mode to the given value.
* Hardware will use the new settings when config valid is set,
* after the end of the current buffer scanout, and will ignore
* any new values for those parameters if config valid flag is cleared
*/
void (*set_config_valid)(struct malidp_hw_device *hwdev);
void (*set_config_valid)(struct malidp_hw_device *hwdev, u8 value);
/*
* Set a new mode in hardware. Requires the hardware to be in