[Mesa-dev] [Mesa-stable] [PATCH v4] winsys/radeon: fix nop packet padding for hawaii

Marek Olšák maraeo at gmail.com
Mon Sep 1 13:21:13 PDT 2014


Hi Emil,

The first attachment is the patch for 10.2. The other two patches fix
build with latest LLVM for 10.2.

Marek

On Tue, Aug 26, 2014 at 10:09 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> On 06/08/14 17:16, Alex Deucher wrote:
>> On Mon, Aug 4, 2014 at 6:48 AM, Andreas Boll <andreas.boll.dev at gmail.com> wrote:
>>> The initial firmware for hawaii does not support type3 nop packet.
>>> Detect the new hawaii firmware with query RADEON_INFO_ACCEL_WORKING2.
>>> If the returned value is 3, then the new firmware is used.
>>>
>>> This patch uses type2 for the old firmware and type3 for the new firmware.
>>>
>>> It fixes the cases when the old firmware is used and the user wants to
>>> manually enable acceleration.
>>> The two possible scenarios are:
>>>  - the kernel has no support for the new firmware.
>>>  - the kernel has support for the new firmware but only the old firmware
>>>    is available.
>>>
>>> Additionaly this patch disables GPU acceleration on hawaii if the kernel
>>> returns a value < 2. In this case the kernel hasn't the required fixes
>>> for proper acceleration.
>>>
>>> v2:
>>>  - Fix indentation
>>>  - Use private struct radeon_drm_winsys instead of public struct radeon_info
>>>  - Rename r600_accel_working2 to accel_working2
>>>
>>> v3:
>>>  - Use type2 nop packet for returned value < 3
>>>
>>> v4:
>>>  - Fail to initialize winsys for returned value < 2
>>>
>>> Cc: mesa-stable at lists.freedesktop.org
>>> Cc: Alex Deucher <alexander.deucher at amd.com>
>>> Cc: Jérôme Glisse <jglisse at redhat.com>
>>> Cc: Marek Olšák <marek.olsak at amd.com>
>>> Cc: Michel Dänzer <michel.daenzer at amd.com>
>>> Signed-off-by: Andreas Boll <andreas.boll.dev at gmail.com>
>>
>> Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>>
> Gents this patch does not apply cleanly on the 10.2 branch. Would be nice if
> someone can backport rather than me butchering it.
>
> Thanks
> Emil
>
>>> ---
>>>
>>> Unfortunately I can't test this patch myself since I don't own a hawaii card.
>>> So I'd need someone to test this patch on kernel >= 3.16-rc7 + these patches
>>> [1-2].
>>>
>>> This patch would bring us one step further for hawaii acceleration on kernel
>>> 3.16.
>>>
>>> Finally we can enable hawaii acceleration if the query returns > 2 [3].
>>>
>>> Andreas.
>>>
>>> [1] http://lists.freedesktop.org/archives/dri-devel/2014-August/065305.html
>>> [2] http://lists.freedesktop.org/archives/dri-devel/2014-August/065306.html
>>> [3] http://lists.x.org/archives/xorg-driver-ati/2014-August/026534.html
>>>
>>>  src/gallium/winsys/radeon/drm/radeon_drm_cs.c     |  6 +++++-
>>>  src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 10 ++++++++++
>>>  src/gallium/winsys/radeon/drm/radeon_drm_winsys.h |  1 +
>>>  3 files changed, 16 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
>>> index a06ecb2..dd109af 100644
>>> --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
>>> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c
>>> @@ -446,8 +446,12 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs,
>>>      case RING_GFX:
>>>          /* pad DMA ring to 8 DWs to meet CP fetch alignment requirements
>>>           * r6xx, requires at least 4 dw alignment to avoid a hw bug.
>>> +         * hawaii with old firmware needs type2 nop packet.
>>> +         * accel_working2 with value 2 indicates the new firmware.
>>>           */
>>> -        if (cs->ws->info.chip_class <= SI) {
>>> +        if (cs->ws->info.chip_class <= SI ||
>>> +            (cs->ws->info.family == CHIP_HAWAII &&
>>> +             cs->ws->accel_working2 < 3)) {
>>>              while (rcs->cdw & 7)
>>>                  OUT_CS(&cs->base, 0x80000000); /* type2 nop packet */
>>>          } else {
>>> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> index 910d06b..ecff0e7 100644
>>> --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> @@ -395,6 +395,16 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
>>>      radeon_get_drm_value(ws->fd, RADEON_INFO_MAX_SH_PER_SE, NULL,
>>>                           &ws->info.max_sh_per_se);
>>>
>>> +    radeon_get_drm_value(ws->fd, RADEON_INFO_ACCEL_WORKING2, NULL,
>>> +                         &ws->accel_working2);
>>> +    if (ws->info.family == CHIP_HAWAII && ws->accel_working2 < 2) {
>>> +        fprintf(stderr, "radeon: GPU acceleration for Hawaii disabled, "
>>> +                "returned accel_working2 value %u is smaller than 2. "
>>> +                "Please install a newer kernel.\n",
>>> +                ws->accel_working2);
>>> +        return FALSE;
>>> +    }
>>> +
>>>      if (radeon_get_drm_value(ws->fd, RADEON_INFO_SI_TILE_MODE_ARRAY, NULL,
>>>                               ws->info.si_tile_mode_array)) {
>>>          ws->info.si_tile_mode_array_valid = TRUE;
>>> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
>>> index ea6f7f0..aebc391 100644
>>> --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
>>> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
>>> @@ -55,6 +55,7 @@ struct radeon_drm_winsys {
>>>      enum radeon_generation gen;
>>>      struct radeon_info info;
>>>      uint32_t va_start;
>>> +    uint32_t accel_working2;
>>>
>>>      struct pb_manager *kman;
>>>      struct pb_manager *cman_vram;
>>> --
>>> 2.0.1
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>> _______________________________________________
>> mesa-stable mailing list
>> mesa-stable at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-stable
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-winsys-radeon-fix-nop-packet-padding-for-hawaii.patch
Type: text/x-patch
Size: 7123 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140901/9b7d1908/attachment-0003.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-gallivm-Fix-build-with-latest-LLVM.patch
Type: text/x-patch
Size: 1539 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140901/9b7d1908/attachment-0004.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-gallivm-Fix-build-with-LLVM-3.6-r215967.patch
Type: text/x-patch
Size: 1583 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140901/9b7d1908/attachment-0005.bin>


More information about the mesa-dev mailing list