[PATCH 2/3] drm/nouveau/disp: Always accept linear modifier

James Jones posted 3 patches 1 month, 3 weeks ago
[PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by James Jones 1 month, 3 weeks ago
On some chipsets, which block-linear modifiers are
supported is format-specific. However, linear
modifiers are always be supported. The prior
modifier filtering logic was not accounting for
the linear case.

Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
Signed-off-by: James Jones <jajones@nvidia.com>
---
 drivers/gpu/drm/nouveau/dispnv50/wndw.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
index 11d5b923d6e7..e2c55f4b9c5a 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
@@ -795,6 +795,10 @@ static bool nv50_plane_format_mod_supported(struct drm_plane *plane,
 	struct nouveau_drm *drm = nouveau_drm(plane->dev);
 	uint8_t i;
 
+	/* All chipsets can display all formats in linear layout */
+	if (modifier == DRM_FORMAT_MOD_LINEAR)
+		return true;
+
 	if (drm->client.device.info.chipset < 0xc0) {
 		const struct drm_format_info *info = drm_format_info(format);
 		const uint8_t kind = (modifier >> 12) & 0xff;
-- 
2.50.1
Re: [PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by Danilo Krummrich 1 month, 1 week ago
On Tue Aug 12, 2025 at 12:00 AM CEST, James Jones wrote:
> On some chipsets, which block-linear modifiers are
> supported is format-specific. However, linear
> modifiers are always be supported. The prior
> modifier filtering logic was not accounting for
> the linear case.
>
> Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
> Signed-off-by: James Jones <jajones@nvidia.com>

Applied to drm-misc-fixes, thanks!
Re: [PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by Danilo Krummrich 1 month, 1 week ago
On Tue Aug 12, 2025 at 12:00 AM CEST, James Jones wrote:
> On some chipsets, which block-linear modifiers are
> supported is format-specific. However, linear
> modifiers are always be supported. The prior
> modifier filtering logic was not accounting for
> the linear case.
>
> Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
> Signed-off-by: James Jones <jajones@nvidia.com>

This issue seems to be present since v5.10, what's the implication of this? I
assume this has to be backported into stable releases?

Does the subsequent patch break strictly depend on this fix, or can it go
separately?
Re: [PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by James Jones 1 month, 1 week ago
On 8/22/25 13:55, Danilo Krummrich wrote:
> On Tue Aug 12, 2025 at 12:00 AM CEST, James Jones wrote:
>> On some chipsets, which block-linear modifiers are
>> supported is format-specific. However, linear
>> modifiers are always be supported. The prior
>> modifier filtering logic was not accounting for
>> the linear case.
>>
>> Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
>> Signed-off-by: James Jones <jajones@nvidia.com>
> 
> This issue seems to be present since v5.10, what's the implication of this? I
> assume this has to be backported into stable releases?
> 
> Does the subsequent patch break strictly depend on this fix, or can it go
> separately?

Without this fix, the next patch breaks linear modifier use on 
Blackwell2+. In my testing, that meant fbcon was severely corrupted (In 
a manner that suggests it ends up with a block-linear surface rendered 
to as if it was linear).

Yes, it has to go back to a fair number of stable branches to fix 
similar issues on pre-fermi GPUs, though oddly in my testing 
before/after this patch, fbcon came up fine on my NV50, so the effects 
might not be as severe there for some reason.

Thanks,
-James
Re: [PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by Danilo Krummrich 1 month, 1 week ago
On Fri Aug 22, 2025 at 11:11 PM CEST, James Jones wrote:
> On 8/22/25 13:55, Danilo Krummrich wrote:
>> On Tue Aug 12, 2025 at 12:00 AM CEST, James Jones wrote:
>>> On some chipsets, which block-linear modifiers are
>>> supported is format-specific. However, linear
>>> modifiers are always be supported. The prior
>>> modifier filtering logic was not accounting for
>>> the linear case.
>>>
>>> Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
>>> Signed-off-by: James Jones <jajones@nvidia.com>
>> 
>> This issue seems to be present since v5.10, what's the implication of this? I
>> assume this has to be backported into stable releases?
>> 
>> Does the subsequent patch break strictly depend on this fix, or can it go
>> separately?
>
> Without this fix, the next patch breaks linear modifier use on 
> Blackwell2+. In my testing, that meant fbcon was severely corrupted (In 
> a manner that suggests it ends up with a block-linear surface rendered 
> to as if it was linear).
>
> Yes, it has to go back to a fair number of stable branches to fix 
> similar issues on pre-fermi GPUs, though oddly in my testing 
> before/after this patch, fbcon came up fine on my NV50, so the effects 
> might not be as severe there for some reason.

Ok, thanks! This sounds like we should apply the fix, backmerge the -rc it lands
in and then merge the rest of this series.

- Danilo
Re: [PATCH 2/3] drm/nouveau/disp: Always accept linear modifier
Posted by Faith Ekstrand 1 month, 1 week ago
On Mon, Aug 11, 2025 at 5:57 PM James Jones <jajones@nvidia.com> wrote:
>
> On some chipsets, which block-linear modifiers are
> supported is format-specific. However, linear
> modifiers are always be supported. The prior
> modifier filtering logic was not accounting for
> the linear case.
>
> Fixes: c586f30bf74c ("drm/nouveau/kms: Add format mod prop to base/ovly/nvdisp")
> Signed-off-by: James Jones <jajones@nvidia.com>

Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>

> ---
>  drivers/gpu/drm/nouveau/dispnv50/wndw.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
> index 11d5b923d6e7..e2c55f4b9c5a 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c
> @@ -795,6 +795,10 @@ static bool nv50_plane_format_mod_supported(struct drm_plane *plane,
>         struct nouveau_drm *drm = nouveau_drm(plane->dev);
>         uint8_t i;
>
> +       /* All chipsets can display all formats in linear layout */
> +       if (modifier == DRM_FORMAT_MOD_LINEAR)
> +               return true;
> +
>         if (drm->client.device.info.chipset < 0xc0) {
>                 const struct drm_format_info *info = drm_format_info(format);
>                 const uint8_t kind = (modifier >> 12) & 0xff;
> --
> 2.50.1
>