[PATCH v3] drm/ast: Fix start address computation

Jammy Huang jammy_huang at aspeedtech.com
Fri Feb 10 00:33:06 UTC 2023


On 2023/2/9 下午 05:55, Thomas Zimmermann wrote:
>
>
> Am 09.02.23 um 10:44 schrieb Jocelyn Falempe:
>> 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 unitilized
>
> '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 at redhat.com>
>
> Reviewed-by: Thomas Zimmermann <tzimmermann at suse.de>

Reviewed-by: Jammy Huang <jammy_huang at aspeedtech.com>

>
>> ---
>>   drivers/gpu/drm/ast/ast_mode.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ast/ast_mode.c 
>> b/drivers/gpu/drm/ast/ast_mode.c
>> index c7443317c747..66a4a41c3fe9 100644
>> --- a/drivers/gpu/drm/ast/ast_mode.c
>> +++ b/drivers/gpu/drm/ast/ast_mode.c
>> @@ -714,7 +714,7 @@ static int ast_primary_plane_init(struct 
>> ast_private *ast)
>>       struct ast_plane *ast_primary_plane = &ast->primary_plane;
>>       struct drm_plane *primary_plane = &ast_primary_plane->base;
>>       void __iomem *vaddr = ast->vram;
>> -    u64 offset = ast->vram_base;
>> +    u64 offset = 0; /* with shmem, the primary plane is always at 
>> offset 0 */
>>       unsigned long cursor_size = roundup(AST_HWC_SIZE + 
>> AST_HWC_SIGNATURE_SIZE, PAGE_SIZE);
>>       unsigned long size = ast->vram_fb_available - cursor_size;
>>       int ret;
>> @@ -972,7 +972,7 @@ static int ast_cursor_plane_init(struct 
>> ast_private *ast)
>>           return -ENOMEM;
>>         vaddr = ast->vram + ast->vram_fb_available - size;
>> -    offset = ast->vram_base + ast->vram_fb_available - size;
>> +    offset = ast->vram_fb_available - size;
>>         ret = ast_plane_init(dev, ast_cursor_plane, vaddr, offset, size,
>>                    0x01, &ast_cursor_plane_funcs,
>
-- 
Best Regards
Jammy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230210/c8fba70b/attachment-0001.htm>


More information about the dri-devel mailing list