diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c')
| -rw-r--r-- | drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c index a6188d067d65..77c67222cabd 100644 --- a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c +++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c @@ -655,13 +655,19 @@ enum dmub_status dmub_srv_wait_for_phy_init(struct dmub_srv *dmub,  enum dmub_status dmub_srv_wait_for_idle(struct dmub_srv *dmub,  					uint32_t timeout_us)  { -	uint32_t i; +	uint32_t i, rptr;  	if (!dmub->hw_init)  		return DMUB_STATUS_INVALID;  	for (i = 0; i <= timeout_us; ++i) { -			dmub->inbox1_rb.rptr = dmub->hw_funcs.get_inbox1_rptr(dmub); +		rptr = dmub->hw_funcs.get_inbox1_rptr(dmub); + +		if (rptr > dmub->inbox1_rb.capacity) +			return DMUB_STATUS_HW_FAILURE; + +		dmub->inbox1_rb.rptr = rptr; +  		if (dmub_rb_empty(&dmub->inbox1_rb))  			return DMUB_STATUS_OK; |