drm: add dp helper to initialize remote aux channel.
[why] We need to minimally initialize the remote aux channel, e.g. the crc work struct of remote aux to dump the sink's DPRX CRCs in MST setup. [how] Add helper that only initializes the crc work struct of the remote aux, hooke crc work queue to 'drm_dp_aux_crc_work'. Then call this helper in DP MST port initialization. This, plus David Francis' patch [1], fix the issue of MST remote aux DPCD CRCs read. [1] https://patchwork.kernel.org/patch/11217941/ Cc: Leo Li <sunpeng.li@amd.com> Cc: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: David (Dingchen) Zhang <dingchen.zhang@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
44be939ff7
commit
c908b1c4bb
|
@ -978,6 +978,19 @@ static void drm_dp_aux_crc_work(struct work_struct *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_dp_remote_aux_init() - minimally initialise a remote aux channel
|
||||||
|
* @aux: DisplayPort AUX channel
|
||||||
|
*
|
||||||
|
* Used for remote aux channel in general. Merely initialize the crc work
|
||||||
|
* struct.
|
||||||
|
*/
|
||||||
|
void drm_dp_remote_aux_init(struct drm_dp_aux *aux)
|
||||||
|
{
|
||||||
|
INIT_WORK(&aux->crc_work, drm_dp_aux_crc_work);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_dp_remote_aux_init);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_dp_aux_init() - minimally initialise an aux channel
|
* drm_dp_aux_init() - minimally initialise an aux channel
|
||||||
* @aux: DisplayPort AUX channel
|
* @aux: DisplayPort AUX channel
|
||||||
|
|
|
@ -2200,6 +2200,9 @@ drm_dp_mst_add_port(struct drm_device *dev,
|
||||||
port->aux.dev = dev->dev;
|
port->aux.dev = dev->dev;
|
||||||
port->aux.is_remote = true;
|
port->aux.is_remote = true;
|
||||||
|
|
||||||
|
/* initialize the MST downstream port's AUX crc work queue */
|
||||||
|
drm_dp_remote_aux_init(&port->aux);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure the memory allocation for our parent branch stays
|
* Make sure the memory allocation for our parent branch stays
|
||||||
* around until our own memory allocation is released
|
* around until our own memory allocation is released
|
||||||
|
|
|
@ -1465,6 +1465,7 @@ int drm_dp_downstream_id(struct drm_dp_aux *aux, char id[6]);
|
||||||
void drm_dp_downstream_debug(struct seq_file *m, const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
void drm_dp_downstream_debug(struct seq_file *m, const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
||||||
const u8 port_cap[4], struct drm_dp_aux *aux);
|
const u8 port_cap[4], struct drm_dp_aux *aux);
|
||||||
|
|
||||||
|
void drm_dp_remote_aux_init(struct drm_dp_aux *aux);
|
||||||
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
||||||
int drm_dp_aux_register(struct drm_dp_aux *aux);
|
int drm_dp_aux_register(struct drm_dp_aux *aux);
|
||||||
void drm_dp_aux_unregister(struct drm_dp_aux *aux);
|
void drm_dp_aux_unregister(struct drm_dp_aux *aux);
|
||||||
|
|
Loading…
Reference in New Issue