void __init plat_swiotlb_setup(void)
{
	int i;
	phys_t max_addr;
	phys_t addr_size;
	size_t swiotlbsize;

	max_addr = 0;
	addr_size = 0;

	if(!dma64_supported) {
		loongson_linear_dma_map_ops.phys_to_dma = mips_unity_phys_to_dma32;
		loongson_linear_dma_map_ops.dma_to_phys = mips_unity_dma_to_phys32;
		pr_info("swiotlb:restricted 32bit dma!\n");
	}
	for (i = 0 ; i < boot_mem_map.nr_map; i++) {
		struct boot_mem_map_entry *e = &boot_mem_map.map[i];
		if (e->type != BOOT_MEM_RAM)
			continue;

		/* These addresses map low for PCI. */
		if (e->addr > 0x410000000ull)
			continue;

		addr_size += e->size;

		if (max_addr < e->addr + e->size)
			max_addr = e->addr + e->size;
	}
	swiotlbsize = 64 * (1<<20); 

	printk("SWIOTLB: swiotlbsize = 0x%lx\n", swiotlbsize);
	swiotlb_init_with_default_size(swiotlbsize, 1);


	mips_dma_map_ops = &loongson_linear_dma_map_ops;
}
Пример #2
0
void __init arm64_swiotlb_init(size_t max_size)
{
	dma_ops = &arm64_swiotlb_dma_ops;
	swiotlb_init_with_default_size(min((size_t)SZ_64M, max_size), 1);
}