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

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

?? 44x_spd_ddr2.c

?? U-boot源碼 ARM7啟動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
			if (dimm_rank > MAXRANKS) {				printf("ERROR: DRAM DIMM detected with %d ranks in "				       "slot %d is not supported.\n", dimm_rank, dimm_num);				printf("Only %d ranks are supported for all DIMM.\n", MAXRANKS);				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();			} else				total_rank += dimm_rank;		}		if (total_rank > MAXRANKS) {			printf("ERROR: DRAM DIMM detected with a total of %d ranks "			       "for all slots.\n", (unsigned int)total_rank);			printf("Only %d ranks are supported for all DIMM.\n", MAXRANKS);			printf("Remove one of the DIMM modules.\n\n");			spd_ddr_init_hang ();		}	}}/*------------------------------------------------------------------ * only support 2.5V modules. * This routine verifies this. *-----------------------------------------------------------------*/static void check_voltage_type(unsigned long *dimm_populated,			       unsigned char *iic0_dimm_addr,			       unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long voltage_type;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			voltage_type = spd_read(iic0_dimm_addr[dimm_num], 8);			switch (voltage_type) {			case 0x00:				printf("ERROR: Only DIMMs DDR 2.5V or DDR2 1.8V are supported.\n");				printf("This DIMM is 5.0 Volt/TTL.\n");				printf("Replace the DIMM module in slot %d with a supported DIMM.\n\n",				       (unsigned int)dimm_num);				spd_ddr_init_hang ();				break;			case 0x01:				printf("ERROR: Only DIMMs DDR 2.5V or DDR2 1.8V are supported.\n");				printf("This DIMM is LVTTL.\n");				printf("Replace the DIMM module in slot %d with a supported DIMM.\n\n",				       (unsigned int)dimm_num);				spd_ddr_init_hang ();				break;			case 0x02:				printf("ERROR: Only DIMMs DDR 2.5V or DDR2 1.8V are supported.\n");				printf("This DIMM is 1.5 Volt.\n");				printf("Replace the DIMM module in slot %d with a supported DIMM.\n\n",				       (unsigned int)dimm_num);				spd_ddr_init_hang ();				break;			case 0x03:				printf("ERROR: Only DIMMs DDR 2.5V or DDR2 1.8V are supported.\n");				printf("This DIMM is 3.3 Volt/TTL.\n");				printf("Replace the DIMM module in slot %d with a supported DIMM.\n\n",				       (unsigned int)dimm_num);				spd_ddr_init_hang ();				break;			case 0x04:				/* 2.5 Voltage only for DDR1 */				break;			case 0x05:				/* 1.8 Voltage only for DDR2 */				break;			default:				printf("ERROR: Only DIMMs DDR 2.5V or DDR2 1.8V are supported.\n");				printf("Replace the DIMM module in slot %d with a supported DIMM.\n\n",				       (unsigned int)dimm_num);				spd_ddr_init_hang ();				break;			}		}	}}/*-----------------------------------------------------------------------------+ * program_copt1. *-----------------------------------------------------------------------------*/static void program_copt1(unsigned long *dimm_populated,			  unsigned char *iic0_dimm_addr,			  unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long mcopt1;	unsigned long ecc_enabled;	unsigned long ecc = 0;	unsigned long data_width = 0;	unsigned long dimm_32bit;	unsigned long dimm_64bit;	unsigned long registered = 0;	unsigned long attribute = 0;	unsigned long buf0, buf1; /* TODO: code to be changed for IOP1.6 to support 4 DIMMs */	unsigned long bankcount;	unsigned long ddrtype;	unsigned long val;#ifdef CONFIG_DDR_ECC	ecc_enabled = TRUE;#else	ecc_enabled = FALSE;#endif	dimm_32bit = FALSE;	dimm_64bit = FALSE;	buf0 = FALSE;	buf1 = FALSE;	/*------------------------------------------------------------------	 * Set memory controller options reg 1, SDRAM_MCOPT1.	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_MCOPT1, val);	mcopt1 = val & ~(SDRAM_MCOPT1_MCHK_MASK | SDRAM_MCOPT1_RDEN_MASK |			 SDRAM_MCOPT1_PMU_MASK  | SDRAM_MCOPT1_DMWD_MASK |			 SDRAM_MCOPT1_UIOS_MASK | SDRAM_MCOPT1_BCNT_MASK |			 SDRAM_MCOPT1_DDR_TYPE_MASK | SDRAM_MCOPT1_RWOO_MASK |			 SDRAM_MCOPT1_WOOO_MASK | SDRAM_MCOPT1_DCOO_MASK |			 SDRAM_MCOPT1_DREF_MASK);	mcopt1 |= SDRAM_MCOPT1_QDEP;	mcopt1 |= SDRAM_MCOPT1_PMU_OPEN;	mcopt1 |= SDRAM_MCOPT1_RWOO_DISABLED;	mcopt1 |= SDRAM_MCOPT1_WOOO_DISABLED;	mcopt1 |= SDRAM_MCOPT1_DCOO_DISABLED;	mcopt1 |= SDRAM_MCOPT1_DREF_NORMAL;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			/* test ecc support */			ecc = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 11);			if (ecc != 0x02) /* ecc not supported */				ecc_enabled = FALSE;			/* test bank count */			bankcount = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 17);			if (bankcount == 0x04) /* bank count = 4 */				mcopt1 |= SDRAM_MCOPT1_4_BANKS;			else /* bank count = 8 */				mcopt1 |= SDRAM_MCOPT1_8_BANKS;			/* test DDR type */			ddrtype = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 2);			/* test for buffered/unbuffered, registered, differential clocks */			registered = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 20);			attribute = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 21);			/* TODO: code to be changed for IOP1.6 to support 4 DIMMs */			if (dimm_num == 0) {				if (dimm_populated[dimm_num] == SDRAM_DDR1) /* DDR1 type */					mcopt1 |= SDRAM_MCOPT1_DDR1_TYPE;				if (dimm_populated[dimm_num] == SDRAM_DDR2) /* DDR2 type */					mcopt1 |= SDRAM_MCOPT1_DDR2_TYPE;				if (registered == 1) { /* DDR2 always buffered */					/* TODO: what about above  comments ? */					mcopt1 |= SDRAM_MCOPT1_RDEN;					buf0 = TRUE;				} else {					/* TODO: the mask 0x02 doesn't match Samsung def for byte 21. */					if ((attribute & 0x02) == 0x00) {						/* buffered not supported */						buf0 = FALSE;					} else {						mcopt1 |= SDRAM_MCOPT1_RDEN;						buf0 = TRUE;					}				}			}			else if (dimm_num == 1) {				if (dimm_populated[dimm_num] == SDRAM_DDR1) /* DDR1 type */					mcopt1 |= SDRAM_MCOPT1_DDR1_TYPE;				if (dimm_populated[dimm_num] == SDRAM_DDR2) /* DDR2 type */					mcopt1 |= SDRAM_MCOPT1_DDR2_TYPE;				if (registered == 1) {					/* DDR2 always buffered */					mcopt1 |= SDRAM_MCOPT1_RDEN;					buf1 = TRUE;				} else {					if ((attribute & 0x02) == 0x00) {						/* buffered not supported */						buf1 = FALSE;					} else {						mcopt1 |= SDRAM_MCOPT1_RDEN;						buf1 = TRUE;					}				}			}			/* Note that for DDR2 the byte 7 is reserved, but OK to keep code as is. */			data_width = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 6) +				(((unsigned long)spd_read(iic0_dimm_addr[dimm_num], 7)) << 8);			switch (data_width) {			case 72:			case 64:				dimm_64bit = TRUE;				break;			case 40:			case 32:				dimm_32bit = TRUE;				break;			default:				printf("WARNING: Detected a DIMM with a data width of %d bits.\n",				       data_width);				printf("Only DIMMs with 32 or 64 bit DDR-SDRAM widths are supported.\n");				break;			}		}	}	/* verify matching properties */	if ((dimm_populated[0] != SDRAM_NONE) && (dimm_populated[1] != SDRAM_NONE)) {		if (buf0 != buf1) {			printf("ERROR: DIMM's buffered/unbuffered, registered, clocking don't match.\n");			spd_ddr_init_hang ();		}	}	if ((dimm_64bit == TRUE) && (dimm_32bit == TRUE)) {		printf("ERROR: Cannot mix 32 bit and 64 bit DDR-SDRAM DIMMs together.\n");		spd_ddr_init_hang ();	}	else if ((dimm_64bit == TRUE) && (dimm_32bit == FALSE)) {		mcopt1 |= SDRAM_MCOPT1_DMWD_64;	} else if ((dimm_64bit == FALSE) && (dimm_32bit == TRUE)) {		mcopt1 |= SDRAM_MCOPT1_DMWD_32;	} else {		printf("ERROR: Please install only 32 or 64 bit DDR-SDRAM DIMMs.\n\n");		spd_ddr_init_hang ();	}	if (ecc_enabled == TRUE)		mcopt1 |= SDRAM_MCOPT1_MCHK_GEN;	else		mcopt1 |= SDRAM_MCOPT1_MCHK_NON;	mtsdram(SDRAM_MCOPT1, mcopt1);}/*-----------------------------------------------------------------------------+ * program_codt. *-----------------------------------------------------------------------------*/static void program_codt(unsigned long *dimm_populated,			 unsigned char *iic0_dimm_addr,			 unsigned long num_dimm_banks){	unsigned long codt;	unsigned long modt0 = 0;	unsigned long modt1 = 0;	unsigned long modt2 = 0;	unsigned long modt3 = 0;	unsigned char dimm_num;	unsigned char dimm_rank;	unsigned char total_rank = 0;	unsigned char total_dimm = 0;	unsigned char dimm_type = 0;	unsigned char firstSlot = 0;	/*------------------------------------------------------------------	 * Set the SDRAM Controller On Die Termination Register	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_CODT, codt);	codt |= (SDRAM_CODT_IO_NMODE		 & (~SDRAM_CODT_DQS_SINGLE_END		    & ~SDRAM_CODT_CKSE_SINGLE_END		    & ~SDRAM_CODT_FEEBBACK_RCV_SINGLE_END		    & ~SDRAM_CODT_FEEBBACK_DRV_SINGLE_END));	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			dimm_rank = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 5);			if (((unsigned long)spd_read(iic0_dimm_addr[dimm_num], 2)) == 0x08) {				dimm_rank = (dimm_rank & 0x0F) + 1;				dimm_type = SDRAM_DDR2;			} else {				dimm_rank = dimm_rank & 0x0F;				dimm_type = SDRAM_DDR1;			}			total_rank += dimm_rank;			total_dimm++;			if ((dimm_num == 0) && (total_dimm == 1))				firstSlot = TRUE;			else				firstSlot = FALSE;		}	}	if (dimm_type == SDRAM_DDR2) {		codt |= SDRAM_CODT_DQS_1_8_V_DDR2;		if ((total_dimm == 1) && (firstSlot == TRUE)) {			if (total_rank == 1) {				codt |= CALC_ODT_R(0);				modt0 = CALC_ODT_W(0);				modt1 = 0x00000000;				modt2 = 0x00000000;				modt3 = 0x00000000;			}			if (total_rank == 2) {				codt |= CALC_ODT_R(0) | CALC_ODT_R(1);				modt0 = CALC_ODT_W(0);				modt1 = CALC_ODT_W(0);				modt2 = 0x00000000;				modt3 = 0x00000000;			}		} else if ((total_dimm == 1) && (firstSlot != TRUE)) {			if (total_rank == 1) {				codt |= CALC_ODT_R(2);				modt0 = 0x00000000;				modt1 = 0x00000000;				modt2 = CALC_ODT_W(2);				modt3 = 0x00000000;			}			if (total_rank == 2) {				codt |= CALC_ODT_R(2) | CALC_ODT_R(3);				modt0 = 0x00000000;				modt1 = 0x00000000;				modt2 = CALC_ODT_W(2);				modt3 = CALC_ODT_W(2);			}		}		if (total_dimm == 2) {			if (total_rank == 2) {				codt |= CALC_ODT_R(0) | CALC_ODT_R(2);				modt0 = CALC_ODT_RW(2);				modt1 = 0x00000000;				modt2 = CALC_ODT_RW(0);				modt3 = 0x00000000;			}			if (total_rank == 4) {				codt |= CALC_ODT_R(0) | CALC_ODT_R(1) |					CALC_ODT_R(2) | CALC_ODT_R(3);				modt0 = CALC_ODT_RW(2);				modt1 = 0x00000000;				modt2 = CALC_ODT_RW(0);				modt3 = 0x00000000;			}		}	} else {		codt |= SDRAM_CODT_DQS_2_5_V_DDR1;		modt0 = 0x00000000;		modt1 = 0x00000000;		modt2 = 0x00000000;		modt3 = 0x00000000;		if (total_dimm == 1) {			if (total_rank == 1)				codt |= 0x00800000;			if (total_rank == 2)				codt |= 0x02800000;		}		if (total_dimm == 2) {			if (total_rank == 2)				codt |= 0x08800000;			if (total_rank == 4)				codt |= 0x2a800000;		}	}	debug("nb of dimm %d\n", total_dimm);	debug("nb of rank %d\n", total_rank);	if (total_dimm == 1)		debug("dimm in slot %d\n", firstSlot);	mtsdram(SDRAM_CODT, codt);	mtsdram(SDRAM_MODT0, modt0);	mtsdram(SDRAM_MODT1, modt1);	mtsdram(SDRAM_MODT2, modt2);	mtsdram(SDRAM_MODT3, modt3);}/*-----------------------------------------------------------------------------+ * program_initplr. *-----------------------------------------------------------------------------*/static void program_initplr(unsigned long *dimm_populated,			    unsigned char *iic0_dimm_addr,			    unsigned long num_dimm_banks,			    ddr_cas_id_t selected_cas,			    int write_recovery){	u32 cas = 0;	u32 odt = 0;	u32 ods = 0;	u32 mr;	u32 wr;	u32 emr;	u32 emr2;	u32 emr3;	int dimm_num;	int total_dimm = 0;	/******************************************************	 ** Assumption: if more than one DIMM, all DIMMs are the same	 **		as already checked in check_memory_type	 ******************************************************/	if ((dimm_populated[0] == SDRAM_DDR1) || (dimm_populated[1] == SDRAM_DDR1)) {		mtsdram(SDRAM_INITPLR0, 0x81B80000);		mtsdram(SDRAM_INITPLR1, 0x81900400);		mtsdram(SDRAM_INITPLR2, 0x81810000);		mtsdram(SDRAM_INITPLR3, 0xff800162);		mtsdram(SDRAM_INITPLR4, 0x81900400);		mtsdram(SDRAM_INITPLR5, 0x86080000);		mtsdram(SDRAM_INITPLR6, 0x86080000);		mtsdram(SDRAM_INITPLR7, 0x81000062);	} else if ((dimm_populated[0] == SDRAM_DDR2) || (dimm_populated[1] == SDRAM_DDR2)) {		switch (selected_cas) {		case DDR_CAS_3:			cas = 3 << 4;			break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线电影网| 国产亚洲欧美中文| 色婷婷一区二区三区四区| 成人一级片网址| 波多野结衣中文一区| 不卡的av在线| 色婷婷久久99综合精品jk白丝 | 久久国产精品99久久人人澡| 五月天一区二区三区| 蜜桃视频第一区免费观看| 精品一区二区精品| 国产91精品一区二区麻豆网站 | 日韩av中文字幕一区二区三区| 日韩中文字幕91| 国产精品99久久久| 成人av电影免费在线播放| 91久久国产最好的精华液| 69堂亚洲精品首页| 久久奇米777| 一二三四社区欧美黄| 蜜臀av亚洲一区中文字幕| 韩国毛片一区二区三区| 毛片av中文字幕一区二区| 极品少妇一区二区| eeuss鲁片一区二区三区| 在线一区二区观看| 3d动漫精品啪啪1区2区免费 | 亚洲特黄一级片| 香蕉乱码成人久久天堂爱免费| 九九国产精品视频| 91女神在线视频| 91麻豆精品国产91久久久久久| 久久久国产一区二区三区四区小说 | 久久久久久一级片| 亚洲国产精品综合小说图片区| 久久精品99久久久| 91在线看国产| 亚洲色欲色欲www| 午夜视频一区二区| 懂色av一区二区夜夜嗨| 91精品婷婷国产综合久久性色| 国产欧美一区二区精品性| 亚洲国产综合在线| 本田岬高潮一区二区三区| 日韩视频123| 亚洲成人免费视| 99热精品国产| 国产丝袜欧美中文另类| 青青国产91久久久久久| 99久久婷婷国产综合精品电影| 日韩一区二区三区四区五区六区| 亚洲欧洲韩国日本视频| 国产精品888| 精品欧美乱码久久久久久1区2区| 亚洲一区二区五区| 91蜜桃免费观看视频| 久久精品视频在线免费观看 | 亚洲特级片在线| 国产高清精品久久久久| 精品国产麻豆免费人成网站| 亚洲一区二区精品视频| 97se亚洲国产综合自在线观| 国产欧美精品区一区二区三区 | 成人精品国产福利| 国产亚洲视频系列| 久久电影网电视剧免费观看| 欧美日产在线观看| 亚洲综合区在线| 91福利资源站| 一区二区三区色| 欧美亚洲动漫精品| 亚洲va欧美va国产va天堂影院| 91精品1区2区| 亚洲电影激情视频网站| 欧美最新大片在线看| 亚洲国产美国国产综合一区二区| 在线观看成人免费视频| 亚洲二区视频在线| 欧美美女bb生活片| 免费久久精品视频| 欧美mv日韩mv| 成人开心网精品视频| 一区二区中文字幕在线| 99久久免费国产| 亚洲日本va午夜在线电影| 在线精品视频免费观看| 天天色图综合网| 日韩免费观看高清完整版在线观看| 美女视频网站黄色亚洲| 久久亚洲二区三区| 播五月开心婷婷综合| 亚洲一区二区三区四区中文字幕| 欧美区在线观看| 国产美女在线观看一区| 中文字幕字幕中文在线中不卡视频| 91网上在线视频| 日韩激情一二三区| 日本一区二区三区国色天香| 91网站最新地址| 青青青爽久久午夜综合久久午夜| 久久久久久免费毛片精品| 91色porny在线视频| 秋霞午夜av一区二区三区| 久久亚洲一区二区三区明星换脸| www.日韩av| 日韩精品一二三| 欧美国产禁国产网站cc| 欧美日韩国产高清一区二区| 国产又黄又大久久| 亚洲伊人色欲综合网| 精品国产伦理网| 91久久精品网| 国产乱码精品一区二区三| 亚洲高清免费视频| 国产午夜精品一区二区三区视频 | 蜜臀久久99精品久久久久宅男 | 成人av电影在线播放| 免费在线观看不卡| 亚洲精品视频免费看| 久久精品人人做人人爽人人| 欧美日韩精品一区二区| av一二三不卡影片| 久久国产乱子精品免费女| 亚洲综合一区二区三区| 中文字幕高清不卡| 精品美女在线观看| 欧美日韩免费高清一区色橹橹| 国产·精品毛片| 麻豆精品一区二区| 亚洲一区欧美一区| 中文字幕中文字幕一区| 久久精品夜夜夜夜久久| 日韩午夜av一区| 欧美精品粉嫩高潮一区二区| 99re视频精品| 成人污视频在线观看| 国内久久婷婷综合| 久久精品国产77777蜜臀| 天堂va蜜桃一区二区三区漫画版| 亚洲视频一二区| 成人免费一区二区三区视频| 国产亚洲欧洲997久久综合| 精品国产乱码久久久久久久久| 欧美精品粉嫩高潮一区二区| 欧美性生交片4| 欧美日韩精品久久久| 欧美视频一区二区三区| 精品视频一区三区九区| 欧美在线免费视屏| 欧美日韩美少妇| 日韩一区二区精品在线观看| 欧美高清hd18日本| 欧美一区二区三区免费视频| 欧美老肥妇做.爰bbww视频| 欧洲精品一区二区| 精品视频在线看| 91精品国产一区二区三区蜜臀 | 亚洲一区在线播放| 五月婷婷激情综合网| 免费在线欧美视频| 国产一区三区三区| 成人一级片在线观看| 91麻豆swag| 欧美精品电影在线播放| 欧美一区二区三区免费| 久久精品一区二区三区四区| 国产精品久久久久三级| 亚洲少妇屁股交4| 香蕉久久夜色精品国产使用方法| 亚洲高清免费在线| 韩国av一区二区| 成人激情校园春色| 在线观看视频一区二区欧美日韩| 欧美日韩精品专区| 久久综合色婷婷| 亚洲天堂a在线| 日韩国产精品大片| 成人av电影在线网| 欧美亚洲日本国产| 精品福利一二区| 亚洲色图19p| 蜜桃av一区二区| 91视频在线观看免费| 欧美一区二区在线播放| 国产精品久久久久一区二区三区共| 亚洲中国最大av网站| 国产精品正在播放| 欧美日韩一区二区三区四区| 久久久久久影视| 亚洲bt欧美bt精品777| 国产精品一区二区91| 午夜精品久久久久影视| 日韩一区二区电影在线| 亚洲成人精品一区| 国产精品美女久久久久aⅴ| 亚洲综合激情另类小说区| 国产在线精品一区二区| 欧美精品在线一区二区三区| 中文字幕一区二区三| 国产美女精品人人做人人爽|