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

📄 sysalib.s

📁 LoPEC Early Access VxWorks BSP
💻 S
📖 第 1 页 / 共 2 页
字号:
/* sysALib.s - Motorola LoPEC system-dependent assembly routines *//* Copyright 1984-2001 Wind River Systems,Inc. *//* Copyright 1996-2001 Motorola,Inc. All Rights Reserved */	.data	.globl copyright_wind_river	.long copyright_wind_river/*modification history--------------------01d,22jan01,scb removed not needed sysPciConfig...() routines.01c,07dec00,scb consolidated errata into callable functions, matching romInit.s01b,20nov00,scb	Processor support01a,02nov00,djs	created	based on 01g,08feb00,rhk mv2100*//*DESCRIPTIONThis module contains system-dependent routines written in assemblylanguage.This module must be the	first specified	in the \f3ld\f1	command	used tobuild the system. The sysInit()	routine	is the system start-up code.*//* defines */#define	_ASMLANGUAGE#define	SGE_CLEAR 0x00000080 		/* SGE: clear */#define	MEMSSCR1 0x01000000 		/* Max Memory SubSystem Control Reg 1 */#define	MEMSSCR1_NITRO 0x00040000 	/* Nitro Mem SubSystem Control Reg 1 */#define	DL1HWFLSH 0x00800000 		/* L1 data cache HW flush bit 8 */#include "vxWorks.h"#include "sysLib.h"#include "config.h"#include "regs.h"#include "asm.h"	/* globals */	.globl _sysInit	/* start of system code */	.globl sysInByte	.globl sysOutByte	.globl sysPciInByte	.globl sysPciOutByte	.globl sysInWord	.globl sysInWordRev	.globl sysOutWord	.globl sysPciInWord	.globl sysPciOutWord	.globl sysInLong	.globl sysOutLong	.globl sysPciInLong	.globl sysPciOutLong	.globl sysMemProbeSup	.globl sysProbeExc	.globl sysL2crPut	.globl sysL2crGet	.globl sysTimeBaseLGet	.globl sysHid1Get	.globl sysHid2Set	.globl sysHid2Get	/* externals */	.extern	usrInit	.text/********************************************************************************* sysInit - start after	boot** This is the system start-up entry point for VxWorks in RAM,the* first	code executed after booting. It	disables interrupts,sets up* the stack,and	jumps to the C routine usrInit() in usrConfig.c.** The initial stack is set to grow down	from the address of sysInit(). This* stack	is used	only by	usrInit() and is never used again. Memory for the* stack	must be	accounted for when determining the system load address.** NOTE:	This routine should not	be called by the user.** RETURNS: N/A* sysInit (void) /@ THIS IS NOT	A CALLABLE ROUTINE @/*/_sysInit:	/* disable external interrupts */	xor	p0,p0,p0	mtmsr	p0	/* clear the MSR register */	/* return from decrementer exceptions */	addis	p1,r0,0x4c00	addi	p1,p1,0x0064	/* load rfi (0x4c000064) to p1 */	stw	p1,0x900(r0)	/* store rfi at 0x00000900 */	/* initialize the stack pointer */	lis	sp,HIADJ(RAM_LOW_ADRS)	addi	sp,sp,LO(RAM_LOW_ADRS)	mfspr	r28,PVR	rlwinm	r28,r28,16,16,31	cmpwi	r28,CPU_TYPE_MAX	bne	cpuNotMax	/* MAX L1 Data Cache HW Flush per Max Book 4,Rev. 2.0 */	lis	r2,HI(DL1HWFLSH)	ori	r2,r2,LO(DL1HWFLSH)	mtspr	1014,r2		/* MSSCR0 */	/*	 * required sync to guarantee that all data from the dL1 has	 * been written to the system address interface.	 */	sync	bl	maxErratacpuNotMax:	cmpli	0,0,r28,CPU_TYPE_NITRO	bne	cpuNotNitro	bl	nitroErratacpuNotNitro:	/* Enable and invalidate both caches */	mfspr	r3,HID0	ori	r3,r3,(_PPC_HID0_ICFI |	_PPC_HID0_DCFI)	ori	r3,r3,(_PPC_HID0_ICE | _PPC_HID0_DCE)	sync		/* required before changing DCE */	isync		/* required before changing ICE */	mtspr	HID0, r3	/*	 * enable the branch history table, unlock both caches, disable the	 * data cache and optionally disable the instruction cache.	 */	ori	r3,r3,_PPC_HID0_BHTE#ifdef USER_I_CACHE_ENABLE	rlwinm	r3,r3,0,_PPC_HID0_BIT_DLOCK+1,_PPC_HID0_BIT_DCE-1#else	rlwinm	r3,r3,0,_PPC_HID0_BIT_DLOCK+1,_PPC_HID0_BIT_ICE-1#endif	sync		/* required before changing DCE */	isync		/* required before changing ICE */	mtspr	HID0,r3	/* disable instruction and data translations in the MMU */	sync	mfmsr	r3 	/* get the value in msr *	/* clear bits IR and DR */	rlwinm	r4,r3,0,_PPC_MSR_BIT_DR+1,_PPC_MSR_BIT_IR-1	mtmsr	r4 	/* set the msr */	isync 		/* flush inst. pipe and re-fetch */	/* initialize the BAT register */	li	p3,0 		/* clear p0 */	isync	mtspr	IBAT0U,p3	/* SPR 528 (IBAT0U) */	isync	mtspr	IBAT0L,p3 	/* SPR 529 (IBAT0L) */	isync	mtspr	IBAT1U,p3 	/* SPR 530 (IBAT1U) */	isync	mtspr	IBAT1L,p3 	/* SPR 531 (IBAT1L) */	isync	mtspr	IBAT2U,p3 	/* SPR 532 (IBAT2U) */	isync	mtspr	IBAT2L,p3 	/* SPR 533 (IBAT2L) */	isync	mtspr	IBAT3U,p3 	/* SPR 534 (IBAT3U) */	isync	mtspr	IBAT3L,p3 	/* SPR 535 (IBAT3L) */	isync	mtspr	DBAT0U,p3 	/* SPR 536 (DBAT0U) */	isync	mtspr	DBAT0L,p3 	/* SPR 537 (DBAT0L) */	isync	mtspr	DBAT1U,p3 	/* SPR 538 (DBAT1U) */	isync	mtspr	DBAT1L,p3 	/* SPR 539 (DBAT1L) */	isync	mtspr	DBAT2U,p3 	/* SPR 540 (DBAT2U) */	isync	mtspr	DBAT2L,p3 	/* SPR 541 (DBAT2L) */	isync	mtspr	DBAT3U,p3 	/* SPR 542 (DBAT3U) */	isync	mtspr	DBAT3L,p3 	/* SPR 543 (DBAT3L) */	isync	/* invalidate entries within both TLBs */	li	p1,128	xor	p0,p0,p0 	/* p0 = 0 */	mtctr	p1 		/* CTR = 32 */	isync			/* context sync req'd before tlbie */sysALoop:	tlbie	p0	addi	p0,p0,0x1000 	/* increment bits 15-19 */	bdnz	sysALoop 	/* decrement CTR,branch if CTR != 0 */	sync 			/* sync instr req'd after tlbie */	/* initialize Small Data Area (SDA) start address */#if FALSE /* XXX TPR NO SDA for now */	lis	r2,HIADJ(_SDA2_BASE_)	addi	r2,r2,LO(_SDA2_BASE_)	lis	r13,HIADJ(_SDA_BASE_)	addi	r13,r13,LO(_SDA_BASE_)#endif	addi	sp,sp,-FRAMEBASESZ 	/* get frame stack */	li	r3,BOOT_WARM_AUTOBOOT	b	usrInit			/* never returns - starts up kernel *//******************************************************************************* sysInByte - reads a byte from	an io address.** This function	reads a	byte from a specified io address or from local memory.* It operates in big-endian mode and does not perform any translation* operations on	either the supplied address or the retrieved data.** RETURNS: byte	from address.** UINT8	sysInByte (UINT8 * dataPtr)*/sysInByte:	/* Read byte from address */	lbzx	r3,r0,r3	/* Return to caller */	bclr	20,0/******************************************************************************** sysOutByte - writes a	byte to	an io address.** This function	writes a byte to a specified io	address	or to local memory.* It operates in big-endian mode and does not perform any translation* operations on	either the supplied address or data.** RETURNS: N/A** void sysOutByte (UINT8 * dataPtr,UINT8 data)*/sysOutByte:	/* Write a byte to address */	stbx	r4,r0,r3	/* Sync I/O operation */	sync	/* Return to caller */	bclr	20,0/******************************************************************************* sysPciInByte - reads a byte from PCI I/O or Memory space** This function	reads a	byte from a specified PCI I/O or Memory	address* via the PCI bridge chip. This	function should	be used	for access* to the I/O or	Memory mapped registers	of a PCI device. Since this routine* accesses only	a single byte of data no address or data manipulation is* required.** RETURNS: byte	from address.** UINT8	sysPciInByte (UINT8 * dataPtr)*/sysPciInByte:	/* Read byte from address */	lbzx	r3,r0,r3	/* Return to caller */	bclr	20,0/******************************************************************************* sysPciOutByte	- writes a byte	to PCI I/O or Memory space** This function	writes a byte to a specified PCI I/O or	Memory address* via the QSPAN	bridge chip. This function should be used for writing* to the I/O or	Memory mapped registers	of a PCI device. Since this routine* writes only a	single byte of data no address or data manipulation is* required.** RETURNS: N/A** void sysPciOutByte (UINT8 * dataPtr,UINT8 data)*/sysPciOutByte:	/* Write a byte to address */	stbx	r4,r0,r3	/* Sync I/O operation */	sync	/* Return to caller */	bclr	20,0/******************************************************************************* sysInWord - reads a word (16-bit big-endian) from an io address.** This function	reads a	word from a specified io address or local memory.* It operates in big-endian mode and does not perform any translation* operations on	either the supplied address or the retrieved data.** RETURNS: 16-bit word from read from address** UINT16 sysInWord (UINT16 * dataPtr)*/sysInWord:	/* Read word from address */	lhzx	r3,r0,r3	/* Return to caller */	bclr	20,0/******************************************************************************* sysInWordRev - reads a word (16-bit byte reversed) from an io	address.** This function	reads a	word from a specified io address,or memory* and reverses the bytes.** RETURNS: 16 bit word (byte swapped) read from	address** UINT16 sysInWordRev (UINT16 *	dataPtr)*/sysInWordRev:	/* Read word from address */	lhbrx	r3,r0,r3	/* Return to caller */	bclr	20,0/******************************************************************************** sysOutWord - writes a	word (16-bit big-endian) to an io address.** This function	writes a word to a specified io	address	or to local memory.* It operates in big-endian mode and does not perform any translation* operations on	either the supplied address or data.** RETURNS: N/A*

⌨️ 快捷键说明

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