From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B5D81E1DE9 for ; Wed, 26 Nov 2025 14:23:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764166986; cv=none; b=XS0ydDrxMZaSyQUtePbXRdgu3HpM3cXGjInl2ANTQHmA8To+VJcb7B4LT29QqjP2fZAsWdDHuddW7gzkcnBo2rkOXOa1GiROXeeL6UyE5LFLOZG04Gvs/cm9Ovrw81iIKBUcUHhLXnr4xrjQnlti4/kszKS6Sb1i/zK26V/JFNo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764166986; c=relaxed/simple; bh=CRaIviTiI+WxTGpRSNOaJqrAwuI5bU8zR4RSB+nX9Hc=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=AmRYYfLf20Fz3rEpcDyTARobvaPANuzCwKB1HTHCIETfLA/BdQiFhX68RoHbL1Z0xa0jALChmoB9a9pwanopBlkD5RL0pRoeMQzZ9qkh0prdcZMZ7vWLsBehkky4brgxhzsKchCZ5eES9FVT8Yqu1wS/D1LXngO74Ll2+m6eWVA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=0la.ch; spf=pass smtp.mailfrom=0la.ch; dkim=pass (2048-bit key) header.d=0la.ch header.i=@0la.ch header.b=j9ZdxPzb; dkim=permerror (0-bit key) header.d=0la.ch header.i=@0la.ch header.b=40tjysnj; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=0la.ch Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0la.ch Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=0la.ch header.i=@0la.ch header.b="j9ZdxPzb"; dkim=permerror (0-bit key) header.d=0la.ch header.i=@0la.ch header.b="40tjysnj" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=0la.ch; c=relaxed/relaxed; h=From:To:Subject:Date:Message-ID; t=1764166955; bh=qzZi8Zl7w7hJ8UjBr4t5gMo sY5NWA7XOv6/9K3vMpFc=; b=j9ZdxPzblw5PSJR00nSTBdeKLRPa02vNo9pfaptUBm58VFbc+K CzgJ+yrOH4EGP7cq9GTFRhczxb6JAqeSMfZ9/+9oTG90br/Yk6vRxiSbLRbxGgCa76Sxz2RYTfk Xu3Z5vhSw2y5zSKZuUULjn/gvDuVsrGzsh+3102dO4317WfEJcA1R+aMNRknW3gKdKxTDRWXPcR iwVg/J06/c7ki6tcOZ+1hjVoR5JyjPIe+27JBf7VVdyTHqYSh7o5BVHjFbrIUgny5rktJ30Qbos 4kNrZ/w8ml7PN3qQFjD597P4mqbtz2FaK2UekF/rquCg3otOpsjcNweCZ+578kJN5Uw==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=0la.ch; c=relaxed/relaxed; h=From:To:Subject:Date:Message-ID; t=1764166955; bh=qzZi8Zl7w7hJ8UjBr4t5gMo sY5NWA7XOv6/9K3vMpFc=; b=40tjysnjgfuzo92hWADmIBdACEOCZ+iQRECy9WjsAym0q+6gLj +/7btkBTY/2kqShcf1W50yf7qFfuPwco8rCw==; Message-ID: <1f671fbb-233d-45e5-80f5-bb66049cadf6@0la.ch> Date: Wed, 26 Nov 2025 15:22:34 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 3/7] drm/edid: MSO should only be used for non-eDP displays To: Jani Nikula , Yaroslav Bolyukin , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?Q?Christian_K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org References: <20251126065126.54016-1-iam@lach.pw> <20251126065126.54016-4-iam@lach.pw> <5be6faede273533b88e592bd25776b639d2eeb9f@intel.com> Content-Language: en-US From: Yaroslav In-Reply-To: <5be6faede273533b88e592bd25776b639d2eeb9f@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2025-11-26 15:10, Jani Nikula wrote: > On Wed, 26 Nov 2025, Yaroslav Bolyukin wrote: >> As per DisplayID v2.1a spec: >> If Offset 06h[2:0] is programmed to 001b (External DisplayPort), this >> field shall be cleared to 00b (Not supported). >> >> Link: https://lore.kernel.org/lkml/3abc1087618c822e5676e67a3ec2e64e506dc5ec@intel.com/ >> Signed-off-by: Yaroslav Bolyukin >> --- >> drivers/gpu/drm/drm_displayid_internal.h | 4 +++ >> drivers/gpu/drm/drm_edid.c | 36 +++++++++++++++--------- >> 2 files changed, 27 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm_displayid_internal.h >> index 5b1b32f73516..72f107ae832f 100644 >> --- a/drivers/gpu/drm/drm_displayid_internal.h >> +++ b/drivers/gpu/drm/drm_displayid_internal.h >> @@ -142,9 +142,13 @@ struct displayid_formula_timing_block { >> struct displayid_formula_timings_9 timings[]; >> } __packed; >> >> +#define DISPLAYID_VESA_DP_TYPE GENMASK(2, 0) >> #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) >> #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) >> >> +#define DISPLAYID_VESA_DP_TYPE_EDP 0 >> +#define DISPLAYID_VESA_DP_TYPE_DP 1 >> + >> struct displayid_vesa_vendor_specific_block { >> struct displayid_block base; >> u8 oui[3]; >> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c >> index a52fd6de9327..348aa31aea1b 100644 >> --- a/drivers/gpu/drm/drm_edid.c >> +++ b/drivers/gpu/drm/drm_edid.c >> @@ -6533,6 +6533,7 @@ static void drm_parse_vesa_specific_block(struct drm_connector *connector, >> struct displayid_vesa_vendor_specific_block *vesa = >> (struct displayid_vesa_vendor_specific_block *)block; >> struct drm_display_info *info = &connector->display_info; >> + int dp_type; >> >> if (block->num_bytes < 3) { >> drm_dbg_kms(connector->dev, >> @@ -6551,20 +6552,29 @@ static void drm_parse_vesa_specific_block(struct drm_connector *connector, >> return; >> } >> >> - switch (FIELD_GET(DISPLAYID_VESA_MSO_MODE, vesa->mso)) { >> - default: >> - drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved MSO mode value\n", >> + dp_type = FIELD_GET(DISPLAYID_VESA_DP_TYPE, vesa->data_structure_type); >> + if (dp_type > 1) { >> + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved dp type value\n", >> connector->base.id, connector->name); >> - fallthrough; >> - case 0: >> - info->mso_stream_count = 0; >> - break; >> - case 1: >> - info->mso_stream_count = 2; /* 2 or 4 links */ >> - break; >> - case 2: >> - info->mso_stream_count = 4; /* 4 links */ >> - break; >> + } >> + >> + /* MSO is not supported for eDP */ >> + if (dp_type != DISPLAYID_VESA_DP_TYPE_EDP) { > > MSO is *only* supported on eDP, not the other way round! > > BR, > Jani. > Oh, yes. For some reason I thought that MSO == MST, and it made no sense for me why would MST be only supported on eDP, I see now that this is a separate thing. I should probably don't include this patch in the patchset, since this is the only part that I don't have hardware to test >> + switch (FIELD_GET(DISPLAYID_VESA_MSO_MODE, vesa->mso)) { >> + default: >> + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved MSO mode value\n", >> + connector->base.id, connector->name); >> + fallthrough; >> + case 0: >> + info->mso_stream_count = 0; >> + break; >> + case 1: >> + info->mso_stream_count = 2; /* 2 or 4 links */ >> + break; >> + case 2: >> + info->mso_stream_count = 4; /* 4 links */ >> + break; >> + } >> } >> >> if (info->mso_stream_count) { >