From 480b0b9affddfd5878a1bee469eeb25a794eb1bd Mon Sep 17 00:00:00 2001 From: Dongmin Shin Date: Thu, 29 Nov 2018 20:09:36 +0900 Subject: [PATCH] [RAMEN9610-9016][RAMEN ERD 9610] VIPx : Add ENF_YUV function Change-Id: I7f2d5a427f84ec7963ecadd713345ca9c8d7ec4c Signed-off-by: Dongmin Shin --- drivers/vision/include/vs4l.h | 2 +- .../vision/vipx/include/interface/ap_vip_if.h | 7 +++--- drivers/vision/vipx/include/vipx-config.h | 3 ++- drivers/vision/vipx/include/vipx-memory.h | 3 +++ .../vipx/interface/hardware/vipx-interface.c | 25 +++++++++++-------- .../vipx/interface/hardware/vipx-mailbox.c | 2 +- drivers/vision/vipx/vipx-graph.c | 6 ++--- drivers/vision/vipx/vipx-memory.c | 5 +++- drivers/vision/vipx/vipx-system.c | 3 ++- drivers/vision/vipx/vipx-vertex.c | 8 ++++++ 10 files changed, 42 insertions(+), 22 deletions(-) diff --git a/drivers/vision/include/vs4l.h b/drivers/vision/include/vs4l.h index d8cdcf7bf87a..9f1a320b04f4 100755 --- a/drivers/vision/include/vs4l.h +++ b/drivers/vision/include/vs4l.h @@ -17,7 +17,7 @@ #define VS4L_TARGET_SC_SHIFT 16 #define VS4L_TARGET_PU 0xFFFF #define VS4L_TARGET_PU_SHIFT 0 -#define _MAX_NUM_OF_USER_PARAMS 80 +#define _MAX_NUM_OF_USER_PARAMS 180 enum vs4l_graph_flag { diff --git a/drivers/vision/vipx/include/interface/ap_vip_if.h b/drivers/vision/vipx/include/interface/ap_vip_if.h index 1abe9f026ada..2949f07443ec 100755 --- a/drivers/vision/vipx/include/interface/ap_vip_if.h +++ b/drivers/vision/vipx/include/interface/ap_vip_if.h @@ -72,7 +72,7 @@ MAX_NUM_OF_INPUTS = 16, #else MAX_NUM_OF_INPUTS = 24, #endif -#if 0 +#if 0 MAX_NUM_OF_OUTPUTS = 12, #else MAX_NUM_OF_OUTPUTS = 8, @@ -81,7 +81,7 @@ MAX_NUM_OF_INPUTS = 16, #if 0 MAX_NUM_OF_USER_PARAMS = 8, #else - MAX_NUM_OF_USER_PARAMS = 80, + MAX_NUM_OF_USER_PARAMS = 180, #endif }; @@ -113,14 +113,13 @@ enum SCENARIO_DE = 1, SCENARIO_SDOF_FULL, SCENARIO_DE_SDOF, -// temp for previous host ver -// SCENARIO_ENF, SCENARIO_DE_CAPTURE, SCENARIO_SDOF_CAPTURE, SCENARIO_DE_SDOF_CAPTURE, SCENARIO_GDC, SCENARIO_ENF, SCENARIO_ENF_UV, + SCENARIO_ENF_YUV, SCENARIO_BLEND, SCENARIO_AP_MAX, }; diff --git a/drivers/vision/vipx/include/vipx-config.h b/drivers/vision/vipx/include/vipx-config.h index 21184fe46bd4..472b6e1e1cda 100755 --- a/drivers/vision/vipx/include/vipx-config.h +++ b/drivers/vision/vipx/include/vipx-config.h @@ -60,10 +60,11 @@ /* #define DBG_PRINT_TASK */ /* #define DBG_VERBOSE_IO */ +#if 0 //#define DUMP_DEBUG_LOG_REGION #define DEBUG_LOG_MEMORY //#define PRINT_DBG - +#endif #define DISABLE_VIPX_LOG 0 #if DISABLE_VIPX_LOG diff --git a/drivers/vision/vipx/include/vipx-memory.h b/drivers/vision/vipx/include/vipx-memory.h index 1ac32d5bf2f0..58b3e22c7bfe 100755 --- a/drivers/vision/vipx/include/vipx-memory.h +++ b/drivers/vision/vipx/include/vipx-memory.h @@ -34,6 +34,9 @@ #define VIPX_IOVA_DRAM_FIRMWARE 0xB8000000 #define VIPX_IOVA_DRAM_MBOX 0xA9000000 +#define ION_FLAG_NON_CACHED 0 + + struct vipx_vb2_buf; struct vipx_vb2_buf_ops { ulong (*plane_kvaddr)(struct vipx_vb2_buf *vbuf, u32 plane); diff --git a/drivers/vision/vipx/interface/hardware/vipx-interface.c b/drivers/vision/vipx/interface/hardware/vipx-interface.c index 201dec78cc8c..a92c4213265a 100755 --- a/drivers/vision/vipx/interface/hardware/vipx-interface.c +++ b/drivers/vision/vipx/interface/hardware/vipx-interface.c @@ -888,7 +888,7 @@ int vipx_interface_stop(struct vipx_interface *interface) retry = VIPX_STOP_WAIT_COUNT; while (--retry && itaskmgr->req_cnt) { vipx_warn("waiting %d request completion...(%d)\n", itaskmgr->req_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { @@ -900,7 +900,7 @@ int vipx_interface_stop(struct vipx_interface *interface) retry = VIPX_STOP_WAIT_COUNT; while (--retry && itaskmgr->pro_cnt) { vipx_warn("waiting %d process completion...(%d)\n", itaskmgr->pro_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { @@ -912,7 +912,7 @@ int vipx_interface_stop(struct vipx_interface *interface) retry = VIPX_STOP_WAIT_COUNT; while (--retry && itaskmgr->com_cnt) { vipx_warn("waiting %d complete completion...(%d)\n", itaskmgr->com_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { @@ -933,20 +933,23 @@ int vipx_interface_stop(struct vipx_interface *interface) int vipx_hw_wait_bootup(struct vipx_interface *interface) { int ret = 0; - int try_cnt = 10; struct vipx_system *system = container_of(interface, struct vipx_system, interface); - struct vipx_binary *binary = &system->binary; BUG_ON(!interface); +#ifdef DUMP_DEBUG_LOG_REGION + int try_cnt = 10; + struct vipx_binary *binary = &system->binary; while (try_cnt && !test_bit(VIPX_ITF_STATE_BOOTUP, &interface->state)) { - msleep(5); + msleep(1); try_cnt--; vipx_info("%s(): wait CM7 bootup\n",__func__); } +#endif vipx_info("debug kva(0x%p), dva(0x%x), size(%ld)\n", system->memory.info.kvaddr_debug, (u32)system->memory.info.dvaddr_debug, system->memory.info.pb_debug->size); +#ifdef DUMP_DEBUG_LOG_REGION if (try_cnt == 0) { if (!IS_ERR_OR_NULL(system->memory.info.kvaddr_debug)) { @@ -957,7 +960,7 @@ int vipx_hw_wait_bootup(struct vipx_interface *interface) } ret = -EINVAL; } - +#endif vipx_info("%s():%d\n", __func__, ret); return ret; } @@ -1145,7 +1148,8 @@ int vipx_hw_destroy(struct vipx_interface *interface, struct vipx_task *itask) if (payload.msg_u.destroy_graph_req.graph_id < SCENARIO_DE_CAPTURE) heap_size = VIPX_CM7_HEAP_SIZE_PREVIEW; - else if (payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF) + else if ((payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF) || + (payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF_YUV)) heap_size = VIPX_CM7_HEAP_SIZE_ENF; else heap_size = VIPX_CM7_HEAP_SIZE_CAPTURE; @@ -1246,8 +1250,9 @@ int vipx_hw_config(struct vipx_interface *interface, struct vipx_task *itask) // Allocate and assign heap if (payload.msg_u.set_graph_req.graph_id < SCENARIO_DE_CAPTURE) heap_size = VIPX_CM7_HEAP_SIZE_PREVIEW; - else if (payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF_UV || - payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF) + else if ((payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF_UV) || + (payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF) || + (payload.msg_u.destroy_graph_req.graph_id == SCENARIO_ENF_YUV)) heap_size = VIPX_CM7_HEAP_SIZE_ENF; else heap_size = VIPX_CM7_HEAP_SIZE_CAPTURE; diff --git a/drivers/vision/vipx/interface/hardware/vipx-mailbox.c b/drivers/vision/vipx/interface/hardware/vipx-mailbox.c index a7f7566a89e2..ecd98f8a835a 100644 --- a/drivers/vision/vipx/interface/hardware/vipx-mailbox.c +++ b/drivers/vision/vipx/interface/hardware/vipx-mailbox.c @@ -107,7 +107,7 @@ int vipx_mbox_wait_reply(struct vipx_mailbox_ctrl *mctrl, try_count = 1000; while (--try_count && (mbox->wmsg_idx == mbox->rmsg_idx)) { vipx_warn("waiting vipx reply(%d, %d)...(%d)\n", mbox->wmsg_idx, mbox->rmsg_idx, try_count); - msleep(10); + msleep(1); } if (try_count <= 0) { diff --git a/drivers/vision/vipx/vipx-graph.c b/drivers/vision/vipx/vipx-graph.c index c3697638e67d..b359dd34c4f6 100755 --- a/drivers/vision/vipx/vipx-graph.c +++ b/drivers/vision/vipx/vipx-graph.c @@ -65,7 +65,7 @@ static int __vipx_graph_stop(struct vipx_graph *graph) retry = VIPX_STOP_WAIT_COUNT; while (--retry && taskmgr->req_cnt) { vipx_iwarn("waiting %d request cancel...(%d)\n", graph, taskmgr->req_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { @@ -76,7 +76,7 @@ static int __vipx_graph_stop(struct vipx_graph *graph) retry = VIPX_STOP_WAIT_COUNT; while (--retry && taskmgr->pre_cnt) { vipx_iwarn("waiting %d prepare cancel...(%d)\n", graph, taskmgr->pre_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { @@ -87,7 +87,7 @@ static int __vipx_graph_stop(struct vipx_graph *graph) retry = VIPX_STOP_WAIT_COUNT; while (--retry && taskmgr->pro_cnt) { vipx_iwarn("waiting %d process done...(%d)\n", graph, taskmgr->pro_cnt, retry); - msleep(10); + msleep(1); } if (!retry) { diff --git a/drivers/vision/vipx/vipx-memory.c b/drivers/vision/vipx/vipx-memory.c index 4c74ebd4a3d3..ba5acfe22048 100755 --- a/drivers/vision/vipx/vipx-memory.c +++ b/drivers/vision/vipx/vipx-memory.c @@ -299,7 +299,8 @@ static struct vipx_priv_buf *vipx_ion_alloc(void *ctx, size = PAGE_ALIGN(size); - buf->dma_buf = ion_alloc_dmabuf(heapname, size, alloc_ctx->flags); + buf->dma_buf = ion_alloc_dmabuf(heapname, size, ION_FLAG_NON_CACHED); + //buf->dma_buf = ion_alloc_dmabuf(heapname, size, alloc_ctx->flags); if (IS_ERR(buf->dma_buf)) { ret = -ENOMEM; goto err_alloc; @@ -495,7 +496,9 @@ dma_addr_t vipx_allocate_heap(struct vipx_memory *mem, u32 size) vipx_err("failed to allocate buffer for VIPX_CM7_HEAP_SIZE"); ret = -ENOMEM; } +#ifdef DUMP_DEBUG_LOG_REGION minfo->kvaddr_heap = vipx_ion_kvaddr(minfo->pb_heap); +#endif minfo->dvaddr_heap = vipx_ion_dvaddr(minfo->pb_heap); vipx_info("heap kva(0x%p), dva(0x%x), size(%ld)\n", minfo->kvaddr_heap, (u32)minfo->dvaddr_heap, minfo->pb_heap->size); diff --git a/drivers/vision/vipx/vipx-system.c b/drivers/vision/vipx/vipx-system.c index 55ce834a10a5..ee78c8f6eab7 100755 --- a/drivers/vision/vipx/vipx-system.c +++ b/drivers/vision/vipx/vipx-system.c @@ -411,12 +411,13 @@ int vipx_system_fw_bootup(struct vipx_system *system) vipx_err("CTL_OP(ctl_start) is fail(%d)\n", ret); goto p_err; } - +#if 0 // change code position to vipx_vertex_streamon in vipx-vertex.c before streamon execution ret = vipx_hw_wait_bootup(&system->interface); if (ret) { vipx_err("vipx_hw_wait_bootup is fail(%d)\n", ret); goto p_err; } +#endif p_err: vipx_info("%s():%d\n", __func__, ret); diff --git a/drivers/vision/vipx/vipx-vertex.c b/drivers/vision/vipx/vipx-vertex.c index 3e97f6188f46..1e87b8f5efdd 100755 --- a/drivers/vision/vipx/vipx-vertex.c +++ b/drivers/vision/vipx/vipx-vertex.c @@ -459,12 +459,20 @@ static int vipx_vertex_streamon(struct file *file) struct vipx_vertex *vertex = vctx->vertex; struct vipx_queue *queue = &vctx->queue; struct mutex *lock = &vctx->lock; + struct vipx_device *device = container_of(vertex, struct vipx_device, vertex); + struct vipx_system *system = &device->system; if (mutex_lock_interruptible(lock)) { vipx_ierr("mutex_lock_interruptible is fail\n", vctx); return -ERESTARTSYS; } + ret = vipx_hw_wait_bootup(&system->interface); + if (ret) { + vision_err("CM7 bootup is fail(%d)\n", ret); + goto p_err; + } + if (!(vctx->state & (BIT(VIPX_VERTEX_FORMAT) | BIT(VIPX_VERTEX_STOP)))) { vipx_ierr("invalid state(%X)\n", vctx, vctx->state); ret = -EINVAL; -- 2.20.1