@@ -520,85 +520,6 @@ static struct rga_reg * rga_reg_init(rga_session *session, struct rga_req *req)
520520 return reg ;
521521}
522522
523- static struct rga_reg * rga_reg_init_2 (rga_session * session , struct rga_req * req0 , struct rga_req * req1 )
524- {
525- int32_t ret ;
526-
527- struct rga_reg * reg0 , * reg1 ;
528-
529- reg0 = NULL ;
530- reg1 = NULL ;
531-
532- do
533- {
534- reg0 = kzalloc (sizeof (struct rga_reg ), GFP_KERNEL );
535- if (NULL == reg0 ) {
536- pr_err ("%s [%d] kmalloc fail in rga_reg_init\n" , __FUNCTION__ , __LINE__ );
537- break ;
538- }
539-
540- reg1 = kzalloc (sizeof (struct rga_reg ), GFP_KERNEL );
541- if (NULL == reg1 ) {
542- pr_err ("%s [%d] kmalloc fail in rga_reg_init\n" , __FUNCTION__ , __LINE__ );
543- break ;
544- }
545-
546- reg0 -> session = session ;
547- INIT_LIST_HEAD (& reg0 -> session_link );
548- INIT_LIST_HEAD (& reg0 -> status_link );
549-
550- reg1 -> session = session ;
551- INIT_LIST_HEAD (& reg1 -> session_link );
552- INIT_LIST_HEAD (& reg1 -> status_link );
553-
554- req0 -> mmu_info .mmu_flag &= (~(1 << 10 ));
555-
556- if (req0 -> mmu_info .mmu_en )
557- {
558- ret = rga_set_mmu_info (reg0 , req0 );
559- if (ret < 0 ) {
560- printk ("%s, [%d] set mmu info error \n" , __FUNCTION__ , __LINE__ );
561- break ;
562- }
563- }
564-
565- RGA_gen_reg_info (req0 , (uint8_t * )reg0 -> cmd_reg );
566-
567- req1 -> mmu_info .mmu_flag &= (~(1 << 8 ));
568-
569- if (req1 -> mmu_info .mmu_en )
570- {
571- ret = rga_set_mmu_info (reg1 , req1 );
572- if (ret < 0 ) {
573- printk ("%s, [%d] set mmu info error \n" , __FUNCTION__ , __LINE__ );
574- break ;
575- }
576- }
577-
578- RGA_gen_reg_info (req1 , (uint8_t * )reg1 -> cmd_reg );
579-
580- mutex_lock (& rga_service .lock );
581- list_add_tail (& reg0 -> status_link , & rga_service .waiting );
582- list_add_tail (& reg0 -> session_link , & session -> waiting );
583- list_add_tail (& reg1 -> status_link , & rga_service .waiting );
584- list_add_tail (& reg1 -> session_link , & session -> waiting );
585- mutex_unlock (& rga_service .lock );
586-
587- return reg1 ;
588- }
589- while (0 );
590-
591- if (reg0 != NULL ) {
592- kfree (reg0 );
593- }
594-
595- if (reg1 != NULL ) {
596- kfree (reg1 );
597- }
598-
599- return NULL ;
600- }
601-
602523/* Caller must hold rga_service.lock */
603524static void rga_reg_deinit (struct rga_reg * reg )
604525{
@@ -824,42 +745,6 @@ static void rga_del_running_list_timeout(void)
824745 }
825746}
826747
827-
828- static void rga_mem_addr_sel (struct rga_req * req )
829- {
830- switch (req -> src .format )
831- {
832- case RK_FORMAT_YCbCr_422_SP :
833- break ;
834- case RK_FORMAT_YCbCr_422_P :
835- break ;
836- case RK_FORMAT_YCbCr_420_SP :
837- if ((req -> src .yrgb_addr > 0xc0000000 ) && (req -> src .uv_addr > 0xc0000000 )
838- && (req -> dst .yrgb_addr > 0xc0000000 ))
839- {
840- req -> src .yrgb_addr = req -> src .yrgb_addr - 0x60000000 ;
841- req -> src .uv_addr = req -> src .uv_addr - 0x60000000 ;
842- req -> dst .yrgb_addr = req -> dst .yrgb_addr - 0x60000000 ;
843- req -> mmu_info .mmu_en = 0 ;
844- req -> mmu_info .mmu_flag &= 0xfffe ;
845- }
846- break ;
847- case RK_FORMAT_YCbCr_420_P :
848- break ;
849- case RK_FORMAT_YCrCb_422_SP :
850- break ;
851- case RK_FORMAT_YCrCb_422_P :
852- break ;
853- case RK_FORMAT_YCrCb_420_SP :
854- break ;
855- case RK_FORMAT_YCrCb_420_P :
856- break ;
857- default :
858- break ;
859- }
860-
861- }
862-
863748/*
864749static int rga_convert_dma_buf(struct rga_req *req)
865750{
@@ -1052,14 +937,13 @@ static int rga_blit(rga_session *session, struct rga_req *req)
1052937 int ret = -1 ;
1053938 int num = 0 ;
1054939 struct rga_reg * reg ;
1055- struct rga_req req2 ;
1056940
1057- uint32_t saw , sah , daw , dah ;
941+ uint32_t saw , sah , daw , dah ;
1058942
1059- saw = req -> src .act_w ;
1060- sah = req -> src .act_h ;
1061- daw = req -> dst .act_w ;
1062- dah = req -> dst .act_h ;
943+ saw = req -> src .act_w ;
944+ sah = req -> src .act_h ;
945+ daw = req -> dst .act_w ;
946+ dah = req -> dst .act_h ;
1063947
1064948 #if RGA_TEST
1065949 print_info (req );
@@ -1070,67 +954,44 @@ static int rga_blit(rga_session *session, struct rga_req *req)
1070954 }
1071955 req -> render_mode &= (~RGA_BUF_GEM_TYPE_MASK );
1072956 do {
1073- if ((req -> render_mode == bitblt_mode ) && (((saw >>1 ) >= daw ) || ((sah >>1 ) >= dah ))) {
1074- /* generate 2 cmd for pre scale */
1075-
1076- ret = rga_check_param (req );
1077- if (ret == - EINVAL ) {
1078- printk ("req 0 argument is inval\n" );
1079- break ;
1080- }
1081-
1082- ret = RGA_gen_two_pro (req , & req2 );
1083- if (ret == - EINVAL ) {
1084- break ;
1085- }
1086-
1087- ret = rga_check_param (req );
1088- if (ret == - EINVAL ) {
1089- printk ("req 1 argument is inval\n" );
1090- break ;
1091- }
957+ if (((saw >> 1 ) >= daw ) || ((sah >> 1 ) >= dah )) {
958+ pr_err ("unsupported to scaling less than 1/2 \n" );
959+ goto err_put_dma_buf ;
960+ }
1092961
1093- ret = rga_check_param (& req2 );
1094- if (ret == - EINVAL ) {
1095- printk ("req 2 argument is inval\n" );
1096- break ;
1097- }
962+ if (((daw >> 3 ) >= saw ) || ((dah >> 3 ) >= daw )) {
963+ pr_err ("unsupported to scaling more than 8 \n" );
964+ goto err_put_dma_buf ;
965+ }
1098966
1099- reg = rga_reg_init_2 (session , req , & req2 );
1100- if (reg == NULL ) {
1101- break ;
1102- }
1103- num = 2 ;
1104967
1105- }
1106- else {
1107968 /* check value if legal */
1108969 ret = rga_check_param (req );
1109970 if (ret == - EINVAL ) {
1110971 printk ("req argument is inval\n" );
1111- break ;
972+ goto err_put_dma_buf ;
1112973 }
1113974
1114- if (req -> render_mode == bitblt_mode )
1115- rga_mem_addr_sel (req );
1116-
1117975 reg = rga_reg_init (session , req );
1118976 if (reg == NULL ) {
1119- pr_err ("init reg fail\n" );
1120- break ;
977+ pr_err ("init reg fail\n" );
978+ goto err_put_dma_buf ;
1121979 }
980+
1122981 num = 1 ;
1123- }
1124982
1125- mutex_lock (& rga_service .lock );
1126- atomic_add (num , & rga_service .total_running );
1127- rga_try_set_reg ();
1128- mutex_unlock (& rga_service .lock );
983+ mutex_lock (& rga_service .lock );
984+ atomic_add (num , & rga_service .total_running );
985+ rga_try_set_reg ();
986+ mutex_unlock (& rga_service .lock );
1129987
1130- return 0 ;
1131- }
988+ return 0 ;
989+ }
1132990 while (0 );
1133991
992+ err_put_dma_buf :
993+ rga_put_dma_buf (req , NULL );
994+
1134995 return - EFAULT ;
1135996}
1136997
0 commit comments