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

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

?? sdram_init.c

?? 改寫的U-boot for s3c4510 (注意此源碼是在windows下壓縮了)。 1、支持串口下載
?? C
?? 第 1 頁 / 共 4 頁
字號:
		return 1;	}	/* delay line */	/* Program the GT with the discovered data */	if (info->registeredAddrAndControlInputs == true)		DP (printf		    ("Module is registered, but we do not support registered Modules !!!\n"));	/* delay line */	set_dfcdlInit ();	/* may be its not needed */	DP (printf ("Delay line set done\n"));	/* set SDRAM mode NOP */ /* To_do check it */	GT_REG_WRITE (SDRAM_OPERATION, 0x5);	while (GTREGREAD (SDRAM_OPERATION) != 0) {		DP (printf		    ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n"));	}	/* SDRAM configuration */	GT_REG_WRITE (SDRAM_CONFIG, 0x58200400);	DP (printf ("sdram_conf 0x1400: %08x\n", GTREGREAD (SDRAM_CONFIG)));	/* SDRAM open pages controll keep open as much as I can */	GT_REG_WRITE (SDRAM_OPEN_PAGES_CONTROL, 0x0);	DP (printf	    ("sdram_open_pages_controll 0x1414: %08x\n",	     GTREGREAD (SDRAM_OPEN_PAGES_CONTROL)));	/* SDRAM D_UNIT_CONTROL_LOW 0x1404 */	tmp = (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x01);	/* Clock Domain Sync from power on reset */	if (tmp == 0)		DP (printf ("Core Signals are sync (by HW-Setting)!!!\n"));	else		DP (printf		    ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n"));	/* SDRAM set CAS Lentency according to SPD information */	switch (info->memoryType) {	case SDRAM:		DP (printf ("### SD-RAM not supported yet !!!\n"));		hang ();		/* ToDo fill SD-RAM if needed !!!!! */		break;	case DDR:		DP (printf ("### SET-CL for DDR-RAM\n"));		switch (info->maxClSupported_DDR) {		case DDR_CL_3:			tmp_dunit_control_low = 0x3c000000;	/* Read-Data sampled on falling edge of Clk */			tmp_sdram_mode = 0x32;	/* CL=3 Burstlength = 4 */			DP (printf			    ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",			     tmp_sdram_mode, tmp_dunit_control_low));			break;		case DDR_CL_2_5:			if (tmp == 1) {	/* clocks sync */				tmp_dunit_control_low = 0x24000000;	/* Read-Data sampled on falling edge of Clk */				tmp_sdram_mode = 0x62;	/* CL=2,5 Burstlength = 4 */				DP (printf				    ("Max. CL is 2,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			} else {	/* clk sync. bypassed     */				tmp_dunit_control_low = 0x03000000;	/* Read-Data sampled on rising edge of Clk */				tmp_sdram_mode = 0x62;	/* CL=2,5 Burstlength = 4 */				DP (printf				    ("Max. CL is 2,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			}			break;		case DDR_CL_2:			if (tmp == 1) {	/* Sync */				tmp_dunit_control_low = 0x03000000;	/* Read-Data sampled on rising edge of Clk */				tmp_sdram_mode = 0x22;	/* CL=2 Burstlength = 4 */				DP (printf				    ("Max. CL is 2s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			} else {	/* Not sync.      */				tmp_dunit_control_low = 0x3b000000;	/* Read-Data sampled on rising edge of Clk */				tmp_sdram_mode = 0x22;	/* CL=2 Burstlength = 4 */				DP (printf				    ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			}			break;		case DDR_CL_1_5:			if (tmp == 1) {	/* Sync */				tmp_dunit_control_low = 0x23000000;	/* Read-Data sampled on falling edge of Clk */				tmp_sdram_mode = 0x52;	/* CL=1,5 Burstlength = 4 */				DP (printf				    ("Max. CL is 1,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			} else {	/* not sync */				tmp_dunit_control_low = 0x1a000000;	/* Read-Data sampled on rising edge of Clk */				tmp_sdram_mode = 0x52;	/* CL=1,5 Burstlength = 4 */				DP (printf				    ("Max. CL is 1,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",				     tmp_sdram_mode, tmp_dunit_control_low));			}			break;		default:			printf ("Max. CL is out of range %d\n",				info->maxClSupported_DDR);			hang ();			break;		}		break;	}	/* Write results of CL detection procedure */	GT_REG_WRITE (SDRAM_MODE, tmp_sdram_mode);	/* set SDRAM mode SetCommand 0x1418 */	GT_REG_WRITE (SDRAM_OPERATION, 0x3);	while (GTREGREAD (SDRAM_OPERATION) != 0) {		DP (printf		    ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));	}	/* SDRAM D_UNIT_CONTROL_LOW 0x1404 */	tmp = (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x01);	/* Clock Domain Sync from power on reset */	if (tmp != 1) {		/*clocks are not sync */		/* asyncmode */		GT_REG_WRITE (D_UNIT_CONTROL_LOW,			      (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x7F) |			      0x18110780 | tmp_dunit_control_low);	} else {		/* syncmode */		GT_REG_WRITE (D_UNIT_CONTROL_LOW,			      (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x7F) |			      0x00110000 | tmp_dunit_control_low);	}	/* set SDRAM mode SetCommand 0x1418 */	GT_REG_WRITE (SDRAM_OPERATION, 0x3);	while (GTREGREAD (SDRAM_OPERATION) != 0) {		DP (printf		    ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n"));	}/*------------------------------------------------------------------------------ */	/* bank parameters */	/* SDRAM address decode register */	/* program this with the default value */	tmp = 0x02;	DP (printf ("drb_size (n*64Mbit): %d\n", info->drb_size));	switch (info->drb_size) {	case 1:		/* 64 Mbit */	case 2:		/* 128 Mbit */		DP (printf ("RAM-Device_size 64Mbit or 128Mbit)\n"));		tmp |= (0x00 << 4);		break;	case 4:		/* 256 Mbit */	case 8:		/* 512 Mbit */		DP (printf ("RAM-Device_size 256Mbit or 512Mbit)\n"));		tmp |= (0x01 << 4);		break;	case 16:		/* 1 Gbit */	case 32:		/* 2 Gbit */		DP (printf ("RAM-Device_size 1Gbit or 2Gbit)\n"));		tmp |= (0x02 << 4);		break;	default:		printf ("Error in dram size calculation\n");		DP (printf ("Assume: RAM-Device_size 1Gbit or 2Gbit)\n"));		tmp |= (0x02 << 4);		return 1;	}	/* SDRAM bank parameters */	/* the param registers for slot 1 (banks 2+3) are offset by 0x8 */	DP (printf	    ("setting up slot %d config with: %08lx \n", info->slot, tmp));	GT_REG_WRITE (SDRAM_ADDR_CONTROL, tmp);/* ------------------------------------------------------------------------------ */	DP (printf	    ("setting up sdram_timing_control_low with: %08x \n",	     0x11511220));	GT_REG_WRITE (SDRAM_TIMING_CONTROL_LOW, 0x11511220);/* ------------------------------------------------------------------------------ */	/* SDRAM configuration */	tmp = GTREGREAD (SDRAM_CONFIG);	if (info->registeredAddrAndControlInputs	    || info->registeredDQMBinputs) {		tmp |= (1 << 17);		DP (printf		    ("SPD says: registered Addr. and Cont.: %d; registered DQMBinputs: %d\n",		     info->registeredAddrAndControlInputs,		     info->registeredDQMBinputs));	}	/* Use buffer 1 to return read data to the CPU	 * Page 426 MV64360 */	tmp |= (1 << 26);	DP (printf	    ("Before Buffer assignment - sdram_conf: %08x\n",	     GTREGREAD (SDRAM_CONFIG)));	DP (printf	    ("After Buffer assignment - sdram_conf: %08x\n",	     GTREGREAD (SDRAM_CONFIG)));	/* SDRAM timing To_do: */	tmp = GTREGREAD (SDRAM_TIMING_CONTROL_HIGH);	DP (printf ("# sdram_timing_control_high is : %08lx \n", tmp));	/* SDRAM address decode register */	/* program this with the default value */	tmp = GTREGREAD (SDRAM_ADDR_CONTROL);	DP (printf	    ("SDRAM address control (before: decode): %08x  ",	     GTREGREAD (SDRAM_ADDR_CONTROL)));	GT_REG_WRITE (SDRAM_ADDR_CONTROL, (tmp | 0x2));	DP (printf	    ("SDRAM address control (after: decode): %08x\n",	     GTREGREAD (SDRAM_ADDR_CONTROL)));	/* set the SDRAM configuration for each bank *//*	for (i = info->slot * 2; i < ((info->slot * 2) + info->banks); i++) */	{		i = info->slot;		DP (printf		    ("\n*** Running a MRS cycle for bank %d ***\n", i));		/* map the bank */		memory_map_bank (i, 0, GB / 4);#if 1				/* test only */		/* set SDRAM mode */ /* To_do check it */		GT_REG_WRITE (SDRAM_OPERATION, 0x3);		check = GTREGREAD (SDRAM_OPERATION);		DP (printf		    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",		     check));		/* switch back to normal operation mode */		GT_REG_WRITE (SDRAM_OPERATION, 0);		check = GTREGREAD (SDRAM_OPERATION);		DP (printf		    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",		     check));#endif /* test only */		/* unmap the bank */		memory_map_bank (i, 0, 0);	}	return 0;}/* * Check memory range for valid RAM. A simple memory test determines * the actually available RAM size between addresses `base' and * `base + maxsize'. Some (not all) hardware errors are detected: * - short between address lines * - short between data lines */long intdram_size(long int *base, long int maxsize){    volatile long int	 *addr, *b=base;    long int	 cnt, val, save1, save2;#define STARTVAL (1<<20)	/* start test at 1M */    for (cnt = STARTVAL/sizeof(long); cnt < maxsize/sizeof(long); cnt <<= 1) {	    addr = base + cnt;	/* pointer arith! */	    save1=*addr;		/* save contents of addr */	    save2=*b;		/* save contents of base */	    *addr=cnt;		/* write cnt to addr */	    *b=0;			/* put null at base */	    /* check at base address */	    if ((*b) != 0) {		*addr=save1;	/* restore *addr */		*b=save2;	/* restore *b */		return (0);	    }	    val = *addr;		/* read *addr */	    val = *addr;		/* read *addr */	    *addr=save1;	    *b=save2;	    if (val != cnt) {		    DP(printf("Found %08x  at Address %08x (failure)\n", (unsigned int)val, (unsigned int) addr));		    /* fix boundary condition.. STARTVAL means zero */		    if(cnt==STARTVAL/sizeof(long)) cnt=0;		    return (cnt * sizeof(long));	    }    }    return maxsize;}/* ------------------------------------------------------------------------- *//* ppcboot interface function to SDRAM init - this is where all the * controlling logic happens */long intinitdram(int board_type){	int s0 = 0, s1 = 0;	int checkbank[4] = { [0 ... 3] = 0 };		ulong bank_no, realsize, total, check;	AUX_MEM_DIMM_INFO dimmInfo1;	AUX_MEM_DIMM_INFO dimmInfo2;	int nhr;	/* first, use the SPD to get info about the SDRAM/ DDRRAM */	/* check the NHR bit and skip mem init if it's already done */	nhr = get_hid0() & (1 << 16);	if (nhr) {		printf("Skipping SD- DDRRAM setup due to NHR bit being set\n");	} else {		/* DIMM0 */		s0 = check_dimm(0, &dimmInfo1);		/* DIMM1 */		s1 = check_dimm(1, &dimmInfo2);		memory_map_bank(0, 0, 0);		memory_map_bank(1, 0, 0);		memory_map_bank(2, 0, 0);		memory_map_bank(3, 0, 0);		if (dimmInfo1.numOfModuleBanks && setup_sdram(&dimmInfo1)) {			printf("Setup for DIMM1 failed.\n");		}		if (dimmInfo2.numOfModuleBanks && setup_sdram(&dimmInfo2)) {			printf("Setup for DIMM2 failed.\n");		}		/* set the NHR bit */		set_hid0(get_hid0() | (1 << 16));	}	/* next, size the SDRAM banks */	realsize = total = 0;	check = GB/4;	if (dimmInfo1.numOfModuleBanks > 0) {checkbank[0] = 1; printf("-- DIMM1 has 1 bank\n");}	if (dimmInfo1.numOfModuleBanks > 1) {checkbank[1] = 1; printf("-- DIMM1 has 2 banks\n");}	if (dimmInfo1.numOfModuleBanks > 2)		printf("Error, SPD claims DIMM1 has >2 banks\n");	if (dimmInfo2.numOfModuleBanks > 0) {checkbank[2] = 1; printf("-- DIMM2 has 1 bank\n");}	if (dimmInfo2.numOfModuleBanks > 1) {checkbank[3] = 1; printf("-- DIMM2 has 2 banks\n");}	if (dimmInfo2.numOfModuleBanks > 2)		printf("Error, SPD claims DIMM2 has >2 banks\n");	for (bank_no = 0; bank_no < CFG_DRAM_BANKS; bank_no++) {		/* skip over banks that are not populated */		if (! checkbank[bank_no])			continue;		if ((total + check) > CFG_GT_REGS)			check = CFG_GT_REGS - total;		memory_map_bank(bank_no, total, check);		realsize = dram_size((long int *)total, check);		memory_map_bank(bank_no, total, realsize);		total += realsize;	}/*	Setup Ethernet DMA Adress window to DRAM Area */	return(total);}/* ***************************************************************************************! *                             SDRAM INIT                                              *! *  This procedure detect all Sdram types: 64, 128, 256, 512 Mbit, 1Gbit and 2Gb       *! *               This procedure fits only the Atlantis                                *! *                                                                                     *! *************************************************************************************** *//* ***************************************************************************************! *                             DFCDL initialize MV643xx Design Considerations             *! *                                                                                     *! *************************************************************************************** */int set_dfcdlInit (void){	int i;	unsigned int dfcdl_word = 0x0000014f;	for (i = 0; i < 64; i++) {		GT_REG_WRITE (SRAM_DATA0, dfcdl_word);	}	GT_REG_WRITE (DFCDL_CONFIG0, 0x00300000);	/* enable dynamic delay line updating */	return (0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品主播直播| 欧美无砖专区一中文字| 色婷婷狠狠综合| 精品国产一区二区三区av性色 | 日韩西西人体444www| 国产女同性恋一区二区| 日本中文字幕一区| 色婷婷综合久久久| 久久久久久免费毛片精品| 肉肉av福利一精品导航| 日本韩国视频一区二区| 国产精品私房写真福利视频| 青草国产精品久久久久久| 色综合天天综合网天天看片| 国产日韩欧美电影| 久久国产尿小便嘘嘘尿| 欧美一区中文字幕| 亚洲在线视频一区| 91久久一区二区| 国产精品大尺度| 成人小视频在线| www久久久久| 国产一区二区免费看| 日韩欧美国产电影| 久久精品国产免费| 日韩女优制服丝袜电影| 性欧美大战久久久久久久久| 色婷婷精品久久二区二区蜜臂av| 国产精品国产馆在线真实露脸 | 美女视频免费一区| 欧美成人vps| 狠狠色狠狠色综合系列| 精品国产乱码久久久久久久 | 日韩欧美激情一区| 麻豆精品久久精品色综合| 欧美高清视频www夜色资源网| 亚洲成人免费影院| 69堂成人精品免费视频| 麻豆成人91精品二区三区| 欧美一区二区三区系列电影| 免费人成网站在线观看欧美高清| 在线播放亚洲一区| 黄网站免费久久| 国产色产综合产在线视频| 成人高清视频在线观看| 亚洲视频小说图片| 欧美男人的天堂一二区| 日韩电影一区二区三区四区| 日韩精品一区二区三区蜜臀 | 日本美女视频一区二区| 欧美zozozo| 成人免费高清视频在线观看| 亚洲欧美日本在线| 欧美日韩不卡视频| 国产一区二区剧情av在线| 国产精品青草久久| 欧美在线小视频| 日本大胆欧美人术艺术动态| 久久色视频免费观看| 91丨porny丨户外露出| 亚洲已满18点击进入久久| 欧美高清性hdvideosex| 国产高清视频一区| 一区二区三区精品视频在线| 日韩一级免费一区| 丁香桃色午夜亚洲一区二区三区| 亚洲欧美日韩国产另类专区| 日韩欧美一二区| 99re66热这里只有精品3直播 | 国产高清亚洲一区| 一区二区三区在线视频观看| 日韩欧美自拍偷拍| 91成人在线观看喷潮| 韩日欧美一区二区三区| 亚洲精品精品亚洲| 久久久久久久综合| 7777精品伊人久久久大香线蕉完整版 | 欧美唯美清纯偷拍| 国产精品自拍三区| 日韩高清一区在线| 亚洲欧美日韩国产成人精品影院| 精品三级在线看| 色婷婷精品大在线视频 | 99re6这里只有精品视频在线观看| 日韩高清不卡一区二区| 亚洲欧洲精品一区二区精品久久久| 欧美喷水一区二区| 在线观看视频91| 成人免费看视频| 国产在线精品免费av| 亚洲成人动漫一区| 亚洲区小说区图片区qvod| 国产校园另类小说区| 欧美丰满嫩嫩电影| 欧美网站大全在线观看| www.欧美精品一二区| 国产精品一区二区x88av| 日韩中文字幕av电影| 一区二区在线观看视频| 中文字幕不卡在线| 久久精品一区八戒影视| 日韩视频永久免费| 91麻豆精品国产91久久久| 91国在线观看| 91免费看`日韩一区二区| 国精产品一区一区三区mba桃花 | 国产电影一区在线| 韩国视频一区二区| 九九视频精品免费| 国产在线麻豆精品观看| 蜜臀av一区二区| 奇米色一区二区三区四区| 三级一区在线视频先锋 | 韩国三级电影一区二区| 蜜桃av噜噜一区| 美女网站色91| 国产一区二区三区久久悠悠色av| 久久精品噜噜噜成人av农村| 男女男精品视频| 蜜桃视频免费观看一区| 精品一区中文字幕| 国产精品18久久久| 成人国产亚洲欧美成人综合网 | 国产一区视频网站| 国产在线不卡一卡二卡三卡四卡| 精品一区二区三区久久| 国产一区二区三区| av资源站一区| 欧美亚洲日本国产| 欧美日韩精品电影| 日韩午夜在线影院| 久久精品亚洲麻豆av一区二区| 国产欧美日韩三区| 136国产福利精品导航| 亚洲午夜精品网| 另类人妖一区二区av| 国模大尺度一区二区三区| www.欧美.com| 欧美日韩国产一二三| 精品久久久久一区二区国产| 国产日韩成人精品| 亚洲精品水蜜桃| 香蕉影视欧美成人| 国产乱码一区二区三区| 97久久久精品综合88久久| 欧美精品成人一区二区三区四区| 欧美va亚洲va在线观看蝴蝶网| 欧美国产日韩精品免费观看| 一区二区三区日韩| 日本成人在线看| 东方欧美亚洲色图在线| 欧美老肥妇做.爰bbww| 久久免费视频一区| 亚洲观看高清完整版在线观看| 久久99国内精品| 在线视频一区二区三| 26uuu亚洲综合色欧美| 亚洲欧美一区二区不卡| 久久精品99国产精品| 色综合婷婷久久| 久久人人爽人人爽| 偷拍自拍另类欧美| 91在线视频播放| 日韩欧美国产成人一区二区| 中文字幕在线一区二区三区| 日本伊人色综合网| 93久久精品日日躁夜夜躁欧美| 欧美一区二区国产| 亚洲人妖av一区二区| 国产精品一二三四五| 777午夜精品视频在线播放| 国产精品激情偷乱一区二区∴| 久久av资源网| 欧美日韩不卡一区二区| 亚洲精品成人天堂一二三| 国产成人av电影免费在线观看| 欧美一级久久久| 亚洲国产美国国产综合一区二区| 不卡区在线中文字幕| 精品999在线播放| 青青草91视频| 欧美嫩在线观看| 亚洲午夜一区二区| 日本福利一区二区| 国产精品久久久久桃色tv| 国产呦萝稀缺另类资源| 69精品人人人人| 首页国产欧美日韩丝袜| 欧美日韩电影一区| 亚洲福利视频三区| 色婷婷综合久久久久中文 | 亚洲成av人影院在线观看网| 99久久精品久久久久久清纯| 久久久精品免费免费| 国产精品综合av一区二区国产馆| ww亚洲ww在线观看国产| 国产揄拍国内精品对白| 日韩三级视频中文字幕| 韩国精品在线观看| 国产亚洲欧美日韩俺去了|