1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6 #ifndef __IRIS_VPU_BUFFER_H__ 7 #define __IRIS_VPU_BUFFER_H__ 8 9 struct iris_inst; 10 11 #define MIN_BUFFERS 4 12 13 #define DMA_ALIGNMENT 256 14 15 #define NUM_HW_PIC_BUF 32 16 #define LCU_MAX_SIZE_PELS 64 17 #define LCU_MIN_SIZE_PELS 16 18 #define HDR10_HIST_EXTRADATA_SIZE (4 * 1024) 19 20 #define SIZE_HW_PIC(size_per_buf) (NUM_HW_PIC_BUF * (size_per_buf)) 21 22 #define MAX_TILE_COLUMNS 32 23 #define BIN_BUFFER_THRESHOLD (1280 * 736) 24 #define VPP_CMD_MAX_SIZE (BIT(20)) 25 #define H264D_MAX_SLICE 1800 26 27 #define SIZE_H264D_BUFTAB_T 256 28 #define SIZE_H264D_BSE_CMD_PER_BUF (32 * 4) 29 #define SIZE_H264D_VPP_CMD_PER_BUF 512 30 31 #define NUM_SLIST_BUF_H264 (256 + 32) 32 #define SIZE_SLIST_BUF_H264 512 33 #define H264_DISPLAY_BUF_SIZE 3328 34 #define H264_NUM_FRM_INFO 66 35 #define H265_NUM_TILE_COL 32 36 #define H265_NUM_TILE_ROW 128 37 #define H265_NUM_TILE (H265_NUM_TILE_ROW * H265_NUM_TILE_COL + 1) 38 #define SIZE_H265D_BSE_CMD_PER_BUF (16 * sizeof(u32)) 39 40 #define NUM_SLIST_BUF_H265 (80 + 20) 41 #define SIZE_SLIST_BUF_H265 (BIT(10)) 42 #define H265_DISPLAY_BUF_SIZE (3072) 43 #define H265_NUM_FRM_INFO (48) 44 #define SIZE_ONE_SLICE_BUF 256 45 46 #define VP9_NUM_FRAME_INFO_BUF 32 47 #define VP9_NUM_PROBABILITY_TABLE_BUF (VP9_NUM_FRAME_INFO_BUF + 4) 48 #define VP9_PROB_TABLE_SIZE (3840) 49 #define VP9_FRAME_INFO_BUF_SIZE (6144) 50 #define BUFFER_ALIGNMENT_32_BYTES 32 51 #define CCE_TILE_OFFSET_SIZE ALIGN(32 * 4 * 4, BUFFER_ALIGNMENT_32_BYTES) 52 #define MAX_SUPERFRAME_HEADER_LEN (34) 53 #define MAX_FE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE 64 54 #define MAX_FE_NBR_CTRL_LCU32_LINE_BUFFER_SIZE 64 55 #define MAX_FE_NBR_CTRL_LCU16_LINE_BUFFER_SIZE 64 56 #define MAX_SE_NBR_CTRL_LCU16_LINE_BUFFER_SIZE (128 / 8) 57 #define MAX_SE_NBR_CTRL_LCU32_LINE_BUFFER_SIZE (128 / 8) 58 #define VP9_UDC_HEADER_BUF_SIZE (3 * 128) 59 60 #define SIZE_SEI_USERDATA 4096 61 #define SIZE_DOLBY_RPU_METADATA (41 * 1024) 62 #define H264_CABAC_HDR_RATIO_HD_TOT 1 63 #define H264_CABAC_RES_RATIO_HD_TOT 3 64 #define H265D_MAX_SLICE 1200 65 #define SIZE_H265D_HW_PIC_T SIZE_H264D_HW_PIC_T 66 #define H265_CABAC_HDR_RATIO_HD_TOT 2 67 #define H265_CABAC_RES_RATIO_HD_TOT 2 68 #define SIZE_H265D_VPP_CMD_PER_BUF (256) 69 70 #define VPX_DECODER_FRAME_CONCURENCY_LVL (2) 71 #define VPX_DECODER_FRAME_BIN_HDR_BUDGET 1 72 #define VPX_DECODER_FRAME_BIN_RES_BUDGET 3 73 #define VPX_DECODER_FRAME_BIN_DENOMINATOR 2 74 75 #define VPX_DECODER_FRAME_BIN_RES_BUDGET_RATIO (3 / 2) 76 77 #define SIZE_H264D_HW_PIC_T (BIT(11)) 78 79 #define MAX_FE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE 64 80 #define MAX_SE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE 16 81 #define MAX_PE_NBR_DATA_LCU64_LINE_BUFFER_SIZE 384 82 #define MAX_FE_NBR_DATA_LUMA_LINE_BUFFER_SIZE 640 83 84 #define SIZE_SLICE_CMD_BUFFER (ALIGN(20480, 256)) 85 #define SIZE_SPS_PPS_SLICE_HDR (2048 + 4096) 86 #define SIZE_BSE_SLICE_CMD_BUF ((((8192 << 2) + 7) & (~7)) * 3) 87 #define SIZE_LAMBDA_LUT (256 * 11) 88 89 #define HFI_COL_FMT_NV12C_Y_TILE_HEIGHT (8) 90 #define HFI_COL_FMT_NV12C_Y_TILE_WIDTH (32) 91 #define HFI_COL_FMT_TP10C_Y_TILE_HEIGHT (4) 92 #define HFI_COL_FMT_TP10C_Y_TILE_WIDTH (48) 93 94 #define IRIS_METADATA_STRIDE_MULTIPLE 64 95 #define IRIS_METADATA_HEIGHT_MULTIPLE 16 96 97 #define HFI_BUFFER_ARP_ENC 204800 98 99 #define MAX_WIDTH 4096 100 #define MAX_HEIGHT 2304 101 #define NUM_MBS_4K (DIV_ROUND_UP(MAX_WIDTH, 16) * DIV_ROUND_UP(MAX_HEIGHT, 16)) 102 #define NUM_MBS_720P (((ALIGN(1280, 16)) >> 4) * ((ALIGN(736, 16)) >> 4)) 103 104 static inline u32 size_h264d_lb_fe_top_data(u32 frame_width) 105 { 106 return MAX_FE_NBR_DATA_LUMA_LINE_BUFFER_SIZE * ALIGN(frame_width, 16) * 3; 107 } 108 109 static inline u32 size_h264d_lb_fe_top_ctrl(u32 frame_width) 110 { 111 return MAX_FE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE * DIV_ROUND_UP(frame_width, 16); 112 } 113 114 static inline u32 size_h264d_lb_fe_left_ctrl(u32 frame_height) 115 { 116 return MAX_FE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE * DIV_ROUND_UP(frame_height, 16); 117 } 118 119 static inline u32 size_h264d_lb_se_top_ctrl(u32 frame_width) 120 { 121 return MAX_SE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE * DIV_ROUND_UP(frame_width, 16); 122 } 123 124 static inline u32 size_h264d_lb_se_left_ctrl(u32 frame_height) 125 { 126 return MAX_SE_NBR_CTRL_LCU64_LINE_BUFFER_SIZE * DIV_ROUND_UP(frame_height, 16); 127 } 128 129 static inline u32 size_h264d_lb_pe_top_data(u32 frame_width) 130 { 131 return MAX_PE_NBR_DATA_LCU64_LINE_BUFFER_SIZE * DIV_ROUND_UP(frame_width, 16); 132 } 133 134 static inline u32 size_h264d_lb_vsp_top(u32 frame_width) 135 { 136 return (DIV_ROUND_UP(frame_width, 16) << 7); 137 } 138 139 static inline u32 size_h264d_lb_recon_dma_metadata_wr(u32 frame_height) 140 { 141 return ALIGN(frame_height, 16) * 32; 142 } 143 144 static inline u32 size_h264d_qp(u32 frame_width, u32 frame_height) 145 { 146 return DIV_ROUND_UP(frame_width, 64) * DIV_ROUND_UP(frame_height, 64) * 128; 147 } 148 149 u32 iris_vpu_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer_type); 150 u32 iris_vpu33_buf_size(struct iris_inst *inst, enum iris_buffer_type buffer_type); 151 int iris_vpu_buf_count(struct iris_inst *inst, enum iris_buffer_type buffer_type); 152 153 #endif 154