Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp4669425rwb; Sun, 13 Nov 2022 10:48:15 -0800 (PST) X-Google-Smtp-Source: AA0mqf6Jq7iZ6x0avxhILh7tF70wxRsT6eXKKuUNwvJ5cB2Ir44GoVVnPcqmnMcLvlX2lJxipBaR X-Received: by 2002:a17:906:fb81:b0:7ae:9187:eb70 with SMTP id lr1-20020a170906fb8100b007ae9187eb70mr7696379ejb.533.1668365295093; Sun, 13 Nov 2022 10:48:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668365295; cv=none; d=google.com; s=arc-20160816; b=iUycomCWXcGAIWTcRJTQR3QlWKfLhAm/UIKBUENOJJjsPquDYJx4kGT581TrHqrBe3 nQEDEMPqWw9UFgJ5mS9tIEQEleMLaBIzsia8BgMdyyNLoXHKxMjubbbRmA/XUBLW5w0Q garcK5P4yqRin6wEFIJy+mVVsSzq3hMpF4UtikJG9uRVmPz+s0SKNhgJRjVHWkzN/1Am inkrXEptWyp7tQGHgPCECdNdVX4bDVNMwuMbiDvqC6RBClK92Qp84gt4VU8Z+9yJduve yQagvIL/1gVjwzp1+4Wk7tSdOHBNVmxh2rpVqy/ZfDq4t7an+VW33apphKzbv6GP6WZB sMgg== 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=vQeGh/SrZTNyLD8BDYwInUVZOX/h82HGv8KTzhAyvnE=; b=HWuN6vcaCQD51qIKklypsq8nZTEUOucbtUas63GtDkGWmAjb2guefowK72UM4YPvGu ickBIgY/CBAc5mx8SH3ebCbm3lOEcaVWqFbH6dOicseN72SaoJarOL2OTB4fgtu43XWR sUBVEdPsZwnw54qfm1gPEo0VDJq9XqDZFD2d598oAKm192H0KsqglrMzIhpqgJ7GjdD7 UWdFjXuVxUzfvK+l2xjRzE2RdVgsR8acutAgR9e1yEGFbuiUgQ9G5B4QH704YkpYZdmx brPvAgQMmBGM2nOaOKVgl9nulO8o4j4xbyRUAK0uTWzmhmsoOzMKArd3u+UAY8H7EW+N bAEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@moc6.cz header.s=mail20201116 header.b=h9usAkRc; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=moc6.cz Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cw4-20020a170906478400b007801a579899si8766044ejc.448.2022.11.13.10.47.52; Sun, 13 Nov 2022 10:48:15 -0800 (PST) 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=pass header.i=@moc6.cz header.s=mail20201116 header.b=h9usAkRc; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=moc6.cz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235464AbiKMSMw (ORCPT + 89 others); Sun, 13 Nov 2022 13:12:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235405AbiKMSMv (ORCPT ); Sun, 13 Nov 2022 13:12:51 -0500 Received: from moc6.cz (hosting.moc6.cz [IPv6:2a02:c60:c70:8900::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55CB629D for ; Sun, 13 Nov 2022 10:12:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=moc6.cz; s=mail20201116; h=In-Reply-To:Message-ID:Subject:Cc:To:From:Date:Reply-To; bh=vQeGh/SrZTNyLD8BDYwInUVZOX/h82HGv8KTzhAyvnE=; b=h9usAkRcgpMx/K4rRfwFHeDvY4 ORQcdLwNGYtYAheXA2rgPnuypeB+lJXVZipHKeu6RlmSxnYRgXXJYatlJIGL6Q8+406F4p3BOdIeU nGkFyTb5py7i6KayZZDblC7FVhFcFCOfW5d5XDNCHNrIRd8Ka/m7azUJt5Ur1jY7rwwvqeWb4dNm9 3SennpJIBznq2p6KjTN4prmeH47KkVHxLM4QIV2oq36rkb3tUxpWpAKFZs7pz6lCnTruaCCAwSPA4 nqROTZ0TTmmV61D5TWpp0hUa/hNLxxhbDum5lhpV3Oq2NkPJEqsA4C+YvKeQZIEWGpoEbFySHHl6u aVrY6ER6ubFzVdFPXiAvtxYkKaRGP1oHG1b3/v/3xGwH9aVrmaI97cX3L1l7u7DXijZ1S5S56HUMZ CNPW16yFoJnnY/xAfH6Na63GRzBAejGnt+AbJRkZVCyXTgNDsq/qHpKDTKqK3q5nNUkGn9JG+NT+R goQsJ2fH6HqLSg1Tyc68tJjWABcctJNhFP0Mvyt1YzBs9DEcndiXOguzHmlkWJLKdfc3jsuITEArY n4+z0dUK+m7rSaTMGMqaNCQ91T0PyDxFyL3+X45Oee5ZV9jszfQBnkPY98ap/qgVG6LsybMZc8zO7 1ED33jQvT5hQw6m4G2c1zwx8xYqAtdORiqnnUvg8g=; Received: from Debian-exim by moc6.cz with local (Exim 4.94.2) (envelope-from ) authenticated: Debian-exim id 1ouHTD-001ipw-8b; Sun, 13 Nov 2022 19:12:39 +0100 Date: Sun, 13 Nov 2022 19:12:39 +0100 From: Filip Moc To: Alex Deucher Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , David Airlie , "Pan, Xinhui" , linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alex Deucher , Christian =?iso-8859-1?Q?K=F6nig?= Subject: Re: [PATCH] drm/amd/display: add parameter backlight_min Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: 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_PASS,SPF_PASS 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 On Tue, Nov 01, 2022 at 12:06:55PM -0400, Alex Deucher wrote: > On Tue, Nov 1, 2022 at 11:42 AM Filip Moc wrote: > > > > Hello Alex, > > > > thank you for your response. > > > > Yes, I have HP ENVY x360 Convertible 13-ay1xxx, and backlight_min=2 > > seems to work the best in my case. > > > > I added a dmi based quirk table. So far with support only for display 0 > > to make it simple. Support for more displays in quirk table can be added > > later if ever needed. > > > > According to [1] HP ENVY x360 Convertible 13-ag0xxx also needs a quirk > > so I'm going to use this to cover both: > > DMI_EXACT_MATCH(DMI_SYS_VENDOR, "HP") > > DMI_MATCH(DMI_PRODUCT_NAME, "HP ENVY x360 Convertible 13-") > > You might want to add an additional check for the panel name/vendor > from the EDID as well in case HP uses multiple panels from different > vendors on that system. Hello, thank you for this feedback. I agree it would be nice to have this additional check but I'm not sure if there is an easy way to do this. I don't think we can add this to the EDID quirk table in drm_edid.c as we also need to store the value for backlight min_input_signal. There might also be different laptop manufacturers using the same panel which only one of them needs a quirk or both of them might need a quirk but with different value. Or there also might be more devices with the same DMI but different panels where each panel needs a quirk with different value. So it seems if we want to cover all possible situations we need a nested quirk tables for this. One main table for DMI matches where each record would contain another table for EDID matches. Then there's also a question of how to obtain the EDID. The most simple and straightforward approach seems to be getting the EDID vendor/product identification from dc_edid_caps. But this seems to be going completely against the goal 10. in display/TODO. So another approach I'm considering is to use drm_edid_get_panel_id but for that we would need a pointer to i2c_adapter for the corresponding backlight_link. Which I think is currently only available via amdgpu_dm_connector which from dc_link is only accessible via void *priv. Which seems like something that shouldn't be touched here. So overall I don't know what would be the best way to implement this. It also seems too complex I'm not even sure if it's worth the trouble and maybe just hoping there won't be any two devices with the same DMI but different EDID which only one of them would need a quirk while the other would break with it might seem more reasonable. Or maybe I'm missing something? Please let me know what you think. Filip > > Alex > > > > > So far it seems to be working fine. > > I'll send this in v2 once I do some final tweaks and do more tests. > > > > [1] https://bugzilla.kernel.org/show_bug.cgi?id=203439#c5 > > > > Filip > > > > > > V Mon, Oct 31, 2022 at 11:36:09AM -0400, Alex Deucher napsal(a): > > > On Sun, Oct 30, 2022 at 5:26 AM Filip Moc wrote: > > > > > > > > There are some devices on which amdgpu won't allow user to set brightness > > > > to sufficiently low values even though the hardware would support it just > > > > fine. > > > > > > > > This usually happens in two cases when either configuration of brightness > > > > levels via ACPI/ATIF is not available and amdgpu falls back to defaults > > > > (currently 12 for minimum level) which may be too high for some devices or > > > > even the configuration via ATIF is available but the minimum brightness > > > > level provided by the manufacturer is set to unreasonably high value. > > > > > > > > In either case user can use this new module parameter to adjust the > > > > minimum allowed backlight brightness level. > > > > > > > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=203439 > > > > Signed-off-by: Filip Moc > > > > > > Does your system require an override and if so, what is it? It would > > > be good to add a quirk for your system as well so that other users of > > > the same system wouldn't need to manually figure out an apply the > > > settings. > > > > > > Alex > > > > > > > > > > --- > > > > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +++ > > > > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 15 +++++++++++++++ > > > > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 +++++++++++++++ > > > > 3 files changed, 33 insertions(+) > > > > > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > > > > index 0e6ddf05c23c..c5445402c49d 100644 > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > > > > @@ -200,6 +200,9 @@ extern uint amdgpu_dc_debug_mask; > > > > extern uint amdgpu_dc_visual_confirm; > > > > extern uint amdgpu_dm_abm_level; > > > > extern int amdgpu_backlight; > > > > +#ifdef CONFIG_DRM_AMD_DC > > > > +extern int amdgpu_backlight_override_min[]; > > > > +#endif > > > > extern struct amdgpu_mgpu_info mgpu_info; > > > > extern int amdgpu_ras_enable; > > > > extern uint amdgpu_ras_mask; > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > > > > index 16f6a313335e..f2fb549ac52f 100644 > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > > > > @@ -43,6 +43,7 @@ > > > > #include "amdgpu_irq.h" > > > > #include "amdgpu_dma_buf.h" > > > > #include "amdgpu_sched.h" > > > > +#include "amdgpu_dm.h" > > > > #include "amdgpu_fdinfo.h" > > > > #include "amdgpu_amdkfd.h" > > > > > > > > @@ -853,6 +854,20 @@ int amdgpu_backlight = -1; > > > > MODULE_PARM_DESC(backlight, "Backlight control (0 = pwm, 1 = aux, -1 auto (default))"); > > > > module_param_named(backlight, amdgpu_backlight, bint, 0444); > > > > > > > > +/** > > > > + * DOC: backlight_min (array of int) > > > > + * Override minimum allowed backlight brightness signal (per display). > > > > + * Must be less than the maximum brightness signal. > > > > + * Negative value means no override. > > > > + * > > > > + * Defaults to all -1 (no override on any display). > > > > + */ > > > > +#ifdef CONFIG_DRM_AMD_DC > > > > +int amdgpu_backlight_override_min[AMDGPU_DM_MAX_NUM_EDP] = {[0 ... (AMDGPU_DM_MAX_NUM_EDP-1)] = -1}; > > > > +MODULE_PARM_DESC(backlight_min, "Override minimum backlight brightness signal (0..max-1, -1 = no override (default))"); > > > > +module_param_array_named(backlight_min, amdgpu_backlight_override_min, int, NULL, 0444); > > > > +#endif > > > > + > > > > /** > > > > * DOC: tmz (int) > > > > * Trusted Memory Zone (TMZ) is a method to protect data being written > > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > > > index eb4ce7216104..e2c36ba93d05 100644 > > > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > > > > @@ -3911,6 +3911,21 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm, > > > > dm->backlight_caps[bl_idx].min_input_signal = AMDGPU_DM_DEFAULT_MIN_BACKLIGHT; > > > > dm->backlight_caps[bl_idx].max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT; > > > > #endif > > > > + > > > > + if (amdgpu_backlight_override_min[bl_idx] >= 0) { > > > > + if (amdgpu_backlight_override_min[bl_idx] < dm->backlight_caps[bl_idx].max_input_signal) { > > > > + DRM_INFO("amdgpu: backlight[%i]: overriding minimum brightness from %i to %i\n", > > > > + bl_idx, > > > > + dm->backlight_caps[bl_idx].min_input_signal, > > > > + amdgpu_backlight_override_min[bl_idx]); > > > > + dm->backlight_caps[bl_idx].min_input_signal = amdgpu_backlight_override_min[bl_idx]; > > > > + } else { > > > > + DRM_ERROR("amdgpu: backlight[%i]: minimum brightness override (%i) is not below maximum (%i)\n", > > > > + bl_idx, > > > > + amdgpu_backlight_override_min[bl_idx], > > > > + dm->backlight_caps[bl_idx].max_input_signal); > > > > + } > > > > + } > > > > } > > > > > > > > static int get_brightness_range(const struct amdgpu_dm_backlight_caps *caps, > > > > > > > > base-commit: d8c03bfe146fd5e081a252cd34f3f12ca0255357 > > > > -- > > > > 2.30.2 > > > >