Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp6072307rwr; Tue, 9 May 2023 09:50:25 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4Vkgk2t4Vvz+UlsVinAAhCTCFhvMxMk3O7g00xTpLMOxVzZVQjaYjFrwd9cX+0ywibmv7m X-Received: by 2002:a17:903:41d0:b0:1ac:4412:bd9 with SMTP id u16-20020a17090341d000b001ac44120bd9mr18146773ple.3.1683651024983; Tue, 09 May 2023 09:50:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683651024; cv=none; d=google.com; s=arc-20160816; b=S7Kp921MC2O4irlf9ODMH5xhKZnZMWGAqqpm1Kp+aWudVTAwtseY7rTPf4i4gLHK+E 08iHVGCogyHD4Lw6kangvMnmTPnY2oZGO5yEFGnSqFWEQT5+N/IOU4hQAfUaFDfO9ZUw DmwSx0aahaR8ZXx97BlVJmruSs4rXZfa2CYZEiNLtuN5ga8K0rrEz91bB9HLbenPElXn 2N/Jiq7T9TnAoiih8aVPTKErDDPw9++zyB+CCdaPgI1WVZQmru88s7+vDUq75/upLbj9 j4r2BlQIFJckHLSa2ta88OSjP/YJkz/P8mm2dCGCeQVU0yg0XeV6Hg78q8aW3Z1KAhgl WJAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=R40lkV2CFRJyCp/GbWmiXXzZrCx7rYAB8u56lzxd0dE=; b=t2OF7ZOiQZ6AtYYNkyqdSFwvo4PThZ12VsFGVrFSOEvoSZ/IttvBXU76rFT5Om+Mhw laOJd0vUNptiRE72St1FvXMy9PuyiwK3WWQWOQCahgBqEPjXrTFkEKiwRc4SkbuoLwom MA4/OdBfinklfrYtp3CJZzaz9k3CHav9GeiLrhLAv9kcKfyRr8VhjidoEp80qzlteobk xkIHEm8gByHEw0ho1LPnfJtYXnV9wWDjkXXjC0+prrc1k+NMJFVI/MwVlQYoNQpUy3E3 H06ywCjnjDQycT94cerRO1GhoXbz0fjnu0thK74BzePCT/ocADOHIqwESyLlhfxBUNSl Em6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=sUWvu9Wk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jc22-20020a17090325d600b001a69cb5f7besi1723026plb.525.2023.05.09.09.50.11; Tue, 09 May 2023 09:50:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=sUWvu9Wk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230070AbjEIQhO (ORCPT + 99 others); Tue, 9 May 2023 12:37:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231467AbjEIQhN (ORCPT ); Tue, 9 May 2023 12:37:13 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16FF2421C for ; Tue, 9 May 2023 09:37:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=R40lkV2CFRJyCp/GbWmiXXzZrCx7rYAB8u56lzxd0dE=; b=sUWvu9WkObboIKA8N9xmaOOikB XovxhDb4c7DHuXa3WkeJViMcrgihe0x79b+hitUp2TGNPAiQUK7wmVdQLHFEjS9TTfJH2s6SIh1qH 2WUSdshzxcv5tP4NgaHl8geSqADK0Fvr34+J8JL2MB/0X1yOBet1+Z76Kplzpu/Q4OlstFo4e9cK3 mU6gR6WOMh45tDf/K01tsagGXDx8MPICGdwS0GN5qGmaNUTuYSzcUyorrMflIQmvneY9KSVct2Xyg 1G1bunzFDioEItvVn2bXYNgL5c+bsPtJHpAdGzYPrVapXCxxPqvmOekZ7meDX6jBQaudSWkAsml8D 7+T05F9Q==; Received: from [38.44.72.37] (helo=mail.igalia.com) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1pwQKn-0052h8-6s; Tue, 09 May 2023 18:37:05 +0200 Date: Tue, 9 May 2023 15:37:01 -0100 From: Melissa Wen To: Harry Wentland Cc: amd-gfx@lists.freedesktop.org, Rodrigo Siqueira , sunpeng.li@amd.com, Alex Deucher , dri-devel@lists.freedesktop.org, christian.koenig@amd.com, Xinhui.Pan@amd.com, airlied@gmail.com, daniel@ffwll.ch, Joshua Ashton , Sebastian Wick , Xaver Hugl , Shashank Sharma , Nicholas Kazlauskas , sungjoon.kim@amd.com, Alex Hung , linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 12/40] drm/amd/display: add plane HDR multiplier driver-private property Message-ID: <20230509163701.57lf22phumicqv37@mail.igalia.com> References: <20230423141051.702990-1-mwen@igalia.com> <20230423141051.702990-13-mwen@igalia.com> <5bbd49b6-ad09-607f-521d-96f9d8eb3b20@amd.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="nfaok3sextt6axef" Content-Disposition: inline In-Reply-To: <5bbd49b6-ad09-607f-521d-96f9d8eb3b20@amd.com> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --nfaok3sextt6axef Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 05/08, Harry Wentland wrote: >=20 >=20 > On 4/23/23 10:10, Melissa Wen wrote: > > From: Joshua Ashton > >=20 > > Multiplier to 'gain' the plane. When PQ is decoded using the fixed func > > transfer function to the internal FP16 fb, 1.0 -> 80 nits (on AMD at > > least) When sRGB is decoded, 1.0 -> 1.0. Therefore, 1.0 multiplier =3D= 80 > > nits for SDR content. So if you want, 203 nits for SDR content, pass in > > (203.0 / 80.0). > >=20 >=20 > Is gamescope intending to use this? I don't think so. Again, I'll double check and drop it accordingly. Melissa >=20 > Harry >=20 > > Co-developed-by: Melissa Wen > > Signed-off-by: Melissa Wen > > Signed-off-by: Joshua Ashton > > --- > > drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 6 +++++ > > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 4 +++ > > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 12 +++++++++ > > .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 25 ++++++++++++++----- > > 4 files changed, 41 insertions(+), 6 deletions(-) > >=20 > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/= drm/amd/amdgpu/amdgpu_display.c > > index 24595906dab1..dd658f162f6f 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c > > @@ -1326,6 +1326,12 @@ amdgpu_display_create_color_properties(struct am= dgpu_device *adev) > > return -ENOMEM; > > adev->mode_info.plane_degamma_tf_property =3D prop; > > =20 > > + prop =3D drm_property_create_range(adev_to_drm(adev), > > + 0, "AMD_PLANE_HDR_MULT", 0, UINT_MAX); > > + if (!prop) > > + return -ENOMEM; > > + adev->mode_info.plane_hdr_mult_property =3D prop; > > + > > return 0; > > } > > #endif > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm= /amd/amdgpu/amdgpu_mode.h > > index ab9ce6f26c90..65a9d62ffbe4 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h > > @@ -387,6 +387,10 @@ struct amdgpu_mode_info { > > * linearize content with or without LUT. > > */ > > struct drm_property *plane_degamma_tf_property; > > + /** > > + * @plane_hdr_mult_property: > > + */ > > + struct drm_property *plane_hdr_mult_property; > > #endif > > }; > > =20 > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/driver= s/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h > > index 005632c1c9ec..bb7307b9cfd5 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h > > @@ -51,6 +51,7 @@ > > =20 > > #define AMDGPU_DMUB_NOTIFICATION_MAX 5 > > =20 > > +#define AMDGPU_HDR_MULT_DEFAULT (0x100000000LL) > > /* > > #include "include/amdgpu_dal_power_if.h" > > #include "amdgpu_dm_irq.h" > > @@ -736,6 +737,17 @@ struct dm_plane_state { > > * linearize. > > */ > > enum drm_transfer_function degamma_tf; > > + /** > > + * @hdr_mult: > > + * > > + * Multiplier to 'gain' the plane. When PQ is decoded using the fixed > > + * func transfer function to the internal FP16 fb, 1.0 -> 80 nits (on > > + * AMD at least). When sRGB is decoded, 1.0 -> 1.0, obviously. > > + * Therefore, 1.0 multiplier =3D 80 nits for SDR content. So if you > > + * want, 203 nits for SDR content, pass in (203.0 / 80.0). Format is > > + * S31.32 sign-magnitude. > > + */ > > + __u64 hdr_mult; > > #endif > > }; > > =20 > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/= drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > index 5b458cc0781c..57169dae8b3d 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > @@ -1321,8 +1321,10 @@ static void dm_drm_plane_reset(struct drm_plane = *plane) > > __drm_atomic_helper_plane_reset(plane, &amdgpu_state->base); > > =20 > > #ifdef CONFIG_STEAM_DECK > > - if (amdgpu_state) > > + if (amdgpu_state) { > > amdgpu_state->degamma_tf =3D DRM_TRANSFER_FUNCTION_DEFAULT; > > + amdgpu_state->hdr_mult =3D AMDGPU_HDR_MULT_DEFAULT; > > + } > > #endif > > } > > =20 > > @@ -1424,11 +1426,11 @@ static void dm_drm_plane_destroy_state(struct d= rm_plane *plane, > > #ifdef CONFIG_STEAM_DECK > > int > > amdgpu_dm_replace_property_blob_from_id(struct drm_device *dev, > > - struct drm_property_blob **blob, > > - uint64_t blob_id, > > - ssize_t expected_size, > > - ssize_t expected_elem_size, > > - bool *replaced) > > + struct drm_property_blob **blob, > > + uint64_t blob_id, > > + ssize_t expected_size, > > + ssize_t expected_elem_size, > > + bool *replaced) > > { > > struct drm_property_blob *new_blob =3D NULL; > > =20 > > @@ -1482,6 +1484,10 @@ dm_plane_attach_color_mgmt_properties(struct amd= gpu_display_manager *dm, > > dm->adev->mode_info.plane_degamma_tf_property, > > DRM_TRANSFER_FUNCTION_DEFAULT); > > } > > + /* HDR MULT is always available */ > > + drm_object_attach_property(&plane->base, > > + dm->adev->mode_info.plane_hdr_mult_property, > > + AMDGPU_HDR_MULT_DEFAULT); > > } > > =20 > > static int > > @@ -1507,6 +1513,11 @@ dm_atomic_plane_set_property(struct drm_plane *p= lane, > > dm_plane_state->degamma_tf =3D val; > > dm_plane_state->base.color_mgmt_changed =3D 1; > > } > > + } else if (property =3D=3D adev->mode_info.plane_hdr_mult_property) { > > + if (dm_plane_state->hdr_mult !=3D val) { > > + dm_plane_state->hdr_mult =3D val; > > + dm_plane_state->base.color_mgmt_changed =3D 1; > > + } > > } else { > > drm_dbg_atomic(plane->dev, > > "[PLANE:%d:%s] unknown property [PROP:%d:%s]]\n", > > @@ -1533,6 +1544,8 @@ dm_atomic_plane_get_property(struct drm_plane *pl= ane, > > dm_plane_state->degamma_lut->base.id : 0; > > } else if (property =3D=3D adev->mode_info.plane_degamma_tf_property)= { > > *val =3D dm_plane_state->degamma_tf; > > + } else if (property =3D=3D adev->mode_info.plane_hdr_mult_property) { > > + *val =3D dm_plane_state->hdr_mult; > > } else { > > return -EINVAL; > > } >=20 >=20 --nfaok3sextt6axef Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEd8WOo/JViG+Tu+XIwqF3j0dLehwFAmRadqwACgkQwqF3j0dL ehxMLg//UGvD/CNPh09hk0n0qT3NsizvkT1mfvtGZKGCczyWdTuhPLahM7K2fzXM XaKlOhlDxCydvxQObxS5Ocr9aBRvAzf9a6jOMmrod2Zb8dj4b3VyU99K9TNdi/Xj UNFd8S1ZhY3B+plRDjxeCAKGia01LrlzHAQ5pbFgKgJAK2jWPsyST9N2NQebdR92 WbtcG/5jWOHLmVLdspUW5wbFXPoLt5e1ITXjry8dWTyUQz+s3BbpaPO1ZCsinCRO sXDBxXmX56MYfLZerntUpYMx6AHmv9vOlwEmTT1CNfu2jlUmUAqpSpBmNLUyjRAi SwSti+FNMir9ffA7iDMMWPTcPk1PKc5cs8TuHYnAsGI47x/qQO6IMp4bTJRko5uT 9voOrhyIIMSVJ58su/1XNxFgHfpWaF4CSHZveeSSijodm1+ao1ZlLIeRmybHERCG LBLni/g2a2obx5ex1p/gsqzmur7Gn5nlRgaV0JdxSUMn1jzfOWo0yjsYKofDp/BL ryLWSXhv+3HmdBX3wkCI/i4W3XHtUhzZZh3E3ZLTesEWUp/uWJxuDK68D9JMpBgq +J3KOhotWkQChz6Fuo4PmfDhtnpPSnWnyAJc5ABknpFtZBaLayor7ccnMJXjpU8I EcNTne7BQoh1C84Gxcg/lBXXdh2etqsaVEResyEs1ciXteUNHLw= =DTGq -----END PGP SIGNATURE----- --nfaok3sextt6axef--