@@ -150,7 +150,8 @@ static void config_output(struct hantro_ctx *ctx,
150
150
dma_addr_t luma_addr , chroma_addr , mv_addr ;
151
151
152
152
hantro_reg_write (ctx -> dev , & g2_out_dis , 0 );
153
- hantro_reg_write (ctx -> dev , & g2_output_format , 0 );
153
+ if (!ctx -> dev -> variant -> legacy_regs )
154
+ hantro_reg_write (ctx -> dev , & g2_output_format , 0 );
154
155
155
156
luma_addr = hantro_get_dec_buf_addr (ctx , & dst -> base .vb .vb2_buf );
156
157
hantro_write_addr (ctx -> dev , G2_OUT_LUMA_ADDR , luma_addr );
@@ -327,6 +328,7 @@ config_tiles(struct hantro_ctx *ctx,
327
328
struct hantro_aux_buf * tile_edge = & vp9_ctx -> tile_edge ;
328
329
dma_addr_t addr ;
329
330
unsigned short * tile_mem ;
331
+ unsigned int rows , cols ;
330
332
331
333
addr = misc -> dma + vp9_ctx -> tile_info_offset ;
332
334
hantro_write_addr (ctx -> dev , G2_TILE_SIZES_ADDR , addr );
@@ -344,17 +346,24 @@ config_tiles(struct hantro_ctx *ctx,
344
346
345
347
fill_tile_info (ctx , tile_r , tile_c , sbs_r , sbs_c , tile_mem );
346
348
349
+ cols = tile_c ;
350
+ rows = tile_r ;
347
351
hantro_reg_write (ctx -> dev , & g2_tile_e , 1 );
348
- hantro_reg_write (ctx -> dev , & g2_num_tile_cols , tile_c );
349
- hantro_reg_write (ctx -> dev , & g2_num_tile_rows , tile_r );
350
-
351
352
} else {
352
353
tile_mem [0 ] = hantro_vp9_num_sbs (dst -> vp9 .width );
353
354
tile_mem [1 ] = hantro_vp9_num_sbs (dst -> vp9 .height );
354
355
356
+ cols = 1 ;
357
+ rows = 1 ;
355
358
hantro_reg_write (ctx -> dev , & g2_tile_e , 0 );
356
- hantro_reg_write (ctx -> dev , & g2_num_tile_cols , 1 );
357
- hantro_reg_write (ctx -> dev , & g2_num_tile_rows , 1 );
359
+ }
360
+
361
+ if (ctx -> dev -> variant -> legacy_regs ) {
362
+ hantro_reg_write (ctx -> dev , & g2_num_tile_cols_old , cols );
363
+ hantro_reg_write (ctx -> dev , & g2_num_tile_rows_old , rows );
364
+ } else {
365
+ hantro_reg_write (ctx -> dev , & g2_num_tile_cols , cols );
366
+ hantro_reg_write (ctx -> dev , & g2_num_tile_rows , rows );
358
367
}
359
368
360
369
/* provide aux buffers even if no tiles are used */
@@ -505,8 +514,22 @@ static void config_picture_dimensions(struct hantro_ctx *ctx, struct hantro_deco
505
514
static void
506
515
config_bit_depth (struct hantro_ctx * ctx , const struct v4l2_ctrl_vp9_frame * dec_params )
507
516
{
508
- hantro_reg_write (ctx -> dev , & g2_bit_depth_y_minus8 , dec_params -> bit_depth - 8 );
509
- hantro_reg_write (ctx -> dev , & g2_bit_depth_c_minus8 , dec_params -> bit_depth - 8 );
517
+ if (ctx -> dev -> variant -> legacy_regs ) {
518
+ u8 pp_shift = 0 ;
519
+
520
+ hantro_reg_write (ctx -> dev , & g2_bit_depth_y , dec_params -> bit_depth );
521
+ hantro_reg_write (ctx -> dev , & g2_bit_depth_c , dec_params -> bit_depth );
522
+ hantro_reg_write (ctx -> dev , & g2_rs_out_bit_depth , dec_params -> bit_depth );
523
+
524
+ if (dec_params -> bit_depth > 8 )
525
+ pp_shift = 16 - dec_params -> bit_depth ;
526
+
527
+ hantro_reg_write (ctx -> dev , & g2_pp_pix_shift , pp_shift );
528
+ hantro_reg_write (ctx -> dev , & g2_pix_shift , 0 );
529
+ } else {
530
+ hantro_reg_write (ctx -> dev , & g2_bit_depth_y_minus8 , dec_params -> bit_depth - 8 );
531
+ hantro_reg_write (ctx -> dev , & g2_bit_depth_c_minus8 , dec_params -> bit_depth - 8 );
532
+ }
510
533
}
511
534
512
535
static inline bool is_lossless (const struct v4l2_vp9_quantization * quant )
@@ -784,20 +807,26 @@ config_source(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp9_frame *dec_para
784
807
+ dec_params -> compressed_header_size ;
785
808
786
809
stream_base = vb2_dma_contig_plane_dma_addr (& vb2_src -> vb2_buf , 0 );
787
- hantro_write_addr (ctx -> dev , G2_STREAM_ADDR , stream_base );
788
810
789
811
tmp_addr = stream_base + headres_size ;
812
+ if (ctx -> dev -> variant -> legacy_regs )
813
+ hantro_write_addr (ctx -> dev , G2_STREAM_ADDR , (tmp_addr & ~0xf ));
814
+ else
815
+ hantro_write_addr (ctx -> dev , G2_STREAM_ADDR , stream_base );
816
+
790
817
start_bit = (tmp_addr & 0xf ) * 8 ;
791
818
hantro_reg_write (ctx -> dev , & g2_start_bit , start_bit );
792
819
793
820
src_len = vb2_get_plane_payload (& vb2_src -> vb2_buf , 0 );
794
821
src_len += start_bit / 8 - headres_size ;
795
822
hantro_reg_write (ctx -> dev , & g2_stream_len , src_len );
796
823
797
- tmp_addr &= ~0xf ;
798
- hantro_reg_write (ctx -> dev , & g2_strm_start_offset , tmp_addr - stream_base );
799
- src_buf_len = vb2_plane_size (& vb2_src -> vb2_buf , 0 );
800
- hantro_reg_write (ctx -> dev , & g2_strm_buffer_len , src_buf_len );
824
+ if (!ctx -> dev -> variant -> legacy_regs ) {
825
+ tmp_addr &= ~0xf ;
826
+ hantro_reg_write (ctx -> dev , & g2_strm_start_offset , tmp_addr - stream_base );
827
+ src_buf_len = vb2_plane_size (& vb2_src -> vb2_buf , 0 );
828
+ hantro_reg_write (ctx -> dev , & g2_strm_buffer_len , src_buf_len );
829
+ }
801
830
}
802
831
803
832
static void
@@ -837,13 +866,24 @@ config_registers(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp9_frame *dec_p
837
866
838
867
/* configure basic registers */
839
868
hantro_reg_write (ctx -> dev , & g2_mode , VP9_DEC_MODE );
840
- hantro_reg_write (ctx -> dev , & g2_strm_swap , 0xf );
841
- hantro_reg_write (ctx -> dev , & g2_dirmv_swap , 0xf );
842
- hantro_reg_write (ctx -> dev , & g2_compress_swap , 0xf );
869
+ if (!ctx -> dev -> variant -> legacy_regs ) {
870
+ hantro_reg_write (ctx -> dev , & g2_strm_swap , 0xf );
871
+ hantro_reg_write (ctx -> dev , & g2_dirmv_swap , 0xf );
872
+ hantro_reg_write (ctx -> dev , & g2_compress_swap , 0xf );
873
+ hantro_reg_write (ctx -> dev , & g2_ref_compress_bypass , 1 );
874
+ } else {
875
+ hantro_reg_write (ctx -> dev , & g2_strm_swap_old , 0x1f );
876
+ hantro_reg_write (ctx -> dev , & g2_pic_swap , 0x10 );
877
+ hantro_reg_write (ctx -> dev , & g2_dirmv_swap_old , 0x10 );
878
+ hantro_reg_write (ctx -> dev , & g2_tab0_swap_old , 0x10 );
879
+ hantro_reg_write (ctx -> dev , & g2_tab1_swap_old , 0x10 );
880
+ hantro_reg_write (ctx -> dev , & g2_tab2_swap_old , 0x10 );
881
+ hantro_reg_write (ctx -> dev , & g2_tab3_swap_old , 0x10 );
882
+ hantro_reg_write (ctx -> dev , & g2_rscan_swap , 0x10 );
883
+ }
843
884
hantro_reg_write (ctx -> dev , & g2_buswidth , BUS_WIDTH_128 );
844
885
hantro_reg_write (ctx -> dev , & g2_max_burst , 16 );
845
886
hantro_reg_write (ctx -> dev , & g2_apf_threshold , 8 );
846
- hantro_reg_write (ctx -> dev , & g2_ref_compress_bypass , 1 );
847
887
hantro_reg_write (ctx -> dev , & g2_clk_gate_e , 1 );
848
888
hantro_reg_write (ctx -> dev , & g2_max_cb_size , 6 );
849
889
hantro_reg_write (ctx -> dev , & g2_min_cb_size , 3 );
0 commit comments