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

📄 t_mmu.s

📁 GM8120 linux driver.
💻 S
字号:
;/*************************************************************************;   Copyright ARM Limited 1998 - 2000.  All rights reserved.;**************************************************************************/	SUBT	MMU setup support > PLAT/initmmu.s	; -----------------------------------------------------------------	; This file contains basic system initialization for the MMU/MPU	; for uHAL applications and Angel.	; It is expected that this file is included in target.s.	;	; $Revision: 1.1.1.1 $	;	$Author: bruce $	;	$Date: 2002/12/06 05:23:02 $	;	; The only 'target-specific' part of these macros are the labels	; uHAL_AddressTable & uHAL_MappingTable, which are uHAL 'must-haves'	; and so not really very specific :-)	;	; -----------------------------------------------------------------   IF :DEF: OPT	ASSERT	(listopts_s)old_opt SETA	{OPT}	OPT	(opt_off)	; disable listing of include files ENDIF	; -----------------------------------------------------------------	; -----------------------------------------------------------------	; SETUPMMU	; -------	; Setup the memory map world for the target. This macro is called	; by INITMMU from ANGEL if required; or by uHAL when a standalone	; program uses the mmu.  It invokes BUILD_PGTABLE to build the	; page tables from information stored in uHAL_MappingTable and	; uHAL_AddressTable.	;	; Level 1 entries always address 1MB each. The CPU takes the MB	;	portion of the required address and uses it as an offset	;	into the table. If the entry has bit 0 == 1, it looks in	;	the level 2 table.	; Level 2 entries can address 4KB or 1KB each. If using 64KB	;	entries, each page table entry must be duplicated 16 times	;	(in consecutive memory locations) in a Large level 2 table.	; In this implementation, Fine tables _must_ be 1KB entries and	; Large tables _only_ support 64KB entries.	;	; IN:	$size:	value passed as $tmp2 to BUILD_PGTABLE	MACRO$label  SETUPMMU	$tmp1, $size, $tmp2, $tmp3, $tmp4, $tmp5, $offset IF :LNOT: :DEF: uHAL_AddressTable	IMPORT	uHAL_AddressTable ENDIF IF :LNOT: :DEF: uHAL_MappingTable	IMPORT	uHAL_MappingTable ENDIF	; Scan for MPU and set up if found	;CHECK_FOR_MPU	$tmp1	;beq	%FT1	; Here lies the MPU memory map for this board. Use it with the	; offset between physical & virtual TTBs to build a valid page	; table. To use default memory size, pass in RAM size of zero	;ldr	$tmp5, =uHAL_MappingTable	;ldr	$offset, =0	;SETUP_MPU	$tmp1, $size, $tmp2, $tmp3, $tmp4, $tmp5, $offset1	; Scan for MMU and set up if found	;CHECK_FOR_MMU	$tmp1	;beq	%FT2	; Build a page table from the information stored in 	; uHAL_AddressTable, and memory size specified in $size	; (0 for default size).		ldr	$tmp5, =uHAL_AddressTable	ldr	$offset, =0	BUILD_PGTABLE	$tmp1, $size, $tmp2, $tmp3, $tmp4, $tmp5, $offset	; If we are running from unmapped ROM at 0, we will need to do 	; some shuffling in order to map RAM to 0.  If we are already	; running from RAM, or the MMU is already in use, assume the	; new page table can be installed without difficulty.	RDMMU_STATE	$tmp1		;Read the MMU state	LDR	$tmp2, =EnableMMU	TST	$tmp1, $tmp2		;Already active?	BNE	%F91			;Yes, just use the new table             ; ------------------------------------------------------------------        ; Not executing from ROM - Setup the domain and TTB for final table        ; ------------------------------------------------------------------91	LDR	$tmp2, =1	LDR	$tmp1, =Level1tab	;TTB address is 2^14 aligned	ADD	$tmp1, $tmp1, $offset        WRMMU_DAControl	$tmp2		;Initialise Domain Access Control	WRMMU_TTBase	$tmp1		;Initialise Translation Table Base reg.	RDMMU_STATE	$tmp2	ORR	$tmp2, $tmp2, #1 + 4	;Turn on MMU and D Cache	ORR	$tmp2, $tmp2, #0x1000	;Turn on I Cache      WRMMU_STATE	$tmp2		;Write to MMU control register.			; -----------------------------------------------------------------	; Flush everything and get ready to turn on the MMU94	WRMMU_FlushTB		$tmp1	;Flush TB 	WRCACHE_FlushIDC	$tmp1	;Flush the Caches 	NOP				;Make sure that the pipe is empty	NOP	NOP2	MEND	; -----------------------------------------------------------------	; ANGEL INITMMU macro, calls the core SETUPMMU macro if	; the MMU is enabled and then sets ICache, DCache & WBuffer as	; required. On certain system where the target does not have a MMU,	; then this macro is almost (but not quite) a NOP.	MACRO$label  INITMMU	 $tmp1, $tmp2, $tmp3, $tmp4, $tmp5, $tmp6	; ANGEL calls this macro too late for us to do anything	; useful... all the MMU initialisation is done when	; STARTUPCODE (t_angel.s) calls INIT_RAM (t_memory.s).		MEND 	; -----------------------------------------------------------------	END	; EOF initmmu.s

⌨️ 快捷键说明

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