Lines Matching refs:vpdma
278 static u32 read_reg(struct vpdma_data *vpdma, int offset) in read_reg() argument
280 return ioread32(vpdma->base + offset); in read_reg()
283 static void write_reg(struct vpdma_data *vpdma, int offset, u32 value) in write_reg() argument
285 iowrite32(value, vpdma->base + offset); in write_reg()
288 static int read_field_reg(struct vpdma_data *vpdma, int offset, in read_field_reg() argument
291 return (read_reg(vpdma, offset) & (mask << shift)) >> shift; in read_field_reg()
294 static void write_field_reg(struct vpdma_data *vpdma, int offset, u32 field, in write_field_reg() argument
297 u32 val = read_reg(vpdma, offset); in write_field_reg()
302 write_reg(vpdma, offset, val); in write_field_reg()
305 void vpdma_dump_regs(struct vpdma_data *vpdma) in vpdma_dump_regs() argument
307 struct device *dev = &vpdma->pdev->dev; in vpdma_dump_regs()
309 #define DUMPREG(r) dev_dbg(dev, "%-35s %08x\n", #r, read_reg(vpdma, VPDMA_##r)) in vpdma_dump_regs()
387 int vpdma_map_desc_buf(struct vpdma_data *vpdma, struct vpdma_buf *buf) in vpdma_map_desc_buf() argument
389 struct device *dev = &vpdma->pdev->dev; in vpdma_map_desc_buf()
409 void vpdma_unmap_desc_buf(struct vpdma_data *vpdma, struct vpdma_buf *buf) in vpdma_unmap_desc_buf() argument
411 struct device *dev = &vpdma->pdev->dev; in vpdma_unmap_desc_buf()
428 int vpdma_list_cleanup(struct vpdma_data *vpdma, int list_num, in vpdma_list_cleanup() argument
434 write_reg(vpdma, VPDMA_LIST_ATTR, in vpdma_list_cleanup()
449 ret = vpdma_map_desc_buf(vpdma, &abort_list.buf); in vpdma_list_cleanup()
452 ret = vpdma_submit_descs(vpdma, &abort_list, list_num); in vpdma_list_cleanup()
456 while (vpdma_list_busy(vpdma, list_num) && --timeout) in vpdma_list_cleanup()
460 dev_err(&vpdma->pdev->dev, "Timed out cleaning up VPDMA list\n"); in vpdma_list_cleanup()
464 vpdma_unmap_desc_buf(vpdma, &abort_list.buf); in vpdma_list_cleanup()
515 bool vpdma_list_busy(struct vpdma_data *vpdma, int list_num) in vpdma_list_busy() argument
517 return read_reg(vpdma, VPDMA_LIST_STAT_SYNC) & BIT(list_num + 16); in vpdma_list_busy()
524 int vpdma_submit_descs(struct vpdma_data *vpdma, in vpdma_submit_descs() argument
530 if (vpdma_list_busy(vpdma, list_num)) in vpdma_submit_descs()
536 spin_lock_irqsave(&vpdma->lock, flags); in vpdma_submit_descs()
537 write_reg(vpdma, VPDMA_LIST_ADDR, (u32) list->buf.dma_addr); in vpdma_submit_descs()
539 write_reg(vpdma, VPDMA_LIST_ATTR, in vpdma_submit_descs()
543 spin_unlock_irqrestore(&vpdma->lock, flags); in vpdma_submit_descs()
551 void vpdma_update_dma_addr(struct vpdma_data *vpdma, in vpdma_update_dma_addr() argument
560 vpdma_unmap_desc_buf(vpdma, &list->buf); in vpdma_update_dma_addr()
577 vpdma_map_desc_buf(vpdma, &list->buf); in vpdma_update_dma_addr()
583 void vpdma_set_max_size(struct vpdma_data *vpdma, int reg_addr, in vpdma_set_max_size() argument
590 write_field_reg(vpdma, reg_addr, width - 1, in vpdma_set_max_size()
593 write_field_reg(vpdma, reg_addr, height - 1, in vpdma_set_max_size()
933 int vpdma_hwlist_alloc(struct vpdma_data *vpdma, void *priv) in vpdma_hwlist_alloc() argument
938 spin_lock_irqsave(&vpdma->lock, flags); in vpdma_hwlist_alloc()
940 vpdma->hwlist_used[i] == true; i++) in vpdma_hwlist_alloc()
945 vpdma->hwlist_used[i] = true; in vpdma_hwlist_alloc()
946 vpdma->hwlist_priv[i] = priv; in vpdma_hwlist_alloc()
948 spin_unlock_irqrestore(&vpdma->lock, flags); in vpdma_hwlist_alloc()
954 void *vpdma_hwlist_get_priv(struct vpdma_data *vpdma, int list_num) in vpdma_hwlist_get_priv() argument
956 if (!vpdma || list_num >= VPDMA_MAX_NUM_LIST) in vpdma_hwlist_get_priv()
959 return vpdma->hwlist_priv[list_num]; in vpdma_hwlist_get_priv()
963 void *vpdma_hwlist_release(struct vpdma_data *vpdma, int list_num) in vpdma_hwlist_release() argument
968 spin_lock_irqsave(&vpdma->lock, flags); in vpdma_hwlist_release()
969 vpdma->hwlist_used[list_num] = false; in vpdma_hwlist_release()
970 priv = vpdma->hwlist_priv; in vpdma_hwlist_release()
971 spin_unlock_irqrestore(&vpdma->lock, flags); in vpdma_hwlist_release()
978 void vpdma_enable_list_complete_irq(struct vpdma_data *vpdma, int irq_num, in vpdma_enable_list_complete_irq() argument
984 val = read_reg(vpdma, reg_addr); in vpdma_enable_list_complete_irq()
989 write_reg(vpdma, reg_addr, val); in vpdma_enable_list_complete_irq()
994 unsigned int vpdma_get_list_stat(struct vpdma_data *vpdma, int irq_num) in vpdma_get_list_stat() argument
998 return read_reg(vpdma, reg_addr); in vpdma_get_list_stat()
1003 unsigned int vpdma_get_list_mask(struct vpdma_data *vpdma, int irq_num) in vpdma_get_list_mask() argument
1007 return read_reg(vpdma, reg_addr); in vpdma_get_list_mask()
1012 void vpdma_clear_list_stat(struct vpdma_data *vpdma, int irq_num, in vpdma_clear_list_stat() argument
1017 write_reg(vpdma, reg_addr, 3 << (list_num * 2)); in vpdma_clear_list_stat()
1021 void vpdma_set_bg_color(struct vpdma_data *vpdma, in vpdma_set_bg_color() argument
1025 write_reg(vpdma, VPDMA_BG_RGB, color); in vpdma_set_bg_color()
1027 write_reg(vpdma, VPDMA_BG_YUV, color); in vpdma_set_bg_color()
1036 void vpdma_set_line_mode(struct vpdma_data *vpdma, int line_mode, in vpdma_set_line_mode() argument
1041 write_field_reg(vpdma, client_cstat, line_mode, in vpdma_set_line_mode()
1050 void vpdma_set_frame_start_event(struct vpdma_data *vpdma, in vpdma_set_frame_start_event() argument
1056 write_field_reg(vpdma, client_cstat, fs_event, in vpdma_set_frame_start_event()
1063 struct vpdma_data *vpdma = context; in vpdma_firmware_cb() local
1067 dev_dbg(&vpdma->pdev->dev, "firmware callback\n"); in vpdma_firmware_cb()
1070 dev_err(&vpdma->pdev->dev, "couldn't get firmware\n"); in vpdma_firmware_cb()
1075 if (read_field_reg(vpdma, VPDMA_LIST_ATTR, VPDMA_LIST_RDY_MASK, in vpdma_firmware_cb()
1077 vpdma->cb(vpdma->pdev); in vpdma_firmware_cb()
1083 dev_err(&vpdma->pdev->dev, in vpdma_firmware_cb()
1090 vpdma_map_desc_buf(vpdma, &fw_dma_buf); in vpdma_firmware_cb()
1092 write_reg(vpdma, VPDMA_LIST_ADDR, (u32) fw_dma_buf.dma_addr); in vpdma_firmware_cb()
1097 if (read_field_reg(vpdma, VPDMA_LIST_ATTR, VPDMA_LIST_RDY_MASK, in vpdma_firmware_cb()
1103 dev_err(&vpdma->pdev->dev, "firmware upload failed\n"); in vpdma_firmware_cb()
1107 vpdma->cb(vpdma->pdev); in vpdma_firmware_cb()
1110 vpdma_unmap_desc_buf(vpdma, &fw_dma_buf); in vpdma_firmware_cb()
1117 static int vpdma_load_firmware(struct vpdma_data *vpdma) in vpdma_load_firmware() argument
1120 struct device *dev = &vpdma->pdev->dev; in vpdma_load_firmware()
1123 (const char *) VPDMA_FIRMWARE, dev, GFP_KERNEL, vpdma, in vpdma_load_firmware()
1135 int vpdma_create(struct platform_device *pdev, struct vpdma_data *vpdma, in vpdma_create() argument
1143 vpdma->pdev = pdev; in vpdma_create()
1144 vpdma->cb = cb; in vpdma_create()
1145 spin_lock_init(&vpdma->lock); in vpdma_create()
1153 vpdma->base = devm_ioremap(&pdev->dev, res->start, resource_size(res)); in vpdma_create()
1154 if (!vpdma->base) { in vpdma_create()
1159 r = vpdma_load_firmware(vpdma); in vpdma_create()