/* * Func: post_sysinfo_scan_mmu_setup * Desc: Once we have scanned coreboot tables, we have complete information * about different memory ranges. Thus, we can perform a complete mmu * initialization. Also, this takes care of DMA area setup */ static void post_sysinfo_scan_mmu_setup(void) { struct memrange *ranges; uint64_t nranges; struct mmu_ranges mmu_ranges; struct mmu_memrange *dma_range; /* Get memrange info from lib_sysinfo */ lib_sysinfo_get_memranges(&ranges, &nranges); /* Get memory ranges for mmu init from lib_sysinfo memrange */ dma_range = mmu_init_ranges_from_sysinfo(ranges, nranges, &mmu_ranges); /* Disable mmu */ mmu_disable(); /* Init mmu */ mmu_init(&mmu_ranges); /* Enable mmu */ mmu_enable(); /* Init dma memory */ init_dma_memory((void *)dma_range->base, dma_range->size); }
static void cb_parse_dma(unsigned char *ptr) { struct cb_range *dma = (struct cb_range *)ptr; init_dma_memory(phys_to_virt(dma->range_start), dma->range_size); }