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

📄 mpc824x.h

📁 嵌入式试验箱S3C2410的bootloader源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright Rob Taylor, Flying Pig Systems Ltd. 2000. * Copyright (C) 2001, James Dougherty, jfd@cs.stanford.edu * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#ifndef __MPC824X_H__#define __MPC824X_H__#include <config.h>/* CPU Types */#define CPU_TYPE_601		0x01		/* PPC 601	 CPU */#define CPU_TYPE_602		0x02		/* PPC 602	 CPU */#define CPU_TYPE_603		0x03		/* PPC 603	 CPU */#define CPU_TYPE_603E		0x06		/* PPC 603e	 CPU */#define CPU_TYPE_603P		0x07		/* PPC 603p	 CPU */#define CPU_TYPE_604		0x04		/* PPC 604	 CPU */#define CPU_TYPE_604E		0x09		/* PPC 604e	 CPU */#define CPU_TYPE_604R		0x0a		/* PPC 604r	 CPU */#define CPU_TYPE_750		0x08		/* PPC 750	 CPU */#define CPU_TYPE_8240		0x81		/* PPC 8240	 CPU */#define CPU_TYPE_8245		0x8081		/* PPC 8245/8241 CPU */#define _CACHE_ALIGN_SIZE	32		/* cache line size *//* spr976 - DMISS data tlb miss address register * spr977 - DCMP data tlb miss compare register * spr978 - HASH1 PTEG1 address register * spr980 - HASH2 PTEG2 address register * IMISS  - instruction tlb miss address register * ICMP	  - instruction TLB mis compare register * RPA	  - real page address register * HID0	  - hardware implemntation register * HID2	  - instruction address breakpoint register *//* Kahlua/MPC8240 defines */#define VEN_DEV_ID		0x00021057	/* Vendor and Dev. ID for MPC106 */#define KAHLUA_ID		0x00031057	/* Vendor & Dev Id for Kahlua's PCI */#define KAHLUA2_ID	        0x00061057      /* 8245 is aka Kahlua-2 */#define BMC_BASE		0x80000000	/* Kahlua ID in PCI Memory space */#define CHRP_REG_ADDR		0xfec00000	/* MPC107 Config, Map B */#define CHRP_REG_DATA		0xfee00000	/* MPC107 Config, Map B */#define CHRP_ISA_MEM_PHYS	0xfd000000#define CHRP_ISA_MEM_BUS	0x00000000#define CHRP_ISA_MEM_SIZE	0x01000000#define CHRP_ISA_IO_PHYS	0xfe000000#define CHRP_ISA_IO_BUS		0x00000000#define CHRP_ISA_IO_SIZE	0x00800000#define CHRP_PCI_IO_PHYS	0xfe800000#define CHRP_PCI_IO_BUS		0x00800000#define CHRP_PCI_IO_SIZE	0x00400000#define CHRP_PCI_MEM_PHYS	0x80000000#define CHRP_PCI_MEM_BUS	0x80000000#define CHRP_PCI_MEM_SIZE	0x7d000000#define	CHRP_PCI_MEMORY_PHYS	0x00000000#define	CHRP_PCI_MEMORY_BUS	0x00000000#define CHRP_PCI_MEMORY_SIZE	0x40000000#define PREP_REG_ADDR		0x80000cf8	/* MPC107 Config, Map A */#define PREP_REG_DATA		0x80000cfc	/* MPC107 Config, Map A */#define PREP_ISA_IO_PHYS	0x80000000#define PREP_ISA_IO_BUS		0x00000000#define PREP_ISA_IO_SIZE	0x00800000#define PREP_PCI_IO_PHYS	0x81000000#define PREP_PCI_IO_BUS		0x01000000#define PREP_PCI_IO_SIZE	0x3e800000#define PREP_PCI_MEM_PHYS	0xc0000000#define PREP_PCI_MEM_BUS	0x00000000#define PREP_PCI_MEM_SIZE	0x3f000000#define	PREP_PCI_MEMORY_PHYS	0x00000000#define	PREP_PCI_MEMORY_BUS	0x80000000#define	PREP_PCI_MEMORY_SIZE	0x80000000#define MPC107_PCI_CMD		0x80000004	/* MPC107 PCI cmd reg */#define MPC107_PCI_STAT 	0x80000006	/* MPC107 PCI status reg */#define PROC_INT1_ADR		0x800000a8	/* MPC107 Processor i/f cfg1 */#define PROC_INT2_ADR		0x800000ac	/* MPC107 Processor i/f cfg2 */#define MEM_CONT1_ADR		0x800000f0	/* MPC107 Memory control config. 1 */#define MEM_CONT2_ADR		0x800000f4	/* MPC107 Memory control config. 2 */#define MEM_CONT3_ADR		0x800000f8	/* MPC107 Memory control config. 3 */#define MEM_CONT4_ADR		0x800000fc	/* MPC107 Memory control config. 4 */#define MEM_ERREN1_ADR		0x800000c0	/* MPC107 Memory error enable 1 */#define MEM_START1_ADR		0x80000080	/* MPC107 Memory starting addr */#define MEM_START2_ADR		0x80000084	/* MPC107 Memory starting addr-lo */#define XMEM_START1_ADR 	0x80000088	/* MPC107 Extended mem. start addr-hi*/#define XMEM_START2_ADR 	0x8000008c	/* MPC107 Extended mem. start addr-lo*/#define MEM_END1_ADR		0x80000090	/* MPC107 Memory ending address */#define MEM_END2_ADR		0x80000094	/* MPC107 Memory ending addr-lo */#define XMEM_END1_ADR		0x80000098	/* MPC107 Extended mem. end addrs-hi */#define XMEM_END2_ADR		0x8000009c	/* MPC107 Extended mem. end addrs-lo*/#define OUT_DRV_CONT		0x80000073	/* MPC107 Output Driver Control reg */#define MEM_EN_ADR		0x800000a0	/* Memory bank enable */#define PAGE_MODE		0x800000a3	/* MPC107 Page Mode Counter/Timer *//*----------------------------------------------------------------------- * Exception offsets (PowerPC standard) */#define EXC_OFF_RESERVED0	0x0000	/* Reserved */#define EXC_OFF_SYS_RESET	0x0100	/* System reset */#define EXC_OFF_MACH_CHCK	0x0200	/* Machine Check */#define EXC_OFF_DATA_STOR	0x0300	/* Data Storage */#define EXC_OFF_INS_STOR	0x0400	/* Instruction Storage */#define EXC_OFF_EXTERNAL	0x0500	/* External */#define EXC_OFF_ALIGN		0x0600	/* Alignment */#define EXC_OFF_PROGRAM		0x0700	/* Program */#define EXC_OFF_FPUNAVAIL	0x0800	/* Floating-point Unavailable */#define EXC_OFF_DECR		0x0900	/* Decrementer */#define EXC_OFF_RESERVED1	0x0A00	/* Reserved */#define EXC_OFF_RESERVED2	0x0B00	/* Reserved */#define EXC_OFF_SYS_CALL	0x0C00	/* System Call */#define EXC_OFF_TRACE		0x0D00	/* Trace */#define EXC_OFF_FPUNASSIST	0x0E00	/* Floating-point Assist */	/* 0x0E10 - 0x0FFF are marked reserved in The PowerPC Architecture book */	/* these found in DINK code  - may not apply to 8240*/#define EXC_OFF_PMI		0x0F00	/* Performance Monitoring Interrupt */#define EXC_OFF_VMXUI		0x0F20	/* VMX (AltiVec) Unavailable Interrupt */	/* 0x1000 - 0x2FFF are implementation specific */	/* these found in DINK code  - may not apply to 8240 */#define EXC_OFF_ITME		0x1000	/* Instruction Translation Miss Exception */#define EXC_OFF_DLTME		0x1100	/* Data Load Translation Miss Exception */#define EXC_OFF_DSTME		0x1200	/* Data Store Translation Miss Exception */#define EXC_OFF_IABE		0x1300	/* Instruction Addr Breakpoint Exception */#define EXC_OFF_SMIE		0x1400	/* System Management Interrupt Exception */#define EXC_OFF_JMDDI		0x1600	/* Java Mode denorm detect Interr -- WTF??*/#define EXC_OFF_RMTE		0x2000	/* Run Mode or Trace Exception */#define MAP_A_CONFIG_ADDR_HIGH	0x8000	/* Upper half of CONFIG_ADDR for Map A */#define MAP_A_CONFIG_ADDR_LOW	0x0CF8	/* Lower half of CONFIG_ADDR for Map A */#define MAP_A_CONFIG_DATA_HIGH	0x8000	/* Upper half of CONFIG_DAT for Map A */#define MAP_A_CONFIG_DATA_LOW	0x0CFC	/* Lower half of CONFIG_DAT for Map A */#define MAP_B_CONFIG_ADDR_HIGH	0xfec0	/* Upper half of CONFIG_ADDR for Map B */#define MAP_B_CONFIG_ADDR_LOW	0x0000	/* Lower half of CONFIG_ADDR for Map B */#define MAP_B_CONFIG_DATA_HIGH	0xfee0	/* Upper half of CONFIG_DAT for Map B */#define MAP_B_CONFIG_DATA_LOW	0x0000	/* Lower half of CONFIG_DAT for Map B */#if defined(CFG_ADDR_MAP_A)#define CONFIG_ADDR_HIGH    MAP_A_CONFIG_ADDR_HIGH  /* Upper half of CONFIG_ADDR */#define CONFIG_ADDR_LOW	    MAP_A_CONFIG_ADDR_LOW   /* Lower half of CONFIG_ADDR */#define CONFIG_DATA_HIGH    MAP_A_CONFIG_DATA_HIGH  /* Upper half of CONFIG_DAT */#define CONFIG_DATA_LOW	    MAP_A_CONFIG_DATA_LOW   /* Lower half of CONFIG_DAT */#else /* Assume Map B, default */#define CONFIG_ADDR_HIGH    MAP_B_CONFIG_ADDR_HIGH  /* Upper half of CONFIG_ADDR */#define CONFIG_ADDR_LOW	    MAP_B_CONFIG_ADDR_LOW   /* Lower half of CONFIG_ADDR */#define CONFIG_DATA_HIGH    MAP_B_CONFIG_DATA_HIGH  /* Upper half of CONFIG_DAT */#define CONFIG_DATA_LOW	    MAP_B_CONFIG_DATA_LOW   /* Lower half of CONFIG_DAT */#endif#define CONFIG_ADDR	(CONFIG_ADDR_HIGH << 16 | CONFIG_ADDR_LOW)#define CONFIG_DATA	(CONFIG_DATA_HIGH << 16 | CONFIG_DATA_LOW)/* Macros to write to config registers. addr should be a constant in all cases */#define CONFIG_WRITE_BYTE( addr, data ) \  __asm__ __volatile__( \  " stwbrx %1, 0, %0\n \    sync\n \    stb %3, %4(%2)\n \    sync " \  : /* no output */ \  : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \    "b" (CONFIG_DATA), "r" (data), \    "n" ((addr) & 3));#define CONFIG_WRITE_HALFWORD( addr, data ) \  __asm__ __volatile__( \  " stwbrx %1, 0, %0\n \    sync\n \    sthbrx %3, %4, %2\n \    sync " \  : /* no output */ \  : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \    "r" (CONFIG_DATA), "r" (data), \    "b" ((addr) & 3));/* this assumes it's writeing on word boundaries*/#define CONFIG_WRITE_WORD( addr, data ) \  __asm__ __volatile__( \  " stwbrx %1, 0, %0\n \    sync\n \    stwbrx %3, 0, %2\n \    sync " \  : /* no output */ \  : "r" (CONFIG_ADDR), "r" (addr), \    "r" (CONFIG_DATA), "r" (data));/* Configuration register reads*/#define CONFIG_READ_BYTE( addr, reg ) \  __asm__ ( \  " stwbrx %1, 0, %2\n \    sync\n \    lbz	  %0, %4(%3)\n \    sync " \  : "=r" (reg) \  : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \    "b" (CONFIG_DATA), "n" ((addr) & 3));#define CONFIG_READ_HALFWORD( addr, reg ) \  __asm__ ( \  " stwbrx %1, 0, %2\n \    sync\n \    lhbrx %0, %4, %3\n \    sync " \  : "=r" (reg) \  : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \    "r" (CONFIG_DATA), \    "b" ((addr) & 3));/* this assumes it's reading on word boundaries*/#define CONFIG_READ_WORD( addr, reg ) \  __asm__ ( \  " stwbrx %1, 0, %2\n \    sync\n \    lwbrx %0, 0, %3\n \    sync " \  : "=r" (reg) \  : "r" (addr), "r" (CONFIG_ADDR),\    "r" (CONFIG_DATA));/* *  configuration register 'addresses'. *  These are described in chaper 5 of the 8240 users manual. *  Where the register has an abreviation in the manual, this has *  been usaed here, otherwise a name in keeping with the norm has *  been invented. *  Note that some of these registers aren't documented in the manual. */#define PCICR		0x80000004  /* PCI Command Register */#define PCISR		0x80000006  /* PCI Status Register */#define REVID		0x80000008  /* CPU revision id */#define PIR		0x80000009  /* PCI Programming Interface Register */#define PBCCR		0x8000000b  /* PCI Base Class Code Register */#define PCLSR		0x8000000c  /* Processor Cache Line Size Register */#define PLTR		0x8000000d  /* PCI Latancy Timer Register */#define PHTR		0x8000000e  /* PCI Header Type Register */#define BISTCTRL	0x8000000f  /* BIST Control */#define LMBAR		0x80000010  /* Local Base Addres Register */#define PCSRBAR		0x80000014  /* PCSR Base Address Register */#define ILR		0x8000003c  /* PCI Interrupt Line Register */#define IPR		0x8000003d  /* Interrupt Pin Register */#define MINGNT		0x8000003e  /* MIN GNI */#define MAXLAT		0x8000003f  /* MAX LAT */#define PCIACR		0x80000046  /* PCI Arbiter Control Register */#define PMCR1		0x80000070  /* Power management config. 1 */#define PMCR2		0x80000072  /* Power management config. 2 */#define ODCR		0x80000073  /* Output Driver Control Register */#define CLKDCR		0x80000074  /* CLK Driver Control Register */#if defined(CONFIG_MPC8245) || defined(CONFIG_MPC8241)#define MIOCR1		0x80000076  /* Miscellaneous I/O Control Register 1 */#define MIOCR2		0x80000077  /* Miscellaneous I/O Control Register 2 */#endif#define EUMBBAR		0x80000078  /* Embedded Utilities Memory Block Base Address Register */#define EUMBBAR_VAL	0x80500000  /* PCI Relocation offset for EUMB region */#define EUMBSIZE	0x00100000  /* Size of EUMB region */#define MSAR1		0x80000080  /* Memory Starting Address Register 1 */#define MSAR2		0x80000084  /* Memory Starting Address Register 2 */#define EMSAR1		0x80000088  /* Extended Memory Starting Address Register 1*/#define EMSAR2		0x8000008c  /* Extended Memory Starting Address Register 2*/#define MEAR1		0x80000090  /* Memory Ending Address Register 1 */#define MEAR2		0x80000094  /* Memory Ending Address Register 2 */#define EMEAR1		0x80000098  /* Extended Memory Ending Address Register 1 */#define EMEAR2		0x8000009c  /* Extended Memory Ending Address Register 2 */#define MBER		0x800000a0  /* Memory bank Enable Register*/#define MPMR		0x800000a3  /* Memory Page Mode Register (stores PGMAX) */#define PICR1		0x800000a8  /* Processor Interface Configuration Register 1 */#define PICR2		0x800000ac  /* Processor Interface Configuration Register 2 */

⌨️ 快捷键说明

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