drm/amd/display: runtime select dmub emulatior.
[Why & How] Add emul specific hw function to dmub, in case of emulator is created, we can runtime switch between dmub emulator or dmub uC via is_virtual flag in dmub. Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
38da56948d
commit
37ffa7a1e7
|
@ -256,6 +256,10 @@ struct dmub_srv_hw_funcs {
|
|||
|
||||
void (*set_inbox1_wptr)(struct dmub_srv *dmub, uint32_t wptr_offset);
|
||||
|
||||
uint32_t (*emul_get_inbox1_rptr)(struct dmub_srv *dmub);
|
||||
|
||||
void (*emul_set_inbox1_wptr)(struct dmub_srv *dmub, uint32_t wptr_offset);
|
||||
|
||||
bool (*is_supported)(struct dmub_srv *dmub);
|
||||
|
||||
bool (*is_hw_init)(struct dmub_srv *dmub);
|
||||
|
|
|
@ -199,13 +199,13 @@ enum dmub_status dmub_srv_create(struct dmub_srv *dmub,
|
|||
|
||||
/* Override (some) hardware funcs based on user params. */
|
||||
if (params->hw_funcs) {
|
||||
if (params->hw_funcs->get_inbox1_rptr)
|
||||
dmub->hw_funcs.get_inbox1_rptr =
|
||||
params->hw_funcs->get_inbox1_rptr;
|
||||
if (params->hw_funcs->emul_get_inbox1_rptr)
|
||||
dmub->hw_funcs.emul_get_inbox1_rptr =
|
||||
params->hw_funcs->emul_get_inbox1_rptr;
|
||||
|
||||
if (params->hw_funcs->set_inbox1_wptr)
|
||||
dmub->hw_funcs.set_inbox1_wptr =
|
||||
params->hw_funcs->set_inbox1_wptr;
|
||||
if (params->hw_funcs->emul_set_inbox1_wptr)
|
||||
dmub->hw_funcs.emul_set_inbox1_wptr =
|
||||
params->hw_funcs->emul_set_inbox1_wptr;
|
||||
|
||||
if (params->hw_funcs->is_supported)
|
||||
dmub->hw_funcs.is_supported =
|
||||
|
@ -502,7 +502,7 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub)
|
|||
*/
|
||||
dmub_rb_flush_pending(&dmub->inbox1_rb);
|
||||
|
||||
dmub->hw_funcs.set_inbox1_wptr(dmub, dmub->inbox1_rb.wrpt);
|
||||
dmub->hw_funcs.set_inbox1_wptr(dmub, dmub->inbox1_rb.wrpt);
|
||||
return DMUB_STATUS_OK;
|
||||
}
|
||||
|
||||
|
@ -557,7 +557,7 @@ enum dmub_status dmub_srv_wait_for_idle(struct dmub_srv *dmub,
|
|||
return DMUB_STATUS_INVALID;
|
||||
|
||||
for (i = 0; i <= timeout_us; ++i) {
|
||||
dmub->inbox1_rb.rptr = dmub->hw_funcs.get_inbox1_rptr(dmub);
|
||||
dmub->inbox1_rb.rptr = dmub->hw_funcs.get_inbox1_rptr(dmub);
|
||||
if (dmub_rb_empty(&dmub->inbox1_rb))
|
||||
return DMUB_STATUS_OK;
|
||||
|
||||
|
|
Loading…
Reference in New Issue