u8 is_pic_yuv = 0;
u8 ppixel_a = 0, global_a = 0;
ion_phys_addr_t phy_addr;
+ int ret = 0;
reg_win_data->reg_area_data[0].smem_start = -1;
reg_win_data->area_num = 0;
reg_win_data->area_num++;
reg_win_data->reg_area_data[i].ion_handle = hdl;
#ifndef CONFIG_ROCKCHIP_IOMMU
- ion_phys(rk_fb->ion_client, hdl, &phy_addr,
- &len);
+ ret = ion_phys(rk_fb->ion_client, hdl, &phy_addr,
+ &len);
#else
if (dev_drv->iommu_enabled)
- ion_map_iommu(dev_drv->dev,
- rk_fb->ion_client,
- hdl,
- (unsigned long *)&phy_addr,
- (unsigned long *)&len);
+ ret = ion_map_iommu(dev_drv->dev,
+ rk_fb->ion_client,
+ hdl,
+ (unsigned long *)&phy_addr,
+ (unsigned long *)&len);
else
- ion_phys(rk_fb->ion_client, hdl,
- &phy_addr, &len);
+ ret = ion_phys(rk_fb->ion_client, hdl,
+ &phy_addr, &len);
#endif
+ if (ret < 0) {
+ dev_err(fbi->dev, "ion map to get phy addr failed\n");
+ ion_free(rk_fb->ion_client, hdl);
+ return -ENOMEM;
+ }
reg_win_data->reg_area_data[i].smem_start = phy_addr;
reg_win_data->area_buf_num++;
reg_win_data->reg_area_data[i].index_buf = 1;
for (i = 0; i < dev_drv->lcdc_win_num; i++) {
if (win_data->win_par[i].win_id < dev_drv->lcdc_win_num) {
- rk_fb_set_win_buffer(info, &win_data->win_par[i],
- ®s->reg_win_data[j]);
+ if (rk_fb_set_win_buffer(info, &win_data->win_par[i],
+ ®s->reg_win_data[j]))
+ return -ENOMEM;
if (regs->reg_win_data[j].area_num > 0) {
regs->win_num++;
regs->buf_num +=
}
hdl = ion_import_dma_buf(rk_fb->ion_client, usr_fd);
- ion_map_iommu(dev_drv->dev, rk_fb->ion_client, hdl,
- (unsigned long *)&phy_addr, (unsigned long *)&len);
-
+ if (IS_ERR(hdl)) {
+ dev_err(info->dev, "failed to get ion handle:%ld\n",
+ PTR_ERR(hdl));
+ return -EFAULT;
+ }
+ ret = ion_map_iommu(dev_drv->dev, rk_fb->ion_client, hdl,
+ (unsigned long *)&phy_addr,
+ (unsigned long *)&len);
+ if (ret < 0) {
+ dev_err(info->dev, "ion map to get phy addr failed");
+ ion_free(rk_fb->ion_client, hdl);
+ return -ENOMEM;
+ }
fix->smem_start = phy_addr;
fix->mmio_start = phy_addr + offset;
struct ion_handle *handle;
ion_phys_addr_t phy_addr;
size_t len;
+ int ret = 0;
if (dev_drv->iommu_enabled)
handle = ion_alloc(rk_fb->ion_client, (size_t) fb_mem_size, 0,
fbi->screen_base = ion_map_kernel(rk_fb->ion_client, handle);
#ifdef CONFIG_ROCKCHIP_IOMMU
if (dev_drv->iommu_enabled)
- ion_map_iommu(dev_drv->dev, rk_fb->ion_client, handle,
- (unsigned long *)&phy_addr,
- (unsigned long *)&len);
+ ret = ion_map_iommu(dev_drv->dev, rk_fb->ion_client, handle,
+ (unsigned long *)&phy_addr,
+ (unsigned long *)&len);
else
- ion_phys(rk_fb->ion_client, handle, &phy_addr, &len);
+ ret = ion_phys(rk_fb->ion_client, handle, &phy_addr, &len);
#else
- ion_phys(rk_fb->ion_client, handle, &phy_addr, &len);
+ ret = ion_phys(rk_fb->ion_client, handle, &phy_addr, &len);
#endif
+ if (ret < 0) {
+ dev_err(fbi->dev, "ion map to get phy addr failed\n");
+ goto err_share_dma_buf;
+ }
fbi->fix.smem_start = phy_addr;
fbi->fix.smem_len = len;
printk(KERN_INFO "alloc_buffer:ion_phy_addr=0x%lx\n", phy_addr);