Skip to content

Commit 327aa30

Browse files
Lihuangrkhuangtao
authored andcommitted
video/rockchip: rga2: Fixup rga2 flush timeout on rk3368.
Change-Id: Ia3c1c83d51c70f9d981bb45dc5c6a8c5e8073995 Signed-off-by: Li Huang <putin.li@rock-chips.com>
1 parent 188c59d commit 327aa30

1 file changed

Lines changed: 35 additions & 2 deletions

File tree

drivers/video/rockchip/rga2/rga2_drv.c

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ ktime_t rga2_start;
7272
ktime_t rga2_end;
7373
int rga2_flag;
7474
int first_RGA2_proc;
75+
static int rk3368;
7576

7677
rga2_session rga2_session_global;
7778
long (*rga2_ioctl_kernel_p)(struct rga_req *);
@@ -906,7 +907,10 @@ static int rga2_blit_sync(rga2_session *session, struct rga2_req *req)
906907
if(ret < 0)
907908
return ret;
908909

909-
ret_timeout = wait_event_timeout(session->wait, atomic_read(&session->done), RGA2_TIMEOUT_DELAY);
910+
if (rk3368)
911+
ret_timeout = wait_event_timeout(session->wait, atomic_read(&session->done), RGA2_TIMEOUT_DELAY/2);
912+
else
913+
ret_timeout = wait_event_timeout(session->wait, atomic_read(&session->done), RGA2_TIMEOUT_DELAY);
910914

911915
if (unlikely(ret_timeout< 0))
912916
{
@@ -1031,12 +1035,39 @@ static long rga_ioctl(struct file *file, uint32_t cmd, unsigned long arg)
10311035
req_first.src.act_h = MIN(240, MIN(req_first.src.act_h, req_first.dst.act_h));
10321036
req_first.dst.act_w = req_first.src.act_w;
10331037
req_first.dst.act_h = req_first.src.act_h;
1034-
ret = rga2_blit_async(session, &req_first);
1038+
if (rk3368)
1039+
ret = rga2_blit_sync(session, &req_first);
1040+
else
1041+
ret = rga2_blit_async(session, &req_first);
10351042
}
10361043
ret = rga2_blit_async(session, &req);
10371044
first_RGA2_proc = 1;
10381045
}
10391046
else {
1047+
if (rk3368)
1048+
{
1049+
memcpy(&req_first, &req, sizeof(struct rga2_req));
1050+
1051+
/*
1052+
* workround for gts
1053+
* run gts --skip-all-system-status-check --ignore-business-logic-failure -m GtsMediaTestCases -t com.google.android.media.gts.WidevineYouTubePerformanceTests#testClear1080P30
1054+
*/
1055+
if ((req_first.src.act_w == 1920) && (req_first.src.act_h == 1008) && (req_first.src.act_h == req_first.dst.act_w)) {
1056+
printk("src : aw=%d ah=%d vw=%d vh=%d \n",
1057+
req_first.src.act_w, req_first.src.act_h, req_first.src.vir_w, req_first.src.vir_h);
1058+
printk("dst : aw=%d ah=%d vw=%d vh=%d \n",
1059+
req_first.dst.act_w, req_first.dst.act_h, req_first.dst.vir_w, req_first.dst.vir_h);
1060+
} else {
1061+
if ((req_first.src.act_w != req_first.dst.act_w)
1062+
|| (req_first.src.act_h != req_first.dst.act_h)) {
1063+
req_first.src.act_w = MIN(320, MIN(req_first.src.act_w, req_first.dst.act_w));
1064+
req_first.src.act_h = MIN(240, MIN(req_first.src.act_h, req_first.dst.act_h));
1065+
req_first.dst.act_w = req_first.src.act_w;
1066+
req_first.dst.act_h = req_first.src.act_h;
1067+
ret = rga2_blit_sync(session, &req_first);
1068+
}
1069+
}
1070+
}
10401071
ret = rga2_blit_async(session, &req);
10411072
}
10421073
break;
@@ -1401,6 +1432,8 @@ static int rga2_drv_probe(struct platform_device *pdev)
14011432
data->dev = &pdev->dev;
14021433
rga2_drvdata = data;
14031434
of_property_read_u32(np, "dev_mode", &rga2_service.dev_mode);
1435+
if (of_machine_is_compatible("rockchip,rk3368"))
1436+
rk3368 = 1;
14041437

14051438
#if defined(CONFIG_ION_ROCKCHIP)
14061439
data->ion_client = rockchip_ion_client_create("rga");

0 commit comments

Comments
 (0)