Exemple #1
0
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);
}
Exemple #2
0
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;
                }
            }
        }
    }

}