From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH v8 8/8] drm/i915/panel: move panel fixed EDID to struct intel_panel
Date: Fri, 20 Jan 2023 20:49:38 +0200 [thread overview]
Message-ID: <Y8riQrC0wkf9huv+@intel.com> (raw)
In-Reply-To: <214356db473af8a45e772cea62e15445f7312ff9.1674144945.git.jani.nikula@intel.com>
On Thu, Jan 19, 2023 at 06:19:01PM +0200, Jani Nikula wrote:
> It's a bit confusing to have two cached EDIDs in struct intel_connector
> with slightly different purposes. Make the distinction a bit clearer by
> moving the EDID cached for eDP and LVDS panels at connector init time to
> struct intel_panel, and name it fixed_edid. That's what it is, a fixed
> EDID for the panels.
>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/icl_dsi.c | 2 +-
> .../gpu/drm/i915/display/intel_connector.c | 3 ---
> .../drm/i915/display/intel_display_types.h | 6 ++++--
> drivers/gpu/drm/i915/display/intel_dp.c | 20 +++++++++----------
> drivers/gpu/drm/i915/display/intel_dvo.c | 2 +-
> drivers/gpu/drm/i915/display/intel_lvds.c | 11 +++++-----
> drivers/gpu/drm/i915/display/intel_panel.c | 10 +++++++++-
> drivers/gpu/drm/i915/display/intel_panel.h | 4 +++-
> drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +-
> drivers/gpu/drm/i915/display/vlv_dsi.c | 2 +-
> 10 files changed, 35 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
> index ae14c794c4bc..d56d01f07bb7 100644
> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
> @@ -2054,7 +2054,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
> goto err;
> }
>
> - intel_panel_init(intel_connector);
> + intel_panel_init(intel_connector, NULL);
>
> intel_backlight_setup(intel_connector, INVALID_PIPE);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
> index 4814d4e2f7f9..257afac34839 100644
> --- a/drivers/gpu/drm/i915/display/intel_connector.c
> +++ b/drivers/gpu/drm/i915/display/intel_connector.c
> @@ -99,9 +99,6 @@ void intel_connector_destroy(struct drm_connector *connector)
>
> intel_hdcp_cleanup(intel_connector);
>
> - if (!IS_ERR_OR_NULL(intel_connector->edid))
> - drm_edid_free(intel_connector->edid);
> -
> intel_panel_fini(intel_connector);
>
> drm_connector_cleanup(connector);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 34dc850340b8..6feb232bb1c2 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -351,6 +351,9 @@ struct intel_vbt_panel_data {
> };
>
> struct intel_panel {
> + /* Fixed EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
> + const struct drm_edid *fixed_edid;
> +
> struct list_head fixed_modes;
>
> /* backlight */
> @@ -591,8 +594,7 @@ struct intel_connector {
> /* Panel info for eDP and LVDS */
> struct intel_panel panel;
>
> - /* Cached EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
> - const struct drm_edid *edid;
> + /* Cached EDID for detect. */
> const struct drm_edid *detect_edid;
>
> /* Number of times hotplug detection was tried after an HPD interrupt */
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index a44eefb97e8d..e14c13444643 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -4477,18 +4477,19 @@ bool intel_digital_port_connected(struct intel_encoder *encoder)
> static const struct drm_edid *
> intel_dp_get_edid(struct intel_dp *intel_dp)
> {
> - struct intel_connector *intel_connector = intel_dp->attached_connector;
> + struct intel_connector *connector = intel_dp->attached_connector;
> + const struct drm_edid *fixed_edid = connector->panel.fixed_edid;
>
> - /* use cached edid if we have one */
> - if (intel_connector->edid) {
> + /* Use panel fixed edid if we have one */
> + if (fixed_edid) {
> /* invalid edid */
> - if (IS_ERR(intel_connector->edid))
> + if (IS_ERR(fixed_edid))
> return NULL;
>
> - return drm_edid_dup(intel_connector->edid);
> - } else
> - return drm_edid_read_ddc(&intel_connector->base,
> - &intel_dp->aux.ddc);
> + return drm_edid_dup(fixed_edid);
> + }
> +
> + return drm_edid_read_ddc(&connector->base, &intel_dp->aux.ddc);
> }
>
> static void
> @@ -5313,7 +5314,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> } else {
> drm_edid = ERR_PTR(-ENOENT);
> }
> - intel_connector->edid = drm_edid;
>
> intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
> IS_ERR(drm_edid) ? NULL : drm_edid);
> @@ -5340,7 +5340,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> goto out_vdd_off;
> }
>
> - intel_panel_init(intel_connector);
> + intel_panel_init(intel_connector, drm_edid);
>
> intel_edp_backlight_setup(intel_dp, intel_connector);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
> index 4aeae0f3ac91..0be8105cb18a 100644
> --- a/drivers/gpu/drm/i915/display/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_dvo.c
> @@ -554,6 +554,6 @@ void intel_dvo_init(struct drm_i915_private *i915)
> */
> intel_panel_add_encoder_fixed_mode(connector, encoder);
>
> - intel_panel_init(connector);
> + intel_panel_init(connector, NULL);
> }
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 9f6910bba2e9..a1557d84ce0a 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -477,10 +477,11 @@ static int intel_lvds_compute_config(struct intel_encoder *intel_encoder,
> static int intel_lvds_get_modes(struct drm_connector *connector)
> {
> struct intel_connector *intel_connector = to_intel_connector(connector);
> + const struct drm_edid *fixed_edid = intel_connector->panel.fixed_edid;
>
> - /* use cached edid if we have one */
> - if (!IS_ERR_OR_NULL(intel_connector->edid)) {
> - drm_edid_connector_update(connector, intel_connector->edid);
> + /* Use panel fixed edid if we have one */
> + if (!IS_ERR_OR_NULL(fixed_edid)) {
> + drm_edid_connector_update(connector, fixed_edid);
>
> return drm_edid_connector_add_modes(connector);
> }
> @@ -974,8 +975,6 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
> } else {
> drm_edid = ERR_PTR(-ENOENT);
> }
> - intel_connector->edid = drm_edid;
> -
> intel_bios_init_panel_late(dev_priv, &intel_connector->panel, NULL,
> IS_ERR(drm_edid) ? NULL : drm_edid);
>
> @@ -1000,7 +999,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
> if (!intel_panel_preferred_fixed_mode(intel_connector))
> goto failed;
>
> - intel_panel_init(intel_connector);
> + intel_panel_init(intel_connector, drm_edid);
>
> intel_backlight_setup(intel_connector, INVALID_PIPE);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
> index 3b1004b019a8..42aa04bac261 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -31,6 +31,8 @@
> #include <linux/kernel.h>
> #include <linux/pwm.h>
>
> +#include <drm/drm_edid.h>
> +
> #include "i915_reg.h"
> #include "intel_backlight.h"
> #include "intel_connector.h"
> @@ -670,10 +672,13 @@ void intel_panel_init_alloc(struct intel_connector *connector)
> INIT_LIST_HEAD(&panel->fixed_modes);
> }
>
> -int intel_panel_init(struct intel_connector *connector)
> +int intel_panel_init(struct intel_connector *connector,
> + const struct drm_edid *fixed_edid)
> {
> struct intel_panel *panel = &connector->panel;
>
> + panel->fixed_edid = fixed_edid;
> +
> intel_backlight_init_funcs(panel);
>
> if (!has_drrs_modes(connector))
> @@ -692,6 +697,9 @@ void intel_panel_fini(struct intel_connector *connector)
> struct intel_panel *panel = &connector->panel;
> struct drm_display_mode *fixed_mode, *next;
>
> + if (!IS_ERR_OR_NULL(panel->fixed_edid))
> + drm_edid_free(panel->fixed_edid);
> +
> intel_backlight_destroy(panel);
>
> intel_bios_fini_panel(panel);
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.h b/drivers/gpu/drm/i915/display/intel_panel.h
> index 4b51e1c51da6..15a8c897b33f 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.h
> +++ b/drivers/gpu/drm/i915/display/intel_panel.h
> @@ -13,13 +13,15 @@ enum drrs_type;
> struct drm_connector;
> struct drm_connector_state;
> struct drm_display_mode;
> +struct drm_edid;
> struct drm_i915_private;
> struct intel_connector;
> struct intel_crtc_state;
> struct intel_encoder;
>
> void intel_panel_init_alloc(struct intel_connector *connector);
> -int intel_panel_init(struct intel_connector *connector);
> +int intel_panel_init(struct intel_connector *connector,
> + const struct drm_edid *fixed_edid);
> void intel_panel_fini(struct intel_connector *connector);
> enum drm_connector_status
> intel_panel_detect(struct drm_connector *connector, bool force);
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 21805c15d5eb..c58e5cfa8e88 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2903,7 +2903,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
> mutex_unlock(&i915->drm.mode_config.mutex);
> }
>
> - intel_panel_init(intel_connector);
> + intel_panel_init(intel_connector, NULL);
>
> if (!intel_panel_preferred_fixed_mode(intel_connector))
> goto err;
> diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
> index 662bdb656aa3..2289f6b1b4eb 100644
> --- a/drivers/gpu/drm/i915/display/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
> @@ -1983,7 +1983,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
> goto err_cleanup_connector;
> }
>
> - intel_panel_init(intel_connector);
> + intel_panel_init(intel_connector, NULL);
>
> intel_backlight_setup(intel_connector, INVALID_PIPE);
>
> --
> 2.34.1
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2023-01-20 18:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-19 16:18 [Intel-gfx] [PATCH v8 0/8] drm/edid: info & modes parsing and drm_edid refactors Jani Nikula
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 1/8] drm/edid: split HDMI VSDB info and mode parsing Jani Nikula
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 2/8] drm/edid: refactor _drm_edid_connector_update() and rename Jani Nikula
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 3/8] drm/edid: add separate drm_edid_connector_add_modes() Jani Nikula
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 4/8] drm/edid: remove redundant _drm_connector_update_edid_property() Jani Nikula
2023-01-23 9:59 ` Jani Nikula
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 5/8] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid Jani Nikula
2023-01-20 18:48 ` Ville Syrjälä
2023-01-23 10:15 ` Jani Nikula
2023-01-23 18:22 ` Ville Syrjälä
2023-01-19 16:18 ` [Intel-gfx] [PATCH v8 6/8] drm/i915/bios: convert intel_bios_init_panel() " Jani Nikula
2023-01-20 18:48 ` Ville Syrjälä
2023-01-19 16:19 ` [Intel-gfx] [PATCH v8 7/8] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid Jani Nikula
2023-01-20 18:49 ` Ville Syrjälä
2023-01-19 16:19 ` [Intel-gfx] [PATCH v8 8/8] drm/i915/panel: move panel fixed EDID to struct intel_panel Jani Nikula
2023-01-20 18:49 ` Ville Syrjälä [this message]
2023-01-19 18:14 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/edid: info & modes parsing and drm_edid refactors (rev3) Patchwork
2023-01-20 21:51 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y8riQrC0wkf9huv+@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox