Lines Matching refs:priv

79 		QPRINT(priv, KERN_DEBUG, msg);		\
87 QPRINT(priv, KERN_ERR, msg); \
116 gc_readl(struct pxa3xx_gcu_priv *priv, unsigned int off) in gc_readl() argument
118 return __raw_readl(priv->mmio_base + off); in gc_readl()
122 gc_writel(struct pxa3xx_gcu_priv *priv, unsigned int off, unsigned long val) in gc_writel() argument
124 __raw_writel(val, priv->mmio_base + off); in gc_writel()
127 #define QPRINT(priv, level, msg) \ argument
130 struct pxa3xx_gcu_shared *shared = priv->shared; \
131 u32 base = gc_readl(priv, REG_GCRBBR); \
139 tv.tv_sec - priv->base_time.tv_sec, \
143 gc_readl(priv, REG_GCISCR), \
144 gc_readl(priv, REG_GCRBBR), \
145 gc_readl(priv, REG_GCRBLR), \
146 (gc_readl(priv, REG_GCRBEXHR) - base) / 4, \
147 (gc_readl(priv, REG_GCRBHR) - base) / 4, \
148 (gc_readl(priv, REG_GCRBTR) - base) / 4); \
152 pxa3xx_gcu_reset(struct pxa3xx_gcu_priv *priv) in pxa3xx_gcu_reset() argument
157 gc_writel(priv, REG_GCIECR, 0); in pxa3xx_gcu_reset()
160 gc_writel(priv, REG_GCCR, GCCR_ABORT); in pxa3xx_gcu_reset()
161 gc_writel(priv, REG_GCCR, 0); in pxa3xx_gcu_reset()
163 memset(priv->shared, 0, SHARED_SIZE); in pxa3xx_gcu_reset()
164 priv->shared->buffer_phys = priv->shared_phys; in pxa3xx_gcu_reset()
165 priv->shared->magic = PXA3XX_GCU_SHARED_MAGIC; in pxa3xx_gcu_reset()
167 do_gettimeofday(&priv->base_time); in pxa3xx_gcu_reset()
170 gc_writel(priv, REG_GCRBLR, 0); in pxa3xx_gcu_reset()
171 gc_writel(priv, REG_GCRBBR, priv->shared_phys); in pxa3xx_gcu_reset()
172 gc_writel(priv, REG_GCRBTR, priv->shared_phys); in pxa3xx_gcu_reset()
175 gc_writel(priv, REG_GCIECR, IE_ALL & ~IE_EOB); in pxa3xx_gcu_reset()
179 dump_whole_state(struct pxa3xx_gcu_priv *priv) in dump_whole_state() argument
181 struct pxa3xx_gcu_shared *sh = priv->shared; in dump_whole_state()
182 u32 base = gc_readl(priv, REG_GCRBBR); in dump_whole_state()
189 gc_readl(priv, REG_GCISCR), in dump_whole_state()
190 gc_readl(priv, REG_GCRBBR), in dump_whole_state()
191 gc_readl(priv, REG_GCRBLR), in dump_whole_state()
192 (gc_readl(priv, REG_GCRBEXHR) - base) / 4, in dump_whole_state()
193 (gc_readl(priv, REG_GCRBHR) - base) / 4, in dump_whole_state()
194 (gc_readl(priv, REG_GCRBTR) - base) / 4); in dump_whole_state()
198 flush_running(struct pxa3xx_gcu_priv *priv) in flush_running() argument
200 struct pxa3xx_gcu_batch *running = priv->running; in flush_running()
205 running->next = priv->free; in flush_running()
206 priv->free = running; in flush_running()
210 priv->running = NULL; in flush_running()
214 run_ready(struct pxa3xx_gcu_priv *priv) in run_ready() argument
217 struct pxa3xx_gcu_shared *shared = priv->shared; in run_ready()
218 struct pxa3xx_gcu_batch *ready = priv->ready; in run_ready()
233 priv->running = priv->ready; in run_ready()
234 priv->ready = priv->ready_last = NULL; in run_ready()
235 gc_writel(priv, REG_GCRBLR, 0); in run_ready()
239 gc_writel(priv, REG_GCRBBR, shared->buffer_phys); in run_ready()
242 gc_writel(priv, REG_GCRBTR, shared->buffer_phys + num * 4); in run_ready()
245 gc_writel(priv, REG_GCRBLR, ((num + 63) & ~63) * 4); in run_ready()
251 struct pxa3xx_gcu_priv *priv = ctx; in pxa3xx_gcu_handle_irq() local
252 struct pxa3xx_gcu_shared *shared = priv->shared; in pxa3xx_gcu_handle_irq()
253 u32 status = gc_readl(priv, REG_GCISCR) & IE_ALL; in pxa3xx_gcu_handle_irq()
260 spin_lock(&priv->spinlock); in pxa3xx_gcu_handle_irq()
266 flush_running(priv); in pxa3xx_gcu_handle_irq()
267 wake_up_all(&priv->wait_free); in pxa3xx_gcu_handle_irq()
269 if (priv->ready) { in pxa3xx_gcu_handle_irq()
270 run_ready(priv); in pxa3xx_gcu_handle_irq()
281 gc_writel(priv, REG_GCRBLR, 0); in pxa3xx_gcu_handle_irq()
283 wake_up_all(&priv->wait_idle); in pxa3xx_gcu_handle_irq()
289 dump_whole_state(priv); in pxa3xx_gcu_handle_irq()
293 gc_writel(priv, REG_GCISCR, status); in pxa3xx_gcu_handle_irq()
294 spin_unlock(&priv->spinlock); in pxa3xx_gcu_handle_irq()
300 pxa3xx_gcu_wait_idle(struct pxa3xx_gcu_priv *priv) in pxa3xx_gcu_wait_idle() argument
308 priv->shared->num_wait_idle++; in pxa3xx_gcu_wait_idle()
310 while (priv->shared->hw_running) { in pxa3xx_gcu_wait_idle()
311 int num = priv->shared->num_interrupts; in pxa3xx_gcu_wait_idle()
312 u32 rbexhr = gc_readl(priv, REG_GCRBEXHR); in pxa3xx_gcu_wait_idle()
314 ret = wait_event_interruptible_timeout(priv->wait_idle, in pxa3xx_gcu_wait_idle()
315 !priv->shared->hw_running, HZ*4); in pxa3xx_gcu_wait_idle()
320 if (gc_readl(priv, REG_GCRBEXHR) == rbexhr && in pxa3xx_gcu_wait_idle()
321 priv->shared->num_interrupts == num) { in pxa3xx_gcu_wait_idle()
334 pxa3xx_gcu_wait_free(struct pxa3xx_gcu_priv *priv) in pxa3xx_gcu_wait_free() argument
342 priv->shared->num_wait_free++; in pxa3xx_gcu_wait_free()
344 while (!priv->free) { in pxa3xx_gcu_wait_free()
345 u32 rbexhr = gc_readl(priv, REG_GCRBEXHR); in pxa3xx_gcu_wait_free()
347 ret = wait_event_interruptible_timeout(priv->wait_free, in pxa3xx_gcu_wait_free()
348 priv->free, HZ*4); in pxa3xx_gcu_wait_free()
356 if (gc_readl(priv, REG_GCRBEXHR) == rbexhr) { in pxa3xx_gcu_wait_free()
392 struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file); in pxa3xx_gcu_write() local
398 priv->shared->num_writes++; in pxa3xx_gcu_write()
399 priv->shared->num_words += words; in pxa3xx_gcu_write()
406 if (!priv->free) { in pxa3xx_gcu_write()
407 ret = pxa3xx_gcu_wait_free(priv); in pxa3xx_gcu_write()
415 spin_lock_irqsave(&priv->spinlock, flags); in pxa3xx_gcu_write()
416 buffer = priv->free; in pxa3xx_gcu_write()
417 priv->free = buffer->next; in pxa3xx_gcu_write()
418 spin_unlock_irqrestore(&priv->spinlock, flags); in pxa3xx_gcu_write()
424 spin_lock_irqsave(&priv->spinlock, flags); in pxa3xx_gcu_write()
425 buffer->next = priv->free; in pxa3xx_gcu_write()
426 priv->free = buffer; in pxa3xx_gcu_write()
427 spin_unlock_irqrestore(&priv->spinlock, flags); in pxa3xx_gcu_write()
439 spin_lock_irqsave(&priv->spinlock, flags); in pxa3xx_gcu_write()
443 if (priv->ready) { in pxa3xx_gcu_write()
444 BUG_ON(priv->ready_last == NULL); in pxa3xx_gcu_write()
446 priv->ready_last->next = buffer; in pxa3xx_gcu_write()
448 priv->ready = buffer; in pxa3xx_gcu_write()
450 priv->ready_last = buffer; in pxa3xx_gcu_write()
452 if (!priv->shared->hw_running) in pxa3xx_gcu_write()
453 run_ready(priv); in pxa3xx_gcu_write()
455 spin_unlock_irqrestore(&priv->spinlock, flags); in pxa3xx_gcu_write()
465 struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file); in pxa3xx_gcu_ioctl() local
469 spin_lock_irqsave(&priv->spinlock, flags); in pxa3xx_gcu_ioctl()
470 pxa3xx_gcu_reset(priv); in pxa3xx_gcu_ioctl()
471 spin_unlock_irqrestore(&priv->spinlock, flags); in pxa3xx_gcu_ioctl()
475 return pxa3xx_gcu_wait_idle(priv); in pxa3xx_gcu_ioctl()
485 struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file); in pxa3xx_gcu_mmap() local
494 priv->shared, priv->shared_phys, size); in pxa3xx_gcu_mmap()
499 if (size != resource_size(priv->resource_mem)) in pxa3xx_gcu_mmap()
505 priv->resource_mem->start >> PAGE_SHIFT, in pxa3xx_gcu_mmap()
518 struct pxa3xx_gcu_priv *priv = (struct pxa3xx_gcu_priv *) ptr; in pxa3xx_gcu_debug_timedout() local
541 struct pxa3xx_gcu_priv *priv) in pxa3xx_gcu_add_buffer() argument
556 buffer->next = priv->free; in pxa3xx_gcu_add_buffer()
557 priv->free = buffer; in pxa3xx_gcu_add_buffer()
564 struct pxa3xx_gcu_priv *priv) in pxa3xx_gcu_free_buffers() argument
566 struct pxa3xx_gcu_batch *next, *buffer = priv->free; in pxa3xx_gcu_free_buffers()
578 priv->free = NULL; in pxa3xx_gcu_free_buffers()
593 struct pxa3xx_gcu_priv *priv; in pxa3xx_gcu_probe() local
596 priv = devm_kzalloc(dev, sizeof(struct pxa3xx_gcu_priv), GFP_KERNEL); in pxa3xx_gcu_probe()
597 if (!priv) in pxa3xx_gcu_probe()
600 init_waitqueue_head(&priv->wait_idle); in pxa3xx_gcu_probe()
601 init_waitqueue_head(&priv->wait_free); in pxa3xx_gcu_probe()
602 spin_lock_init(&priv->spinlock); in pxa3xx_gcu_probe()
609 priv->misc_dev.minor = MISCDEV_MINOR, in pxa3xx_gcu_probe()
610 priv->misc_dev.name = DRV_NAME, in pxa3xx_gcu_probe()
611 priv->misc_dev.fops = &pxa3xx_gcu_miscdev_fops; in pxa3xx_gcu_probe()
615 priv->mmio_base = devm_ioremap_resource(dev, r); in pxa3xx_gcu_probe()
616 if (IS_ERR(priv->mmio_base)) in pxa3xx_gcu_probe()
617 return PTR_ERR(priv->mmio_base); in pxa3xx_gcu_probe()
620 priv->clk = devm_clk_get(dev, NULL); in pxa3xx_gcu_probe()
621 if (IS_ERR(priv->clk)) { in pxa3xx_gcu_probe()
623 return PTR_ERR(priv->clk); in pxa3xx_gcu_probe()
634 0, DRV_NAME, priv); in pxa3xx_gcu_probe()
641 priv->shared = dma_alloc_coherent(dev, SHARED_SIZE, in pxa3xx_gcu_probe()
642 &priv->shared_phys, GFP_KERNEL); in pxa3xx_gcu_probe()
643 if (!priv->shared) { in pxa3xx_gcu_probe()
649 ret = misc_register(&priv->misc_dev); in pxa3xx_gcu_probe()
656 ret = clk_prepare_enable(priv->clk); in pxa3xx_gcu_probe()
663 ret = pxa3xx_gcu_add_buffer(dev, priv); in pxa3xx_gcu_probe()
670 platform_set_drvdata(pdev, priv); in pxa3xx_gcu_probe()
671 priv->resource_mem = r; in pxa3xx_gcu_probe()
672 pxa3xx_gcu_reset(priv); in pxa3xx_gcu_probe()
676 (void *) r->start, (void *) priv->shared_phys, in pxa3xx_gcu_probe()
682 priv->shared, priv->shared_phys); in pxa3xx_gcu_probe()
685 misc_deregister(&priv->misc_dev); in pxa3xx_gcu_probe()
688 clk_disable_unprepare(priv->clk); in pxa3xx_gcu_probe()
695 struct pxa3xx_gcu_priv *priv = platform_get_drvdata(pdev); in pxa3xx_gcu_remove() local
698 pxa3xx_gcu_wait_idle(priv); in pxa3xx_gcu_remove()
699 misc_deregister(&priv->misc_dev); in pxa3xx_gcu_remove()
700 dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys); in pxa3xx_gcu_remove()
701 pxa3xx_gcu_free_buffers(dev, priv); in pxa3xx_gcu_remove()