Package: linux-image-5.10.0-8-686 Version: 5.10.46-4 Severity: important Tags: patch
Dear maintainer, After updating from buster to bullseye I've noticed that the image displayed on my older computer, 32-bit Pentium 4 using ATI Radeon X1950 AGP video card is severely corrupted in the graphical (Xorg and Wayland) mode: all kinds of black and white stripes across the screen, some letters missing, etc. I've checked several options (Xorg drivers, Wayland instead of Xorg and so on), but the problem persisted. I've managed to find that the problem was in the kernel, as everything worked well with buster's kernel with everything else being from bullseye. I have managed to find the culprit of that corruption, that is the commit 33b3ad3788aba846fc8b9a065fe2685a0b64f713 on the linux kernel. Reverting this commit and building the kernel with that commit reverted fixes the problem, and I'm writing this bug report with the kernel I've built with that commit reverted. Apparently this problem is somewhat known, as I can tell after googling for the commit id, see https://lkml.org/lkml/2020/1/9/518 this link for example. Mageia distro, for example, reverted this commit in the kernel they are building: http://sophie.zarb.org/distrib/Mageia/7/aarch64/by-pkgid/b9193a4f85192bc57f4d770fb9bb399c/files/32 and I would like to suggest adding the reverting patch (attached) to the debian kernel as well (at least for 32-bit x86 architecture as 64-bit is unaffected). This took me several days to debug, so I hope it will be included in one of the point releases :) Thanks in advance! -- System Information: Debian Release: 11.0 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Kernel: Linux 5.10.0-8-686 (SMP w/1 CPU thread) Kernel taint flags: TAINT_UNSIGNED_MODULE Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: sysvinit (via /sbin/init) Versions of packages linux-image-5.10.0-8-686 depends on: ii initramfs-tools [linux-initramfs-tool] 0.140 ii kmod 28-1 ii linux-base 4.6 Versions of packages linux-image-5.10.0-8-686 recommends: pn apparmor <none> pn firmware-linux-free <none> Versions of packages linux-image-5.10.0-8-686 suggests: pn debian-kernel-handbook <none> ii extlinux 3:6.04~git20190206.bf6db5b4+dfsg1-3+b1 pn linux-doc-5.10 <none>
>From bff1b53f4ff2afcaeaadacc6e693e3939e025dd4 Mon Sep 17 00:00:00 2001 From: Mikhail Krylov <[email protected]> Date: Sat, 4 Sep 2021 15:34:02 +0300 Subject: [PATCH] Revert "drm/radeon: handle PCIe root ports with addressing limitations" This reverts commit 33b3ad3788aba846fc8b9a065fe2685a0b64f713. --- drivers/gpu/drm/radeon/radeon.h | 1 + drivers/gpu/drm/radeon/radeon_device.c | 13 ++++++++----- drivers/gpu/drm/radeon/radeon_ttm.c | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index a6d8de01194..15d6de5dfbd 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -2391,6 +2391,7 @@ struct radeon_device { struct radeon_wb wb; struct radeon_dummy_page dummy_page; bool shutdown; + bool need_dma32; bool need_swiotlb; bool accel_working; bool fastfb_working; /* IGP feature*/ diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 266e3cbbd09..f74c74ad8b5 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -1363,25 +1363,28 @@ int radeon_device_init(struct radeon_device *rdev, else rdev->mc.mc_mask = 0xffffffffULL; /* 32 bit MC */ - /* set DMA mask. + /* set DMA mask + need_dma32 flags. * PCIE - can handle 40-bits. * IGP - can handle 40-bits * AGP - generally dma32 is safest * PCI - dma32 for legacy pci gart, 40 bits on newer asics */ - dma_bits = 40; + rdev->need_dma32 = false; if (rdev->flags & RADEON_IS_AGP) - dma_bits = 32; + rdev->need_dma32 = true; if ((rdev->flags & RADEON_IS_PCI) && (rdev->family <= CHIP_RS740)) - dma_bits = 32; + rdev->need_dma32 = true; #ifdef CONFIG_PPC64 if (rdev->family == CHIP_CEDAR) - dma_bits = 32; + rdev->need_dma32 = true; #endif + dma_bits = rdev->need_dma32 ? 32 : 40; r = dma_set_mask_and_coherent(&rdev->pdev->dev, DMA_BIT_MASK(dma_bits)); if (r) { + rdev->need_dma32 = true; + dma_bits = 32; pr_warn("radeon: No suitable DMA available\n"); return r; } diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 36150b7f31a..7fd117cf138 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -818,7 +818,7 @@ int radeon_ttm_init(struct radeon_device *rdev) &radeon_bo_driver, rdev->ddev->anon_inode->i_mapping, rdev->ddev->vma_offset_manager, - dma_addressing_limited(&rdev->pdev->dev)); + rdev->need_dma32); if (r) { DRM_ERROR("failed initializing buffer object driver(%d).\n", r); return r; -- 2.30.2

