drm/amd/display: Add hardware reset interface for DMUB service

[Why]
We'll need this to perform a clean shutdown before unloading the driver.

[How]
It will call reset internally and set hw_init to false. It won't do
anything if the hardware isn't initialized.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Nicholas Kazlauskas 2020-01-09 14:41:22 -05:00 committed by Alex Deucher
parent 7527791e1f
commit 0167da498d
2 changed files with 31 additions and 0 deletions

View File

@ -418,6 +418,21 @@ enum dmub_status dmub_srv_is_hw_init(struct dmub_srv *dmub, bool *is_hw_init);
enum dmub_status dmub_srv_hw_init(struct dmub_srv *dmub, enum dmub_status dmub_srv_hw_init(struct dmub_srv *dmub,
const struct dmub_srv_hw_params *params); const struct dmub_srv_hw_params *params);
/**
* dmub_srv_hw_reset() - puts the DMUB hardware in reset state if initialized
* @dmub: the dmub service
*
* Before destroying the DMUB service or releasing the backing framebuffer
* memory we'll need to put the DMCUB into reset first.
*
* A subsequent call to dmub_srv_hw_init() will re-enable the DMCUB.
*
* Return:
* DMUB_STATUS_OK - success
* DMUB_STATUS_INVALID - unspecified error
*/
enum dmub_status dmub_srv_hw_reset(struct dmub_srv *dmub);
/** /**
* dmub_srv_cmd_queue() - queues a command to the DMUB * dmub_srv_cmd_queue() - queues a command to the DMUB
* @dmub: the dmub service * @dmub: the dmub service

View File

@ -415,6 +415,22 @@ enum dmub_status dmub_srv_hw_init(struct dmub_srv *dmub,
return DMUB_STATUS_OK; return DMUB_STATUS_OK;
} }
enum dmub_status dmub_srv_hw_reset(struct dmub_srv *dmub)
{
if (!dmub->sw_init)
return DMUB_STATUS_INVALID;
if (dmub->hw_init == false)
return DMUB_STATUS_OK;
if (dmub->hw_funcs.reset)
dmub->hw_funcs.reset(dmub);
dmub->hw_init = false;
return DMUB_STATUS_OK;
}
enum dmub_status dmub_srv_cmd_queue(struct dmub_srv *dmub, enum dmub_status dmub_srv_cmd_queue(struct dmub_srv *dmub,
const struct dmub_cmd_header *cmd) const struct dmub_cmd_header *cmd)
{ {