[Intel-gfx] [PATCH 01/10] drm/i915/bios: Allow DSI ports to be parsed by parse_ddi_port()

Jani Nikula jani.nikula at intel.com
Mon Aug 16 09:59:04 UTC 2021


On Wed, 21 Jul 2021, José Roberto de Souza <jose.souza at intel.com> wrote:
> Allow MIPI DSI ports to be parsed like any other DDI port.
> This will be helpful to integrate into just one function the parse of
> information about integrated panels(eDP and DSI).
>
> Allow MIPI DSI ports to be parsed to be parsed like any other DDI
> port.
> This will be helpful to integrate into just one function the parse of
> information about integrated panels(eDP and DSI).

Here be dragons.

For starters, parse_ddi_ports() is only run on DDI + CHV, most
significantly not VLV.

So intel_bios_encoder_supports_dsi() is not universal.

It's not trivial to extend parse_ddi_ports() to cover VLV in general or
CHV+DSI, because apparently they have the DSI ports in the same
"namespace", if you will, with other ports. I.e. you could have dupes,
which parse_ddi_port() does not allow.

There are existing patches on the list where I've attempted this, and
Ville has refuted them refuted me time and time again. :(


BR,
Jani.

>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 5b6922e28ef28..5bc2c944d99b4 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -1709,10 +1709,10 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>  	 * so look for all the possible values for each port.
>  	 */
>  	static const int port_mapping[][3] = {
> -		[PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 },
> -		[PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 },
> -		[PORT_C] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 },
> -		[PORT_D] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 },
> +		[PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, DVO_PORT_MIPIA },
> +		[PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, DVO_PORT_MIPIB },
> +		[PORT_C] = { DVO_PORT_HDMIC, DVO_PORT_DPC, DVO_PORT_MIPIC },
> +		[PORT_D] = { DVO_PORT_HDMID, DVO_PORT_DPD, DVO_PORT_MIPID },
>  		[PORT_E] = { DVO_PORT_HDMIE, DVO_PORT_DPE, DVO_PORT_CRT },
>  		[PORT_F] = { DVO_PORT_HDMIF, DVO_PORT_DPF, -1 },
>  		[PORT_G] = { DVO_PORT_HDMIG, DVO_PORT_DPG, -1 },
> @@ -1868,6 +1868,12 @@ intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
>  		devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
>  }
>  
> +static bool
> +intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
> +{
> +	return devdata->child.device_type & DEVICE_TYPE_MIPI_OUTPUT;
> +}
> +
>  static bool is_port_valid(struct drm_i915_private *i915, enum port port)
>  {
>  	/*
> @@ -1886,7 +1892,8 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>  {
>  	const struct child_device_config *child = &devdata->child;
>  	struct ddi_vbt_port_info *info;
> -	bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
> +	bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb;
> +	bool supports_tbt, is_dsi;
>  	int dp_boost_level, hdmi_boost_level;
>  	enum port port;
>  
> @@ -1917,16 +1924,17 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>  	is_crt = intel_bios_encoder_supports_crt(devdata);
>  	is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>  	is_edp = intel_bios_encoder_supports_edp(devdata);
> +	is_dsi = intel_bios_encoder_supports_dsi(devdata);
>  
>  	supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
>  	supports_tbt = intel_bios_encoder_supports_tbt(devdata);
>  
>  	drm_dbg_kms(&i915->drm,
> -		    "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
> +		    "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d DSI:%d\n",
>  		    port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
>  		    HAS_LSPCON(i915) && child->lspcon,
>  		    supports_typec_usb, supports_tbt,
> -		    devdata->dsc != NULL);
> +		    devdata->dsc != NULL, is_dsi);
>  
>  	if (is_dvi) {
>  		u8 ddc_pin;

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list