static int ovl2mem_callback(unsigned int userdata) { int fence_idx = 0; int layid = 0; DISPMSG("ovl2mem_callback(%x), current tick=%d, release tick: %d\n", pgc->session, get_ovl2mem_ticket(), userdata); for (layid = 0; layid < (HW_OVERLAY_COUNT + 1); layid++) { fence_idx = mtkfb_query_idx_by_ticket(pgc->session, layid, userdata); if (fence_idx >= 0) { disp_ddp_path_config *data_config = dpmgr_path_get_last_config(pgc->dpmgr_handle); WDMA_CONFIG_STRUCT wdma_layer; wdma_layer.dstAddress = 0; if (data_config && (layid >= HW_OVERLAY_COUNT)) { wdma_layer.dstAddress = mtkfb_query_buf_mva(pgc->session, layid, fence_idx); wdma_layer.outputFormat = data_config->wdma_config.outputFormat; wdma_layer.srcWidth = data_config->wdma_config.srcWidth; wdma_layer.srcHeight = data_config->wdma_config.srcHeight; wdma_layer.dstPitch = data_config->wdma_config.dstPitch; DISPMSG("mem_seq %x-seq+ %d\n", pgc->session, mtkfb_query_frm_seq_by_addr(pgc->session, layid, wdma_layer.dstAddress)); dprec_logger_frame_seq_end(pgc->session, mtkfb_query_frm_seq_by_addr(pgc->session, layid, wdma_layer.dstAddress)); dprec_mmp_dump_wdma_layer(&wdma_layer, 1); } mtkfb_release_fence(pgc->session, layid, fence_idx); } } atomic_set(&g_release_ticket, userdata); }
void update_frm_seq_info(unsigned int session_id, unsigned int addr, unsigned int addr_offset,unsigned int seq, DISP_FRM_SEQ_STATE state) { int i= 0; unsigned device_type = DISP_SESSION_TYPE(session_id); //printk("update_frm_seq_info, 0x%x/0x%x/0x%x/%d/%s/%d\n", session_id, addr, addr_offset, seq, get_frame_seq_state_string(state), frm_update_cnt); if(seq < 0 || session_id < 0 || state > FRM_RDMA0_EOF) return ; if(device_type > DISP_SESSION_MEMORY) { printk("seq_end session_id(0x%x) , seq(%d) \n",session_id, seq); return; } if(device_type == DISP_SESSION_PRIMARY || device_type == DISP_SESSION_PRIMARY - 1) { if(FRM_CONFIG == state) { frm_update_sequence[frm_update_cnt].state = state; frm_update_sequence[frm_update_cnt].session_type = device_type; frm_update_sequence[frm_update_cnt].mva= addr; frm_update_sequence[frm_update_cnt].max_offset= addr_offset; if(seq > 0) frm_update_sequence[frm_update_cnt].seq= seq; MMProfileLogEx(MTKFB_MMP_Events.primary_seq_config, MMProfileFlagPulse, addr, seq); } else if(FRM_TRIGGER == state) { frm_update_sequence[frm_update_cnt].state = FRM_TRIGGER; MMProfileLogEx(MTKFB_MMP_Events.primary_seq_trigger, MMProfileFlagPulse, addr, seq); dprec_logger_frame_seq_begin(device_type, frm_update_sequence[frm_update_cnt].seq); frm_update_cnt++; frm_update_cnt%=FRM_UPDATE_SEQ_CACHE_NUM; } else if(FRM_WDMA0_EOF == state) { for(i= 0; i< FRM_UPDATE_SEQ_CACHE_NUM; i++) { // if((absabs(addr -frm_update_sequence[i].mva) <= frm_update_sequence[i].max_offset) && (frm_update_sequence[i].state == FRM_TRIGGER)) if(frm_update_sequence[i].state == FRM_TRIGGER) { frm_update_sequence[i].state = FRM_WDMA0_EOF; frm_update_sequence[i].mva = addr; MMProfileLogEx(MTKFB_MMP_Events.primary_seq_wdma0_efo, MMProfileFlagPulse, frm_update_sequence[i].mva, frm_update_sequence[i].seq); ///break; } } } else if(FRM_RDMA0_SOF == state) { for(i= 0; i< FRM_UPDATE_SEQ_CACHE_NUM; i++) { if(FRM_WDMA0_EOF == frm_update_sequence[i].state && device_type == DISP_SESSION_PRIMARY && frm_update_sequence[i].mva == addr) { frm_update_sequence[i].state = FRM_RDMA0_SOF; dprec_logger_frame_seq_end(device_type, frm_update_sequence[i].seq); dprec_logger_frame_seq_begin(DISP_SESSION_PRIMARY-1, frm_update_sequence[i].seq); MMProfileLogEx(MTKFB_MMP_Events.primary_seq_rdma0_sof, MMProfileFlagPulse, frm_update_sequence[i].mva, frm_update_sequence[i].seq); } } } else if(FRM_RDMA0_EOF == state) { for(i= 0; i< FRM_UPDATE_SEQ_CACHE_NUM; i++) { if(FRM_RDMA0_SOF == frm_update_sequence[i].state && device_type == DISP_SESSION_PRIMARY && frm_update_sequence[i].mva == addr) { frm_update_sequence[i].state = FRM_RDMA0_EOF; dprec_logger_frame_seq_end(DISP_SESSION_PRIMARY-1, frm_update_sequence[i].seq ); MMProfileLogEx(MTKFB_MMP_Events.primary_seq_rdma0_eof, MMProfileFlagPulse, frm_update_sequence[i].mva, frm_update_sequence[i].seq); } } } } else if(device_type == DISP_SESSION_MEMORY) { if(FRM_CONFIG == state) { frm_update_sequence_mem[frm_update_cnt_mem].state = state; frm_update_sequence_mem[frm_update_cnt_mem].session_type = device_type; frm_update_sequence_mem[frm_update_cnt_mem].mva= addr; frm_update_sequence_mem[frm_update_cnt_mem].max_offset= addr_offset; if(seq > 0) frm_update_sequence_mem[frm_update_cnt_mem].seq= seq; MMProfileLogEx(MTKFB_MMP_Events.external_seq_config, MMProfileFlagPulse, addr, seq); } else if(FRM_TRIGGER == state) { frm_update_sequence_mem[frm_update_cnt_mem].state = FRM_TRIGGER; MMProfileLogEx(MTKFB_MMP_Events.external_seq_trigger, MMProfileFlagPulse, addr, seq); dprec_logger_frame_seq_begin(device_type, frm_update_sequence_mem[frm_update_cnt_mem].seq); frm_update_cnt_mem++; frm_update_cnt_mem%=FRM_UPDATE_SEQ_CACHE_NUM; } else if(FRM_WDMA0_EOF == state) { for(i= 0; i< FRM_UPDATE_SEQ_CACHE_NUM; i++) { // if((absabs(addr -frm_update_sequence_mem[i].mva) <= frm_update_sequence_mem[i].max_offset) && (frm_update_sequence_mem[i].state == FRM_TRIGGER)) if(frm_update_sequence_mem[i].state == FRM_TRIGGER) { MMProfileLogEx(MTKFB_MMP_Events.external_seq_wdma0_efo, MMProfileFlagPulse, frm_update_sequence_mem[i].mva, frm_update_sequence_mem[i].seq); frm_update_sequence_mem[i].state = FRM_WDMA0_EOF; frm_update_sequence_mem[i].mva = addr; dprec_logger_frame_seq_end(device_type, frm_update_sequence_mem[i].seq); ///break; } } } } }