Пример #1
0
static u32 omap2_cr_to_virt(struct cr_regs *cr)
{
	u32 page_size = cr->cam & MMU_CAM_PGSZ_MASK;
	u32 mask = get_cam_va_mask(cr->cam & page_size);

	return cr->cam & mask;
}
Пример #2
0
static inline unsigned long omap2_mmu_cam_va(struct cam_ram_regset *cr)
{
	unsigned int page_size = cr->cam & OMAP_MMU_CAM_PAGESIZE_MASK;
	unsigned int mask = get_cam_va_mask(cr->cam & page_size);

	return cr->cam & mask;
}
Пример #3
0
static struct cr_regs *omap2_alloc_cr(struct iommu *obj, struct iotlb_entry *e)
{
	struct cr_regs *cr;

	if (e->da & ~(get_cam_va_mask(e->pgsz))) {
		dev_err(obj->dev, "%s:\twrong alignment: %08x\n", __func__,
			e->da);
		return ERR_PTR(-EINVAL);
	}

	cr = kmalloc(sizeof(*cr), GFP_KERNEL);
	if (!cr)
		return ERR_PTR(-ENOMEM);

	cr->cam = (e->da & MMU_CAM_VATAG_MASK) | e->prsvd | e->pgsz | e->valid;
	cr->ram = e->pa | e->endian | e->elsz | e->mixed;

	return cr;
}
Пример #4
0
static struct cam_ram_regset *
omap2_mmu_cam_ram_alloc(struct omap_mmu *mmu, struct omap_mmu_tlb_entry *entry)
{
	struct cam_ram_regset *cr;

	if (entry->va & ~(get_cam_va_mask(entry->pgsz))) {
		dev_err(mmu->dev, "MMU %s: mapping vadr (0x%06lx) is not on"
			" an aligned boundary\n", mmu->name, entry->va);
		return ERR_PTR(-EINVAL);
	}

	cr = kmalloc(sizeof(struct cam_ram_regset), GFP_KERNEL);

	cr->cam = (entry->va & OMAP_MMU_CAM_VATAG_MASK) |
		  entry->prsvd | entry->pgsz;
	cr->ram = entry->pa | entry->endian | entry->elsz;

	return cr;
}