Lines Matching refs:cursor

77 static void sti_cursor_argb8888_to_clut8(struct sti_cursor *cursor, u32 *src)  in sti_cursor_argb8888_to_clut8()  argument
79 u8 *dst = cursor->pixmap.base; in sti_cursor_argb8888_to_clut8()
83 for (i = 0; i < cursor->height; i++) { in sti_cursor_argb8888_to_clut8()
84 for (j = 0; j < cursor->width; j++) { in sti_cursor_argb8888_to_clut8()
97 static void sti_cursor_init(struct sti_cursor *cursor) in sti_cursor_init() argument
99 unsigned short *base = cursor->clut; in sti_cursor_init()
118 struct sti_cursor *cursor = to_sti_cursor(plane); in sti_cursor_atomic_update() local
140 dev_dbg(cursor->dev, "%s %s\n", __func__, in sti_cursor_atomic_update()
153 if (!cursor->pixmap.base || in sti_cursor_atomic_update()
154 (cursor->width != src_w) || in sti_cursor_atomic_update()
155 (cursor->height != src_h)) { in sti_cursor_atomic_update()
156 cursor->width = src_w; in sti_cursor_atomic_update()
157 cursor->height = src_h; in sti_cursor_atomic_update()
159 if (cursor->pixmap.base) in sti_cursor_atomic_update()
160 dma_free_writecombine(cursor->dev, in sti_cursor_atomic_update()
161 cursor->pixmap.size, in sti_cursor_atomic_update()
162 cursor->pixmap.base, in sti_cursor_atomic_update()
163 cursor->pixmap.paddr); in sti_cursor_atomic_update()
165 cursor->pixmap.size = cursor->width * cursor->height; in sti_cursor_atomic_update()
167 cursor->pixmap.base = dma_alloc_writecombine(cursor->dev, in sti_cursor_atomic_update()
168 cursor->pixmap.size, in sti_cursor_atomic_update()
169 &cursor->pixmap.paddr, in sti_cursor_atomic_update()
171 if (!cursor->pixmap.base) { in sti_cursor_atomic_update()
184 sti_cursor_argb8888_to_clut8(cursor, (u32 *)cma_obj->vaddr); in sti_cursor_atomic_update()
190 writel(val, cursor->regs + CUR_AWS); in sti_cursor_atomic_update()
194 writel(val, cursor->regs + CUR_AWE); in sti_cursor_atomic_update()
198 writel(cursor->clut_paddr, cursor->regs + CUR_CML); in sti_cursor_atomic_update()
199 writel(CUR_CTL_CLUT_UPDATE, cursor->regs + CUR_CTL); in sti_cursor_atomic_update()
203 writel(cursor->pixmap.paddr, cursor->regs + CUR_PML); in sti_cursor_atomic_update()
204 writel(cursor->width, cursor->regs + CUR_PMP); in sti_cursor_atomic_update()
205 writel(cursor->height << 16 | cursor->width, cursor->regs + CUR_SIZE); in sti_cursor_atomic_update()
209 writel((y << 16) | x, cursor->regs + CUR_VPO); in sti_cursor_atomic_update()
243 struct sti_cursor *cursor; in sti_cursor_create() local
247 cursor = devm_kzalloc(dev, sizeof(*cursor), GFP_KERNEL); in sti_cursor_create()
248 if (!cursor) { in sti_cursor_create()
255 cursor->clut = dma_alloc_writecombine(dev, size, &cursor->clut_paddr, in sti_cursor_create()
258 if (!cursor->clut) { in sti_cursor_create()
263 cursor->dev = dev; in sti_cursor_create()
264 cursor->regs = baseaddr; in sti_cursor_create()
265 cursor->plane.desc = desc; in sti_cursor_create()
266 cursor->plane.status = STI_PLANE_DISABLED; in sti_cursor_create()
268 sti_cursor_init(cursor); in sti_cursor_create()
270 res = drm_universal_plane_init(drm_dev, &cursor->plane.drm_plane, in sti_cursor_create()
281 drm_plane_helper_add(&cursor->plane.drm_plane, in sti_cursor_create()
284 sti_plane_init_property(&cursor->plane, DRM_PLANE_TYPE_CURSOR); in sti_cursor_create()
286 return &cursor->plane.drm_plane; in sti_cursor_create()
289 dma_free_writecombine(dev, size, cursor->clut, cursor->clut_paddr); in sti_cursor_create()
291 devm_kfree(dev, cursor); in sti_cursor_create()