diff mbox series

[1/2] drm: add dp helper to initialize remote aux channel.

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

Commit Message

Zhang, Dingchen (David) Dec. 5, 2019, 4:55 p.m. UTC
[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(+)

Comments

Harry Wentland Dec. 6, 2019, 3:30 p.m. UTC | #1
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);
>
Harry Wentland Dec. 6, 2019, 4:09 p.m. UTC | #2
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 mbox series

Patch

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);