if (dev_priv->mmu) {
struct psb_gtt *pg = dev_priv->pg;
- down_read(&pg->sem);
psb_mmu_remove_pfn_sequence(
psb_mmu_get_default_pd
(dev_priv->mmu),
(dev_priv->mmu),
pg->rar_start,
pg->rar_stolen_size >> PAGE_SHIFT);
- up_read(&pg->sem);
psb_mmu_driver_takedown(dev_priv->mmu);
dev_priv->mmu = NULL;
}
* Make MSVDX/TOPAZ MMU aware of the CI stolen memory area.
*/
if (dev_priv->pg->ci_stolen_size != 0) {
- down_read(&pg->sem);
ret = psb_mmu_insert_pfn_sequence(psb_mmu_get_default_pd
(dev_priv->mmu),
dev_priv->ci_region_start >> PAGE_SHIFT,
pg->mmu_gatt_start + pg->ci_start,
pg->ci_stolen_size >> PAGE_SHIFT, 0);
- up_read(&pg->sem);
if (ret)
goto out_err;
}
* Make MSVDX/TOPAZ MMU aware of the rar stolen memory area.
*/
if (dev_priv->pg->rar_stolen_size != 0) {
- down_read(&pg->sem);
ret = psb_mmu_insert_pfn_sequence(
psb_mmu_get_default_pd(dev_priv->mmu),
dev_priv->rar_region_start >> PAGE_SHIFT,
pg->mmu_gatt_start + pg->rar_start,
pg->rar_stolen_size >> PAGE_SHIFT, 0);
- up_read(&pg->sem);
if (ret)
goto out_err;
}
if (!tmp)
return NULL;
- init_rwsem(&tmp->sem);
tmp->dev = dev;
return tmp;
add = desired_tile_stride;
row_add = hw_tile_stride;
- down_read(&pg->sem);
for (i = 0; i < rows; ++i) {
cur_page = pg->gtt_map + offset_pages;
for (j = 0; j < desired_tile_stride; ++j) {
offset_pages += add;
}
(void) ioread32(cur_page - 1);
- up_read(&pg->sem);
return 0;
}
uint32_t pte;
//printk("Allocatng IMG GTT mem at %x (pages %d)\n",offset_pages,num_pages);
- down_read(&pg->sem);
cur_page = pg->gtt_map + offset_pages;
for (j = 0; j < num_pages; ++j) {
}
(void) ioread32(cur_page - 1);
- up_read(&pg->sem);
-
return 0;
}
int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages,
unsigned num_pages, unsigned desired_tile_stride,
- unsigned hw_tile_stride, int rc_prot)
+ unsigned hw_tile_stride)
{
struct drm_psb_private *dev_priv = pg->dev->dev_private;
unsigned rows = 1;
add = desired_tile_stride;
row_add = hw_tile_stride;
- if (rc_prot)
- down_read(&pg->sem);
for (i = 0; i < rows; ++i) {
cur_page = pg->gtt_map + offset_pages;
for (j = 0; j < desired_tile_stride; ++j)
offset_pages += add;
}
(void) ioread32(cur_page - 1);
- if (rc_prot)
- up_read(&pg->sem);
return 0;
}
offset_pages = node->start;
pages = node->size;
- psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0, 1);
+ psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0);
/*free tt node*/
offset_pages = node->start;
pages = node->size;
- psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0, 1);
+ psb_gtt_remove_pages(pg, offset_pages, pages, 0, 0);
/*free tt node*/
psb_gtt_mm_free_mem(mm, node);
unsigned long ci_stolen_size;
unsigned long rar_stolen_size;
uint32_t __iomem *gtt_map;
- struct rw_semaphore sem;
};
struct psb_gtt_mm {
extern int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages,
unsigned num_pages,
unsigned desired_tile_stride,
- unsigned hw_tile_stride,
- int rc_prot);
+ unsigned hw_tile_stride);
extern struct psb_gtt *psb_gtt_alloc(struct drm_device *dev);
extern void psb_gtt_takedown(struct psb_gtt *pg, int free);