[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