* [PATCH 0/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
@ 2025-04-09 16:26 Werner Sembach
2025-04-09 16:27 ` [PATCH 1/1] " Werner Sembach
0 siblings, 1 reply; 10+ messages in thread
From: Werner Sembach @ 2025-04-09 16:26 UTC (permalink / raw)
To: harry.wentland, sunpeng.li, siqueira, alexander.deucher,
christian.koenig, airlied, simona
Cc: amd-gfx, dri-devel, linux-kernel, Werner Sembach
This is a quirk we currently manually apply via our installer, but we don't
have this exact device + panel configuration in our archive anymore so I
could only test the qurik moking in other ids.
Werner Sembach (1):
drm/amd/display: Add quirk to force backlight type on some TUXEDO
devices
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-04-09 16:26 [PATCH 0/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices Werner Sembach
@ 2025-04-09 16:27 ` Werner Sembach
2025-06-23 17:44 ` Werner Sembach
2025-08-19 16:06 ` Werner Sembach
0 siblings, 2 replies; 10+ messages in thread
From: Werner Sembach @ 2025-04-09 16:27 UTC (permalink / raw)
To: harry.wentland, sunpeng.li, siqueira, alexander.deucher,
christian.koenig, airlied, simona
Cc: amd-gfx, dri-devel, linux-kernel, Werner Sembach
The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
control the brightness.
This could already be archived via a module parameter, but this patch adds
a quirk to apply this by default on the mentioned device + panel
combinations.
Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
Cc: stable@vger.kernel.org
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
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 39df45f652b32..2bad6274ad8ff 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
struct amdgpu_dm_quirks {
bool aux_hpd_discon;
bool support_edp0_on_dp1;
+ bool boe_2420_2423_bl_force_pwm;
};
static struct amdgpu_dm_quirks quirk_entries = {
.aux_hpd_discon = false,
- .support_edp0_on_dp1 = false
+ .support_edp0_on_dp1 = false,
+ .boe_2420_2423_bl_force_pwm = false
};
static int edp0_on_dp1_callback(const struct dmi_system_id *id)
@@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
return 0;
}
+static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
+{
+ quirk_entries.boe_2420_2423_bl_force_pwm = true;
+ return 0;
+}
+
static const struct dmi_system_id dmi_quirk_table[] = {
{
.callback = aux_hpd_discon_callback,
@@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
},
},
+ {
+ // TUXEDO Polaris AMD Gen2
+ .callback = boe_2420_2423_bl_force_pwm_callback,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
+ },
+ },
+ {
+ // TUXEDO Polaris AMD Gen3
+ .callback = boe_2420_2423_bl_force_pwm_callback,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
+ },
+ },
{}
/* TODO: refactor this from a fixed table to a dynamic option */
};
@@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
struct amdgpu_device *adev;
struct drm_luminance_range_info *luminance_range;
int min_input_signal_override;
+ u32 panel;
if (aconnector->bl_idx == -1 ||
aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
@@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
caps->aux_support = false;
else if (amdgpu_backlight == 1)
caps->aux_support = true;
+ else if (amdgpu_backlight == -1 &&
+ quirk_entries.boe_2420_2423_bl_force_pwm) {
+ panel = drm_edid_get_panel_id(aconnector->drm_edid);
+ if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
+ panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
+ caps->aux_support = false;
+ }
if (caps->aux_support)
aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
--
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-04-09 16:27 ` [PATCH 1/1] " Werner Sembach
@ 2025-06-23 17:44 ` Werner Sembach
2025-06-23 19:13 ` Rodrigo Siqueira
2025-08-19 16:06 ` Werner Sembach
1 sibling, 1 reply; 10+ messages in thread
From: Werner Sembach @ 2025-06-23 17:44 UTC (permalink / raw)
To: harry.wentland, sunpeng.li, siqueira, alexander.deucher,
christian.koenig, airlied, simona
Cc: amd-gfx, dri-devel, linux-kernel
gentle bump
Am 09.04.25 um 18:27 schrieb Werner Sembach:
> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
> control the brightness.
>
> This could already be archived via a module parameter, but this patch adds
> a quirk to apply this by default on the mentioned device + panel
> combinations.
>
> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> Cc: stable@vger.kernel.org
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
>
> 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 39df45f652b32..2bad6274ad8ff 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
> struct amdgpu_dm_quirks {
> bool aux_hpd_discon;
> bool support_edp0_on_dp1;
> + bool boe_2420_2423_bl_force_pwm;
> };
>
> static struct amdgpu_dm_quirks quirk_entries = {
> .aux_hpd_discon = false,
> - .support_edp0_on_dp1 = false
> + .support_edp0_on_dp1 = false,
> + .boe_2420_2423_bl_force_pwm = false
> };
>
> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
> return 0;
> }
>
> +static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
> +{
> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
> + return 0;
> +}
> +
> static const struct dmi_system_id dmi_quirk_table[] = {
> {
> .callback = aux_hpd_discon_callback,
> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
> },
> },
> + {
> + // TUXEDO Polaris AMD Gen2
> + .callback = boe_2420_2423_bl_force_pwm_callback,
> + .matches = {
> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
> + },
> + },
> + {
> + // TUXEDO Polaris AMD Gen3
> + .callback = boe_2420_2423_bl_force_pwm_callback,
> + .matches = {
> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
> + },
> + },
> {}
> /* TODO: refactor this from a fixed table to a dynamic option */
> };
> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> struct amdgpu_device *adev;
> struct drm_luminance_range_info *luminance_range;
> int min_input_signal_override;
> + u32 panel;
>
> if (aconnector->bl_idx == -1 ||
> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> caps->aux_support = false;
> else if (amdgpu_backlight == 1)
> caps->aux_support = true;
> + else if (amdgpu_backlight == -1 &&
> + quirk_entries.boe_2420_2423_bl_force_pwm) {
> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
> + caps->aux_support = false;
> + }
> if (caps->aux_support)
> aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-23 17:44 ` Werner Sembach
@ 2025-06-23 19:13 ` Rodrigo Siqueira
2025-06-23 19:42 ` Limonciello, Mario
0 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Siqueira @ 2025-06-23 19:13 UTC (permalink / raw)
To: Werner Sembach
Cc: harry.wentland, sunpeng.li, alexander.deucher, christian.koenig,
airlied, simona, amd-gfx, dri-devel, linux-kernel, Alex Hung,
Daniel Wheeler, Mario Limonciello
On 06/23, Werner Sembach wrote:
> gentle bump
>
> Am 09.04.25 um 18:27 schrieb Werner Sembach:
> > The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
> > BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
> > control the brightness.
> >
> > This could already be archived via a module parameter, but this patch adds
> > a quirk to apply this by default on the mentioned device + panel
> > combinations.
> >
> > Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> > Cc: stable@vger.kernel.org
> > ---
> > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
> > 1 file changed, 31 insertions(+), 1 deletion(-)
> >
> > 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 39df45f652b32..2bad6274ad8ff 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
> > struct amdgpu_dm_quirks {
> > bool aux_hpd_discon;
> > bool support_edp0_on_dp1;
> > + bool boe_2420_2423_bl_force_pwm;
> > };
> > static struct amdgpu_dm_quirks quirk_entries = {
> > .aux_hpd_discon = false,
> > - .support_edp0_on_dp1 = false
> > + .support_edp0_on_dp1 = false,
> > + .boe_2420_2423_bl_force_pwm = false
> > };
> > static int edp0_on_dp1_callback(const struct dmi_system_id *id)
> > @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
> > return 0;
> > }
> > +static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
> > +{
> > + quirk_entries.boe_2420_2423_bl_force_pwm = true;
> > + return 0;
> > +}
> > +
> > static const struct dmi_system_id dmi_quirk_table[] = {
> > {
> > .callback = aux_hpd_discon_callback,
> > @@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
> > DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
> > },
> > },
> > + {
> > + // TUXEDO Polaris AMD Gen2
> > + .callback = boe_2420_2423_bl_force_pwm_callback,
> > + .matches = {
> > + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
> > + },
> > + },
> > + {
> > + // TUXEDO Polaris AMD Gen3
> > + .callback = boe_2420_2423_bl_force_pwm_callback,
> > + .matches = {
> > + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
> > + },
> > + },
> > {}
> > /* TODO: refactor this from a fixed table to a dynamic option */
> > };
> > @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> > struct amdgpu_device *adev;
> > struct drm_luminance_range_info *luminance_range;
> > int min_input_signal_override;
> > + u32 panel;
> > if (aconnector->bl_idx == -1 ||
> > aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
> > @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> > caps->aux_support = false;
> > else if (amdgpu_backlight == 1)
> > caps->aux_support = true;
> > + else if (amdgpu_backlight == -1 &&
> > + quirk_entries.boe_2420_2423_bl_force_pwm) {
> > + panel = drm_edid_get_panel_id(aconnector->drm_edid);
> > + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
> > + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
> > + caps->aux_support = false;
> > + }
It lgtm,
Additionally, I believe this is safe to merge since it only affects a
specific device. Perhaps display folks would like to include this as
part of this week's promotion? Anyway, Cc other devs from the display.
Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
> > if (caps->aux_support)
> > aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
--
Rodrigo Siqueira
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-23 19:13 ` Rodrigo Siqueira
@ 2025-06-23 19:42 ` Limonciello, Mario
2025-06-24 5:42 ` Werner Sembach
0 siblings, 1 reply; 10+ messages in thread
From: Limonciello, Mario @ 2025-06-23 19:42 UTC (permalink / raw)
To: Rodrigo Siqueira, Werner Sembach
Cc: Wentland, Harry, Li, Sun peng (Leo), Deucher, Alexander,
Koenig, Christian, airlied@gmail.com, simona@ffwll.ch,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Hung, Alex, Wheeler, Daniel
On 6/23/25 2:13 PM, Rodrigo Siqueira wrote:
> On 06/23, Werner Sembach wrote:
>> gentle bump
>>
>> Am 09.04.25 um 18:27 schrieb Werner Sembach:
>>> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
>>> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
>>> control the brightness.
>>>
>>> This could already be archived via a module parameter, but this patch adds
>>> a quirk to apply this by default on the mentioned device + panel
>>> combinations.
>>>
>>> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
>>> Cc: stable@vger.kernel.org
>>> ---
>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
>>> 1 file changed, 31 insertions(+), 1 deletion(-)
>>>
>>> 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 39df45f652b32..2bad6274ad8ff 100644
>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
>>> struct amdgpu_dm_quirks {
>>> bool aux_hpd_discon;
>>> bool support_edp0_on_dp1;
>>> + bool boe_2420_2423_bl_force_pwm;
>>> };
>>> static struct amdgpu_dm_quirks quirk_entries = {
>>> .aux_hpd_discon = false,
>>> - .support_edp0_on_dp1 = false
>>> + .support_edp0_on_dp1 = false,
>>> + .boe_2420_2423_bl_force_pwm = false
>>> };
>>> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
>>> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
>>> return 0;
>>> }
>>> +static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
>>> +{
>>> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
>>> + return 0;
>>> +}
>>> +
>>> static const struct dmi_system_id dmi_quirk_table[] = {
>>> {
>>> .callback = aux_hpd_discon_callback,
>>> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
>>> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
>>> },
>>> },
>>> + {
>>> + // TUXEDO Polaris AMD Gen2
>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>> + .matches = {
>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
>>> + },
>>> + },
>>> + {
>>> + // TUXEDO Polaris AMD Gen3
>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>> + .matches = {
>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
>>> + },
>>> + },
>>> {}
>>> /* TODO: refactor this from a fixed table to a dynamic option */
>>> };
>>> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>> struct amdgpu_device *adev;
>>> struct drm_luminance_range_info *luminance_range;
>>> int min_input_signal_override;
>>> + u32 panel;
>>> if (aconnector->bl_idx == -1 ||
>>> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
>>> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>> caps->aux_support = false;
>>> else if (amdgpu_backlight == 1)
>>> caps->aux_support = true;
>>> + else if (amdgpu_backlight == -1 &&
>>> + quirk_entries.boe_2420_2423_bl_force_pwm) {
>>> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
>>> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
>>> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
>>> + caps->aux_support = false;
>>> + }
>
> It lgtm,
>
> Additionally, I believe this is safe to merge since it only affects a
> specific device. Perhaps display folks would like to include this as
> part of this week's promotion? Anyway, Cc other devs from the display.
>
> Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
That's a bit odd that aux based B/L control wouldn't work. Are these
both OLED panels? What debugging have you done thus far with them?
What kernel base?
Could you repro on 6.16-rc3?
>
>>> if (caps->aux_support)
>>> aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-23 19:42 ` Limonciello, Mario
@ 2025-06-24 5:42 ` Werner Sembach
2025-06-24 5:45 ` Mario Limonciello
0 siblings, 1 reply; 10+ messages in thread
From: Werner Sembach @ 2025-06-24 5:42 UTC (permalink / raw)
To: Limonciello, Mario, Rodrigo Siqueira
Cc: Wentland, Harry, Li, Sun peng (Leo), Deucher, Alexander,
Koenig, Christian, airlied@gmail.com, simona@ffwll.ch,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Hung, Alex, Wheeler, Daniel
Hi Mario,
Am 23.06.25 um 21:42 schrieb Limonciello, Mario:
> On 6/23/25 2:13 PM, Rodrigo Siqueira wrote:
>> On 06/23, Werner Sembach wrote:
>>> gentle bump
>>>
>>> Am 09.04.25 um 18:27 schrieb Werner Sembach:
>>>> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
>>>> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
>>>> control the brightness.
>>>>
>>>> This could already be archived via a module parameter, but this patch adds
>>>> a quirk to apply this by default on the mentioned device + panel
>>>> combinations.
>>>>
>>>> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
>>>> Cc: stable@vger.kernel.org
>>>> ---
>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
>>>> 1 file changed, 31 insertions(+), 1 deletion(-)
>>>>
>>>> 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 39df45f652b32..2bad6274ad8ff 100644
>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
>>>> struct amdgpu_dm_quirks {
>>>> bool aux_hpd_discon;
>>>> bool support_edp0_on_dp1;
>>>> + bool boe_2420_2423_bl_force_pwm;
>>>> };
>>>> static struct amdgpu_dm_quirks quirk_entries = {
>>>> .aux_hpd_discon = false,
>>>> - .support_edp0_on_dp1 = false
>>>> + .support_edp0_on_dp1 = false,
>>>> + .boe_2420_2423_bl_force_pwm = false
>>>> };
>>>> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
>>>> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
>>>> return 0;
>>>> }
>>>> +static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
>>>> +{
>>>> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
>>>> + return 0;
>>>> +}
>>>> +
>>>> static const struct dmi_system_id dmi_quirk_table[] = {
>>>> {
>>>> .callback = aux_hpd_discon_callback,
>>>> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
>>>> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
>>>> },
>>>> },
>>>> + {
>>>> + // TUXEDO Polaris AMD Gen2
>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>> + .matches = {
>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
>>>> + },
>>>> + },
>>>> + {
>>>> + // TUXEDO Polaris AMD Gen3
>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>> + .matches = {
>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
>>>> + },
>>>> + },
>>>> {}
>>>> /* TODO: refactor this from a fixed table to a dynamic option */
>>>> };
>>>> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>>> struct amdgpu_device *adev;
>>>> struct drm_luminance_range_info *luminance_range;
>>>> int min_input_signal_override;
>>>> + u32 panel;
>>>> if (aconnector->bl_idx == -1 ||
>>>> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
>>>> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>>> caps->aux_support = false;
>>>> else if (amdgpu_backlight == 1)
>>>> caps->aux_support = true;
>>>> + else if (amdgpu_backlight == -1 &&
>>>> + quirk_entries.boe_2420_2423_bl_force_pwm) {
>>>> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
>>>> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
>>>> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
>>>> + caps->aux_support = false;
>>>> + }
>> It lgtm,
>>
>> Additionally, I believe this is safe to merge since it only affects a
>> specific device. Perhaps display folks would like to include this as
>> part of this week's promotion? Anyway, Cc other devs from the display.
>>
>> Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
> That's a bit odd that aux based B/L control wouldn't work. Are these
> both OLED panels? What debugging have you done thus far with them?
> What kernel base?
>
> Could you repro on 6.16-rc3?
Sadly our archive is missing this panel + device combination. This patch is
based on our install script that sets this fix via boot parameters since the
release of these devices.
So the quirk is field proven, but I can't actively test it anymore.
Best regards,
Werner
>
>>>> if (caps->aux_support)
>>>> aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-24 5:42 ` Werner Sembach
@ 2025-06-24 5:45 ` Mario Limonciello
2025-06-24 9:47 ` Werner Sembach
0 siblings, 1 reply; 10+ messages in thread
From: Mario Limonciello @ 2025-06-24 5:45 UTC (permalink / raw)
To: Werner Sembach, Rodrigo Siqueira
Cc: Wentland, Harry, Li, Sun peng (Leo), Deucher, Alexander,
Koenig, Christian, airlied@gmail.com, simona@ffwll.ch,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Hung, Alex, Wheeler, Daniel
On 6/24/2025 12:42 AM, Werner Sembach wrote:
> Hi Mario,
>
> Am 23.06.25 um 21:42 schrieb Limonciello, Mario:
>> On 6/23/25 2:13 PM, Rodrigo Siqueira wrote:
>>> On 06/23, Werner Sembach wrote:
>>>> gentle bump
>>>>
>>>> Am 09.04.25 um 18:27 schrieb Werner Sembach:
>>>>> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
>>>>> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
>>>>> control the brightness.
>>>>>
>>>>> This could already be archived via a module parameter, but this
>>>>> patch adds
>>>>> a quirk to apply this by default on the mentioned device + panel
>>>>> combinations.
>>>>>
>>>>> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
>>>>> Cc: stable@vger.kernel.org
>>>>> ---
>>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++
>>>>> ++++++-
>>>>> 1 file changed, 31 insertions(+), 1 deletion(-)
>>>>>
>>>>> 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 39df45f652b32..2bad6274ad8ff 100644
>>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>> @@ -1625,11 +1625,13 @@ static bool
>>>>> dm_should_disable_stutter(struct pci_dev *pdev)
>>>>> struct amdgpu_dm_quirks {
>>>>> bool aux_hpd_discon;
>>>>> bool support_edp0_on_dp1;
>>>>> + bool boe_2420_2423_bl_force_pwm;
>>>>> };
>>>>> static struct amdgpu_dm_quirks quirk_entries = {
>>>>> .aux_hpd_discon = false,
>>>>> - .support_edp0_on_dp1 = false
>>>>> + .support_edp0_on_dp1 = false,
>>>>> + .boe_2420_2423_bl_force_pwm = false
>>>>> };
>>>>> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
>>>>> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const
>>>>> struct dmi_system_id *id)
>>>>> return 0;
>>>>> }
>>>>> +static int boe_2420_2423_bl_force_pwm_callback(const struct
>>>>> dmi_system_id *id)
>>>>> +{
>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
>>>>> + return 0;
>>>>> +}
>>>>> +
>>>>> static const struct dmi_system_id dmi_quirk_table[] = {
>>>>> {
>>>>> .callback = aux_hpd_discon_callback,
>>>>> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id
>>>>> dmi_quirk_table[] = {
>>>>> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16
>>>>> inch G11 Notebook PC"),
>>>>> },
>>>>> },
>>>>> + {
>>>>> + // TUXEDO Polaris AMD Gen2
>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>> + .matches = {
>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
>>>>> + },
>>>>> + },
>>>>> + {
>>>>> + // TUXEDO Polaris AMD Gen3
>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>> + .matches = {
>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
>>>>> + },
>>>>> + },
>>>>> {}
>>>>> /* TODO: refactor this from a fixed table to a dynamic
>>>>> option */
>>>>> };
>>>>> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct
>>>>> amdgpu_dm_connector *aconnector)
>>>>> struct amdgpu_device *adev;
>>>>> struct drm_luminance_range_info *luminance_range;
>>>>> int min_input_signal_override;
>>>>> + u32 panel;
>>>>> if (aconnector->bl_idx == -1 ||
>>>>> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
>>>>> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct
>>>>> amdgpu_dm_connector *aconnector)
>>>>> caps->aux_support = false;
>>>>> else if (amdgpu_backlight == 1)
>>>>> caps->aux_support = true;
>>>>> + else if (amdgpu_backlight == -1 &&
>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm) {
>>>>> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
>>>>> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E',
>>>>> 0x0974) ||
>>>>> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
>>>>> + caps->aux_support = false;
>>>>> + }
>>> It lgtm,
>>>
>>> Additionally, I believe this is safe to merge since it only affects a
>>> specific device. Perhaps display folks would like to include this as
>>> part of this week's promotion? Anyway, Cc other devs from the display.
>>>
>>> Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
>> That's a bit odd that aux based B/L control wouldn't work. Are these
>> both OLED panels? What debugging have you done thus far with them?
>> What kernel base?
>>
>> Could you repro on 6.16-rc3?
>
> Sadly our archive is missing this panel + device combination. This patch
> is based on our install script that sets this fix via boot parameters
> since the release of these devices.
>
> So the quirk is field proven, but I can't actively test it anymore.
>
> Best regards,
>
> Werner
>
Do you recall what kernel version you were doing it with? I'm just
wondering if AUX brightness control had a bug with such a kernel.
Do you have this panel on some other hardware perhaps? Or could you
send a call out to get some testing done?
>>
>>>>> if (caps->aux_support)
>>>>> aconnector->dc_link->backlight_control_type =
>>>>> BACKLIGHT_CONTROL_AMD_AUX;
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-24 5:45 ` Mario Limonciello
@ 2025-06-24 9:47 ` Werner Sembach
2025-06-24 14:33 ` Limonciello, Mario
0 siblings, 1 reply; 10+ messages in thread
From: Werner Sembach @ 2025-06-24 9:47 UTC (permalink / raw)
To: Mario Limonciello, Rodrigo Siqueira
Cc: Wentland, Harry, Li, Sun peng (Leo), Deucher, Alexander,
Koenig, Christian, airlied@gmail.com, simona@ffwll.ch,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Hung, Alex, Wheeler, Daniel
Am 24.06.25 um 07:45 schrieb Mario Limonciello:
> On 6/24/2025 12:42 AM, Werner Sembach wrote:
>> Hi Mario,
>>
>> Am 23.06.25 um 21:42 schrieb Limonciello, Mario:
>>> On 6/23/25 2:13 PM, Rodrigo Siqueira wrote:
>>>> On 06/23, Werner Sembach wrote:
>>>>> gentle bump
>>>>>
>>>>> Am 09.04.25 um 18:27 schrieb Werner Sembach:
>>>>>> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
>>>>>> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
>>>>>> control the brightness.
>>>>>>
>>>>>> This could already be archived via a module parameter, but this patch adds
>>>>>> a quirk to apply this by default on the mentioned device + panel
>>>>>> combinations.
>>>>>>
>>>>>> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
>>>>>> Cc: stable@vger.kernel.org
>>>>>> ---
>>>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++ ++++++-
>>>>>> 1 file changed, 31 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> 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 39df45f652b32..2bad6274ad8ff 100644
>>>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>>> @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct
>>>>>> pci_dev *pdev)
>>>>>> struct amdgpu_dm_quirks {
>>>>>> bool aux_hpd_discon;
>>>>>> bool support_edp0_on_dp1;
>>>>>> + bool boe_2420_2423_bl_force_pwm;
>>>>>> };
>>>>>> static struct amdgpu_dm_quirks quirk_entries = {
>>>>>> .aux_hpd_discon = false,
>>>>>> - .support_edp0_on_dp1 = false
>>>>>> + .support_edp0_on_dp1 = false,
>>>>>> + .boe_2420_2423_bl_force_pwm = false
>>>>>> };
>>>>>> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
>>>>>> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct
>>>>>> dmi_system_id *id)
>>>>>> return 0;
>>>>>> }
>>>>>> +static int boe_2420_2423_bl_force_pwm_callback(const struct
>>>>>> dmi_system_id *id)
>>>>>> +{
>>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
>>>>>> + return 0;
>>>>>> +}
>>>>>> +
>>>>>> static const struct dmi_system_id dmi_quirk_table[] = {
>>>>>> {
>>>>>> .callback = aux_hpd_discon_callback,
>>>>>> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id
>>>>>> dmi_quirk_table[] = {
>>>>>> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11
>>>>>> Notebook PC"),
>>>>>> },
>>>>>> },
>>>>>> + {
>>>>>> + // TUXEDO Polaris AMD Gen2
>>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>>> + .matches = {
>>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
>>>>>> + },
>>>>>> + },
>>>>>> + {
>>>>>> + // TUXEDO Polaris AMD Gen3
>>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>>> + .matches = {
>>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
>>>>>> + },
>>>>>> + },
>>>>>> {}
>>>>>> /* TODO: refactor this from a fixed table to a dynamic option */
>>>>>> };
>>>>>> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct
>>>>>> amdgpu_dm_connector *aconnector)
>>>>>> struct amdgpu_device *adev;
>>>>>> struct drm_luminance_range_info *luminance_range;
>>>>>> int min_input_signal_override;
>>>>>> + u32 panel;
>>>>>> if (aconnector->bl_idx == -1 ||
>>>>>> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
>>>>>> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct
>>>>>> amdgpu_dm_connector *aconnector)
>>>>>> caps->aux_support = false;
>>>>>> else if (amdgpu_backlight == 1)
>>>>>> caps->aux_support = true;
>>>>>> + else if (amdgpu_backlight == -1 &&
>>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm) {
>>>>>> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
>>>>>> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
>>>>>> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
>>>>>> + caps->aux_support = false;
>>>>>> + }
>>>> It lgtm,
>>>>
>>>> Additionally, I believe this is safe to merge since it only affects a
>>>> specific device. Perhaps display folks would like to include this as
>>>> part of this week's promotion? Anyway, Cc other devs from the display.
>>>>
>>>> Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
>>> That's a bit odd that aux based B/L control wouldn't work. Are these
>>> both OLED panels? What debugging have you done thus far with them?
>>> What kernel base?
>>>
>>> Could you repro on 6.16-rc3?
>>
>> Sadly our archive is missing this panel + device combination. This patch is
>> based on our install script that sets this fix via boot parameters since the
>> release of these devices.
>>
>> So the quirk is field proven, but I can't actively test it anymore.
>>
>> Best regards,
>>
>> Werner
>>
>
> Do you recall what kernel version you were doing it with? I'm just wondering
> if AUX brightness control had a bug with such a kernel.
We shipped the device in 2021 with Ubuntu focal, so the kernel probably was 5.8
or 5.11 (in theory it also could have been 5.4 or whatever the Ubuntu OEM kernel
was at that time).
>
> Do you have this panel on some other hardware perhaps?
Probably not. I will ask however.
> Or could you send a call out to get some testing done?
An idea I also had in the past to plug this and similar holes in your archive,
but no "process" for this in place yet.
Best regards,
Werner
>
>>>
>>>>>> if (caps->aux_support)
>>>>>> aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-06-24 9:47 ` Werner Sembach
@ 2025-06-24 14:33 ` Limonciello, Mario
0 siblings, 0 replies; 10+ messages in thread
From: Limonciello, Mario @ 2025-06-24 14:33 UTC (permalink / raw)
To: Werner Sembach, Rodrigo Siqueira
Cc: Wentland, Harry, Li, Sun peng (Leo), Deucher, Alexander,
Koenig, Christian, airlied@gmail.com, simona@ffwll.ch,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Hung, Alex, Wheeler, Daniel
On 6/24/25 4:47 AM, Werner Sembach wrote:
>
> Am 24.06.25 um 07:45 schrieb Mario Limonciello:
>> On 6/24/2025 12:42 AM, Werner Sembach wrote:
>>> Hi Mario,
>>>
>>> Am 23.06.25 um 21:42 schrieb Limonciello, Mario:
>>>> On 6/23/25 2:13 PM, Rodrigo Siqueira wrote:
>>>>> On 06/23, Werner Sembach wrote:
>>>>>> gentle bump
>>>>>>
>>>>>> Am 09.04.25 um 18:27 schrieb Werner Sembach:
>>>>>>> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with
>>>>>>> panels
>>>>>>> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
>>>>>>> control the brightness.
>>>>>>>
>>>>>>> This could already be archived via a module parameter, but this
>>>>>>> patch adds
>>>>>>> a quirk to apply this by default on the mentioned device + panel
>>>>>>> combinations.
>>>>>>>
>>>>>>> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
>>>>>>> Cc: stable@vger.kernel.org
>>>>>>> ---
>>>>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++
>>>>>>> ++ ++++++-
>>>>>>> 1 file changed, 31 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> 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 39df45f652b32..2bad6274ad8ff 100644
>>>>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>>>>> @@ -1625,11 +1625,13 @@ static bool
>>>>>>> dm_should_disable_stutter(struct pci_dev *pdev)
>>>>>>> struct amdgpu_dm_quirks {
>>>>>>> bool aux_hpd_discon;
>>>>>>> bool support_edp0_on_dp1;
>>>>>>> + bool boe_2420_2423_bl_force_pwm;
>>>>>>> };
>>>>>>> static struct amdgpu_dm_quirks quirk_entries = {
>>>>>>> .aux_hpd_discon = false,
>>>>>>> - .support_edp0_on_dp1 = false
>>>>>>> + .support_edp0_on_dp1 = false,
>>>>>>> + .boe_2420_2423_bl_force_pwm = false
>>>>>>> };
>>>>>>> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
>>>>>>> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const
>>>>>>> struct dmi_system_id *id)
>>>>>>> return 0;
>>>>>>> }
>>>>>>> +static int boe_2420_2423_bl_force_pwm_callback(const struct
>>>>>>> dmi_system_id *id)
>>>>>>> +{
>>>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
>>>>>>> + return 0;
>>>>>>> +}
>>>>>>> +
>>>>>>> static const struct dmi_system_id dmi_quirk_table[] = {
>>>>>>> {
>>>>>>> .callback = aux_hpd_discon_callback,
>>>>>>> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id
>>>>>>> dmi_quirk_table[] = {
>>>>>>> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16
>>>>>>> inch G11 Notebook PC"),
>>>>>>> },
>>>>>>> },
>>>>>>> + {
>>>>>>> + // TUXEDO Polaris AMD Gen2
>>>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>>>> + .matches = {
>>>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
>>>>>>> + },
>>>>>>> + },
>>>>>>> + {
>>>>>>> + // TUXEDO Polaris AMD Gen3
>>>>>>> + .callback = boe_2420_2423_bl_force_pwm_callback,
>>>>>>> + .matches = {
>>>>>>> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
>>>>>>> + },
>>>>>>> + },
>>>>>>> {}
>>>>>>> /* TODO: refactor this from a fixed table to a dynamic
>>>>>>> option */
>>>>>>> };
>>>>>>> @@ -3586,6 +3608,7 @@ static void
>>>>>>> update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>>>>>> struct amdgpu_device *adev;
>>>>>>> struct drm_luminance_range_info *luminance_range;
>>>>>>> int min_input_signal_override;
>>>>>>> + u32 panel;
>>>>>>> if (aconnector->bl_idx == -1 ||
>>>>>>> aconnector->dc_link->connector_signal !=
>>>>>>> SIGNAL_TYPE_EDP)
>>>>>>> @@ -3610,6 +3633,13 @@ static void
>>>>>>> update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>>>>>>> caps->aux_support = false;
>>>>>>> else if (amdgpu_backlight == 1)
>>>>>>> caps->aux_support = true;
>>>>>>> + else if (amdgpu_backlight == -1 &&
>>>>>>> + quirk_entries.boe_2420_2423_bl_force_pwm) {
>>>>>>> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
>>>>>>> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E',
>>>>>>> 0x0974) ||
>>>>>>> + panel == drm_edid_encode_panel_id('B', 'O', 'E',
>>>>>>> 0x0977))
>>>>>>> + caps->aux_support = false;
>>>>>>> + }
>>>>> It lgtm,
>>>>>
>>>>> Additionally, I believe this is safe to merge since it only affects a
>>>>> specific device. Perhaps display folks would like to include this as
>>>>> part of this week's promotion? Anyway, Cc other devs from the display.
>>>>>
>>>>> Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
>>>> That's a bit odd that aux based B/L control wouldn't work. Are these
>>>> both OLED panels? What debugging have you done thus far with them?
>>>> What kernel base?
>>>>
>>>> Could you repro on 6.16-rc3?
>>>
>>> Sadly our archive is missing this panel + device combination. This
>>> patch is based on our install script that sets this fix via boot
>>> parameters since the release of these devices.
>>>
>>> So the quirk is field proven, but I can't actively test it anymore.
>>>
>>> Best regards,
>>>
>>> Werner
>>>
>>
>> Do you recall what kernel version you were doing it with? I'm just
>> wondering if AUX brightness control had a bug with such a kernel.
> We shipped the device in 2021 with Ubuntu focal, so the kernel probably
> was 5.8 or 5.11 (in theory it also could have been 5.4 or whatever the
> Ubuntu OEM kernel was at that time).
If it was 5.4 then that didn't yet have OLED backlight control support.
It was first introduced here:
https://github.com/torvalds/linux/commit/945628101be55833a63355510d4b6c934183deab
Then even as recent as 5.12 I see that there was a module parameter for
problems.
https://github.com/torvalds/linux/commit/7a46f05e5e163c00e41892e671294286e53fe15c
But then there were also changes for aux control using the correct DC
API in 5.12 too:
https://github.com/torvalds/linux/commit/0ad3e64eb46d8c47de3af552e282894e3893e973
>>
>> Do you have this panel on some other hardware perhaps?
> Probably not. I will ask however.
>> Or could you send a call out to get some testing done?
>
> An idea I also had in the past to plug this and similar holes in your
> archive, but no "process" for this in place yet.
I'm sorry but I'm not comfortable picking up this technical debt that
will never be removable upstream without proper debugging on what the
"real" problem is.
Recently I have been working on changes to brightness control in
amdgpu_dm and personally validated it working properly on panels that
use aux control for brightness this past kernel cycle or two.
So please help track down one of these panels, either from you guys on
another system, or a call to users with these systems to help.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices
2025-04-09 16:27 ` [PATCH 1/1] " Werner Sembach
2025-06-23 17:44 ` Werner Sembach
@ 2025-08-19 16:06 ` Werner Sembach
1 sibling, 0 replies; 10+ messages in thread
From: Werner Sembach @ 2025-08-19 16:06 UTC (permalink / raw)
To: harry.wentland, sunpeng.li, siqueira, alexander.deucher,
christian.koenig, airlied, simona
Cc: amd-gfx, dri-devel, linux-kernel
Am 09.04.25 um 18:27 schrieb Werner Sembach:
> The display backlight on TUXEDO Polaris AMD Gen2 and Gen3 with panels
> BOE 2420 and BOE 2423 must be forced to pwn controlled to be able to
> control the brightness.
>
> This could already be archived via a module parameter, but this patch adds
> a quirk to apply this by default on the mentioned device + panel
> combinations.
Just to let you know: this fix seems to be no longer required, at least with
6.14 onwards (and maybe before that we didn't test further back)
>
> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> Cc: stable@vger.kernel.org
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
>
> 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 39df45f652b32..2bad6274ad8ff 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -1625,11 +1625,13 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev)
> struct amdgpu_dm_quirks {
> bool aux_hpd_discon;
> bool support_edp0_on_dp1;
> + bool boe_2420_2423_bl_force_pwm;
> };
>
> static struct amdgpu_dm_quirks quirk_entries = {
> .aux_hpd_discon = false,
> - .support_edp0_on_dp1 = false
> + .support_edp0_on_dp1 = false,
> + .boe_2420_2423_bl_force_pwm = false
> };
>
> static int edp0_on_dp1_callback(const struct dmi_system_id *id)
> @@ -1644,6 +1646,12 @@ static int aux_hpd_discon_callback(const struct dmi_system_id *id)
> return 0;
> }
>
> +static int boe_2420_2423_bl_force_pwm_callback(const struct dmi_system_id *id)
> +{
> + quirk_entries.boe_2420_2423_bl_force_pwm = true;
> + return 0;
> +}
> +
> static const struct dmi_system_id dmi_quirk_table[] = {
> {
> .callback = aux_hpd_discon_callback,
> @@ -1722,6 +1730,20 @@ static const struct dmi_system_id dmi_quirk_table[] = {
> DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 665 16 inch G11 Notebook PC"),
> },
> },
> + {
> + // TUXEDO Polaris AMD Gen2
> + .callback = boe_2420_2423_bl_force_pwm_callback,
> + .matches = {
> + DMI_MATCH(DMI_BOARD_NAME, "GMxNGxx"),
> + },
> + },
> + {
> + // TUXEDO Polaris AMD Gen3
> + .callback = boe_2420_2423_bl_force_pwm_callback,
> + .matches = {
> + DMI_MATCH(DMI_BOARD_NAME, "GMxZGxx"),
> + },
> + },
> {}
> /* TODO: refactor this from a fixed table to a dynamic option */
> };
> @@ -3586,6 +3608,7 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> struct amdgpu_device *adev;
> struct drm_luminance_range_info *luminance_range;
> int min_input_signal_override;
> + u32 panel;
>
> if (aconnector->bl_idx == -1 ||
> aconnector->dc_link->connector_signal != SIGNAL_TYPE_EDP)
> @@ -3610,6 +3633,13 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
> caps->aux_support = false;
> else if (amdgpu_backlight == 1)
> caps->aux_support = true;
> + else if (amdgpu_backlight == -1 &&
> + quirk_entries.boe_2420_2423_bl_force_pwm) {
> + panel = drm_edid_get_panel_id(aconnector->drm_edid);
> + if (panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0974) ||
> + panel == drm_edid_encode_panel_id('B', 'O', 'E', 0x0977))
> + caps->aux_support = false;
> + }
> if (caps->aux_support)
> aconnector->dc_link->backlight_control_type = BACKLIGHT_CONTROL_AMD_AUX;
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-08-19 16:11 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-09 16:26 [PATCH 0/1] drm/amd/display: Add quirk to force backlight type on some TUXEDO devices Werner Sembach
2025-04-09 16:27 ` [PATCH 1/1] " Werner Sembach
2025-06-23 17:44 ` Werner Sembach
2025-06-23 19:13 ` Rodrigo Siqueira
2025-06-23 19:42 ` Limonciello, Mario
2025-06-24 5:42 ` Werner Sembach
2025-06-24 5:45 ` Mario Limonciello
2025-06-24 9:47 ` Werner Sembach
2025-06-24 14:33 ` Limonciello, Mario
2025-08-19 16:06 ` Werner Sembach
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).