Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/ast: Fix start address computation

During the driver conversion to shmem, the start address for the
scanout buffer was set to the base PCI address.
In most cases it works because only the lower 24bits are used, and
due to alignment it was almost always 0.
But on some unlucky hardware, it's not the case, and some uninitialized
memory is displayed on the BMC.
With shmem, the primary plane is always at offset 0 in GPU memory.

* v2: rewrite the patch to set the offset to 0. (Thomas Zimmermann)
* v3: move the change to plane_init() and also fix the cursor plane.
(Jammy Huang)

Tested on a sr645 affected by this bug.

Fixes: f2fa5a99ca81 ("drm/ast: Convert ast to SHMEM")
Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jammy Huang <jammy_huang@aspeedtech.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230209094417.21630-1-jfalempe@redhat.com

+2 -2
+2 -2
drivers/gpu/drm/ast/ast_mode.c
··· 714 714 struct ast_plane *ast_primary_plane = &ast->primary_plane; 715 715 struct drm_plane *primary_plane = &ast_primary_plane->base; 716 716 void __iomem *vaddr = ast->vram; 717 - u64 offset = ast->vram_base; 717 + u64 offset = 0; /* with shmem, the primary plane is always at offset 0 */ 718 718 unsigned long cursor_size = roundup(AST_HWC_SIZE + AST_HWC_SIGNATURE_SIZE, PAGE_SIZE); 719 719 unsigned long size = ast->vram_fb_available - cursor_size; 720 720 int ret; ··· 972 972 return -ENOMEM; 973 973 974 974 vaddr = ast->vram + ast->vram_fb_available - size; 975 - offset = ast->vram_base + ast->vram_fb_available - size; 975 + offset = ast->vram_fb_available - size; 976 976 977 977 ret = ast_plane_init(dev, ast_cursor_plane, vaddr, offset, size, 978 978 0x01, &ast_cursor_plane_funcs,