Commit 37ffa7a1 authored by Yongqiang Sun's avatar Yongqiang Sun Committed by Alex Deucher

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: default avatarYongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarQingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 38da5694
...@@ -256,6 +256,10 @@ struct dmub_srv_hw_funcs { ...@@ -256,6 +256,10 @@ struct dmub_srv_hw_funcs {
void (*set_inbox1_wptr)(struct dmub_srv *dmub, uint32_t wptr_offset); 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_supported)(struct dmub_srv *dmub);
bool (*is_hw_init)(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, ...@@ -199,13 +199,13 @@ enum dmub_status dmub_srv_create(struct dmub_srv *dmub,
/* Override (some) hardware funcs based on user params. */ /* Override (some) hardware funcs based on user params. */
if (params->hw_funcs) { if (params->hw_funcs) {
if (params->hw_funcs->get_inbox1_rptr) if (params->hw_funcs->emul_get_inbox1_rptr)
dmub->hw_funcs.get_inbox1_rptr = dmub->hw_funcs.emul_get_inbox1_rptr =
params->hw_funcs->get_inbox1_rptr; params->hw_funcs->emul_get_inbox1_rptr;
if (params->hw_funcs->set_inbox1_wptr) if (params->hw_funcs->emul_set_inbox1_wptr)
dmub->hw_funcs.set_inbox1_wptr = dmub->hw_funcs.emul_set_inbox1_wptr =
params->hw_funcs->set_inbox1_wptr; params->hw_funcs->emul_set_inbox1_wptr;
if (params->hw_funcs->is_supported) if (params->hw_funcs->is_supported)
dmub->hw_funcs.is_supported = dmub->hw_funcs.is_supported =
...@@ -502,7 +502,7 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub) ...@@ -502,7 +502,7 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub)
*/ */
dmub_rb_flush_pending(&dmub->inbox1_rb); 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; return DMUB_STATUS_OK;
} }
...@@ -557,7 +557,7 @@ enum dmub_status dmub_srv_wait_for_idle(struct dmub_srv *dmub, ...@@ -557,7 +557,7 @@ enum dmub_status dmub_srv_wait_for_idle(struct dmub_srv *dmub,
return DMUB_STATUS_INVALID; return DMUB_STATUS_INVALID;
for (i = 0; i <= timeout_us; ++i) { 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)) if (dmub_rb_empty(&dmub->inbox1_rb))
return DMUB_STATUS_OK; return DMUB_STATUS_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment