From e91827dd3cb3ef27b929e89260fb8efa544d656a Mon Sep 17 00:00:00 2001 From: Rong Zhang Date: Fri, 13 Apr 2018 19:27:37 +0800 Subject: [PATCH] PD#161616: VC1: 1. support vc1 decoder for G12A 2. Revert the commition of using 8 buffers for all chips When we fix bug 128904(commit id:d723223bc) by using 8 buffers, but afterward, we found it caused mosaic for some videos, So i revert it. I also revert the associated ucode commition for it. This change is fit for all chips, not only G12A. Change-Id: Idc5d2f96ca9f38208039e23da54e39f3c852e74e Signed-off-by: Rong Zhang --- .../common/firmware/firmware_type.c | 1 + .../common/firmware/firmware_type.h | 1 + .../frame_provider/decoder/vc1/vvc1.c | 22 +++++++++++------- firmware/video/video_ucode.bin | Bin 722176 -> 739328 bytes 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/amlogic/media_modules/common/firmware/firmware_type.c b/drivers/amlogic/media_modules/common/firmware/firmware_type.c index d21c597bcd07..5975c733c259 100644 --- a/drivers/amlogic/media_modules/common/firmware/firmware_type.c +++ b/drivers/amlogic/media_modules/common/firmware/firmware_type.c @@ -11,6 +11,7 @@ static const struct type_name_s type_name[] = { {VIDEO_DEC_REAL_V8, "real_v8"}, {VIDEO_DEC_REAL_V9, "real_v9"}, {VIDEO_DEC_VC1, "vc1"}, + {VIDEO_DEC_VC1_G12A, "vc1_g12a"}, {VIDEO_DEC_AVS, "avs"}, {VIDEO_DEC_AVS_GXM, "avs_gxm"}, {VIDEO_DEC_AVS_NOCABAC, "avs_no_cabac"}, diff --git a/drivers/amlogic/media_modules/common/firmware/firmware_type.h b/drivers/amlogic/media_modules/common/firmware/firmware_type.h index 7affd819fae1..94c5a9a0f1fd 100644 --- a/drivers/amlogic/media_modules/common/firmware/firmware_type.h +++ b/drivers/amlogic/media_modules/common/firmware/firmware_type.h @@ -36,6 +36,7 @@ enum firmware_type_e { VIDEO_DEC_AVS_NOCABAC, VIDEO_DEC_H264_MULTI_GXM, VIDEO_DEC_H264_MVC_GXM, + VIDEO_DEC_VC1_G12A, FIRMWARE_MAX }; diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/vc1/vvc1.c b/drivers/amlogic/media_modules/frame_provider/decoder/vc1/vvc1.c index 386545ff7287..74851098ba06 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/vc1/vvc1.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/vc1/vvc1.c @@ -70,12 +70,12 @@ #define VC1_OFFSET_REG AV_SCRATCH_C #define MEM_OFFSET_REG AV_SCRATCH_F -#define VF_POOL_SIZE 32 -#define DECODE_BUFFER_NUM_MAX 8 +#define VF_POOL_SIZE 16 +#define DECODE_BUFFER_NUM_MAX 4 #define WORKSPACE_SIZE (2 * SZ_1M) #define MAX_BMMU_BUFFER_NUM (DECODE_BUFFER_NUM_MAX + 1) #define VF_BUFFER_IDX(n) (1 + n) -#define DCAC_BUFF_START_ADDR 0x02e00000 +#define DCAC_BUFF_START_ADDR 0x01f00000 #define PUT_INTERVAL (HZ/100) @@ -186,8 +186,8 @@ static inline u32 index2canvas(u32 index) { const u32 canvas_tab[DECODE_BUFFER_NUM_MAX] = { #if 1 /* ALWASY.MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON6 */ - 0x010100, 0x030302, 0x050504, 0x070706, - 0x090908, 0x0b0b0a, 0x0d0d0c, 0x0f0f0e + 0x010100, 0x030302, 0x050504, 0x070706/*, + 0x090908, 0x0b0b0a, 0x0d0d0c, 0x0f0f0e*/ #else 0x020100, 0x050403, 0x080706, 0x0b0a09 #endif @@ -314,7 +314,7 @@ static irqreturn_t vvc1_isr(int irq, void *dev_id) } repeat_count = READ_VREG(VC1_REPEAT_COUNT); - buffer_index = reg & 0x7; + buffer_index = ((reg & 0x7) - 1) & 3; picture_type = (reg >> 3) & 7; if (buffer_index >= DECODE_BUFFER_NUM_MAX) { @@ -868,10 +868,10 @@ static int vvc1_prot_init(void) WRITE_VREG(AV_SCRATCH_1, 0x030302); WRITE_VREG(AV_SCRATCH_2, 0x050504); WRITE_VREG(AV_SCRATCH_3, 0x070706); - WRITE_VREG(AV_SCRATCH_G, 0x090908); +/* WRITE_VREG(AV_SCRATCH_G, 0x090908); WRITE_VREG(AV_SCRATCH_H, 0x0b0b0a); WRITE_VREG(AV_SCRATCH_I, 0x0d0d0c); - WRITE_VREG(AV_SCRATCH_J, 0x0f0f0e); + WRITE_VREG(AV_SCRATCH_J, 0x0f0f0e);*/ #else WRITE_VREG(AV_SCRATCH_0, 0x020100); WRITE_VREG(AV_SCRATCH_1, 0x050403); @@ -1029,6 +1029,7 @@ static s32 vvc1_init(void) { int ret = -1, size = -1; char *buf = vmalloc(0x1000 * 16); + int fw_type = VIDEO_DEC_VC1; if (IS_ERR_OR_NULL(buf)) return -ENOMEM; @@ -1054,7 +1055,10 @@ static s32 vvc1_init(void) } else pr_info("not supported VC1 format\n"); - size = get_firmware_data(VIDEO_DEC_VC1, buf); + if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A) + fw_type = VIDEO_DEC_VC1_G12A; + + size = get_firmware_data(fw_type, buf); if (size < 0) { amvdec_disable(); pr_err("get firmware fail."); diff --git a/firmware/video/video_ucode.bin b/firmware/video/video_ucode.bin index 721c9b8e4fd8b001e36035becb7a2c45bcb00480..4f47fb851b5bb2dbff3e991925fc32809b49a89a 100644 GIT binary patch delta 6600 zcmeI0eNYtV8NlCnZ`s{v*}LQJ5DgjSz!3yaIG_@xTJ~VdmyzfgKk|Ws21S|*qSza! zg++8cQZ)pMZ^bXvYP8zeftF32w%HgPAQ_F*#Ghm_YUPQ{iFF~ znYJ^%nVWmwz2|+NeLmjbyYDKmxRmA@^#_t#TbomtZ#-GP@3%f{|HkB7wmY^{;ls%1 z9jNFTJRI9QSbt}~8eP@$ow?f@i>BQzzfoN<>20yAYHwHZ&J#D|4-GHNXz18$yLYR< zX3i(8m$)~6({}N5<@Wg@zGDAdZ!S8#wc?%km+hGMbmxl8mNy4MB*SuS^*X|iu&Xw_7^*p6XW24;Uan^W$_q!Ar_Vp# z>dCyaG;@2pYyUf~~ynV*?nRB{`_n-J77qV`!G#!Pegb)~&L# z(Gi6B$o2bhum)$TIXI3e7MfL1OwStIuOU7fO+vFO9Ag)cqmL6T+icpjDvd-mm?i1C8klZbp1p9_yWJ)K+QeR;(ro!0DHn-HufZE~l$Q;dXLa67hy*>GN)9TI4! zB^{k@3!o4$X={fVe5>sYRN*v|gkdR8CR;FUfb&?g#7lyFj*MW~9H&Jvl86+J#|qDD z9inDsq#`=*38!QEh^SdeI|B)LqI#BrH8}1>U^+U4B|mKY>;1pVaJ^JIO%l)-UUeP| z@yrw30*cCa1B%L<0Y!9`6!Q>Ge#F5Ed_kqMmBBwD%K;ksqh2W{TH;8A2$Ob;@DAQd z&WbP@vf*z@hLxHpJ#T2xEa{TuM?b@RX^F^aN4x(oR86Xc^Q&!I5b{a zNV2Su9Z{!oebf-3Ln5FK4oH&~T$9U@f2w94H5+9S{O)Kv<>}-%R(J|)M2vt`TaJkp z7{vEt5AYuV*XJQc5s)ymjAMH+;`xv0r3RBZv$e4_kp`^)p%%O*g`w7~(!#+%9 zkBJ2;mujV=J}wXt+ksY!y)=^RblfB$9<)PZpcB*^Os*!^;xe3g6 zPK~mI14Bk2pYq2f-2q9Wc4M^HhRA9MEW+L7j05r*O(jeu#4+duiI0RSQ#2En^vI7c z+5(^G--TyE9vE%U3uI*^EyH`HovNz6krc1^NfH-DJNqOlih}m&O3F)bxpPf#G;NO`%=oqTw87PjQ8H>V+p^oym+GUg;9; zxWx)xS)?!qk{M(r7M7VvcE-R8;SyH3w(!Y{R z7b^ol*}^pi$vl7CGRe)y^cpb5R#QyE@{6Xw3B5)#wzsLTg*6K5#<@ zGlRlo`(Z^a$d$pYgQP~63;Z<IG@gazXAg`l~Lmm@h+KF8&IT zSH%BA-U!GGqmV}=%>l`x(jO?3_Ky(8D?bY`UOO6Kyn_DA7;g!~irVjlE*$5l>9??o9#m)|s`EG4vvJk4|1jds;{DF0+<9W(ASi z6ulN@?ihQuIXZhYu}m(xr~|{@vFX2V{LGL?4r1 z4T+fy`hYwb5-Vfnb7OjFM?gl@xUyd1xI}|} z$d5}s3#&q^IGnA9eG1ErJy3=^8GxZ|m5t%XEfP2Gj^oDj9Yr}OxK-f~oWbXA=i^$? z2(EIhQ)S!6HA_F_Sh@W_kf^-3)bt9U&&(N%FpFgS#eO7shQCB9+w zd%Lkk@iqK9>)~aU9UQ-E>pn&}>SK18!MO@9w~FV4jcdJ6hw;^_a1$H6^2TaGSKc47 g!R!dJp1>Gv-5pGgN=AQsT4nSu5xgFb)rii20^{mpbpQYW delta 5164 zcmcIodr%Zd8lUd{W_o5Ac_a~(D6Sa5SGeV+KC~?pdw;Np17gqThv~&%?=y({^b@4SJ*Y(7Mfuhns>w+1io4=&#>bM<-Pz zWjjZY{`RAbFWp{dUsP;!lqFBuxZrAW>jalJ_Xj$y@$Ai_1Sfx_r|UBRb7RiV?O&J7 z48LaT9u{_5!5qI-!! zwI}A3zqk0>jq`zT-bp#N`=hq3)q#7OswUUJuypL)IbT+E9C6N>Hl})9>Xmg9Z}Hb| zru9D4n;CGp&Hnj^v*W&cD|q?+-jh9HC%V4++uWQ2zb96W*>mPUB|WR!kKa8uV^46x zlKiJmmsI`tL~%>hFVl+;g-)?Zqt4!XEGfOA;_xc}>X!7>l!ctdk6Y8-{OYzw;isCB z%Mh_;XRpkTU$HF+JtpR5vyyLUMd;a%_?{))te< z^?f{=4@T@+z;WH3jZ14A1skdv6;MzcfENs{hroUhGg0jb9tGC=m;QceT?`_z1qyWd znLImOE@F_5?vdvThbaxF`8A@2ad<%MMHWJDZJ2NRXb2n*AW!d!Y{+RUX(5%#XnLJRTu4TfLFrRAgsuoCJ>|% zVpPj&AXetHakC#At9xWMfL479Q7BYD`6>Jbg@5Q#=k_6mGe4J$+)wR(k&+pqh#X$0 zr+)^KcyyUZP}4ku+9w`Cu9Ge>Ae8R?Cmcc-bcO>k`j{?12^+~lr!p>75oll&jH+yc zMpRBuHo*k+u70BlHX@|a+|%$Pa?;Mza0IQPThGArQiw*HgE&YFp|}~Qpp`Vb8K$F5 zn%xX9PjxtzW-y7YkgF{k(FE*S?Oo5JM0J;}J>&GuQOO0?AZ?3KiVdPZ$0^kz2H~Ef z$u5``c-#G`;rMR&xUL&sc92Q$8;hT7aNLX>J+Go#` zqzX;4httkn99gs-Gu~RHEV32-gW*j^gluQ{J%$O2kV_eU-^8<@kX;Pdn7DX?EFw*) zHL)vPwljRx#DU>*DZ|H1oH<^0F`UM9)O)WhWTZhzFpF~vC%FnWxfyFDO{=Dlw?gRX zJ4H&%+Xg10M(h|M4XY%LVaEo#pcO)Lb_<@VQA|BX<%!e4c1Fh(b0G^j7}XZU@OleK z3}+gdvN^Vk98_~FWETs`H*8!cazrwA$&N=FdgK(_vr+3;QEKEg6F$1{o=?zl1 z`TfI5Nxjuq;b&=VJFBcFn%fRx{;}sBLfi$15P#7jB>YP+X@@@{6hgbsv0gbqq@^)naY6oP7@ z?6|%)g!ku>s=q&muSMaTSVhX}Zn@dXVZs#)=6F6UXV18ljcMg2NRF1&j|IXO;FdQA z%bT+EHCEA@DdX1Z4C7ykbjxyk2HAGYvIGps>aUOE^LYO>*&s%i5umZGY?5ho7sQPy zAnrZIHPs+mKF#Z5`vLKz$=#4l&v$`@R=ejauK}3zJFY_-&A0}M%5slh>15V``m#vg zf-sjsE3d;_%A5g{D!m`YFZMTP5@j=E=3)!rX41-TmYgJduA4b?$@-mc2t`=*(>o{e zUt@gmxc>cj5Qm>++r_5cnru&1r4i=VvDU=wzXgU#s)-l6u|0JOd+G~r!C|GY75n(Y z?QIWd_o@CpysjOaFEWd;uZNQl=S1CN?CXuti}gVas@x2|^!ZiHix0IwN{L7pF9|)f zba-cYoxCgDpQZB=eoK6Oi}Aw5+Rwy>_D}S)R$!5eGx#3JYP@o|at7abRhY>S?Nx!@ zfdu@M8g3__#sm6766oH&yc2Qy*nRv)6l!!3 z_c7N#D@)d>2b