> -----Original Message----- > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Sent: Thursday, October 8, 2020 4:25 PM > To: Shankar, Uma <uma.shankar@xxxxxxxxx> > Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Subject: Re: [v7 01/10] drm/i915/display: Add HDR Capability detection for > LSPCON > > On Tue, Oct 06, 2020 at 06:36:45PM +0530, Uma Shankar wrote: > > LSPCON firmware exposes HDR capability through LPCON_CAPABILITIES DPCD > > register. LSPCON implementations capable of supporting HDR set > > HDR_CAPABILITY bit in LSPCON_CAPABILITIES to 1. This patch reads the > > same, detects the HDR capability and adds this to intel_lspcon struct. > > > > v2: Addressed Jani Nikula's review comment and fixed the HDR > > capability detection logic > > > > Signed-off-by: Uma Shankar <uma.shankar@xxxxxxxxx> > > --- > > .../drm/i915/display/intel_display_types.h | 1 + > > drivers/gpu/drm/i915/display/intel_lspcon.c | 30 +++++++++++++++++++ > > 2 files changed, 31 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > > b/drivers/gpu/drm/i915/display/intel_display_types.h > > index d5dc18cb8c39..fb8cfc0981d6 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > > @@ -1398,6 +1398,7 @@ struct intel_lspcon { > > bool active; > > enum drm_lspcon_mode mode; > > enum lspcon_vendor vendor; > > + bool hdr_supported; > > }; > > > > struct intel_digital_port { > > diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c > > b/drivers/gpu/drm/i915/display/intel_lspcon.c > > index ee95fc353a56..f92962195698 100644 > > --- a/drivers/gpu/drm/i915/display/intel_lspcon.c > > +++ b/drivers/gpu/drm/i915/display/intel_lspcon.c > > @@ -35,6 +35,8 @@ > > #define LSPCON_VENDOR_PARADE_OUI 0x001CF8 #define > > LSPCON_VENDOR_MCA_OUI 0x0060AD > > > > +#define DPCD_MCA_LSPCON_HDR_STATUS 0x70003 > > + > > /* AUX addresses to write MCA AVI IF */ #define > > LSPCON_MCA_AVI_IF_WRITE_OFFSET 0x5C0 #define > LSPCON_MCA_AVI_IF_CTRL > > 0x5DF @@ -104,6 +106,32 @@ static bool lspcon_detect_vendor(struct > > intel_lspcon *lspcon) > > return true; > > } > > > > +static void lspcon_detect_hdr_capability(struct intel_lspcon *lspcon) > > +{ > > + struct intel_digital_port *intel_dig_port = > > + container_of(lspcon, struct intel_digital_port, lspcon); > > s/intel_dig_port/dig_port/ to conform with commit 7801f3b792b0 > ("drm/i915/display: prefer dig_port to reference intel_digital_port") > > > + struct drm_device *dev = intel_dig_port->base.base.dev; > > + struct intel_dp *dp = lspcon_to_intel_dp(lspcon); > > + u8 hdr_caps; > > + int ret; > > + > > + /* Enable HDR for MCA based LSPCON devices */ > > + if (lspcon->vendor == LSPCON_VENDOR_MCA) > > + ret = drm_dp_dpcd_read(&dp->aux, > DPCD_MCA_LSPCON_HDR_STATUS, > > + &hdr_caps, 1); > > + else > > + return; > > + > > + if (ret < 0) { > > + drm_dbg_kms(dev, "hdr capability detection failed\n"); > > + lspcon->hdr_supported = false; > > + return; > > + } else if (hdr_caps & 0x1) { > > + drm_dbg_kms(dev, "lspcon capable of HDR\n"); > > + lspcon->hdr_supported = true; > > + } > > +} > > + > > static enum drm_lspcon_mode lspcon_get_current_mode(struct > > intel_lspcon *lspcon) { > > enum drm_lspcon_mode current_mode; > > @@ -554,6 +582,8 @@ static bool lspcon_init(struct intel_digital_port > *dig_port) > > return false; > > } > > > > + lspcon_detect_hdr_capability(lspcon); > > + > > This is now too late since we do this after registering the connector. > Need to move this to the init stage, but lspcon detection requires hpd detection > logic to be enabled, so once I get the hpd init order sorted we need to do this > after intel_hpd_init() but before the connector is registered. Hmm, maybe we > can actually do it from connector's > .late_register() hook? I am actually calling it from ddi_init itself in patch 3 assuming its just the one hardware which is having issues (not sure if this a limitation for LSPCON generically). So if detection is successful register HDR else let it not get enabled. It doesn't sound good though but was not getting any better ideas ☹. I think late_register may work out for us. Regards, Uma Shankar > > > connector->ycbcr_420_allowed = true; > > lspcon->active = true; > > DRM_DEBUG_KMS("Success: LSPCON init\n"); > > -- > > 2.26.2 > > -- > Ville Syrjälä > Intel _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx