⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmu.c

📁 Hermit-at-1.1.3,一款bootloader
💻 C
字号:
#include <hermit.h>#include <target/memzero.h>#include "mmu.h"#include "memregions.h"/**************************************************************************** *  ****************************************************************************/static voidmmu_create_page_table(struct page_table *pt){	volatile unsigned long *table;	unsigned long offset;	unsigned long i;	offset = MMU_TRANSLATION_TABLE_BASE + (pt->vaddr >> 18);	for (i = 0; i < (pt->size >> 20); i++) {		table = (volatile unsigned long *)(offset + (i << 2));		*table = ((pt->paddr & 0xfff00000) | (i << 20) | pt->option);	}}/**************************************************************************** *  ****************************************************************************/voidboost_on(int mode){	int i;	struct page_table pt_list[] = {		/* Physical,  Virtual,    Size,       Option */		/*-------------------------------------------*/		/* Internal Register */		{0x43f00000, 0x43f00000, 0x3c100000, 0xc02},		/* SDRAM */		{0x80000000, 0x80000000, 0x08000000, 0xc0e},		/* Flash */		{0xa0000000, 0xa0000000, 0x02000000, 0xc02},		/* CS3 (SMSC911x) */		{0xb2000000, 0xb2000000, 0x02000000, 0xc02},	};	memzero((void *)MMU_TRANSLATION_TABLE_BASE,		MMU_TRANSLATION_TABLE_SIZE);	for (i=0; i<ARRAY_SIZE(pt_list); i++)		mmu_create_page_table(&pt_list[i]);	__asm__ volatile 	  (	   "mov r0, #0;"	   "mcr p15, 0, r0, c7, c7;"	   "mcr p15, 0, r0, c7, c10, 4;"	   "mcr p15, 0, r0, c8, c7;"	   "mcr p15, 0, %0, c2, c0;"	   "mov r0, #0x03;"	   "mcr p15, 0, r0, c3, c0;"	   "ldr r0, =0x0005387f;"	   "mcr p15, 0, r0, c1, c0;"	   :	   : "r" (MMU_TRANSLATION_TABLE_BASE)	   );}/**************************************************************************** *  ****************************************************************************/voidboost_off(void){	__asm__ volatile 	  (	   "mov r0, #0;"	   "mcr p15, 0, r0, c7, c14, 0;"	   "mcr p15, 0, r0, c7, c10, 4;" /* drain the write buffer */	   "mcr p15, 0, r0, c7, c5, 0;"  /* invalidate I cache */	   "mrc p15, 0, r0, c1, c0, 0;"  /* read c1 */	   "bic r0, r0, #0x7;"           /* disable DCache and MMU */	   "bic r0, r0, #0x1000;"        /* disable ICache */	   "mcr p15, 0, r0, c1, c0, 0;"  /*  */	   "nop;"                        /* flush i+d-TLBs */	   "nop;"                        /* flush i+d-TLBs */	   "nop;"                        /* flush i+d-TLBs */	   :	   :	   : "r0","memory"               /* clobber list */	   );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -