Message ID | 20191205165504.3682-1-dingchen.zhang@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm: add dp helper to initialize remote aux channel. | expand |
On 2019-12-05 11:55 a.m., David (Dingchen) Zhang wrote: > [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. > > > Cc: Leo Li <sunpeng.li@amd.com> > Cc: Harry Wentland <Harry.Wentland@amd.com> > Signed-off-by: David (Dingchen) Zhang <dingchen.zhang@amd.com> > --- > drivers/gpu/drm/drm_dp_helper.c | 13 +++++++++++++ > drivers/gpu/drm/drm_dp_mst_topology.c | 3 +++ > include/drm/drm_dp_helper.h | 1 + > 3 files changed, 17 insertions(+) > > diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c > index fc39323e7d52..37312593dd0a 100644 > --- a/drivers/gpu/drm/drm_dp_helper.c > +++ b/drivers/gpu/drm/drm_dp_helper.c > @@ -1091,6 +1091,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 > * @aux: DisplayPort AUX channel > diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c > index d5df02315e14..4308316fe211 100644 > --- a/drivers/gpu/drm/drm_dp_mst_topology.c > +++ b/drivers/gpu/drm/drm_dp_mst_topology.c > @@ -1642,6 +1642,9 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, This function is gone in amd-staging-drm-next. Please send a v2 of this patch based on amd-staging-drm-next of agd5f's repo from https://cgit.freedesktop.org/~agd5f/linux/?h=amd-staging-drm-next Harry > port->aux.dev = dev->dev; > 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 > * around until our own memory allocation is released > diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h > index 61ef351c5fca..da0a69f10e38 100644 > --- a/include/drm/drm_dp_helper.h > +++ b/include/drm/drm_dp_helper.h > @@ -1403,6 +1403,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], > 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); > int drm_dp_aux_register(struct drm_dp_aux *aux); > void drm_dp_aux_unregister(struct drm_dp_aux *aux); >
On 2019-12-06 10:30 a.m., Harry Wentland wrote: > On 2019-12-05 11:55 a.m., David (Dingchen) Zhang wrote: >> [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. >> >> >> Cc: Leo Li <sunpeng.li@amd.com> >> Cc: Harry Wentland <Harry.Wentland@amd.com> >> Signed-off-by: David (Dingchen) Zhang <dingchen.zhang@amd.com> >> --- >> drivers/gpu/drm/drm_dp_helper.c | 13 +++++++++++++ >> drivers/gpu/drm/drm_dp_mst_topology.c | 3 +++ >> include/drm/drm_dp_helper.h | 1 + >> 3 files changed, 17 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c >> index fc39323e7d52..37312593dd0a 100644 >> --- a/drivers/gpu/drm/drm_dp_helper.c >> +++ b/drivers/gpu/drm/drm_dp_helper.c >> @@ -1091,6 +1091,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 >> * @aux: DisplayPort AUX channel >> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c >> index d5df02315e14..4308316fe211 100644 >> --- a/drivers/gpu/drm/drm_dp_mst_topology.c >> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c >> @@ -1642,6 +1642,9 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, > > This function is gone in amd-staging-drm-next. > > Please send a v2 of this patch based on amd-staging-drm-next of agd5f's > repo from https://cgit.freedesktop.org/~agd5f/linux/?h=amd-staging-drm-next > My bad. This should be the drm-misc-next branch on https://cgit.freedesktop.org/drm/drm-misc Harry > Harry > >> port->aux.dev = dev->dev; >> 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 >> * around until our own memory allocation is released >> diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h >> index 61ef351c5fca..da0a69f10e38 100644 >> --- a/include/drm/drm_dp_helper.h >> +++ b/include/drm/drm_dp_helper.h >> @@ -1403,6 +1403,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], >> 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); >> int drm_dp_aux_register(struct drm_dp_aux *aux); >> void drm_dp_aux_unregister(struct drm_dp_aux *aux); >>
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index fc39323e7d52..37312593dd0a 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -1091,6 +1091,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 * @aux: DisplayPort AUX channel diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index d5df02315e14..4308316fe211 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -1642,6 +1642,9 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, port->aux.dev = dev->dev; 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 * around until our own memory allocation is released diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index 61ef351c5fca..da0a69f10e38 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1403,6 +1403,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], 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); int drm_dp_aux_register(struct drm_dp_aux *aux); void drm_dp_aux_unregister(struct drm_dp_aux *aux);
[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. Cc: Leo Li <sunpeng.li@amd.com> Cc: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: David (Dingchen) Zhang <dingchen.zhang@amd.com> --- drivers/gpu/drm/drm_dp_helper.c | 13 +++++++++++++ drivers/gpu/drm/drm_dp_mst_topology.c | 3 +++ include/drm/drm_dp_helper.h | 1 + 3 files changed, 17 insertions(+)