亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p3mx.c

?? U-boot源碼 ARM7啟動代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * (C) Copyright 2006 * Stefan Roese, DENX Software Engineering, sr@denx.de. * * Based on original work by *	Roel Loeffen, (C) Copyright 2006 Prodrive B.V. *	Josh Huber, (C) Copyright 2001 Mission Critical Linux, Inc. * * 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 * * modifications for the DB64360 eval board based by Ingo.Assmus@keymile.com * modifications for the cpci750 by reinhard.arlt@esd-electronics.com * modifications for the P3M750 by roel.loeffen@prodrive.nl *//* * p3m750.c - main board support/init for the Prodrive p3m750/p3m7448. */#include <common.h>#include <74xx_7xx.h>#include "../../Marvell/include/memory.h"#include "../../Marvell/include/pci.h"#include "../../Marvell/include/mv_gen_reg.h"#include <net.h>#include <i2c.h>#include "eth.h"#include "mpsc.h"#include "64460.h"#include "mv_regs.h"#include "p3mx.h"DECLARE_GLOBAL_DATA_PTR;#undef	DEBUG/*#define	DEBUG */#ifdef CONFIG_PCI#define	MAP_PCI#endif /* of CONFIG_PCI */#ifdef DEBUG#define DP(x) x#else#define DP(x)#endifextern void flush_data_cache (void);extern void invalidate_l1_instruction_cache (void);extern flash_info_t flash_info[];/* ------------------------------------------------------------------------- *//* this is the current GT register space location *//* it starts at CFG_DFL_GT_REGS but moves later to CFG_GT_REGS *//* Unfortunately, we cant change it while we are in flash, so we initialize it * to the "final" value. This means that any debug_led calls before * board_early_init_f wont work right (like in cpu_init_f). * See also my_remap_gt_regs below. (NTL) */void board_prebootm_init (void);unsigned int INTERNAL_REG_BASE_ADDR = CFG_GT_REGS;int display_mem_map (void);void set_led(int);/* ------------------------------------------------------------------------- *//* * This is a version of the GT register space remapping function that * doesn't touch globals (meaning, it's ok to run from flash.) * * Unfortunately, this has the side effect that a writable * INTERNAL_REG_BASE_ADDR is impossible. Oh well. */void my_remap_gt_regs (u32 cur_loc, u32 new_loc){	u32 temp;	/* check and see if it's already moved */	temp = in_le32 ((u32 *) (new_loc + INTERNAL_SPACE_DECODE));	if ((temp & 0xffff) == new_loc >> 16)		return;	temp = (in_le32 ((u32 *) (cur_loc + INTERNAL_SPACE_DECODE)) &		0xffff0000) | (new_loc >> 16);	out_le32 ((u32 *) (cur_loc + INTERNAL_SPACE_DECODE), temp);	while (GTREGREAD (INTERNAL_SPACE_DECODE) != temp);}#ifdef CONFIG_PCIstatic void gt_pci_config (void){	unsigned int stat;	unsigned int val = 0x00fff864;	/* DINK32: BusNum 23:16,  DevNum 15:11, */					/* FuncNum 10:8, RegNum 7:2 */	/*	 * In PCIX mode devices provide their own bus and device numbers.	 * We query the Discovery II's	 * config registers by writing ones to the bus and device.	 * We then update the Virtual register with the correct value for the	 * bus and device.	 */	if ((GTREGREAD (PCI_0_MODE) & (BIT4 | BIT5)) != 0) {	/* if  PCI-X */		GT_REG_WRITE (PCI_0_CONFIG_ADDR, BIT31 | val);		GT_REG_READ (PCI_0_CONFIG_DATA_VIRTUAL_REG, &stat);		GT_REG_WRITE (PCI_0_CONFIG_ADDR, BIT31 | val);		GT_REG_WRITE (PCI_0_CONFIG_DATA_VIRTUAL_REG,			      (stat & 0xffff0000) | CFG_PCI_IDSEL);	}	if ((GTREGREAD (PCI_1_MODE) & (BIT4 | BIT5)) != 0) {	/* if  PCI-X */		GT_REG_WRITE (PCI_1_CONFIG_ADDR, BIT31 | val);		GT_REG_READ (PCI_1_CONFIG_DATA_VIRTUAL_REG, &stat);		GT_REG_WRITE (PCI_1_CONFIG_ADDR, BIT31 | val);		GT_REG_WRITE (PCI_1_CONFIG_DATA_VIRTUAL_REG,			      (stat & 0xffff0000) | CFG_PCI_IDSEL);	}	/* Enable master */	PCI_MASTER_ENABLE (0, SELF);	PCI_MASTER_ENABLE (1, SELF);	/* Enable PCI0/1 Mem0 and IO 0 disable all others */	GT_REG_READ (BASE_ADDR_ENABLE, &stat);	stat |= (1 << 11) | (1 << 12) | (1 << 13) | (1 << 16) | (1 << 17) |		(1 << 18);	stat &= ~((1 << 9) | (1 << 10) | (1 << 14) | (1 << 15));	GT_REG_WRITE (BASE_ADDR_ENABLE, stat);	/* ronen:	 * add write to pci remap registers for 64460.	 * in 64360 when writing to pci base go and overide remap automaticaly,	 * in 64460 it doesn't	 */	GT_REG_WRITE (PCI_0_IO_BASE_ADDR, CFG_PCI0_IO_SPACE >> 16);	GT_REG_WRITE (PCI_0I_O_ADDRESS_REMAP, CFG_PCI0_IO_SPACE_PCI >> 16);	GT_REG_WRITE (PCI_0_IO_SIZE, (CFG_PCI0_IO_SIZE - 1) >> 16);	GT_REG_WRITE (PCI_0_MEMORY0_BASE_ADDR, CFG_PCI0_MEM_BASE >> 16);	GT_REG_WRITE (PCI_0MEMORY0_ADDRESS_REMAP, CFG_PCI0_MEM_BASE >> 16);	GT_REG_WRITE (PCI_0_MEMORY0_SIZE, (CFG_PCI0_MEM_SIZE - 1) >> 16);	GT_REG_WRITE (PCI_1_IO_BASE_ADDR, CFG_PCI1_IO_SPACE >> 16);	GT_REG_WRITE (PCI_1I_O_ADDRESS_REMAP, CFG_PCI1_IO_SPACE_PCI >> 16);	GT_REG_WRITE (PCI_1_IO_SIZE, (CFG_PCI1_IO_SIZE - 1) >> 16);	GT_REG_WRITE (PCI_1_MEMORY0_BASE_ADDR, CFG_PCI1_MEM_BASE >> 16);	GT_REG_WRITE (PCI_1MEMORY0_ADDRESS_REMAP, CFG_PCI1_MEM_BASE >> 16);	GT_REG_WRITE (PCI_1_MEMORY0_SIZE, (CFG_PCI1_MEM_SIZE - 1) >> 16);	/* PCI interface settings */	/* Timeout set to retry forever */	GT_REG_WRITE (PCI_0TIMEOUT_RETRY, 0x0);	GT_REG_WRITE (PCI_1TIMEOUT_RETRY, 0x0);	/* ronen - enable only CS0 and Internal reg!! */	GT_REG_WRITE (PCI_0BASE_ADDRESS_REGISTERS_ENABLE, 0xfffffdfe);	GT_REG_WRITE (PCI_1BASE_ADDRESS_REGISTERS_ENABLE, 0xfffffdfe);	/* ronen:	 * update the pci internal registers base address.	 */#ifdef MAP_PCI	for (stat = 0; stat <= PCI_HOST1; stat++)		pciWriteConfigReg (stat,				   PCI_INTERNAL_REGISTERS_MEMORY_MAPPED_BASE_ADDRESS,				   SELF, CFG_GT_REGS);#endif}#endif/* Setup CPU interface paramaters */static void gt_cpu_config (void){	cpu_t cpu = get_cpu_type ();	ulong tmp;	/* cpu configuration register */	tmp = GTREGREAD (CPU_CONFIGURATION);	/* set the SINGLE_CPU bit  see MV64460 */#ifndef CFG_GT_DUAL_CPU		/* SINGLE_CPU seems to cause JTAG problems */	tmp |= CPU_CONF_SINGLE_CPU;#endif	tmp &= ~CPU_CONF_AACK_DELAY_2;	tmp |= CPU_CONF_DP_VALID;	tmp |= CPU_CONF_AP_VALID;	tmp |= CPU_CONF_PIPELINE;	GT_REG_WRITE (CPU_CONFIGURATION, tmp);	/* Marvell (VXWorks) writes 0x20220FF */	/* CPU master control register */	tmp = GTREGREAD (CPU_MASTER_CONTROL);	tmp |= CPU_MAST_CTL_ARB_EN;	if ((cpu == CPU_7400) ||	    (cpu == CPU_7410) || (cpu == CPU_7455) || (cpu == CPU_7450)) {		tmp |= CPU_MAST_CTL_CLEAN_BLK;		tmp |= CPU_MAST_CTL_FLUSH_BLK;	} else {		/* cleanblock must be cleared for CPUs		 * that do not support this command (603e, 750)		 * see Res#1 */		tmp &= ~CPU_MAST_CTL_CLEAN_BLK;		tmp &= ~CPU_MAST_CTL_FLUSH_BLK;	}	GT_REG_WRITE (CPU_MASTER_CONTROL, tmp);}/* * board_early_init_f. * * set up gal. device mappings, etc. */int board_early_init_f (void){	/* set up the GT the way the kernel wants it	 * the call to move the GT register space will obviously	 * fail if it has already been done, but we're going to assume	 * that if it's not at the power-on location, it's where we put	 * it last time. (huber)	 */	my_remap_gt_regs (CFG_DFL_GT_REGS, CFG_GT_REGS);#ifdef CONFIG_PCI	gt_pci_config ();#endif	/* mask all external interrupt sources */	GT_REG_WRITE (CPU_INTERRUPT_MASK_REGISTER_LOW, 0);	GT_REG_WRITE (CPU_INTERRUPT_MASK_REGISTER_HIGH, 0);	/* new in >MV6436x */	GT_REG_WRITE (CPU_INTERRUPT_1_MASK_REGISTER_LOW, 0);	GT_REG_WRITE (CPU_INTERRUPT_1_MASK_REGISTER_HIGH, 0);	/* --------------------- */	GT_REG_WRITE (PCI_0INTERRUPT_CAUSE_MASK_REGISTER_LOW, 0);	GT_REG_WRITE (PCI_0INTERRUPT_CAUSE_MASK_REGISTER_HIGH, 0);	GT_REG_WRITE (PCI_1INTERRUPT_CAUSE_MASK_REGISTER_LOW, 0);	GT_REG_WRITE (PCI_1INTERRUPT_CAUSE_MASK_REGISTER_HIGH, 0);	/* Device and Boot bus settings	 */	memoryMapDeviceSpace(DEVICE0, 0, 0);	GT_REG_WRITE(DEVICE_BANK0PARAMETERS, 0);	memoryMapDeviceSpace(DEVICE1, 0, 0);	GT_REG_WRITE(DEVICE_BANK1PARAMETERS, 0);	memoryMapDeviceSpace(DEVICE2, 0, 0);	GT_REG_WRITE(DEVICE_BANK2PARAMETERS, 0);	memoryMapDeviceSpace(DEVICE3, 0, 0);	GT_REG_WRITE(DEVICE_BANK3PARAMETERS, 0);	GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_BOOT_PAR);	gt_cpu_config();	/* MPP setup */	GT_REG_WRITE (MPP_CONTROL0, CFG_MPP_CONTROL_0);	GT_REG_WRITE (MPP_CONTROL1, CFG_MPP_CONTROL_1);	GT_REG_WRITE (MPP_CONTROL2, CFG_MPP_CONTROL_2);	GT_REG_WRITE (MPP_CONTROL3, CFG_MPP_CONTROL_3);	GT_REG_WRITE (GPP_LEVEL_CONTROL, CFG_GPP_LEVEL_CONTROL);	set_led(LED_RED);	return 0;}/* various things to do after relocation */int misc_init_r (){	u8 val;	icache_enable ();#ifdef CFG_L2	l2cache_enable ();#endif#ifdef CONFIG_MPSC	mpsc_sdma_init ();	mpsc_init2 ();#endif	/*	 * Enable trickle changing in RTC upon powerup	 * No diode, 250 ohm series resistor	 */	val = 0xa5;	i2c_write(CFG_I2C_RTC_ADDR, 8, 1, &val, 1);	return 0;}int board_early_init_r(void){	/* now relocate the debug serial driver */	mpsc_putchar += gd->reloc_off;	mpsc_getchar += gd->reloc_off;	mpsc_test_char += gd->reloc_off;	return 0;}void after_reloc (ulong dest_addr, gd_t * gd){	memoryMapDeviceSpace (BOOT_DEVICE, CFG_BOOT_SPACE, CFG_BOOT_SIZE);/*	display_mem_map(); */	/* now, jump to the main U-Boot board init code */	set_led(LED_GREEN);	board_init_r (gd, dest_addr);	/* NOTREACHED */}/* * Check Board Identity: * right now, assume borad type. (there is just one...after all) */int checkboard (void){	char *s = getenv("serial#");	printf("Board: %s", CFG_BOARD_NAME);	if (s != NULL) {		puts(", serial# ");		puts(s);	}	putc('\n');	return (0);}void set_led(int col){	int tmp;	int on_pin;	int off_pin;	/* Program Mpp[22] as Gpp[22]	 * Program Mpp[23] as Gpp[23]	 */	tmp = GTREGREAD(MPP_CONTROL2);	tmp &= 0x00ffffff;	GT_REG_WRITE(MPP_CONTROL2,tmp);	/* Program Gpp[22] and Gpp[23] as output	 */	tmp = GTREGREAD(GPP_IO_CONTROL);	tmp |= 0x00C00000;	GT_REG_WRITE(GPP_IO_CONTROL, tmp);	/* Program Gpp[22] and Gpp[23] as active high	 */	tmp = GTREGREAD(GPP_LEVEL_CONTROL);	tmp &= 0xff3fffff;	GT_REG_WRITE(GPP_LEVEL_CONTROL, tmp);	switch(col) {	default:	case LED_OFF :		on_pin  = 0;		off_pin = ((1 << 23) | (1 << 22));		break;	case LED_RED :		on_pin  = (1 << 23);		off_pin = (1 << 22);		break;	case LED_GREEN :		on_pin  = (1 << 22);		off_pin = (1 << 23);		break;	case LED_ORANGE :		on_pin  = ((1 << 23) | (1 << 22));		off_pin = 0;		break;	}	/* Set output Gpp[22] and Gpp[23]	 */	tmp = GTREGREAD(GPP_VALUE);	tmp |= on_pin;	tmp &= ~off_pin;	GT_REG_WRITE(GPP_VALUE, tmp);}int display_mem_map (void){	int i;	unsigned int base, size, width;#ifdef CONFIG_PCI	int j;#endif	/* SDRAM */	printf ("SD (DDR) RAM\n");	for (i = 0; i <= BANK3; i++) {		base = memoryGetBankBaseAddress (i);		size = memoryGetBankSize (i);		if (size != 0)			printf ("BANK%d: base - 0x%08x\tsize - %dM bytes\n",				i, base, size >> 20);	}#ifdef CONFIG_PCI

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级电影网| 亚洲电影一区二区| 午夜影院久久久| 老司机精品视频在线| 色婷婷综合久久久中文一区二区 | 日韩无一区二区| 日本一区二区三区电影| 日本va欧美va精品发布| 色94色欧美sute亚洲13| 国产午夜精品久久久久久免费视| 亚洲午夜免费视频| www.欧美.com| 国产三级一区二区| 国产真实精品久久二三区| 欧美色图免费看| 亚洲精选免费视频| 99精品久久只有精品| 国产午夜亚洲精品不卡| 精品一区二区在线免费观看| 欧美色图激情小说| 亚洲国产成人91porn| 99re热这里只有精品视频| 国产午夜精品福利| 国产一区二区三区免费看| 欧美一级视频精品观看| 午夜av区久久| 欧美日韩一区三区四区| 亚洲精品一二三| 色哦色哦哦色天天综合| 一区二区三区四区蜜桃| 91女神在线视频| 一区二区三区四区不卡在线| 99re视频精品| 亚洲宅男天堂在线观看无病毒| 不卡的av电影| 亚洲自拍另类综合| 欧美高清dvd| 欧美aⅴ一区二区三区视频| 日韩欧美在线观看一区二区三区| 日本亚洲三级在线| 精品久久国产字幕高潮| 国产在线一区观看| 国产精品欧美一级免费| 91亚洲男人天堂| 性欧美大战久久久久久久久| 欧美疯狂性受xxxxx喷水图片| 男女性色大片免费观看一区二区| 欧美一二三四在线| 国产成人啪免费观看软件| 中文字幕第一区第二区| 欧美三级一区二区| 久久精品72免费观看| 26uuu亚洲| www.日本不卡| 日日夜夜免费精品视频| 久久久久久久电影| 一本到三区不卡视频| 亚洲成人黄色影院| 日韩欧美www| av男人天堂一区| 五月天久久比比资源色| 久久这里只有精品首页| aaa欧美大片| 免费看日韩精品| 欧美国产欧美综合| 欧美日韩你懂得| 福利视频网站一区二区三区| 亚洲精品国产精华液| 欧美大片国产精品| 色欧美片视频在线观看| 九九国产精品视频| 亚洲乱码中文字幕| 欧美白人最猛性xxxxx69交| 99re成人在线| 国产一区二区h| 亚洲一区二区三区四区五区黄| 久久天堂av综合合色蜜桃网| 日本高清不卡视频| 国产精品99久久久久久有的能看| 亚洲黄色尤物视频| 中文字幕第一区二区| 日韩一级黄色大片| 91丨porny丨中文| 国产主播一区二区| 日本亚洲欧美天堂免费| 亚洲精品乱码久久久久| 中文字幕精品—区二区四季| 日韩欧美国产精品| 欧美日韩国产综合草草| 99久久国产综合色|国产精品| 日韩精品亚洲专区| 亚洲一二三四久久| 国产精品白丝在线| 精品国产凹凸成av人网站| 欧美伦理视频网站| 在线日韩国产精品| 91色视频在线| 99久久综合99久久综合网站| 国产伦理精品不卡| 激情综合网最新| 久久精品国产成人一区二区三区 | 蜜桃av噜噜一区二区三区小说| 亚洲欧洲中文日韩久久av乱码| 国产日韩综合av| 久久精品一区二区三区四区| 日韩女优av电影在线观看| 69堂精品视频| 在线观看91精品国产麻豆| 欧美视频完全免费看| 欧美在线一二三| 欧美亚洲动漫精品| 欧美色视频一区| 欧美日韩在线直播| 欧美丰满少妇xxxxx高潮对白| 欧美麻豆精品久久久久久| 欧美综合色免费| 欧美人牲a欧美精品| 欧美另类z0zxhd电影| 欧美剧在线免费观看网站| 欧美高清精品3d| 日韩免费性生活视频播放| 欧美精品一区男女天堂| 欧美精品一区二区三区很污很色的| 日韩写真欧美这视频| 精品美女在线观看| 久久久91精品国产一区二区精品 | 国产亚洲制服色| 欧美精品一二三区| 精品美女一区二区| 亚洲精品一区在线观看| 精品99999| 久久这里只有精品6| 久久免费美女视频| 国产精品高潮呻吟| 亚洲国产日韩a在线播放性色| 亚洲午夜在线电影| 蜜桃视频在线一区| 国产成人av影院| 欧美在线免费观看亚洲| 337p亚洲精品色噜噜狠狠| 精品久久人人做人人爽| 中文字幕在线不卡| 无码av免费一区二区三区试看 | 国产精品国产三级国产普通话99 | 日韩小视频在线观看专区| 欧美极品美女视频| 亚洲高清中文字幕| 国产精品77777| 欧美影院精品一区| 久久免费的精品国产v∧| 国产精品久久99| 日本成人中文字幕| 91色婷婷久久久久合中文| 91精品啪在线观看国产60岁| 中文字幕 久热精品 视频在线 | 欧美色国产精品| 国产精品欧美综合在线| 亚洲成人动漫一区| 成人av网在线| 日韩一级二级三级精品视频| 亚洲欧洲av色图| 久久国产日韩欧美精品| 91在线观看视频| wwwwxxxxx欧美| 亚洲一区二区av电影| 粉嫩一区二区三区性色av| 欧美一区二区精美| 有坂深雪av一区二区精品| 国内精品嫩模私拍在线| 欧美性猛片xxxx免费看久爱| 久久久综合九色合综国产精品| 亚洲一区二区四区蜜桃| 99视频国产精品| 国产日韩一级二级三级| 另类的小说在线视频另类成人小视频在线 | 成人av资源站| 精品国产自在久精品国产| 一区二区三区不卡视频| www.在线欧美| 日本一区二区三区四区| 免费黄网站欧美| 91麻豆精品国产91久久久久久久久| 亚洲精品国产品国语在线app| 夫妻av一区二区| 久久久噜噜噜久噜久久综合| 麻豆国产欧美一区二区三区| 欧美性极品少妇| 亚洲一区二区三区视频在线| 91久久香蕉国产日韩欧美9色| 国产精品久久网站| 成人aa视频在线观看| 欧美国产日本韩| 不卡影院免费观看| 国产精品妹子av| 国产1区2区3区精品美女| 久久精品日产第一区二区三区高清版 | 亚洲成人av电影| 欧美视频三区在线播放| 亚洲1区2区3区视频| 在线综合+亚洲+欧美中文字幕|