radeon/vce: move feedback command inside of destroy function
authorLeo Liu <leo.liu@amd.com>
Mon, 19 Mar 2018 15:16:46 +0000 (11:16 -0400)
committerLeo Liu <leo.liu@amd.com>
Wed, 21 Mar 2018 15:24:35 +0000 (11:24 -0400)
On the CI family, firmware requires the destory command have to be the
last command in the IB, moving feedback command after destroy is causing
issues on CI cards, so we have to keep the previous logic that moves
destroy back to the last command.

But as the original issue fixed previously, with the newer family like Vega10,
feedback command have to be included inside of the task info command along
with destroy command.

Fixes: 6d74cb25("radeon/vce: move destroy command before feedback command")
Signed-off-by: Leo Liu <leo.liu@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/radeon/radeon_vce.c
src/gallium/drivers/radeon/radeon_vce_40_2_2.c
src/gallium/drivers/radeon/radeon_vce_52.c

index 427bf01ed8a3f75f9d6179bf41736941841386e7..c84103e0acc913f4ac91e5dce26b2375331478e9 100644 (file)
@@ -247,7 +247,6 @@ static void rvce_destroy(struct pipe_video_codec *encoder)
                enc->fb = &fb;
                enc->session(enc);
                enc->destroy(enc);
-               enc->feedback(enc);
                flush(enc);
                si_vid_destroy_buffer(&fb);
        }
index f1db47d4bd1512a83b61187fda2ebd120dfb11df..04e9d7f5e19863ebf58e5dc5bfb005fa91f2301e 100644 (file)
@@ -421,6 +421,8 @@ static void destroy(struct rvce_encoder *enc)
 {
        enc->task_info(enc, 0x00000001, 0, 0, 0);
 
+       feedback(enc);
+
        RVCE_BEGIN(0x02000001); // destroy
        RVCE_END();
 }
index a941c476f65bc9fbabf2a73d13c757793563692b..421539c4bdc218324b51bd3e6d1bec1ffd225890 100644 (file)
@@ -458,14 +458,6 @@ static void config_extension(struct rvce_encoder *enc)
        RVCE_END();
 }
 
-static void destroy(struct rvce_encoder *enc)
-{
-       enc->task_info(enc, 0x00000001, 0, 0, 0);
-
-       RVCE_BEGIN(0x02000001); // destroy
-       RVCE_END();
-}
-
 static void feedback(struct rvce_encoder *enc)
 {
        RVCE_BEGIN(0x05000005); // feedback buffer
@@ -474,6 +466,16 @@ static void feedback(struct rvce_encoder *enc)
        RVCE_END();
 }
 
+static void destroy(struct rvce_encoder *enc)
+{
+       enc->task_info(enc, 0x00000001, 0, 0, 0);
+
+       feedback(enc);
+
+       RVCE_BEGIN(0x02000001); // destroy
+       RVCE_END();
+}
+
 static void motion_estimation(struct rvce_encoder *enc)
 {
        RVCE_BEGIN(0x04000007); // motion estimation