• Home
  • Raw
  • Download

Lines Matching refs:driver

67 static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, void *addr)  in psb_mmu_clflush()  argument
69 if (!driver->has_clflush) in psb_mmu_clflush()
78 static inline void psb_mmu_clflush(struct psb_mmu_driver *driver, void *addr) in psb_mmu_clflush() argument
84 static void psb_mmu_flush_pd_locked(struct psb_mmu_driver *driver, int force) in psb_mmu_flush_pd_locked() argument
86 struct drm_device *dev = driver->dev; in psb_mmu_flush_pd_locked()
89 if (atomic_read(&driver->needs_tlbflush) || force) { in psb_mmu_flush_pd_locked()
97 if (driver->msvdx_mmu_invaldc) in psb_mmu_flush_pd_locked()
98 atomic_set(driver->msvdx_mmu_invaldc, 1); in psb_mmu_flush_pd_locked()
100 atomic_set(&driver->needs_tlbflush, 0); in psb_mmu_flush_pd_locked()
104 static void psb_mmu_flush_pd(struct psb_mmu_driver *driver, int force)
106 down_write(&driver->sem);
107 psb_mmu_flush_pd_locked(driver, force);
108 up_write(&driver->sem);
112 void psb_mmu_flush(struct psb_mmu_driver *driver) in psb_mmu_flush() argument
114 struct drm_device *dev = driver->dev; in psb_mmu_flush()
118 down_write(&driver->sem); in psb_mmu_flush()
120 if (atomic_read(&driver->needs_tlbflush)) in psb_mmu_flush()
132 atomic_set(&driver->needs_tlbflush, 0); in psb_mmu_flush()
133 if (driver->msvdx_mmu_invaldc) in psb_mmu_flush()
134 atomic_set(driver->msvdx_mmu_invaldc, 1); in psb_mmu_flush()
135 up_write(&driver->sem); in psb_mmu_flush()
140 struct drm_device *dev = pd->driver->dev; in psb_mmu_set_pd_context()
145 down_write(&pd->driver->sem); in psb_mmu_set_pd_context()
148 psb_mmu_flush_pd_locked(pd->driver, 1); in psb_mmu_set_pd_context()
150 up_write(&pd->driver->sem); in psb_mmu_set_pd_context()
175 struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver, in psb_mmu_alloc_pd() argument
226 pd->driver = driver; in psb_mmu_alloc_pd()
249 struct psb_mmu_driver *driver = pd->driver; in psb_mmu_free_pagedir() local
250 struct drm_device *dev = driver->dev; in psb_mmu_free_pagedir()
255 down_write(&driver->sem); in psb_mmu_free_pagedir()
258 psb_mmu_flush_pd_locked(driver, 1); in psb_mmu_free_pagedir()
275 up_write(&driver->sem); in psb_mmu_free_pagedir()
282 uint32_t clflush_add = pd->driver->clflush_add >> PAGE_SHIFT; in psb_mmu_alloc_pt()
284 spinlock_t *lock = &pd->driver->lock; in psb_mmu_alloc_pt()
307 if (pd->driver->has_clflush && pd->hw_context != -1) { in psb_mmu_alloc_pt()
332 spinlock_t *lock = &pd->driver->lock; in psb_mmu_pt_alloc_map_lock()
358 psb_mmu_clflush(pd->driver, (void *)&v[index]); in psb_mmu_pt_alloc_map_lock()
359 atomic_set(&pd->driver->needs_tlbflush, 1); in psb_mmu_pt_alloc_map_lock()
371 spinlock_t *lock = &pd->driver->lock; in psb_mmu_pt_map_lock()
395 psb_mmu_clflush(pd->driver, (void *)&v[pt->index]); in psb_mmu_pt_unmap_unlock()
396 atomic_set(&pd->driver->needs_tlbflush, 1); in psb_mmu_pt_unmap_unlock()
399 spin_unlock(&pd->driver->lock); in psb_mmu_pt_unmap_unlock()
403 spin_unlock(&pd->driver->lock); in psb_mmu_pt_unmap_unlock()
418 struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver *driver) in psb_mmu_get_default_pd() argument
422 down_read(&driver->sem); in psb_mmu_get_default_pd()
423 pd = driver->default_pd; in psb_mmu_get_default_pd()
424 up_read(&driver->sem); in psb_mmu_get_default_pd()
430 uint32_t psb_get_default_pd_addr(struct psb_mmu_driver *driver) in psb_get_default_pd_addr() argument
434 pd = psb_mmu_get_default_pd(driver); in psb_get_default_pd_addr()
438 void psb_mmu_driver_takedown(struct psb_mmu_driver *driver) in psb_mmu_driver_takedown() argument
440 struct drm_device *dev = driver->dev; in psb_mmu_driver_takedown()
443 PSB_WSGX32(driver->bif_ctrl, PSB_CR_BIF_CTRL); in psb_mmu_driver_takedown()
444 psb_mmu_free_pagedir(driver->default_pd); in psb_mmu_driver_takedown()
445 kfree(driver); in psb_mmu_driver_takedown()
453 struct psb_mmu_driver *driver; in psb_mmu_driver_init() local
456 driver = kmalloc(sizeof(*driver), GFP_KERNEL); in psb_mmu_driver_init()
458 if (!driver) in psb_mmu_driver_init()
461 driver->dev = dev; in psb_mmu_driver_init()
462 driver->default_pd = psb_mmu_alloc_pd(driver, trap_pagefaults, in psb_mmu_driver_init()
464 if (!driver->default_pd) in psb_mmu_driver_init()
467 spin_lock_init(&driver->lock); in psb_mmu_driver_init()
468 init_rwsem(&driver->sem); in psb_mmu_driver_init()
469 down_write(&driver->sem); in psb_mmu_driver_init()
470 atomic_set(&driver->needs_tlbflush, 1); in psb_mmu_driver_init()
471 driver->msvdx_mmu_invaldc = msvdx_mmu_invaldc; in psb_mmu_driver_init()
473 driver->bif_ctrl = PSB_RSGX32(PSB_CR_BIF_CTRL); in psb_mmu_driver_init()
474 PSB_WSGX32(driver->bif_ctrl | _PSB_CB_CTRL_CLEAR_FAULT, in psb_mmu_driver_init()
476 PSB_WSGX32(driver->bif_ctrl & ~_PSB_CB_CTRL_CLEAR_FAULT, in psb_mmu_driver_init()
479 driver->has_clflush = 0; in psb_mmu_driver_init()
492 driver->has_clflush = 1; in psb_mmu_driver_init()
493 driver->clflush_add = in psb_mmu_driver_init()
495 driver->clflush_mask = driver->clflush_add - 1; in psb_mmu_driver_init()
496 driver->clflush_mask = ~driver->clflush_mask; in psb_mmu_driver_init()
500 up_write(&driver->sem); in psb_mmu_driver_init()
501 return driver; in psb_mmu_driver_init()
504 kfree(driver); in psb_mmu_driver_init()
521 unsigned long clflush_add = pd->driver->clflush_add; in psb_mmu_flush_ptes()
522 unsigned long clflush_mask = pd->driver->clflush_mask; in psb_mmu_flush_ptes()
524 if (!pd->driver->has_clflush) in psb_mmu_flush_ptes()
574 down_read(&pd->driver->sem); in psb_mmu_remove_pfn_sequence()
596 up_read(&pd->driver->sem); in psb_mmu_remove_pfn_sequence()
599 psb_mmu_flush(pd->driver); in psb_mmu_remove_pfn_sequence()
626 down_read(&pd->driver->sem); in psb_mmu_remove_pages()
654 up_read(&pd->driver->sem); in psb_mmu_remove_pages()
657 psb_mmu_flush(pd->driver); in psb_mmu_remove_pages()
672 down_read(&pd->driver->sem); in psb_mmu_insert_pfn_sequence()
698 up_read(&pd->driver->sem); in psb_mmu_insert_pfn_sequence()
701 psb_mmu_flush(pd->driver); in psb_mmu_insert_pfn_sequence()
734 down_read(&pd->driver->sem); in psb_mmu_insert_pages()
765 up_read(&pd->driver->sem); in psb_mmu_insert_pages()
768 psb_mmu_flush(pd->driver); in psb_mmu_insert_pages()
779 spinlock_t *lock = &pd->driver->lock; in psb_mmu_virtual_to_pfn()
781 down_read(&pd->driver->sem); in psb_mmu_virtual_to_pfn()
810 up_read(&pd->driver->sem); in psb_mmu_virtual_to_pfn()