Merge LA.UM.9.12.R2.10.00.00.685.039 via branch 'qcom-msm-4.19-7250' into android-msm-pixel-4.19
Conflicts:
msm/vidc/msm_vidc_common.c
Bug: 172988823
Signed-off-by: Lucas Wei <lucaswei@google.com>
Change-Id: Ia851acbba50ef633cb45130bccd5be788e8e4cf7
diff --git a/Makefile b/Makefile
index 0235ce8..bef408f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,21 +1,27 @@
# SPDX-License-Identifier: GPL-2.0-only
# auto-detect subdirs
-ifeq ($(CONFIG_ARCH_KONA), y)
-include $(srctree)/techpack/video/config/konavid.conf
+ifeq ($(CONFIG_MSM_VIDC_V4L2:M=m), m)
+SUFFIX_MSM_VIDC_V4L2:=-gki
+else
+SUFFIX_MSM_VIDC_V4L2:=
endif
ifeq ($(CONFIG_ARCH_KONA), y)
-LINUXINCLUDE += -include $(srctree)/techpack/video/config/konavidconf.h
+include $(srctree)/techpack/video/config/konavid$(SUFFIX_MSM_VIDC_V4L2).conf
+endif
+
+ifeq ($(CONFIG_ARCH_KONA), y)
+LINUXINCLUDE += -include $(srctree)/techpack/video/config/konavidconf$(SUFFIX_MSM_VIDC_V4L2).h
endif
# auto-detect subdirs
ifeq ($(CONFIG_ARCH_LITO), y)
-include $(srctree)/techpack/video/config/litovid.conf
+include $(srctree)/techpack/video/config/litovid$(SUFFIX_MSM_VIDC_V4L2).conf
endif
ifeq ($(CONFIG_ARCH_LITO), y)
-LINUXINCLUDE += -include $(srctree)/techpack/video/config/litovidconf.h
+LINUXINCLUDE += -include $(srctree)/techpack/video/config/litovidconf$(SUFFIX_MSM_VIDC_V4L2).h
endif
# auto-detect subdirs
diff --git a/config/konavid-gki.conf b/config/konavid-gki.conf
new file mode 100644
index 0000000..10a2274
--- /dev/null
+++ b/config/konavid-gki.conf
@@ -0,0 +1 @@
+export CONFIG_MSM_VIDC_V4L2=m
diff --git a/config/konavidconf-gki.h b/config/konavidconf-gki.h
new file mode 100644
index 0000000..c1e6e4e
--- /dev/null
+++ b/config/konavidconf-gki.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#define CONFIG_MSM_VIDC_V4L2_MODULE 1
diff --git a/config/konavidconf.h b/config/konavidconf.h
index da305d5..78d6c57 100644
--- a/config/konavidconf.h
+++ b/config/konavidconf.h
@@ -3,4 +3,4 @@
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
*/
-#define CONFIG_MSM_VIDC_V4L2 1
+#define CONFIG_MSM_VIDC_V4L2 1
diff --git a/config/litovid-gki.conf b/config/litovid-gki.conf
new file mode 100644
index 0000000..efb4eed
--- /dev/null
+++ b/config/litovid-gki.conf
@@ -0,0 +1 @@
+export CONFIG_MSM_VIDC_V4L2=y
diff --git a/config/litovidconf-gki.h b/config/litovidconf-gki.h
new file mode 100644
index 0000000..78d6c57
--- /dev/null
+++ b/config/litovidconf-gki.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#define CONFIG_MSM_VIDC_V4L2 1
diff --git a/msm/vidc/hfi_common.c b/msm/vidc/hfi_common.c
index d7223d8..6cdceac 100644
--- a/msm/vidc/hfi_common.c
+++ b/msm/vidc/hfi_common.c
@@ -3076,6 +3076,8 @@
struct hfi_sfr_struct *vsfr = NULL;
u32 vsfr_size = 0;
void *p = NULL;
+ char *fatal_reason = NULL;
+ char crash_reason[MAX_SSR_REASON_LEN];
vsfr = (struct hfi_sfr_struct *)device->sfr.align_virtual_addr;
if (vsfr) {
@@ -3090,6 +3092,20 @@
if (p == NULL)
vsfr->rg_data[vsfr_size - 1] = '\0';
+ fatal_reason =
+ strnstr(vsfr->rg_data, "Err_Fatal", MAX_SSR_REASON_LEN);
+ if (fatal_reason) {
+ subsystem_set_crash_reason("venus", fatal_reason);
+ } else if (call_venus_op(device, watchdog, device->intr_status)) {
+ snprintf(crash_reason, MAX_SSR_REASON_LEN,
+ "Watchdog_Timeout - %s", vsfr->rg_data);
+ subsystem_set_crash_reason("venus", crash_reason);
+ } else {
+ snprintf(crash_reason, MAX_SSR_REASON_LEN,
+ "Unknown - %s", vsfr->rg_data);
+ subsystem_set_crash_reason("venus", crash_reason);
+ }
+
d_vpr_e("SFR Message from FW: %s\n", vsfr->rg_data);
}
}
@@ -4808,7 +4824,7 @@
hdevice->res = res;
hdevice->device_id = device_id;
- hdevice->callback = (msm_vidc_callback) callback;
+ hdevice->callback = callback;
__init_venus_ops(hdevice);
diff --git a/msm/vidc/hfi_common.h b/msm/vidc/hfi_common.h
index 9d288c1..f027176 100644
--- a/msm/vidc/hfi_common.h
+++ b/msm/vidc/hfi_common.h
@@ -259,7 +259,7 @@
struct msm_vidc_bus_data bus_vote;
bool power_enabled;
struct mutex lock;
- msm_vidc_callback callback;
+ hfi_cmd_response_callback callback;
struct vidc_mem_addr iface_q_table;
struct vidc_mem_addr dsp_iface_q_table;
struct vidc_mem_addr qdss;
diff --git a/msm/vidc/hfi_iris2.c b/msm/vidc/hfi_iris2.c
index 179fb2a..0f16e9b 100644
--- a/msm/vidc/hfi_iris2.c
+++ b/msm/vidc/hfi_iris2.c
@@ -2,6 +2,7 @@
/*
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
*/
+#include <linux/kernel.h>
#include "msm_vidc_debug.h"
#include "hfi_common.h"
@@ -167,9 +168,9 @@
(u32)device->qdss.align_device_addr, sid);
/* update queues vaddr for debug purpose */
__write_register(device, CPU_CS_VCICMDARG0_IRIS2,
- (u32)device->iface_q_table.align_virtual_addr, sid);
+ (u32)((uintptr_t)device->iface_q_table.align_virtual_addr & UINT_MAX), sid);
__write_register(device, CPU_CS_VCICMDARG1_IRIS2,
- (u32)((u64)device->iface_q_table.align_virtual_addr >> 32),
+ (u32)((uintptr_t)device->iface_q_table.align_virtual_addr >> 32),
sid);
}
diff --git a/msm/vidc/msm_v4l2_vidc.c b/msm/vidc/msm_v4l2_vidc.c
index 0fd761e..3beb77c 100644
--- a/msm/vidc/msm_v4l2_vidc.c
+++ b/msm/vidc/msm_v4l2_vidc.c
@@ -437,7 +437,7 @@
.attrs = msm_vidc_core_attrs,
};
-static const struct of_device_id msm_vidc_dt_match[] = {
+static const struct of_device_id msm_vidc_v4l2_dt_match[] = {
{.compatible = "qcom,msm-vidc"},
{.compatible = "qcom,msm-vidc,context-bank"},
{.compatible = "qcom,msm-vidc,bus"},
@@ -479,6 +479,7 @@
struct msm_vidc_core *core;
struct device *dev = NULL;
int nr = BASE_DEVICE_NUMBER;
+ u32 sku_index = 0;
if (!vidc_driver) {
d_vpr_e("Invalid vidc driver\n");
@@ -491,6 +492,16 @@
core->platform_data = vidc_get_drv_data(&pdev->dev);
dev_set_drvdata(&pdev->dev, core);
+
+ /* If the sku_version != the DT node's sku-index, then return as a successful
+ * probe to prevent the bus from staying on. */
+ rc = of_property_read_u32(pdev->dev.of_node, "sku-index",
+ &sku_index);
+ if (!rc && sku_index != core->platform_data->sku_version) {
+ rc = 0;
+ goto err_core_init;
+ }
+
rc = msm_vidc_initialize_core(pdev, core);
if (rc) {
d_vpr_e("Failed to init core\n");
@@ -585,7 +596,7 @@
* context-bank details and store it in core->resources.context_banks
* list.
*/
- rc = of_platform_populate(pdev->dev.of_node, msm_vidc_dt_match, NULL,
+ rc = of_platform_populate(pdev->dev.of_node, msm_vidc_v4l2_dt_match, NULL,
&pdev->dev);
if (rc) {
d_vpr_e("Failed to trigger probe for sub-devices\n");
@@ -708,6 +719,7 @@
{
int rc = 0;
struct msm_vidc_core *core;
+ u32 sku_index = 0;
/*
* Bail out if
@@ -719,6 +731,11 @@
!of_device_is_compatible(dev->of_node, "qcom,msm-vidc"))
return 0;
+ rc = of_property_read_u32(dev->of_node, "sku-index",
+ &sku_index);
+ if (!rc && sku_index != vidc_driver->sku_version)
+ return 0;
+
core = dev_get_drvdata(dev);
if (!core) {
d_vpr_e("%s: invalid core\n", __func__);
@@ -745,14 +762,14 @@
SET_SYSTEM_SLEEP_PM_OPS(msm_vidc_pm_suspend, msm_vidc_pm_resume)
};
-MODULE_DEVICE_TABLE(of, msm_vidc_dt_match);
+MODULE_DEVICE_TABLE(of, msm_vidc_v4l2_dt_match);
static struct platform_driver msm_vidc_driver = {
.probe = msm_vidc_probe,
.remove = msm_vidc_remove,
.driver = {
.name = "msm_vidc_v4l2",
- .of_match_table = msm_vidc_dt_match,
+ .of_match_table = msm_vidc_v4l2_dt_match,
.pm = &msm_vidc_pm_ops,
},
};
diff --git a/msm/vidc/msm_venc.c b/msm/vidc/msm_venc.c
index 0ad13a8..262277d 100644
--- a/msm/vidc/msm_venc.c
+++ b/msm/vidc/msm_venc.c
@@ -4600,7 +4600,8 @@
* However, all-intra is intended for quality bitstream. Hence,
* fallback to VBR RC mode if client needs all-intra encoding.
*/
- if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)
+ if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR ||
+ inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR_VFR)
inst->rc_type = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
/* check supported bit rate mode and frame rate */
diff --git a/msm/vidc/msm_vidc_buffer_calculations.c b/msm/vidc/msm_vidc_buffer_calculations.c
index 26e48d5..4aa5634 100644
--- a/msm/vidc/msm_vidc_buffer_calculations.c
+++ b/msm/vidc/msm_vidc_buffer_calculations.c
@@ -273,6 +273,7 @@
#define HFI_VENUS_HEIGHT_ALIGNMENT 32
#define SYSTEM_LAL_TILE10 192
+#define NUM_MBS_480P (((640 + 15) >> 4) * ((480 + 15) >> 4))
#define NUM_MBS_720P (((1280 + 15) >> 4) * ((720 + 15) >> 4))
#define NUM_MBS_4k (((4096 + 15) >> 4) * ((2304 + 15) >> 4))
#define MB_SIZE_IN_PIXEL (16 * 16)
@@ -1004,8 +1005,9 @@
f = &inst->fmts[OUTPUT_PORT].v4l2_fmt;
/*
* Encoder output size calculation: 32 Align width/height
- * For resolution < 720p : YUVsize * 4
- * For resolution > 720p & <= 4K : YUVsize / 2
+ * For CQ or heic session : YUVsize * 2
+ * For resolution <= 480p : YUVsize * 2
+ * For resolution > 480p & <= 4K : YUVsize / 2
* For resolution > 4k : YUVsize / 4
* Initially frame_size = YUVsize * 2;
*/
@@ -1018,24 +1020,29 @@
mbs_per_frame = NUM_MBS_PER_FRAME(width, height);
frame_size = (width * height * 3);
- if (mbs_per_frame < NUM_MBS_720P)
- frame_size = frame_size << 1;
+ if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ ||
+ is_grid_session(inst) || is_image_session(inst))
+ goto calc_done;
+
+ if (mbs_per_frame <= NUM_MBS_480P)
+ goto calc_done; /* Default frame_size = YUVsize * 2 */
else if (mbs_per_frame <= NUM_MBS_4k)
frame_size = frame_size >> 2;
else
frame_size = frame_size >> 3;
- if ((inst->rc_type == RATE_CONTROL_OFF) ||
- (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ))
+ if (inst->rc_type == RATE_CONTROL_OFF)
frame_size = frame_size << 1;
if (inst->rc_type == RATE_CONTROL_LOSSLESS)
frame_size = (width * height * 9) >> 2;
/* multiply by 10/8 (1.25) to get size for 10 bit case */
- if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC)
+ if (inst->core->platform_data->vpu_ver != VPU_VERSION_AR50_LITE &&
+ f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC)
frame_size = frame_size + (frame_size >> 2);
+calc_done:
return ALIGN(frame_size, SZ_4K);
}
diff --git a/msm/vidc/msm_vidc_clocks.c b/msm/vidc/msm_vidc_clocks.c
index 5fdfe53..f7797ea 100644
--- a/msm/vidc/msm_vidc_clocks.c
+++ b/msm/vidc/msm_vidc_clocks.c
@@ -1746,13 +1746,10 @@
msm_vidc_power_save_mode_enable(inst, enable);
} else if (cur_inst_lp_load + core_load <= max_freq) {
msm_vidc_power_save_mode_enable(inst, true);
- } else if (cur_inst_lp_load + core_lp_load <= max_freq) {
+ } else {
s_vpr_h(inst->sid, "Moved all inst's to LP");
msm_vidc_move_core_to_power_save_mode(core,
VIDC_CORE_ID_1, inst->sid);
- } else {
- s_vpr_e(inst->sid, "Core cannot support this load\n");
- return -EINVAL;
}
inst->clk_data.core_id = VIDC_CORE_ID_1;
diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c
index 21adfe4..4dfc6a7 100644
--- a/msm/vidc/msm_vidc_common.c
+++ b/msm/vidc/msm_vidc_common.c
@@ -1323,6 +1323,7 @@
{
int rc = 0;
struct hfi_device *hdev;
+ char crash_reason[MAX_SSR_REASON_LEN];
if (!inst) {
d_vpr_e("Invalid(%pK) instance id\n", inst);
@@ -1340,6 +1341,12 @@
if (!rc) {
s_vpr_e(inst->sid, "Wait interrupted or timed out: %d\n",
SESSION_MSG_INDEX(cmd));
+ snprintf(crash_reason, MAX_SSR_REASON_LEN,
+ "HW_RSP_Timeout - Wait interrupted or timed out: %d",
+ SESSION_MSG_INDEX(cmd));
+
+ subsystem_set_crash_reason("venus", crash_reason);
+
msm_comm_kill_session(inst);
rc = -EIO;
} else {
@@ -6804,8 +6811,15 @@
rc = msm_smem_cache_operations(mbuf->smem[i].dma_buf,
cache_op, offset, size, inst->sid);
if (rc)
- print_vidc_buffer(VIDC_ERR,
- "qbuf cache ops failed", inst, mbuf);
+ dprintk_ratelimit(VIDC_ERR,
+ "qbuf cache ops failed: %s: idx %2d fd %d off %d daddr %x size %d filled %d flags 0x%x ts %lld refcnt %d mflags 0x%x\n",
+ vb->type == INPUT_MPLANE ?
+ "OUTPUT" : "CAPTURE",
+ vb->index, vb->planes[i].m.fd,
+ vb->planes[i].data_offset, mbuf->smem[i].device_addr,
+ vb->planes[i].length, vb->planes[i].bytesused,
+ mbuf->vvb.flags, mbuf->vvb.vb2_buf.timestamp,
+ mbuf->smem[i].refcount, mbuf->flags);
}
}
@@ -7534,6 +7548,12 @@
!frame_data->filled_len)
return 0;
+ /*
+ * MaxAvgFrameSize <= (1 + B/S) * (MaxClock / fps - 25*NumOfMacroBlockperFrame) / 1.35
+ * S: Sliding window = #Frames in 40ms (av sync window) Closest point
+ * B: Buffer Count = B(vsp-vpp) = 2 for 2Stage, 0 for 1stage
+ */
+
fps = inst->clk_data.frame_rate >> 16;
window_size = inst->core->resources.avsync_window_size * fps;
window_size = DIV_ROUND_CLOSEST(window_size, 1000);
diff --git a/msm/vidc/msm_vidc_debug.c b/msm/vidc/msm_vidc_debug.c
index e803269..aa1de10 100644
--- a/msm/vidc/msm_vidc_debug.c
+++ b/msm/vidc/msm_vidc_debug.c
@@ -182,7 +182,7 @@
goto exit;
}
core->resources.msm_vidc_hw_rsp_timeout =
- ((msm_vidc_debug & 0xFF) > (VIDC_ERR | VIDC_HIGH)) ? 1500 : 1000;
+ ((msm_vidc_debug & 0xFF) > (VIDC_ERR | VIDC_HIGH)) ? 2500 : 1000;
rc = count;
d_vpr_h("debug timeout updated to - %d\n",
core->resources.msm_vidc_hw_rsp_timeout);
@@ -522,7 +522,7 @@
{
struct dentry *dentry = NULL;
- if (!inst || !inst->debugfs_root)
+ if (!inst || IS_ERR_OR_NULL(inst->debugfs_root))
return;
dentry = inst->debugfs_root;
diff --git a/msm/vidc/msm_vidc_platform.c b/msm/vidc/msm_vidc_platform.c
index c93865c..e694896 100644
--- a/msm/vidc/msm_vidc_platform.c
+++ b/msm/vidc/msm_vidc_platform.c
@@ -202,8 +202,10 @@
static struct msm_vidc_codec_capability lito_capabilities_v0[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value} */
- {CAP_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 96, 5760, 1, 1920},
- {CAP_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 96, 5760, 1, 1080},
+ {CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 5760, 1, 1920},
+ {CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 5760, 1, 1080},
+ {CAP_FRAME_WIDTH, ENC, CODECS_ALL, 96, 5760, 2, 1920},
+ {CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 96, 5760, 2, 1080},
/* ((5760 * 2880) / 256) */
{CAP_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 36, 64800, 1, 8160},
/* ((3840x2176)/256)@60fps */
@@ -234,8 +236,10 @@
{CAP_MAX_VIDEOCORES, DOMAINS_ALL, CODECS_ALL, 0, 1, 1, 1},
/* VP8 specific */
- {CAP_FRAME_WIDTH, ENC|DEC, VP8, 96, 4096, 1, 1920},
- {CAP_FRAME_HEIGHT, ENC|DEC, VP8, 96, 4096, 1, 1080},
+ {CAP_FRAME_WIDTH, DEC, VP8, 96, 4096, 1, 1920},
+ {CAP_FRAME_HEIGHT, DEC, VP8, 96, 4096, 1, 1080},
+ {CAP_FRAME_WIDTH, ENC, VP8, 96, 4096, 2, 1920},
+ {CAP_FRAME_HEIGHT, ENC, VP8, 96, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_MBS_PER_FRAME, ENC|DEC, VP8, 36, 34816, 1, 8160},
/* (3840 * 2176) / 256) * 30*/
@@ -255,8 +259,10 @@
{CAP_BITRATE, DEC, MPEG2, 1, 40000000, 1, 20000000},
/* Secure usecase specific */
- {CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1920},
- {CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
+ {CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 96, 4096, 2, 1920},
+ {CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 96, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_SECURE_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 40000000, 1, 20000000},
@@ -270,10 +276,10 @@
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 240, 1, 30},
/* Image specific */
- {CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
- {CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
- {CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 1, 8192},
- {CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 1, 8192},
+ {CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
+ {CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
+ {CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 2, 8192},
+ {CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 2, 8192},
/* Level for AVC and HEVC encoder specific.
Default for levels is UNKNOWN value. But if we use unknown
@@ -298,8 +304,10 @@
static struct msm_vidc_codec_capability lito_capabilities_v1[] = {
/* {cap_type, domains, codecs, min, max, step_size, default_value} */
- {CAP_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1920},
- {CAP_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
+ {CAP_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_FRAME_WIDTH, ENC, CODECS_ALL, 96, 4096, 2, 1920},
+ {CAP_FRAME_HEIGHT, ENC, CODECS_ALL, 96, 4096, 2, 1080},
/* ((4096 * 2176) / 256) */
{CAP_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 36, 34816, 1, 8160},
/* UHD@30 decode + 1080@30 encode */
@@ -330,8 +338,10 @@
{CAP_MAX_VIDEOCORES, DOMAINS_ALL, CODECS_ALL, 0, 1, 1, 1},
/* VP8 specific */
- {CAP_FRAME_WIDTH, ENC|DEC, VP8, 96, 1920, 1, 1920},
- {CAP_FRAME_HEIGHT, ENC|DEC, VP8, 96, 1920, 1, 1080},
+ {CAP_FRAME_WIDTH, DEC, VP8, 96, 1920, 1, 1920},
+ {CAP_FRAME_HEIGHT, DEC, VP8, 96, 1920, 1, 1080},
+ {CAP_FRAME_WIDTH, ENC, VP8, 96, 1920, 2, 1920},
+ {CAP_FRAME_HEIGHT, ENC, VP8, 96, 1920, 2, 1080},
/* (1920 * 1088) / 256 */
{CAP_MBS_PER_FRAME, ENC|DEC, VP8, 36, 8160, 1, 8160},
/* ((1920 * 1088) / 256) * 60*/
@@ -351,8 +361,10 @@
{CAP_BITRATE, DEC, MPEG2, 1, 40000000, 1, 20000000},
/* Secure usecase specific */
- {CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1920},
- {CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_SECURE_FRAME_WIDTH, DEC, CODECS_ALL, 96, 4096, 1, 1920},
+ {CAP_SECURE_FRAME_HEIGHT, DEC, CODECS_ALL, 96, 4096, 1, 1080},
+ {CAP_SECURE_FRAME_WIDTH, ENC, CODECS_ALL, 96, 4096, 2, 1920},
+ {CAP_SECURE_FRAME_HEIGHT, ENC, CODECS_ALL, 96, 4096, 2, 1080},
/* (4096 * 2176) / 256 */
{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 36, 34816, 1, 8160},
{CAP_SECURE_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 40000000, 1, 20000000},
@@ -366,10 +378,10 @@
{CAP_ALLINTRA_MAX_FPS, ENC, H264|HEVC, 1, 240, 1, 30},
/* Image specific */
- {CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 1, 512},
- {CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 1, 512},
- {CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 1, 8192},
- {CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 1, 8192},
+ {CAP_HEVC_IMAGE_FRAME_WIDTH, ENC, HEVC, 128, 512, 2, 512},
+ {CAP_HEVC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 128, 512, 2, 512},
+ {CAP_HEIC_IMAGE_FRAME_WIDTH, ENC, HEVC, 512, 8192, 2, 8192},
+ {CAP_HEIC_IMAGE_FRAME_HEIGHT, ENC, HEVC, 512, 8192, 2, 8192},
/* Level for AVC and HEVC encoder specific.
Default for levels is UNKNOWN value. But if we use unknown
@@ -931,10 +943,11 @@
},
{
.key = "qcom,max-hw-load",
- .value = 1958400,
+ .value = 3916800,
/**
- * ((3840x2176)/256)@60
+ * supported is: ((3840x2176)/256)@60
* UHD@30 decode + UHD@30 encode
+ * mentioned value is as per UHD@120
*/
},
{
@@ -955,7 +968,7 @@
},
{
.key = "qcom,max-b-frame-mbs-per-sec",
- .value = 244800,/* ((1920x1088)/256) MBs@30fps */
+ .value = 489600,/* ((1920x1088)/256) MBs@60fps */
},
{
.key = "qcom,max-mbpf",
@@ -1018,9 +1031,11 @@
},
{
.key = "qcom,max-hw-load",
- .value = 1224000,
+ .value = 3916800,
/**
+ * supported is:
* UHD@30 decode + 1080@30 encode
+ * mentioned is as per UHD@120
*/
},
{
diff --git a/msm/vidc/vidc_hfi_api.h b/msm/vidc/vidc_hfi_api.h
index 212b227..4f16a8f 100644
--- a/msm/vidc/vidc_hfi_api.h
+++ b/msm/vidc/vidc_hfi_api.h
@@ -728,7 +728,6 @@
typedef void (*hfi_cmd_response_callback) (enum hal_command_response cmd,
void *data);
-typedef void (*msm_vidc_callback) (u32 response, void *callback);
struct hfi_device *vidc_hfi_initialize(enum msm_vidc_hfi_type hfi_type,
u32 device_id, struct msm_vidc_platform_resources *res,