void ddp_mmp_wdma_layer(WDMA_CONFIG_STRUCT *wdma_layer,unsigned int wdma_num, unsigned int down_sample_x,unsigned int down_sample_y) { if(wdma_num > 1) { DDPERR("dprec_mmp_dump_wdma_layer is error %d\n",wdma_num); return; } MMP_MetaDataBitmap_t Bitmap; MMP_MetaData_t meta; int raw = 0; Bitmap.data1 = wdma_layer->dstAddress; Bitmap.width = wdma_layer->srcWidth; Bitmap.height = wdma_layer->srcHeight; switch (wdma_layer->outputFormat) { case eRGB565: case eBGR565: Bitmap.format = MMProfileBitmapRGB565; Bitmap.bpp = 16; break; case eRGB888: Bitmap.format = MMProfileBitmapRGB888; Bitmap.bpp = 24; break; case eBGRA8888: Bitmap.format = MMProfileBitmapBGRA8888; Bitmap.bpp = 32; break; case eBGR888: Bitmap.format = MMProfileBitmapBGR888; Bitmap.bpp = 24; break; case eRGBA8888: Bitmap.format = MMProfileBitmapRGBA8888; Bitmap.bpp = 32; break; default: DDPERR("dprec_mmp_dump_wdma_layer(), unknow fmt=%d, dump raw\n", wdma_layer->outputFormat); raw = 1; } if(!raw) { Bitmap.start_pos =0; Bitmap.pitch = wdma_layer->dstPitch; Bitmap.data_size = Bitmap.pitch * Bitmap.height; Bitmap.down_sample_x = down_sample_x; Bitmap.down_sample_y = down_sample_y; if (m4u_mva_map_kernel(wdma_layer->dstAddress, Bitmap.data_size,(unsigned long*)&Bitmap.pData, &Bitmap.data_size)==0) { MMProfileLogMetaBitmap(DDP_MMP_Events.wdma_dump[wdma_num], MMProfileFlagPulse, &Bitmap); m4u_mva_unmap_kernel(wdma_layer->dstAddress, Bitmap.data_size, (unsigned long)Bitmap.pData); } else { DDPERR("dprec_mmp_dump_wdma_layer(),fail to dump rgb(0x%x)\n", wdma_layer->outputFormat); } } else { meta.data_type = MMProfileMetaRaw; meta.size = wdma_layer->dstPitch * wdma_layer->srcHeight; if(m4u_mva_map_kernel(wdma_layer->dstAddress, meta.size, (unsigned long*)&meta.pData, &meta.size)==0) { MMProfileLogMeta(DDP_MMP_Events.wdma_dump[wdma_num], MMProfileFlagPulse, &meta); } else { DDPERR("dprec_mmp_dump_wdma_layer(),fail to dump raw(0x%x)\n", wdma_layer->outputFormat); } } return 0; }
void ddp_mmp_ovl_layer(OVL_CONFIG_STRUCT* pLayer,unsigned int down_sample_x,unsigned int down_sample_y,unsigned int session/*1:primary, 2:external, 3:memory*/) { MMP_MetaDataBitmap_t Bitmap; MMP_MetaData_t meta; int raw = 0; if(session == 1) MMProfileLogEx(DDP_MMP_Events.layer_dump_parent,MMProfileFlagStart, pLayer->layer, pLayer->layer_en); else if(session == 2) MMProfileLogEx(DDP_MMP_Events.Extd_layer_dump_parent,MMProfileFlagStart, pLayer->layer, pLayer->layer_en); if (pLayer->layer_en) { Bitmap.data1 = pLayer->vaddr; Bitmap.width = pLayer->dst_w; Bitmap.height = pLayer->dst_h; switch (pLayer->fmt) { case eRGB565: case eBGR565: Bitmap.format = MMProfileBitmapRGB565; Bitmap.bpp = 16; break; case eRGB888: Bitmap.format = MMProfileBitmapRGB888; Bitmap.bpp = 24; break; case eBGRA8888: Bitmap.format = MMProfileBitmapBGRA8888; Bitmap.bpp = 32; break; case eBGR888: Bitmap.format = MMProfileBitmapBGR888; Bitmap.bpp = 24; break; case eRGBA8888: Bitmap.format = MMProfileBitmapRGBA8888; Bitmap.bpp = 32; break; default: DDPERR("ddp_mmp_ovl_layer(), unknow fmt=%d, dump raw\n", pLayer->fmt); raw = 1; } if(!raw) { Bitmap.start_pos =0; Bitmap.pitch = pLayer->src_pitch; Bitmap.data_size = Bitmap.pitch * Bitmap.height; Bitmap.down_sample_x = down_sample_x; Bitmap.down_sample_y = down_sample_y; if (m4u_mva_map_kernel(pLayer->addr, Bitmap.data_size,(unsigned long*)&Bitmap.pData, &Bitmap.data_size)==0) { if(session == 1) MMProfileLogMetaBitmap(DDP_MMP_Events.layer_dump[pLayer->layer], MMProfileFlagPulse, &Bitmap); else if(session == 2) MMProfileLogMetaBitmap(DDP_MMP_Events.ovl1layer_dump[pLayer->layer], MMProfileFlagPulse, &Bitmap); m4u_mva_unmap_kernel(pLayer->addr, Bitmap.data_size, (unsigned long)Bitmap.pData); } else { DDPERR("ddp_mmp_ovl_layer(),fail to dump rgb(0x%x)\n", pLayer->fmt); } } else { meta.data_type = MMProfileMetaRaw; meta.size = pLayer->src_pitch * pLayer->src_h; if(m4u_mva_map_kernel(pLayer->addr, meta.size, (unsigned long*)&meta.pData, &meta.size)==0) { if(session == 1) MMProfileLogMeta(DDP_MMP_Events.layer_dump[pLayer->layer], MMProfileFlagPulse, &meta); else if(session == 2) MMProfileLogMeta(DDP_MMP_Events.ovl1layer_dump[pLayer->layer], MMProfileFlagPulse, &meta); m4u_mva_unmap_kernel(pLayer->addr, meta.size, (unsigned long)meta.pData); } else { DDPERR("ddp_mmp_ovl_layer(),fail to dump raw(0x%x)\n", pLayer->fmt); } } } if(session == 1) MMProfileLogEx(DDP_MMP_Events.layer_dump_parent,MMProfileFlagEnd, pLayer->fmt, pLayer->addr); else if(session == 2) MMProfileLogEx(DDP_MMP_Events.Extd_layer_dump_parent,MMProfileFlagEnd, pLayer->fmt, pLayer->addr); return ; }
static long fbconfig_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int ret = 0; void __user *argp = (void __user *)arg; DISP_DRV_WRAN("sxk=>run in fbconfig_ioctl**\n"); switch (cmd) { case LCM_GET_ID: { /* get_lcm_id() need implemented in lcm driver ... */ #if 0 LCM_DRIVER *lcm = lcm_drv; unsigned int lcm_id = lcm->get_lcm_id(); #else unsigned int lcm_id = 0; #endif return copy_to_user(argp, &lcm_id, sizeof(lcm_id)) ? -EFAULT : 0; } case LCM_GET_DSI_CONTINU: { int ret; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(10); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_CONTINU:%d\n", ret); return copy_to_user(argp, &ret, sizeof(ret)) ? -EFAULT : 0; } case LCM_TEST_DSI_CLK: { LCM_TYPE_FB lcm_fb; lcm_fb.clock = lcm_params->dsi.PLL_CLOCK; lcm_fb.lcm_type = lcm_params->dsi.mode; DISP_DRV_WRAN("fbconfig=>LCM_TEST_DSI_CLK:%d\n", ret); return copy_to_user(argp, &lcm_fb, sizeof(lcm_fb)) ? -EFAULT : 0; } case LCM_GET_DSI_CLK: { int ret; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(11); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_CLK:%d\n", ret); return copy_to_user(argp, &ret, sizeof(ret)) ? -EFAULT : 0; } case LCM_GET_DSI_CLK_V2: { unsigned int ret = 0; MIPI_CLK_V2 clock_v2; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(11); clock_v2.div1 = ret & 0x00000600; clock_v2.div2 = ret & 0x00000180; clock_v2.fbk_div = ret & 0x0000007F; return copy_to_user(argp, &clock_v2, sizeof(clock_v2)) ? -EFAULT : 0; } case LCM_GET_DSI_SSC: { int ret; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(9); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_SSC:%d\n", ret); return copy_to_user(argp, &ret, sizeof(ret)) ? -EFAULT : 0; } case LCM_GET_DSI_LANE_NUM: { int ret; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(12); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_LANE_NUM:%d\n", ret); return copy_to_user(argp, &ret, sizeof(ret)) ? -EFAULT : 0; } case LCM_GET_DSI_TE: { int ret; if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(13); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_TE:%d\n", ret); return copy_to_user(argp, &ret, sizeof(ret)) ? -EFAULT : 0; } case LCM_GET_DSI_TIMING: { int ret = 0; MIPI_TIMING timing; if (copy_from_user(&timing, (void __user *)argp, sizeof(timing))) { DISP_DRV_WRAN("[MIPI_SET_TIMING]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } if (fbconfig_if_drv->set_spread_frequency) ret = fbconfig_if_drv->set_spread_frequency(100 + timing.type); DISP_DRV_WRAN("fbconfig=>LCM_GET_DSI_TIMING:%d\n", ret); timing.value = ret; return copy_to_user(argp, &timing, sizeof(timing)) ? -EFAULT : 0; } case DRIVER_IC_CONFIG: { DISP_DRV_WRAN("sxk=>run in case:DRIVER_IC_CONFIG**\n"); if (record_list_initialed == 0) { record_list_init(); if (copy_from_user(record_head, (void __user *)arg, sizeof(CONFIG_RECORD))) { DISP_DRV_WRAN("sxk=>copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } #if 0 print_record(record_head); #endif record_list_initialed = 1; } else { if (copy_from_user(record_tmp, (void __user *)arg, sizeof(CONFIG_RECORD))) { DISP_DRV_WRAN("[DRIVER_IC_CONFIG]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } #if 0 /* FBCONFIG_DEBUG */ DISP_DRV_WRAN("sxk=>will print before add to list\n"); print_record(record_tmp); #endif record_list_add(); /* add new node to list ; */ } return 0; } case MIPI_SET_CLK: { unsigned int clk; if (copy_from_user(&clk, (void __user *)argp, sizeof(clk))) { DISP_DRV_WRAN("[MIPI_SET_CLK]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { fbconfig_disp_set_mipi_clk(clk); } return 0; } case MIPI_SET_CLK_V2: { MIPI_CLK_V2 clk; if (copy_from_user(&clk, (void __user *)argp, sizeof(clk))) { DISP_DRV_WRAN("[MIPI_SET_CLK]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { unsigned int clk_v2 = 0; /* div1_2bits div2_2bits fbk_div_7bits */ clk_v2 = (clk.div1 << 9) | (clk.div2 << 7) | clk.fbk_div; fbconfig_disp_set_mipi_clk(clk_v2); } return 0; } case MIPI_SET_SSC: { unsigned int ssc; DISP_DRV_WRAN("sxk=>debug.c call set mipi ssc line:%d\n", __LINE__); if (copy_from_user(&ssc, (void __user *)argp, sizeof(ssc))) { DISP_DRV_WRAN("[MIPI_SET_SSC]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { DISP_DRV_WRAN("sxk=>debug.c call set mipi ssc line:%d\n", __LINE__); fbconfig_disp_set_mipi_ssc(ssc); } return 0; } case MIPI_SET_LANE: { unsigned int lane_num; if (copy_from_user(&lane_num, (void __user *)argp, sizeof(lane_num))) { DISP_DRV_WRAN("[MIPI_SET_LANE]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { fbconfig_disp_set_mipi_lane_num(lane_num); } return 0; } case MIPI_SET_TIMING: { if (!is_early_suspended) { MIPI_TIMING timing; if (copy_from_user(&timing, (void __user *)argp, sizeof(timing))) { DISP_DRV_WRAN("[MIPI_SET_TIMING]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { fbconfig_disp_set_mipi_timing(timing); } return 0; } else return -EFAULT; } case TE_SET_ENABLE: { char enable; if (copy_from_user(&enable, (void __user *)argp, sizeof(enable))) { DISP_DRV_WRAN("[TE_SET_ENABLE]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { if (fbconfig_if_drv->set_te_enable) fbconfig_if_drv->set_te_enable(enable); } return 0; } case FB_LAYER_GET_EN: { FBCONFIG_LAYER_INFO layers; fbconfig_get_layer_info(&layers); return copy_to_user(argp, &layers, sizeof(layers)) ? -EFAULT : 0; } case FB_LAYER_GET_SIZE: { LAYER_H_SIZE tmp; int layer_size, enable, height, fmt; if (copy_from_user(&tmp, (void __user *)argp, sizeof(LAYER_H_SIZE))) { DISP_DRV_WRAN("[TE_SET_ENABLE]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } global_layer_id = tmp.height; DISP_DRV_WRAN("sxk==>global_layer_id is %d\n", global_layer_id); fbconfig_get_layer_height(global_layer_id, &layer_size, &enable, &height, &fmt); if ((layer_size == 0) || (enable == 0) || (height == 0)) return -2; else { tmp.height = height; tmp.layer_size = layer_size; tmp.fmt = DP_COLOR_BITS_PER_PIXEL(fmt); return copy_to_user(argp, &tmp, sizeof(tmp)) ? -EFAULT : 0; } } case FB_LAYER_DUMP: { int layer_size, enable; int ret = 0; unsigned int kva = 0; unsigned int mapped_size = 0; unsigned int mva = fbconfig_get_layer_vaddr(global_layer_id, &layer_size, &enable); if ((layer_size != 0) && (enable != 0)) { DISP_DRV_WRAN("sxk==>FB_LAYER_DUMP==>layer_size is %d mva is 0x%x\n", layer_size, mva); m4u_mva_map_kernel(mva, layer_size, 0, &kva, &mapped_size); DISP_DRV_WRAN("sxk==> addr from user space is 0x%x\n", (unsigned int)argp); DISP_DRV_WRAN("sxk==> kva is 0x%x mmaped size is %d\n", kva, mapped_size); ret = copy_to_user(argp, (void *)kva, mapped_size) ? -EFAULT : 0; m4u_mva_unmap_kernel(mva, mapped_size, kva); return ret; } else return -2; } case MIPI_SET_CC: { int enable; if (copy_from_user(&enable, (void __user *)argp, sizeof(enable))) { DISP_DRV_WRAN("[MIPI_SET_CC]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } else { if (fbconfig_if_drv->set_continuous_clock) fbconfig_if_drv->set_continuous_clock(enable); } return 0; } case LCM_GET_ESD: { ESD_PARA esd_para; int i = 0; if (copy_from_user(&esd_para, (void __user *)arg, sizeof(esd_para))) { DISP_DRV_WRAN("[LCM_GET_ESD]: copy_from_user failed! line:%d\n", __LINE__); return -EFAULT; } esd_check_addr = esd_para.addr; esd_check_para_num = esd_para.para_num; ret = fbconfig_get_esd_check(); if ((ret != 0) && (esd_check_buffer != NULL)) { kfree(esd_check_buffer); return -2; } else { for (i = 0; i < esd_check_para_num + 6; i++) DISP_DRV_WRAN("sxk=>%s, esd_check_buffer[%d]=0x%x\n", __func__, i, esd_check_buffer[i]); return 0; } } case LCM_GET_ESD_RET: { ret = (copy_to_user(argp, (void *)esd_check_buffer, sizeof(char) * (esd_check_para_num + 6)) ? -EFAULT : 0); if (esd_check_buffer != NULL) { kfree(esd_check_buffer); esd_check_buffer = NULL; } return ret; } case DRIVER_IC_RESET: { fbconfig_reset_lcm_setting(); fbconfig_free_backup_setting(); return 0; } default: return ret; } }
int disphal_dma_unmap_kernel(unsigned int dma_pa, unsigned int size, unsigned int kva) { m4u_mva_unmap_kernel(dma_pa, size, kva); return 0; }
void _debug_pattern(unsigned int mva, unsigned int va, unsigned int w, unsigned int h, unsigned int linepitch, unsigned int color, unsigned int layerid, unsigned int bufidx) { if(g_display_debug_pattern_index == 0) return; unsigned int addr = 0; unsigned int layer_size = 0; unsigned int mapped_size = 0; unsigned int bcolor = 0xff808080; if(layerid == 0) bcolor = 0x0000ffff; else if(layerid == 1) bcolor = 0x00ff00ff; else if(layerid == 2) bcolor = 0xff0000ff; else if(layerid == 3) bcolor = 0xffff00ff; if(va) { addr = va; } else { layer_size = linepitch*h; m4u_mva_map_kernel(mva, layer_size,&addr, &mapped_size); if(mapped_size == 0) { DISPERR("m4u_mva_map_kernel failed\n"); return; } } switch(g_display_debug_pattern_index) { case 1: { unsigned int resize_factor = layerid+1; _draw_rect(addr, w/10*resize_factor+0, h/10*resize_factor+0, w/10*(10-resize_factor)-0, h/10*(10-resize_factor)-0, linepitch, bcolor); _draw_rect(addr, w/10*resize_factor+1, h/10*resize_factor+1, w/10*(10-resize_factor)-1, h/10*(10-resize_factor)-1, linepitch, bcolor); _draw_rect(addr, w/10*resize_factor+2, h/10*resize_factor+2, w/10*(10-resize_factor)-2, h/10*(10-resize_factor)-2, linepitch, bcolor); _draw_rect(addr, w/10*resize_factor+3, h/10*resize_factor+3, w/10*(10-resize_factor)-3, h/10*(10-resize_factor)-3, linepitch, bcolor); break; } case 2: { int x = 0; int y = 0; int bw = 20; int bh = 20; _draw_block(addr, bufidx%(w/bw)*bw, bufidx%(w*h/bh/bh)/(w/bh)*bh, bw, bh, linepitch, bcolor); break; } } #ifndef CONFIG_MTK_FPGA //smp_inner_dcache_flush_all(); //outer_flush_all();//remove in early porting #endif if(mapped_size) { m4u_mva_unmap_kernel(addr, layer_size, addr); } return; }