In the Linux kernel, the following vulnerability has been resolved:
drm/amd/display: Refactor DMCUB enter/exit idle interface
[Why] We can hang in place trying to send commands when the DMCUB isn't powered on.
[How] We need to exit out of the idle state prior to sending a command, but the process that performs the exit also invokes a command itself.
Fixing this issue involves the following:
It's possible for the hardware to have exited an idle state without driver knowledge, but entering one is always restricted to a driver allow - which makes the SW state vs HW state mismatch issue purely one of optimization, which should seldomly be hit, if at all.
This works simialr to dcallowidle_optimizations, but works at the DMCUB level and makes sure the state is marked prior to any notify/exit idle so we don't enter an infinite loop.
This patch takes care of 1/2. A future patch will take care of wrapping DMCUB command submission with calls to this new interface.